diff --git a/lib/diaspora/fields/target.rb b/lib/diaspora/fields/target.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1fbbf97960ffead1233595aef880fe33d60f1b31
--- /dev/null
+++ b/lib/diaspora/fields/target.rb
@@ -0,0 +1,14 @@
+module Diaspora
+  module Fields
+    module Target
+      def self.included(model)
+        model.class_eval do
+          belongs_to :target, polymorphic: true
+
+          validates :target_id, uniqueness: {scope: %i(target_type author_id)}
+          validates :target, presence: true
+        end
+      end
+    end
+  end
+end
diff --git a/lib/federated/relayable.rb b/lib/federated/relayable.rb
index 0cbe1adbf1fdb0b1b18054c95cb6d4e85bf1ab56..4b249d5132f1c0d1501df78cadc805c83defc9ca 100644
--- a/lib/federated/relayable.rb
+++ b/lib/federated/relayable.rb
@@ -5,14 +5,10 @@ module Federated
     include Diaspora::Federated::Base
     include Diaspora::Fields::Guid
     include Diaspora::Fields::Author
+    include Diaspora::Fields::Target
 
     include Diaspora::Relayable
 
-    belongs_to :target, polymorphic: true
-
     alias_attribute :parent, :target
-
-    validates :target_id, uniqueness: {scope: %i(target_type author_id)}
-    validates :target, presence: true # should be in relayable (pending on fixing Message)
   end
 end