diff --git a/lib/aethyr/core/cache_gary.rb b/lib/aethyr/core/cache_gary.rb
index 928320245ac7ec648c96c496d878e36ab1d6cc02..2cf41d394b87c170752f353a7ae5961a87e114ee 100644
--- a/lib/aethyr/core/cache_gary.rb
+++ b/lib/aethyr/core/cache_gary.rb
@@ -67,7 +67,6 @@ class CacheGary < Gary
       log "Loading #{goid} from storage" , Logger::Ultimate
       begin
         obj = @storage.load_object(goid, self)
-        obj.add_observer(@manager)
       rescue MUDError::NoSuchGOID
         log "Tried to load #{goid}, but it must have been deleted."
         return nil
@@ -78,12 +77,11 @@ class CacheGary < Gary
     end
   end
 
-  #Add object to CacheGary, also adds the Manager as an observer.
+  #Add object to CacheGary.
   def << game_object
     @mutex.synchronize do
       @ghash[game_object.goid] = game_object
       @all_goids << game_object.goid
-      game_object.add_observer(@manager)
     end
   end
 
diff --git a/lib/aethyr/core/commands/admin/aforce.rb b/lib/aethyr/core/commands/admin/aforce.rb
index 07f1e409f217087b9b48663f48f7c9787fe1d099..318060f9eda6112c5c230bed8b760ac8954d874b 100644
--- a/lib/aethyr/core/commands/admin/aforce.rb
+++ b/lib/aethyr/core/commands/admin/aforce.rb
@@ -15,7 +15,7 @@ module Aethyr
             syntax_formats = ["AFORCE [OBJECT] [ACTION]"]
             aliases = nil
             content =  <<'EOF'
-Sorry no help has been written for this command yet
+Forces another player to execute a command.
 EOF
             help_entries.push(Aethyr::Core::Help::HelpEntry.new(command, content: content, syntax_formats: syntax_formats, see_also: see_also, aliases: aliases))
 
@@ -50,17 +50,12 @@ EOF
             if object.nil?
               player.output "Force who?"
               return
-            elsif object.is_a? Mobile
-              unless object.info.redirect_output_to == player.goid
-                object.info.redirect_output_to = player.goid
-
-                after 10 do
-                  object.info.redirect_output_to = nil
-                end
-              end
+            elsif object.is_a? Player
+              object.handle_input(event[:command])
+            else
+              player.output "You can only force other players to execute a command."
             end
 
-            player.add_event(CommandParser.parse(object, event[:command]))
           end
 
         end
diff --git a/lib/aethyr/core/components/manager.rb b/lib/aethyr/core/components/manager.rb
index b83fc15ca97819db9f89e7713892f766d96744e9..469af6f211ecc8f459928c2f33dfbf368d4556e0 100644
--- a/lib/aethyr/core/components/manager.rb
+++ b/lib/aethyr/core/components/manager.rb
@@ -7,7 +7,7 @@ require 'aethyr/core/registry'
 require 'aethyr/core/util/publisher'
 require 'set'
 
-#The Manager class uses the observer model to recieve commands from objects, which
+#The Manager class uses the wisper to recieve commands from objects, which
 #it then passes along to the EventHandler.
 #The Manager also keeps track of all game objects and takes care of adding, removing, and
 #finding them.
@@ -184,7 +184,7 @@ class Manager < Publisher
   def add_object(game_object, position = nil)
 
     @game_objects << game_object unless @game_objects.loaded? game_object.goid
-    
+
     broadcast(:object_added, { :publisher => self, :game_object => game_object, :position => position})
 
     unless game_object.room.nil?
@@ -348,81 +348,6 @@ class Manager < Publisher
     log "Error when dropping player, but recovering and continuing."
   end
 
