diff --git a/Changelog.md b/Changelog.md
index f9d8dab4bbf1460fe33b150050fe38ec2b5375b8..0f12823e643c6bf88e03862b04308a48b39b865c 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -26,6 +26,8 @@ If so, please delete it since it will prevent the federation from working proper
 * Move back to top to the right to avoid misclicks [#7516](https://github.com/diaspora/diaspora/pull/7516)
 * Include count in mobile post action link [#7520](https://github.com/diaspora/diaspora/pull/7520)
 * Update the user data export archive format [#6726](https://github.com/diaspora/diaspora/pull/6726)
+* Use id as fallback when sorting posts [#7523](https://github.com/diaspora/diaspora/pull/7523)
+* Remove no-posts-info when adding posts to the stream [#7523](https://github.com/diaspora/diaspora/pull/7523)
 
 ## Bug fixes
 
diff --git a/app/assets/javascripts/app/models/stream.js b/app/assets/javascripts/app/models/stream.js
index f1978eb765302e1359acdceec72c3c6d18390472..119107144e361e0ebf92e7b6c4d66093c878f8e4 100644
--- a/app/assets/javascripts/app/models/stream.js
+++ b/app/assets/javascripts/app/models/stream.js
@@ -13,8 +13,16 @@ app.models.Stream = Backbone.Collection.extend({
   },
 
   collectionOptions :function(){
-      var order = this.sortOrder();
-      return { comparator : function(item) { return -item[order](); } };
+    var order = this.sortOrder();
+    return {
+      comparator: function(item1, item2) {
+        if (item1[order]() < item2[order]()) { return 1; }
+        if (item1[order]() > item2[order]()) { return -1; }
+        if (item1.id < item2.id) { return 1; }
+        if (item1.id > item2.id) { return -1; }
+        return 0;
+      }
+    };
   },
 
   url : function(){
diff --git a/app/assets/javascripts/app/views/infinite_stream_view.js b/app/assets/javascripts/app/views/infinite_stream_view.js
index d5783d5595c4b64d70089c686e815de6fd415796..0a800da4290eb57ec72895ef5c73a63e97bf8152 100644
--- a/app/assets/javascripts/app/views/infinite_stream_view.js
+++ b/app/assets/javascripts/app/views/infinite_stream_view.js
@@ -51,6 +51,12 @@ app.views.InfScroll = app.views.Base.extend({
     }
   },
 
+  postRenderTemplate: function() {
+    if (this.postViews.length > 0) {
+      this.$(".no-posts-info").closest(".stream-element").remove();
+    }
+  },
+
   showNoPostsInfo: function() {
     if (this.postViews.length === 0) {
       var noPostsInfo = new app.views.NoPostsInfo();
diff --git a/spec/javascripts/app/models/stream_spec.js b/spec/javascripts/app/models/stream_spec.js
index 0778dbf1fa0d4c9d844863eb729224f6aff7dc9c..e107a0d5212c67a1183a3c0df8466de6c79e6550 100644
--- a/spec/javascripts/app/models/stream_spec.js
+++ b/spec/javascripts/app/models/stream_spec.js
@@ -7,6 +7,38 @@ describe("app.models.Stream", function() {
     expectedPath = document.location.pathname;
   });
 
+  describe("collectionOptions", function() {
+    beforeEach(function() {
+      this.post1 = new app.models.Post({"id": 1, "created_at": 12, "interacted_at": 123});
+      this.post2 = new app.models.Post({"id": 2, "created_at": 13, "interacted_at": 123});
+      this.post3 = new app.models.Post({"id": 3, "created_at": 13, "interacted_at": 122});
+      this.post4 = new app.models.Post({"id": 4, "created_at": 10, "interacted_at": 100});
+    });
+
+    it("returns a comparator for posts that compares created_at and ids by default", function() {
+      this.options = stream.collectionOptions();
+      expect(this.options.comparator(this.post1, this.post2)).toBe(1);
+      expect(this.options.comparator(this.post2, this.post1)).toBe(-1);
+      expect(this.options.comparator(this.post2, this.post3)).toBe(1);
+      expect(this.options.comparator(this.post3, this.post2)).toBe(-1);
+      expect(this.options.comparator(this.post1, this.post4)).toBe(-1);
+      expect(this.options.comparator(this.post4, this.post1)).toBe(1);
+      expect(this.options.comparator(this.post1, this.post1)).toBe(0);
+    });
+
+    it("returns a comparator for posts that compares interacted_at and ids for the activity stream", function() {
+      spyOn(stream, "basePath").and.returnValue("activity");
+      this.options = stream.collectionOptions();
+      expect(this.options.comparator(this.post1, this.post2)).toBe(1);
+      expect(this.options.comparator(this.post2, this.post1)).toBe(-1);
+      expect(this.options.comparator(this.post2, this.post3)).toBe(-1);
+      expect(this.options.comparator(this.post3, this.post2)).toBe(1);
+      expect(this.options.comparator(this.post1, this.post4)).toBe(-1);
+      expect(this.options.comparator(this.post4, this.post1)).toBe(1);
+      expect(this.options.comparator(this.post1, this.post1)).toBe(0);
+    });
+  });
+
   describe("#_fetchOpts", function() {
     it("it fetches posts from the window's url, and ads them to the collection", function() {
       expect( stream._fetchOpts() ).toEqual({ remove: false, url: expectedPath});