diff --git a/Changelog.md b/Changelog.md
index e96ed8bed562a4036b3cd727d98ad8f104b1da46..a1c9a5496fcd31e30a0189854354ddaf1dbfc698 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -8,6 +8,7 @@
 * Prevent duplicate mention notifications when the post is received twice [#7721](https://github.com/diaspora/diaspora/pull/7721)
 * Fixed a compatiblitiy issue with non-diaspora\* webfingers [#7718](https://github.com/diaspora/diaspora/pull/7718)
 * Don't retry federation for accounts without a valid public key [#7717](https://github.com/diaspora/diaspora/pull/7717)
+* Fix stream generation for tagged posts with many followed tags [#7715](https://github.com/diaspora/diaspora/pull/7715)
 
 ## Features
 * Add basic html5 audio/video embedding support [#6418](https://github.com/diaspora/diaspora/pull/6418)
diff --git a/app/models/status_message.rb b/app/models/status_message.rb
index a44afca90a726c2af5ef324cbcaa3b750cd2a56c..17d267797f924ef6b43f71175967b24647686925 100644
--- a/app/models/status_message.rb
+++ b/app/models/status_message.rb
@@ -46,7 +46,7 @@ class StatusMessage < Post
   end
 
   def self.public_tag_stream(tag_ids)
-    all_public.tag_stream(tag_ids)
+    all_public.select("DISTINCT #{table_name}.*").tag_stream(tag_ids)
   end
 
   def self.tag_stream(tag_ids)
diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb
index 8dfca6f67e9e5f4952a8e114faf772d766f1c41f..bd9d809ce401b1c1d80fea4c4480c004fd5b0a1f 100644
--- a/spec/models/status_message_spec.rb
+++ b/spec/models/status_message_spec.rb
@@ -51,6 +51,14 @@ describe StatusMessage, type: :model do
         it "returns public status messages tagged with the tag" do
           expect(StatusMessage.public_tag_stream([@tag_id])).to eq([@status_message_1])
         end
+
+        it "returns a post with two tags only once" do
+          status_message = FactoryGirl.create(:status_message, text: "#hashtag #test", public: true)
+          test_tag_id = ActsAsTaggableOn::Tag.where(name: "test").first.id
+
+          expect(StatusMessage.public_tag_stream([@tag_id, test_tag_id]))
+            .to match_array([@status_message_1, status_message])
+        end
       end
 
       describe ".user_tag_stream" do