-  #Update gets called when an event occurs. The event is just passed along to the EventHandler, unless it is a :quit  or :save
-  #event, in which case the Manager takes care of it.
-  def update(event)
-    return if not @running
-    log "Got event: #{event}", Logger::Medium
-    if event.nil?
-      return
-    elsif event[:type] == :Future
-      future_event(event)
-      return
-    end
-
-    log "Adding event to event handler from #{event[:player]}", Logger::Ultimate
-    @event_handler.event_queue << event
-
-    #EventMachine.defer lambda {@event_handler.run}
-    @event_handler.run
-  end
-
-  #Add a future event.
-  def future_event(event)
-    if event[:action] == :call
-      EventMachine.add_timer(event[:time]) do
-        if $manager.cancelled? event
-          $manager.remove_cancelled event
-          break
-        end
-
-        e = event[:event].call
-
-        if e.is_a? String
-          e = CommandParser.parse(event[:player], e)
-        end
-
-        if e.is_a? Event
-          $manager.update(e)
-        end
-
-      end
-    else
-      EventMachine.add_timer(event[:time]) do
-        if $manager.cancelled? event
-          $manager.remove_cancelled event
-          break
-        end
-
-        $manager.update(event[:event])
-      end
-    end
-  end
-
-  def cancel_event event
-    if event.is_a? Integer
-      @cancelled_events << event
-    else
-      @cancelled_events << event.object_id
-    end
-  end
-
-  def cancelled? event
-    if event.is_a? Integer
-      @cancelled_events.include? event
-    else
-      @cancelled_events.include? event.object_id
-    end
-  end
-
-  def remove_cancelled event
-    if event.is_a? Integer
-      @cancelled_event.delete event
-    else
-      @cancelled_event.delete event.object_id
-    end
-  end
-
   #Calls update on all objects.
   def update_all
     #require 'benchmark'
diff --git a/lib/aethyr/core/components/storage.rb b/lib/aethyr/core/components/storage.rb
index f249225058ef537b182e3444ba0caa7d64147eab..362b211073b4dcd68048802c265313d4b1c43a55 100644
--- a/lib/aethyr/core/components/storage.rb
+++ b/lib/aethyr/core/components/storage.rb
@@ -182,7 +182,7 @@ class StorageMachine
 
   #Recursively stores object and its inventory.
   #
-  #Warning: this temporarily removes the object's observers.
+  #Warning: this temporarily removes the object's subscribers.
   def store_object(object)
 
     volatile_data = object.dehydrate()
diff --git a/lib/aethyr/core/objects/game_object.rb b/lib/aethyr/core/objects/game_object.rb
index f238ed997be76823fb1b8737fa34c3981453f7ab..b2fafb918e3fcdbe96ae331a6f3dfe2d6f363de8 100644
--- a/lib/aethyr/core/objects/game_object.rb
+++ b/lib/aethyr/core/objects/game_object.rb
@@ -1,4 +1,3 @@
-require 'observer'
 require 'aethyr/core/util/publisher'
 require 'aethyr/core/util/log'
 require 'aethyr/core/objects/inventory'
@@ -9,7 +8,6 @@ require 'aethyr/core/event'
 
 #Base class for all game objects, including players. Should be subclassed to do anything useful.
 class GameObject < Publisher
-  include Observable
   include Pronoun
 
   attr_reader :short_desc, :game_object_id, :alt_names, :generic, :article, :sex, :show_in_look, :actions, :balance, :admin, :manager
@@ -18,7 +16,6 @@ class GameObject < Publisher
   alias :room :container
   alias :can? :respond_to?
   alias :goid :game_object_id
-  volatile :@observer_peers
 
   #Creates a new GameObject. Most of this long list of parameters is simply ignored at creation time,
   #because they can all be set later.
@@ -73,17 +70,6 @@ class GameObject < Publisher
     @admin = false
   end
 
-  def rehydrate(volatile_data)
-    super(volatile_data)
-    if volatile_data.nil?
-      if RUBY_VERSION < "1.9.0"
-        self.instance_variable_set(:@observer_peers, [])
-      else
-        self.instance_variable_set(:@observer_peers, {})
-      end
-    end
-  end
-
   def flags
     Hash.new @info.flags
   end
@@ -145,12 +131,6 @@ class GameObject < Publisher
   def run
   end
 
-  #Just a way to put an event into the system, nothing more, nothing less.
-  def add_event(event)
-    changed
-    notify_observers(event)
-  end
-
   #Basically, this is where hooks for commands would go.
   def alert(event)
   end
