diff --git a/lib/aethyr/core/commands/admin/acarea.rb b/lib/aethyr/core/commands/admin/acarea.rb
index 1c64faad02ea4ec29bbf51a7af9ef593d8b59ee8..89ed1ffca11410ed2927996b3e917d2bf225b84f 100644
--- a/lib/aethyr/core/commands/admin/acarea.rb
+++ b/lib/aethyr/core/commands/admin/acarea.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcareaHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acdoor.rb b/lib/aethyr/core/commands/admin/acdoor.rb
index ea803f7b412a4e7105768811f1f5fb9933523b61..f42d50b5f5a10fb25fe0bb3f9a052e66d841132e 100644
--- a/lib/aethyr/core/commands/admin/acdoor.rb
+++ b/lib/aethyr/core/commands/admin/acdoor.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcdoorHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acexit.rb b/lib/aethyr/core/commands/admin/acexit.rb
index 196494de5c96dfa840f05754a721e8913716c207..f550945815a70dee46f34da7424116db869ec48a 100644
--- a/lib/aethyr/core/commands/admin/acexit.rb
+++ b/lib/aethyr/core/commands/admin/acexit.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcexitHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acomm.rb b/lib/aethyr/core/commands/admin/acomm.rb
index 4faf52d1877b230c35672908e9b5177fe3760f0c..5dec941bc90e258c00de5adaa09c4dce048bac64 100644
--- a/lib/aethyr/core/commands/admin/acomm.rb
+++ b/lib/aethyr/core/commands/admin/acomm.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcommHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acomment.rb b/lib/aethyr/core/commands/admin/acomment.rb
index 1cd588925de6f5444755e2232eb8211a221f8725..7b6223ab66d6c82df4e441d5552b04aabd52884b 100644
--- a/lib/aethyr/core/commands/admin/acomment.rb
+++ b/lib/aethyr/core/commands/admin/acomment.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcommentHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/aconfig.rb b/lib/aethyr/core/commands/admin/aconfig.rb
index f5c5f995173035c27af55fcb3eb6ab18dda15ce8..ee090b3c91ede07812f22d48bbf9f34e85a79106 100644
--- a/lib/aethyr/core/commands/admin/aconfig.rb
+++ b/lib/aethyr/core/commands/admin/aconfig.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AconfigHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acportal.rb b/lib/aethyr/core/commands/admin/acportal.rb
index 6b75b5f0e62521146e10356fcda1d90439b158ac..970179d238ee2c839635fed79848b9bd7bee612d 100644
--- a/lib/aethyr/core/commands/admin/acportal.rb
+++ b/lib/aethyr/core/commands/admin/acportal.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcportalHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acprop.rb b/lib/aethyr/core/commands/admin/acprop.rb
index 1f73bca3b5e85257786543ff7016e275f1fba5ed..4dafccfb569c16d1b9da349cc144137288691f61 100644
--- a/lib/aethyr/core/commands/admin/acprop.rb
+++ b/lib/aethyr/core/commands/admin/acprop.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcpropHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acreate.rb b/lib/aethyr/core/commands/admin/acreate.rb
index a3748f5816f2034a9e6d10a87ee233da07987ba6..e99197e61c5d50ee686ff11177ac4a244ed38055 100644
--- a/lib/aethyr/core/commands/admin/acreate.rb
+++ b/lib/aethyr/core/commands/admin/acreate.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcreateHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/acroom.rb b/lib/aethyr/core/commands/admin/acroom.rb
index 283ebeeb03ba1d6f6f1a48f462b68e85a68da08c..b329c27efe870cc2afde3fd4848489293b7e8b71 100644
--- a/lib/aethyr/core/commands/admin/acroom.rb
+++ b/lib/aethyr/core/commands/admin/acroom.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AcroomHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/adelete.rb b/lib/aethyr/core/commands/admin/adelete.rb
index 6d0cfce6fb5f36fe24b91415242a708639c040e5..a3a914b17c8272e559017fe3f594d461cefe7286 100644
--- a/lib/aethyr/core/commands/admin/adelete.rb
+++ b/lib/aethyr/core/commands/admin/adelete.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AdeleteHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/adesc.rb b/lib/aethyr/core/commands/admin/adesc.rb
index 55ed33cc058485b3cafce9645c91a27230eedc5e..3e205c2ffc301a51637a27e64bda398c6c1a26fb 100644
--- a/lib/aethyr/core/commands/admin/adesc.rb
+++ b/lib/aethyr/core/commands/admin/adesc.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AdescHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/aforce.rb b/lib/aethyr/core/commands/admin/aforce.rb
index 33be7130d29cd96924465f9a62d3ba4a102aa083..ee6ca47de8d046ed4d43e4a6830e04d4c4d23155 100644
--- a/lib/aethyr/core/commands/admin/aforce.rb
+++ b/lib/aethyr/core/commands/admin/aforce.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AforceHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/ahelp.rb b/lib/aethyr/core/commands/admin/ahelp.rb
index fdd86b09d081544e5beb20e094888b9331e3508c..506c1cb5e8842871ebc4e052b39c337bc5daf147 100644
--- a/lib/aethyr/core/commands/admin/ahelp.rb
+++ b/lib/aethyr/core/commands/admin/ahelp.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AhelpHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/ahide.rb b/lib/aethyr/core/commands/admin/ahide.rb
index c044d6be0fefe3bf0976ff8b4131be1afe8e0a2c..6806659a4b388afc53a2ee9990f8b9b5ea2d8ed1 100644
--- a/lib/aethyr/core/commands/admin/ahide.rb
+++ b/lib/aethyr/core/commands/admin/ahide.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AhideHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/ainfo.rb b/lib/aethyr/core/commands/admin/ainfo.rb
index 4d4289c52399a5dd807fa0eb4a7d0468bd36d0de..560c7a77ee5df90b597d043fe5105265eda0027c 100644
--- a/lib/aethyr/core/commands/admin/ainfo.rb
+++ b/lib/aethyr/core/commands/admin/ainfo.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AinfoHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/alearn.rb b/lib/aethyr/core/commands/admin/alearn.rb
index ebaec22120e1bd5436138a4498211fcd2ab28bc8..6399d09dcb707c55222aa3eeef9fbfd37ac23885 100644
--- a/lib/aethyr/core/commands/admin/alearn.rb
+++ b/lib/aethyr/core/commands/admin/alearn.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AlearnHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/alist.rb b/lib/aethyr/core/commands/admin/alist.rb
index 0b6a29785e4bee2a33e851e871b64e6c465eb3c8..3c09feecfe43c8c1112356726443e77e61dc1703 100644
--- a/lib/aethyr/core/commands/admin/alist.rb
+++ b/lib/aethyr/core/commands/admin/alist.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AlistHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/alog.rb b/lib/aethyr/core/commands/admin/alog.rb
index 2ead2ec49f94835c33be2084340a70aa1e4e8fe5..80dea62030572c20f628a4499ed0b190d07e6b35 100644
--- a/lib/aethyr/core/commands/admin/alog.rb
+++ b/lib/aethyr/core/commands/admin/alog.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AlogHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/aput.rb b/lib/aethyr/core/commands/admin/aput.rb
index 620c478f11fd3722211aee6603133f84e554dd88..6e804b913b9faabd089e09fb0eeb12e755e2f734 100644
--- a/lib/aethyr/core/commands/admin/aput.rb
+++ b/lib/aethyr/core/commands/admin/aput.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AputHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/areact.rb b/lib/aethyr/core/commands/admin/areact.rb
index afc11308b170107b3068be15eb09eae69ef73692..b76c788e26961ed3778e3428fe359c9829c56233 100644
--- a/lib/aethyr/core/commands/admin/areact.rb
+++ b/lib/aethyr/core/commands/admin/areact.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AreactHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/areas.rb b/lib/aethyr/core/commands/admin/areas.rb
index ec4497df2d2377ce64925f75e0f8d8ab0baa8579..59fe9c934b32ec63b34d8fc7d9f7a653ffd1a2f4 100644
--- a/lib/aethyr/core/commands/admin/areas.rb
+++ b/lib/aethyr/core/commands/admin/areas.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AreasHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/areload.rb b/lib/aethyr/core/commands/admin/areload.rb
index f9730958707dc661d7815deab6dc3fafa2b9b7a0..4f2ce25a5876b470af6a901e4c1b0e3c033e956c 100644
--- a/lib/aethyr/core/commands/admin/areload.rb
+++ b/lib/aethyr/core/commands/admin/areload.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AreloadHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/asave.rb b/lib/aethyr/core/commands/admin/asave.rb
index c3dd7628d4f71629c4fc2fba520639418428faa5..2aecde918c07980d8a2a002e4eecda09ac4fc40d 100644
--- a/lib/aethyr/core/commands/admin/asave.rb
+++ b/lib/aethyr/core/commands/admin/asave.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AsaveHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/aset.rb b/lib/aethyr/core/commands/admin/aset.rb
index 75c0998dcf58e131809a87e992e606408be79bb3..cb23e15318956062f8b69a2eb90916aa40e8f715 100644
--- a/lib/aethyr/core/commands/admin/aset.rb
+++ b/lib/aethyr/core/commands/admin/aset.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AsetHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/ashow.rb b/lib/aethyr/core/commands/admin/ashow.rb
index d3827b447d45d5def35393abba316c024e5a9fb8..514d930030e2152d3adf03b8ed2f9703d6bd7ade 100644
--- a/lib/aethyr/core/commands/admin/ashow.rb
+++ b/lib/aethyr/core/commands/admin/ashow.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AshowHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/astatus.rb b/lib/aethyr/core/commands/admin/astatus.rb
index 526739a5ac1cf48657b1bb775595777269273f15..9533d092ab746363b1fb0d2a29dd72e43915f54f 100644
--- a/lib/aethyr/core/commands/admin/astatus.rb
+++ b/lib/aethyr/core/commands/admin/astatus.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AstatusHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/ateach.rb b/lib/aethyr/core/commands/admin/ateach.rb
index 067c570377d255a927362d75750af9425d3ed09c..b09c621ab43a9b5a40d5fc6fe0b501deaaf46fa4 100644
--- a/lib/aethyr/core/commands/admin/ateach.rb
+++ b/lib/aethyr/core/commands/admin/ateach.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AteachHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/awatch.rb b/lib/aethyr/core/commands/admin/awatch.rb
index 988f43495fd74e3a72c120834fd107fc0db42a81..6ae429bf1e684cebec045483c31cdd9bf40fe1ee 100644
--- a/lib/aethyr/core/commands/admin/awatch.rb
+++ b/lib/aethyr/core/commands/admin/awatch.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AwatchHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/awho.rb b/lib/aethyr/core/commands/admin/awho.rb
index 4ce2ff787549ab49a48b23d0b7cc516f1e61c730..2241a30644d4f969d23b4c8e622a6e4672bb50ef 100644
--- a/lib/aethyr/core/commands/admin/awho.rb
+++ b/lib/aethyr/core/commands/admin/awho.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AwhoHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/deleteplayer.rb b/lib/aethyr/core/commands/admin/deleteplayer.rb
index ddfdb0865c6d12af1fb9e9b57dd914749bb71d99..6a3f377958e4edfedea4a4d50f4096783db39d49 100644
--- a/lib/aethyr/core/commands/admin/deleteplayer.rb
+++ b/lib/aethyr/core/commands/admin/deleteplayer.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(DeleteplayerHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/restart.rb b/lib/aethyr/core/commands/admin/restart.rb
index 47c4b556f7e5d9753c30442a74a86d8a0a0bc6bc..db774142c46f5e6f19ef3995a1bdc23cf766e59a 100644
--- a/lib/aethyr/core/commands/admin/restart.rb
+++ b/lib/aethyr/core/commands/admin/restart.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(RestartHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/admin/terrain.rb b/lib/aethyr/core/commands/admin/terrain.rb
index a13f1ab89c2842569c2b7c3fb58c5262dea156ed..077b1e6f67c1d1c565d4903bea8374ac1b1da01e 100644
--- a/lib/aethyr/core/commands/admin/terrain.rb
+++ b/lib/aethyr/core/commands/admin/terrain.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(TerrainHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/block.rb b/lib/aethyr/core/commands/block.rb
index c8267ab0bf4a98f8d1cf265c5d776dec54c70045..270952a386b2dce74a30e1118e2454ef1ff70521 100644
--- a/lib/aethyr/core/commands/block.rb
+++ b/lib/aethyr/core/commands/block.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(BlockHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/close.rb b/lib/aethyr/core/commands/close.rb
index 2298ea46dc454279426756d5769385edc129d2bb..39fc2d51a9703bc8e565705a0ac5ee148ae44d24 100644
--- a/lib/aethyr/core/commands/close.rb
+++ b/lib/aethyr/core/commands/close.rb
@@ -15,8 +15,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(CloseHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/command_handler.rb b/lib/aethyr/core/commands/command_handler.rb
index 53a5b5629dc0ee81ab098ec78240d2055d1fc240..9765552419c8491401af04b8c5fab58c47964f7a 100644
--- a/lib/aethyr/core/commands/command_handler.rb
+++ b/lib/aethyr/core/commands/command_handler.rb
@@ -2,10 +2,10 @@ require 'aethyr/core/commands/help_handler'
 
 module Aethyr
   module Extend
-    
+
     class InputHandler
       attr_reader :player
-      
+
       def initialize(player, *args)
         super(*args)
         @player = player
@@ -15,13 +15,21 @@ module Aethyr
           false
       end
     end
-    
+
     class CommandHandler < InputHandler
       include Aethyr::Extend::HandleHelp
-      
+
       def initialize(player, commands, *args)
         super(player, commands, *args)
       end
+
+      protected
+      #event listener parent that listens for when a new user is added to the manager
+      def self.object_added(data, klass: child_class)
+        return unless data[:game_object].is_a? Player
+        data[:game_object].subscribe(klass.new(data[:game_object]))
+      end
+
     end
   end
-end
\ No newline at end of file
+end
diff --git a/lib/aethyr/core/commands/dodge.rb b/lib/aethyr/core/commands/dodge.rb
index ddb8146979f424dcef7537111c28b4b27b5b7d3e..5edf0917db6ae215c06cfc3dda9c3d6363e6565b 100644
--- a/lib/aethyr/core/commands/dodge.rb
+++ b/lib/aethyr/core/commands/dodge.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(DodgeHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/drop.rb b/lib/aethyr/core/commands/drop.rb
index 676b1a20fb0eb88d46bb3a183a5a9b960b58d396..bf333f2ee8ae6a482c54c7c776beb7157dd750b2 100644
--- a/lib/aethyr/core/commands/drop.rb
+++ b/lib/aethyr/core/commands/drop.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
           
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(DropHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/agree.rb b/lib/aethyr/core/commands/emotes/agree.rb
index 2056470da577161af05c4865929ae90405400f73..fa8e8fd3ff3ce409eed22f6ba41d4ea7df16ab9a 100644
--- a/lib/aethyr/core/commands/emotes/agree.rb
+++ b/lib/aethyr/core/commands/emotes/agree.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(AgreeHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/back.rb b/lib/aethyr/core/commands/emotes/back.rb
index d95a27d9d10260bc0308d45ba8703468ce120185..ecd52fcaee5c5e7da7ca656f4ad0c67949097dda 100644
--- a/lib/aethyr/core/commands/emotes/back.rb
+++ b/lib/aethyr/core/commands/emotes/back.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(BackHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/blush.rb b/lib/aethyr/core/commands/emotes/blush.rb
index 94e99bb7ceb2726d0c11d848a03ff309c743e290..ca3a5c09d69b26aea88f939bdfdb93ffdfbe3c59 100644
--- a/lib/aethyr/core/commands/emotes/blush.rb
+++ b/lib/aethyr/core/commands/emotes/blush.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(BlushHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/bow.rb b/lib/aethyr/core/commands/emotes/bow.rb
index 9dd79ccd3af23783fb9a498359729d8ad441b295..39d123275eda704dd535acd3cdfe8133adbcc464 100644
--- a/lib/aethyr/core/commands/emotes/bow.rb
+++ b/lib/aethyr/core/commands/emotes/bow.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(BowHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/brb.rb b/lib/aethyr/core/commands/emotes/brb.rb
index 69fb99c1dc197763be62d4d17509d89dcb8861fe..d8d6dce968a2952e84f939d13e1204adb20c7d51 100644
--- a/lib/aethyr/core/commands/emotes/brb.rb
+++ b/lib/aethyr/core/commands/emotes/brb.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(BrbHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/bye.rb b/lib/aethyr/core/commands/emotes/bye.rb
index 92ca962e88e27b372f54e20e61117d3b3ecd2835..a8dcae9f9c916d20be0d2018dcceaa5a2ce31f02 100644
--- a/lib/aethyr/core/commands/emotes/bye.rb
+++ b/lib/aethyr/core/commands/emotes/bye.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(ByeHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/cheer.rb b/lib/aethyr/core/commands/emotes/cheer.rb
index ad1a4281d0e9fcc9a2f142140d34c84d9fe9e94a..8ecd1e508e85bd657a0afd0930ba1c831c87a12f 100644
--- a/lib/aethyr/core/commands/emotes/cheer.rb
+++ b/lib/aethyr/core/commands/emotes/cheer.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(CheerHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/cry.rb b/lib/aethyr/core/commands/emotes/cry.rb
index 5996c33603454408b8abd567966ed0994eb15eb7..15f1eeff1260d7c35194d149087be40d90c76a56 100644
--- a/lib/aethyr/core/commands/emotes/cry.rb
+++ b/lib/aethyr/core/commands/emotes/cry.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(CryHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/curtsey.rb b/lib/aethyr/core/commands/emotes/curtsey.rb
index a1fe14e6c2d7593d9d1be50c3f498e86b781341e..2fda5152281f3d49bb3137ad5a56bc102a0c2c73 100644
--- a/lib/aethyr/core/commands/emotes/curtsey.rb
+++ b/lib/aethyr/core/commands/emotes/curtsey.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(CurtseyHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/eh.rb b/lib/aethyr/core/commands/emotes/eh.rb
index 18ad17680758d7c17c4b605d75b4ca69de8ea434..2e1824991a076a381a9e8aa8e8bf2c1354dda395 100644
--- a/lib/aethyr/core/commands/emotes/eh.rb
+++ b/lib/aethyr/core/commands/emotes/eh.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(EhHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/emote.rb b/lib/aethyr/core/commands/emotes/emote.rb
index a8a8a0f1cd1223e90d14bd87245d8f3d237b734d..3664b1bf293ae37b6809ed5cf4854f8d646d0caa 100644
--- a/lib/aethyr/core/commands/emotes/emote.rb
+++ b/lib/aethyr/core/commands/emotes/emote.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(EmoteHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/er.rb b/lib/aethyr/core/commands/emotes/er.rb
index d48087df2fc0b8948f61949aefe55f96392dca39..768d0464f8fa5356b5187318b42929aff7ca94b1 100644
--- a/lib/aethyr/core/commands/emotes/er.rb
+++ b/lib/aethyr/core/commands/emotes/er.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(ErHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/ew.rb b/lib/aethyr/core/commands/emotes/ew.rb
index 13aac91cb71e3b3332e5f84a488b714ab0aa0da6..58101b2b2cc9ea5026fc0960e053a97c15116d74 100644
--- a/lib/aethyr/core/commands/emotes/ew.rb
+++ b/lib/aethyr/core/commands/emotes/ew.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(EwHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/frown.rb b/lib/aethyr/core/commands/emotes/frown.rb
index a9391edba78e629441edb1292ee3f1ad54d3b4cb..76e8bc8c6af5f81a40642f198429a81cd560766f 100644
--- a/lib/aethyr/core/commands/emotes/frown.rb
+++ b/lib/aethyr/core/commands/emotes/frown.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(FrownHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/grin.rb b/lib/aethyr/core/commands/emotes/grin.rb
index cea8422ee25dd6cc19c3fdca5f31a55459f72e55..989dec3c5ed5cf0567ea4b9a45851b39a4a16167 100644
--- a/lib/aethyr/core/commands/emotes/grin.rb
+++ b/lib/aethyr/core/commands/emotes/grin.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(GrinHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/hi.rb b/lib/aethyr/core/commands/emotes/hi.rb
index 62abdf569e25ec92e6f9a6a2164aef95c53df5af..f976dcd696d7328e58b9c9183669900f61ad734e 100644
--- a/lib/aethyr/core/commands/emotes/hi.rb
+++ b/lib/aethyr/core/commands/emotes/hi.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(HiHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/hm.rb b/lib/aethyr/core/commands/emotes/hm.rb
index 8e24c0810a1b0aa90c9c5a997d0245728c9d8462..93a7e6b70d442d46d86341258503eff4c8aacfca 100644
--- a/lib/aethyr/core/commands/emotes/hm.rb
+++ b/lib/aethyr/core/commands/emotes/hm.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(HmHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/hug.rb b/lib/aethyr/core/commands/emotes/hug.rb
index 165ef9d278e646cee03960881d74342612229bdb..aef490815b28f8fc289d83c12b34a7f2b9e7d5b5 100644
--- a/lib/aethyr/core/commands/emotes/hug.rb
+++ b/lib/aethyr/core/commands/emotes/hug.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(HugHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/huh.rb b/lib/aethyr/core/commands/emotes/huh.rb
index 799e278b9ace1d42f29315c0e3084fd17cbd903a..af05a4a64366628e08254b12c9b8ad1311c7ce59 100644
--- a/lib/aethyr/core/commands/emotes/huh.rb
+++ b/lib/aethyr/core/commands/emotes/huh.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(HuhHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/laugh.rb b/lib/aethyr/core/commands/emotes/laugh.rb
index 2f8c5400a13c7c5d9a7bc36c2f303806b5b60c5f..15f674cfab075cd3dc24de46df2bb1ab6a05bbed 100644
--- a/lib/aethyr/core/commands/emotes/laugh.rb
+++ b/lib/aethyr/core/commands/emotes/laugh.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(LaughHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/no.rb b/lib/aethyr/core/commands/emotes/no.rb
index 362f242becf1cd77aa3f9e8b1c3236934f66bbc6..36acf8802ac939c893e4dc5f65d35171673380a7 100644
--- a/lib/aethyr/core/commands/emotes/no.rb
+++ b/lib/aethyr/core/commands/emotes/no.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(NoHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/nod.rb b/lib/aethyr/core/commands/emotes/nod.rb
index d3e81f2912c21b1f0b8ed0efbbe2881a9c87d3ee..231b30e504a8192ef125404bd347e5cb77691c9f 100644
--- a/lib/aethyr/core/commands/emotes/nod.rb
+++ b/lib/aethyr/core/commands/emotes/nod.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(NodHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/pet.rb b/lib/aethyr/core/commands/emotes/pet.rb
index 9e9fdd7449f1a4836a159150e9ab266e06579f98..ea72c0403dcaad99ea132011b1f5b0f1ab33697d 100644
--- a/lib/aethyr/core/commands/emotes/pet.rb
+++ b/lib/aethyr/core/commands/emotes/pet.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PetHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/poke.rb b/lib/aethyr/core/commands/emotes/poke.rb
index 9ee78535816577596deeb3b64d16196e4e8cfa30..06cebdc0fe35d764d0002125d40524f66e05fe49 100644
--- a/lib/aethyr/core/commands/emotes/poke.rb
+++ b/lib/aethyr/core/commands/emotes/poke.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PokeHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/ponder.rb b/lib/aethyr/core/commands/emotes/ponder.rb
index 73f79626d4d37ea05e83de98b6b580f6bbc27150..9e307c822abcb218fb9443cf328a92082a9a87b8 100644
--- a/lib/aethyr/core/commands/emotes/ponder.rb
+++ b/lib/aethyr/core/commands/emotes/ponder.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PonderHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/shrug.rb b/lib/aethyr/core/commands/emotes/shrug.rb
index db39ea81490f666f3fc5f21b5e4ad643001b12ca..f1cd0333b91411e3a95869d0c5c8b6bb7c754382 100644
--- a/lib/aethyr/core/commands/emotes/shrug.rb
+++ b/lib/aethyr/core/commands/emotes/shrug.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(ShrugHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/sigh.rb b/lib/aethyr/core/commands/emotes/sigh.rb
index 8056ad838afecbf5dadeec75d0bf29d3f5617227..9ae6ead7bdc6460e2e92688b254ac2ade6ec23a7 100644
--- a/lib/aethyr/core/commands/emotes/sigh.rb
+++ b/lib/aethyr/core/commands/emotes/sigh.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SighHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/skip.rb b/lib/aethyr/core/commands/emotes/skip.rb
index 9a906c782191c1967a42da6847762f4931c7cbf0..5931ab7771615c3590392ece9afe94f8edb612f3 100644
--- a/lib/aethyr/core/commands/emotes/skip.rb
+++ b/lib/aethyr/core/commands/emotes/skip.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SkipHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/smile.rb b/lib/aethyr/core/commands/emotes/smile.rb
index 0101a45a63e7271e6991b97e26a793d6e6a1e8db..f432a2906ee94a91929272df5bd724cfb90395e4 100644
--- a/lib/aethyr/core/commands/emotes/smile.rb
+++ b/lib/aethyr/core/commands/emotes/smile.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SmileHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/snicker.rb b/lib/aethyr/core/commands/emotes/snicker.rb
index 3f5836bc77c7c3be295e3005a380ff4e49b16ba4..182820e20d5094be7519643cad0aaa9fe002357c 100644
--- a/lib/aethyr/core/commands/emotes/snicker.rb
+++ b/lib/aethyr/core/commands/emotes/snicker.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SnickerHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/uh.rb b/lib/aethyr/core/commands/emotes/uh.rb
index 809d1cf322759c3bf26b611fd7e4f189612b635b..d5540e3a48f07d5dc2be26ac646b239d93eded79 100644
--- a/lib/aethyr/core/commands/emotes/uh.rb
+++ b/lib/aethyr/core/commands/emotes/uh.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(UhHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/wave.rb b/lib/aethyr/core/commands/emotes/wave.rb
index c0d47787bc24bc1397e3924fd39dc0ff82d0ccc3..6cd8b5b4af5bf233c1dc6d505da8b55d7d7b6c16 100644
--- a/lib/aethyr/core/commands/emotes/wave.rb
+++ b/lib/aethyr/core/commands/emotes/wave.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(WaveHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/yawn.rb b/lib/aethyr/core/commands/emotes/yawn.rb
index f82b5ed26c44108c53c64ba4876311ced0830349..bd37ba56b3a862ed8b8e5b0e4a7d50f73405791c 100644
--- a/lib/aethyr/core/commands/emotes/yawn.rb
+++ b/lib/aethyr/core/commands/emotes/yawn.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(YawnHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/emotes/yes.rb b/lib/aethyr/core/commands/emotes/yes.rb
index ea8a2fac8ae5c0e3607404d36196565aec8ace79..f6fa418389be988926e3c3cc46f6d95965e8aac6 100644
--- a/lib/aethyr/core/commands/emotes/yes.rb
+++ b/lib/aethyr/core/commands/emotes/yes.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(YesHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/gait.rb b/lib/aethyr/core/commands/gait.rb
index c8605c55ef2098d821fb043e319ff6bfc7e27e11..ae22aa57e7ee25572502c662142076fa87104f71 100644
--- a/lib/aethyr/core/commands/gait.rb
+++ b/lib/aethyr/core/commands/gait.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(GaitHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/generic.rb b/lib/aethyr/core/commands/generic.rb
index 1f980623197ef29321c9cc051276b7bfa53e98d1..e8c8f190052af45a814898f4e585f77276a887fd 100644
--- a/lib/aethyr/core/commands/generic.rb
+++ b/lib/aethyr/core/commands/generic.rb
@@ -12,8 +12,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(GenericHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/get.rb b/lib/aethyr/core/commands/get.rb
index dcf6b58e1e0708f6666f5fdf3dadd63f9d6de7cf..0c1f226ff7ddf6999bb0e36db0890a063f29d8fb 100644
--- a/lib/aethyr/core/commands/get.rb
+++ b/lib/aethyr/core/commands/get.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
           
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(GetHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/give.rb b/lib/aethyr/core/commands/give.rb
index e6264467906036e29371dc029e77d48ce04f09e5..7570d50d489828beb407d8ed3192580fc4c41c13 100644
--- a/lib/aethyr/core/commands/give.rb
+++ b/lib/aethyr/core/commands/give.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
           
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(GiveHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/inventory.rb b/lib/aethyr/core/commands/inventory.rb
index 34d9a06f78c6ee5a26f1b4a7e7f61b2c15e5a7cb..e8a4044e6cf5b1e91ceea3c02f44b43e046cb619 100644
--- a/lib/aethyr/core/commands/inventory.rb
+++ b/lib/aethyr/core/commands/inventory.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
           
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(InventoryHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/issue.rb b/lib/aethyr/core/commands/issue.rb
index 01122e07bd7cc8fa69e90cb5b96b64d4320b3012..6e2cd884d0d18cf751689abe321430535e044da0 100644
--- a/lib/aethyr/core/commands/issue.rb
+++ b/lib/aethyr/core/commands/issue.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(IssueHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/kick.rb b/lib/aethyr/core/commands/kick.rb
index c6c6f385749e84e9f4f54d61f5d330bf1fadbd7d..ee1ce3d2b2fc545aae2069ed7fc0978184be9576 100644
--- a/lib/aethyr/core/commands/kick.rb
+++ b/lib/aethyr/core/commands/kick.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(KickHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/locking.rb b/lib/aethyr/core/commands/locking.rb
index db9881356d2f64085c5c7f89458745e94273bffe..16cad9da75da32c2f93d4bf7631a569ea1ede412 100644
--- a/lib/aethyr/core/commands/locking.rb
+++ b/lib/aethyr/core/commands/locking.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(LockingHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/look.rb b/lib/aethyr/core/commands/look.rb
index 7b0615bac97eb60ed3ba35344895871d31aa23c9..e32779dfdf3f811ea639e8b7de56b643421517dc 100644
--- a/lib/aethyr/core/commands/look.rb
+++ b/lib/aethyr/core/commands/look.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(LookHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/map.rb b/lib/aethyr/core/commands/map.rb
index 60b747fcd001d9c5d1dca6b104fe8bd701d081b0..3e7790f972e3f8dd537db3bbaa1a7fce6fdfe573 100644
--- a/lib/aethyr/core/commands/map.rb
+++ b/lib/aethyr/core/commands/map.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(MapHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/more.rb b/lib/aethyr/core/commands/more.rb
index 97ffa7e8b8d4e4e9fbefda9eda33d4d10dda12ac..8733b44afe6bdf2707bcf954886bfab9867312be 100644
--- a/lib/aethyr/core/commands/more.rb
+++ b/lib/aethyr/core/commands/more.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(MoreHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
           
           def player_input(data)
diff --git a/lib/aethyr/core/commands/move.rb b/lib/aethyr/core/commands/move.rb
index a835167f10f093f643b0c88b597da3326dbc63a6..a1f4db69fb867ed844e3fe37c93909d7c6d721b8 100644
--- a/lib/aethyr/core/commands/move.rb
+++ b/lib/aethyr/core/commands/move.rb
@@ -15,8 +15,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(MoveHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/news.rb b/lib/aethyr/core/commands/news.rb
index a5e235e487753767e8dde32776a68b05ab53e54f..5cf35a8cae408c21e7bde3107b469c87af55b0ce 100644
--- a/lib/aethyr/core/commands/news.rb
+++ b/lib/aethyr/core/commands/news.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(NewsHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/open.rb b/lib/aethyr/core/commands/open.rb
index 2b4fba7a19ec87f3311cd2b0cfd71e73e436740c..4dbd64eca8a238049dff6025f649787ec3af4569 100644
--- a/lib/aethyr/core/commands/open.rb
+++ b/lib/aethyr/core/commands/open.rb
@@ -14,8 +14,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(OpenHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/portal.rb b/lib/aethyr/core/commands/portal.rb
index 70ae36cb08efdc6b4a8a0507eb5f0250daef1ffc..7eec926039984c581c9a705b3dac4413b377c392 100644
--- a/lib/aethyr/core/commands/portal.rb
+++ b/lib/aethyr/core/commands/portal.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PortalHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/pose.rb b/lib/aethyr/core/commands/pose.rb
index ec3a1da5c2cbbdc654d70f698de6717b9b8f0478..2ea47e8d030f7d852c080e5789993798b52b84ba 100644
--- a/lib/aethyr/core/commands/pose.rb
+++ b/lib/aethyr/core/commands/pose.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PoseHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/punch.rb b/lib/aethyr/core/commands/punch.rb
index 786aae9c743490abd76fdfc52b59cd7fa95dce2b..ef05ab23e33740f4638fbd87af8e02dc234e46f0 100644
--- a/lib/aethyr/core/commands/punch.rb
+++ b/lib/aethyr/core/commands/punch.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PunchHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/put.rb b/lib/aethyr/core/commands/put.rb
index b4e7af21a8e0ecda1f0622c899e115dafcba4ffe..1a3853fdf75ab242de0ca96a1f3a5aa3f9d1efb8 100644
--- a/lib/aethyr/core/commands/put.rb
+++ b/lib/aethyr/core/commands/put.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(PutHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/quit.rb b/lib/aethyr/core/commands/quit.rb
index 47dfbf4ccb8020b3aaa2cfc8738eac2712e06ad9..4a85f1b334f9950602ce1b8e015a7b204ac228dd 100644
--- a/lib/aethyr/core/commands/quit.rb
+++ b/lib/aethyr/core/commands/quit.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
           
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(QuitHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/remove.rb b/lib/aethyr/core/commands/remove.rb
index 35e998ef800b527e5e1f95964e371582c987c9cc..848f6e030ef2407ea75274ea4215d97953a5e0b7 100644
--- a/lib/aethyr/core/commands/remove.rb
+++ b/lib/aethyr/core/commands/remove.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(RemoveHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/say.rb b/lib/aethyr/core/commands/say.rb
index 1626c753674e6e67b60dba9f508be173a8c238e9..c4ab4945dddf64f33f3693d1d3557da3e4f55220 100644
--- a/lib/aethyr/core/commands/say.rb
+++ b/lib/aethyr/core/commands/say.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SayHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/set.rb b/lib/aethyr/core/commands/set.rb
index f67089b9eb4c50f775db19a364a0bbdbb9e89a46..fead9608986fdb8da50dba19da708a745dbbf518 100644
--- a/lib/aethyr/core/commands/set.rb
+++ b/lib/aethyr/core/commands/set.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SetHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/sit.rb b/lib/aethyr/core/commands/sit.rb
index 365ae51b9d8b0aef2478fc866b9f039298e2d41d..34bb68e7cdebaf6e3b0ae6379731cbebd32e69fa 100644
--- a/lib/aethyr/core/commands/sit.rb
+++ b/lib/aethyr/core/commands/sit.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SitHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/skills.rb b/lib/aethyr/core/commands/skills.rb
index 9a711e6fdf90d48cbc18e505a5e67a887e356b52..f216db328f1087f4362b9146e58175ced5cf6f58 100644
--- a/lib/aethyr/core/commands/skills.rb
+++ b/lib/aethyr/core/commands/skills.rb
@@ -13,8 +13,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SkillsHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/slash.rb b/lib/aethyr/core/commands/slash.rb
index 10ff8acbf9682667bb186aa1228cdb15156b2ed2..dc94f708fae109161af747af39814a662f139259 100644
--- a/lib/aethyr/core/commands/slash.rb
+++ b/lib/aethyr/core/commands/slash.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(SlashHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/stand.rb b/lib/aethyr/core/commands/stand.rb
index 85651419f9985ee3320ba9d31916407b24fcc94f..328e22d49751b8179cb38089492e6811bd005953 100644
--- a/lib/aethyr/core/commands/stand.rb
+++ b/lib/aethyr/core/commands/stand.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(StandHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/tell.rb b/lib/aethyr/core/commands/tell.rb
index a66f538af76003e9d03936d58becf5033c4aa902..201990311defdbad6fefc98018d1c6ef795db704 100644
--- a/lib/aethyr/core/commands/tell.rb
+++ b/lib/aethyr/core/commands/tell.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(TellHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/unwield.rb b/lib/aethyr/core/commands/unwield.rb
index ed828a2bb729b864dc26dd96e201aa2eb49c939b..0b1841d80b784576fb9fe383243d03980750ab78 100644
--- a/lib/aethyr/core/commands/unwield.rb
+++ b/lib/aethyr/core/commands/unwield.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(UnwieldHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/wear.rb b/lib/aethyr/core/commands/wear.rb
index afca7ef6aaf50450ffb7852ad0c67405167fbf52..0ac3e8c8e246562e142b33dbf4a99ed4823582da 100644
--- a/lib/aethyr/core/commands/wear.rb
+++ b/lib/aethyr/core/commands/wear.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(WearHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/whereis.rb b/lib/aethyr/core/commands/whereis.rb
index b693209b57f20b9a6ce3d2847423443d422b5321..940f11ff7d4a607987dddd240527dc865043289a 100644
--- a/lib/aethyr/core/commands/whereis.rb
+++ b/lib/aethyr/core/commands/whereis.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(WhereisHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/whisper.rb b/lib/aethyr/core/commands/whisper.rb
index 537c785ead392883ec0f18c9cfa80b62cd35e5ac..1d59c576d3658852a8deedf3ab81d62c55bf231c 100644
--- a/lib/aethyr/core/commands/whisper.rb
+++ b/lib/aethyr/core/commands/whisper.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(WhisperHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/commands/wield.rb b/lib/aethyr/core/commands/wield.rb
index 46ec3e49ccfa9de15aaf74852a15989bfe21a5cb..2ce23a2e2f1b849921389339624d40103b5aa48b 100644
--- a/lib/aethyr/core/commands/wield.rb
+++ b/lib/aethyr/core/commands/wield.rb
@@ -11,8 +11,7 @@ module Aethyr
           end
 
           def self.object_added(data)
-            return unless data[:game_object].is_a? Player
-            data[:game_object].subscribe(WieldHandler.new(data[:game_object]))
+            super(data, klass: self)
           end
 
           def player_input(data)
diff --git a/lib/aethyr/core/registry.rb b/lib/aethyr/core/registry.rb
index b4ab627fc320f895422ad06a701f0521dd223487..f1220254f1ad5c1bfc8509d84ad5eab1b3954278 100644
--- a/lib/aethyr/core/registry.rb
+++ b/lib/aethyr/core/registry.rb
@@ -1,45 +1,27 @@
 module Aethyr
     module Extend
         class HandlerRegistry
-            @@handlers = Set.new
-            
+          @@handlers = Set.new
+
             def self.register_handler(new_handler)
               raise "Bad handler!" unless new_handler
               unless @@handlers.include? new_handler
                   @@handlers << new_handler
               end
             end
-            
+
             def self.get_handlers
                 return @@handlers.dup
             end
-            
+
             def self.handle(manager)
               @@handlers.each do |handler|
                 manager.subscribe(handler)
               end
               nil
             end
-            
-#            def self.help_handle(input, player)
-#              @@handlers.values.each do |handler|
-#                next unless handler.is_a? Aethyr::Extend::HandleHelp
-#                e = handler.help_handle(input, player)
-#                return e unless e.nil?
-#              end
-#              nil
-#            end
-#            
-#            def self.help_topics(player)
-#              topics = []
-#              @@handlers.values.each do |handler|
-#                next unless handler.is_a? Aethyr::Extend::HandleHelp
-#                topics.push *(handler.commands)
-#              end
-#              topics
-#            end
         end
     end
 end
 
-require 'aethyr/core/util/all-commands'
\ No newline at end of file
+require 'aethyr/core/util/all-commands'