diff --git a/demos/AoModel.rb b/demos/AoModel.rb
index a7649e4f883dbf8af3542f85ca7b705363ac3427..99a1c0f6e6c2180ec46903eb02c7a4b3d5be0bd7 100644
--- a/demos/AoModel.rb
+++ b/demos/AoModel.rb
@@ -1,6 +1,5 @@
 #!/usr/bin/env ruby
 
-require 'rubygems' if RUBY_VERSION =~ /^1\.8/
 require_relative '../lib/simplekit'
 
 # Demonstration model of Operational Availability (Ao).
diff --git a/demos/MMk.rb b/demos/MMk.rb
index 90b37062778ebf886e8c22c0c3615ba3ff1b5619..241f34b1122064c9e064a801e2d752dff2e1c7d7 100644
--- a/demos/MMk.rb
+++ b/demos/MMk.rb
@@ -1,6 +1,5 @@
 #!/usr/bin/env ruby
 
-require 'rubygems' if RUBY_VERSION =~ /^1\.8/
 require_relative '../lib/simplekit'
 
 # Demonstration model of an M/M/k queueing system.  There are k servers
diff --git a/demos/MyModel.rb b/demos/MyModel.rb
index b91fbee2daaf8bb890b6df03febdd2f0d65a5bbf..fa336619e5d494290b01ea2ca07a73cb09c1cf87 100644
--- a/demos/MyModel.rb
+++ b/demos/MyModel.rb
@@ -1,7 +1,6 @@
 #!/usr/bin/env ruby
 
-require 'rubygems' if RUBY_VERSION =~ /^1\.8/
-require 'simplekit'
+require_relative '../lib/simplekit'
 
 class MyModel
   include SimpleKit
diff --git a/demos/MyModelArgs.rb b/demos/MyModelArgs.rb
index 1af10706df56b50ac426c4a6d18e14b985a5fe7b..ebbd4049462bd10e2c7cdfb15ee5afe3ef8b3974 100644
--- a/demos/MyModelArgs.rb
+++ b/demos/MyModelArgs.rb
@@ -1,6 +1,5 @@
 #!/usr/bin/env ruby
 
-require 'rubygems' if RUBY_VERSION =~ /^1\.8/
 require_relative '../lib/simplekit'
 
 class MyModel
@@ -8,12 +7,12 @@ class MyModel
 
   def init
     @x = 1
-    schedule(:increment, rand(2), 1, 97)
+    schedule(:increment, rand(2), n: 1, c: 97)
   end
 
-  def increment(n, c)
+  def increment(n:, c:)
     @x += n
-    schedule(:increment, 2.0 * rand(2), @x, c + 1)
+    schedule(:increment, 2.0 * rand(2), n: @x, c: c + 1)
     printf "%f, %f, %c\n", model_time, @x, c
     schedule(:halt, 0.0) if model_time > 10
   end
diff --git a/lib/simplekit.rb b/lib/simplekit.rb
index 5ebfcfa603324d91892c7fa45acc8e5a5096ef38..1f00ad3d0d5429c1d64b39ac779c8cea75c62267 100644
--- a/lib/simplekit.rb
+++ b/lib/simplekit.rb
@@ -53,9 +53,9 @@ module SimpleKit
     #     the event executes.
     #   - +args+ -> an optional list of arguments to pass to the event
     #     at invocation time.
-    def schedule(event, delay, *args)
+    def schedule(event, delay, **args)
       raise 'Model scheduled event with negative delay.' if delay < 0
-      @event_list.push EventNotice.new(event, @model_time + delay, args)
+      @event_list.push EventNotice.new(event, @model_time, delay, args)
     end
 
     # Start execution of a model. The simulation +model_time+ is initialized
@@ -68,7 +68,11 @@ module SimpleKit
       @user_model.init
       while (current_event = @event_list.pop)
         @model_time = current_event.time
-        @user_model.send(current_event.event, *current_event.args)
+        if current_event.args.empty?
+          @user_model.send(current_event.event)
+        else
+          @user_model.send(current_event.event, current_event.args)
+        end
       end
     end
 
@@ -79,9 +83,18 @@ module SimpleKit
     end
   end
 
-  # This is a private helper Struct for the EventScheduler class.
+  # This is a private helper class for the EventScheduler class.
   # Users should never try to access this directly.
-  EventNotice = Struct.new(:event, :time, *:args) do
+  private class EventNotice
+    attr_reader :event, :time, :time_stamp, :args
+
+    def initialize(event, time, delay, **args)
+      @event = event
+      @time_stamp = time
+      @time = time + delay
+      @args = args
+    end
+
     include Comparable
     def <=>(other)
       time <=> other.time