diff --git a/lib/aethyr/core/objects/traits/expires.rb b/lib/aethyr/core/objects/traits/expires.rb
index 529747e88621623e5e8dac7030a1fadb6a9718e4..9c8abf69b091cb8b881650865f7f6f779fc40a43 100644
--- a/lib/aethyr/core/objects/traits/expires.rb
+++ b/lib/aethyr/core/objects/traits/expires.rb
@@ -18,6 +18,6 @@ module Expires
   private
 
   def expire
-    add_event Event.new(:Mobiles, :action => :expire, :player => self)
+    raise "expire is not yet properly implemented"
   end
 end
diff --git a/lib/aethyr/core/objects/traits/location.rb b/lib/aethyr/core/objects/traits/location.rb
index cdb679deec98195866d62e30d9d56feb4cb85bda..8045891d44d9ab0e7d9faad7941e818c71555735 100644
--- a/lib/aethyr/core/objects/traits/location.rb
+++ b/lib/aethyr/core/objects/traits/location.rb
@@ -4,7 +4,6 @@ require 'aethyr/core/util/log'
 require 'aethyr/core/objects/inventory'
 require 'aethyr/core/objects/traits/pronoun'
 require 'aethyr/core/util/guid'
-require 'observer'
 require 'aethyr/core/objects/info/info'
 
 module Location
@@ -17,12 +16,12 @@ module Location
       info.terrain.type = terrain_type
     end
   end
-  
+
   def area
     return self if self.is_a? Area
     self.parent_area
   end
-  
+
   def parent_area
     return nil if $manager.nil?
     parent_id = @container
@@ -33,17 +32,17 @@ module Location
     end
     nil
   end
-  
+
   def flags
     collected_flags = self.parent_area.flags unless self.parent_area.nil?
     return info.flags.dup if collected_flags.nil?
-    
+
     self.info.flags.values.each do |f|
       f.negate_flags(collected_flags)
     end
     collected_flags.merge! self.info.flags
   end
-  
+
   def terrain_type
     return info.terrain.type unless info.terrain.type.nil?
     return self.parent_area.terrain_type unless self.parent_area.nil?
diff --git a/lib/aethyr/core/objects/traits/reacts.rb b/lib/aethyr/core/objects/traits/reacts.rb
index 529d71ac7e33350c28d32447c6570f8da5e8cb21..716b2434a0f9aaa838b4a689cefb9f4a5f0ee6e3 100644
--- a/lib/aethyr/core/objects/traits/reacts.rb
+++ b/lib/aethyr/core/objects/traits/reacts.rb
@@ -64,7 +64,8 @@ module Reacts
         unless action.nil?
           log "I am doing an action...", Logger::Ultimate
           changed
-          notify_observers(action)
+          #notify_observers(action)
+          raise "This used to notify observers, not sure how this worked so need to fix this, most likely this will be rewritten before it becomes an issue."
         else
           log "Action did not parse: #{reaction}", Logger::Medium
         end
@@ -118,7 +119,8 @@ module Reacts
     event = CommandParser.parse(self, command)
     return false if event.nil? #failed to parse
 
-    add_event event unless delay
+    raise "removed events this class no longer works, will probably be rewritten"
+    #add_event event unless delay
     event
   end
 
@@ -273,7 +275,8 @@ module Reacts
 
   def teleport item, destination, options = {}
     event = Event.new :Mobiles, {:action => :teleport, :player => self, :object => item, :in => destination}.merge(options)
-    add_event event
+    raise "re removed events this class no longer works and will probably be rewritten"
+    #    add_event event
   end
 
   def follow object, message = nil
diff --git a/lib/aethyr/core/objects/traits/respawns.rb b/lib/aethyr/core/objects/traits/respawns.rb
index 078afc57f882a5e61d65e4cd99302eedf750746d..98c211ab4db2ac86cadcfd2dcf4f68f54ea55912 100644
--- a/lib/aethyr/core/objects/traits/respawns.rb
+++ b/lib/aethyr/core/objects/traits/respawns.rb
@@ -59,6 +59,7 @@ module Respawns
       return
     end
 
-    add_event Event.new(:Mobiles, :player => self, :action => :respawn, :room => room)
+    raise "respawn no longer works, removed events, will likely be rewritten"
+    #add_event Event.new(:Mobiles, :player => self, :action => :respawn, :room => room)
   end
 end