diff --git a/lib/aethyr/core/components/storage.rb b/lib/aethyr/core/components/storage.rb
index de1b36ab8fc0053f39438291fe34f3ea6dddb0b3..5300485b2aedb0fd82c454ae7c0e1d557c3ef45a 100644
--- a/lib/aethyr/core/components/storage.rb
+++ b/lib/aethyr/core/components/storage.rb
@@ -187,14 +187,6 @@ class StorageMachine
 
     volatile_data = object.dehydrate()
 
-    if object.is_a? Observable
-      observers = object.instance_variable_get(:@observer_peers)
-      unless observers.nil?
-        observers = observers.dup
-        object.delete_observers
-      end
-    end
-
     open_store("goids", false) do |gd|
       gd[object.goid] = object.class.to_s
     end
@@ -203,10 +195,6 @@ class StorageMachine
       gd[object.goid] = Marshal.dump(object)
     end
 
-    if object.is_a? Observable and not observers.nil?
-      object.instance_variable_set(:@observer_peers, observers)
-    end
-
     if object.respond_to? :equipment
       object.equipment.each do |o|
         store_object(o) unless o.is_a? Player #this shouldn't happen, but who knows
@@ -318,10 +306,7 @@ class StorageMachine
       end
     end
 
-    if object.is_a? Observable
-      fix_observers object
-    end
-
+    object.rehydrate(nil)
     game_objects << object
 
     unless object.container.nil? or game_objects.loaded? object.container
@@ -332,8 +317,6 @@ class StorageMachine
       end
     end
 
-    object.rehydrate(nil)
-
     return object
   end
 
@@ -494,14 +477,5 @@ class StorageMachine
     end
   end
 
-  #Fixes issue with changes with Observer between Ruby 1.8.7 and 1.9.1
-  def fix_observers object
-    if RUBY_VERSION < "1.9.0"
-      object.instance_variable_set(:@observer_peers, [])
-    else
-      object.instance_variable_set(:@observer_peers, {})
-    end
-  end
-
   public :update_all_objects!
 end
diff --git a/lib/aethyr/core/objects/game_object.rb b/lib/aethyr/core/objects/game_object.rb
index ecef6a0fb9b24961c1e3d845196264f1856c2869..1fbd05ac56f9408a1b074aa9087909561828db78 100644
--- a/lib/aethyr/core/objects/game_object.rb
+++ b/lib/aethyr/core/objects/game_object.rb
@@ -18,6 +18,7 @@ class GameObject < Publisher
   alias :room :container
   alias :can? :respond_to?
   alias :goid :game_object_id
+  volatile :@observer_peers
 
   @@volatile = []
 
@@ -90,7 +91,14 @@ class GameObject < Publisher
   end
 
   def rehydrate(volatile_data)
-    return if volatile_data.nil?
+    if volatile_data.nil?
+      if RUBY_VERSION < "1.9.0"
+        self.instance_variable_set(:@observer_peers, [])
+      else
+        self.instance_variable_set(:@observer_peers, {})
+      end
+      return
+    end
     volatile_data.each do |attr, data|
       self.instance_variable_set(attr, data) if @@volatile.include? attr
     end