diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb
index 52a9ef543b4963639d405194075c2578ee140a95..dafe53307451a0f372697bad024cc16d5c0a4a53 100644
--- a/app/controllers/photos_controller.rb
+++ b/app/controllers/photos_controller.rb
@@ -150,10 +150,12 @@ class PhotosController < ApplicationController
     @photo = current_user.build_post(:photo, params[:photo])
 
     if @photo.save
-      aspects = current_user.aspects_from_ids(params[:photo][:aspect_ids])
 
       unless @photo.pending
-        current_user.add_to_streams(@photo, aspects)
+        unless @photo.public?
+          aspects = current_user.aspects_from_ids(params[:photo][:aspect_ids])
+          current_user.add_to_streams(@photo, aspects)
+        end
         current_user.dispatch_post(@photo, :to => params[:photo][:aspect_ids])
       end
 
diff --git a/app/controllers/reshares_controller.rb b/app/controllers/reshares_controller.rb
index 1e49a5aa005294980e1bbccc0b39ed59c4c3a681..4be0255989c2a9c8256b5a277df03de0c25b7499 100644
--- a/app/controllers/reshares_controller.rb
+++ b/app/controllers/reshares_controller.rb
@@ -11,7 +11,6 @@ class ResharesController < ApplicationController
     end
 
     if @reshare.save
-      current_user.add_to_streams(@reshare, current_user.aspects)
       current_user.dispatch_post(@reshare, :url => post_url(@reshare), :additional_subscribers => @reshare.root_author)
       render :json => ExtremePostPresenter.new(@reshare, current_user), :status => 201
     else
diff --git a/app/models/user/querying.rb b/app/models/user/querying.rb
index 531c8f5fa48ad0c1ea38b67b8e7a60891ee3e9f5..a3104930e616db048243cffefa3370f16c5f81ff 100644
--- a/app/models/user/querying.rb
+++ b/app/models/user/querying.rb
@@ -134,7 +134,10 @@ module User::Querying
     query = opts[:klass].where(conditions)
 
     unless opts[:all_aspects?]
-      query = query.joins(:aspect_visibilities).where(aspect_visibilities: {aspect_id: opts[:by_members_of]})
+      query = query.with_aspects.where(
+        AspectVisibility.arel_table[:aspect_id].in(opts[:by_members_of])
+          .or(opts[:klass].arel_table[:public].eq(true))
+      )
     end
 
     ugly_select_clause(query, opts)
diff --git a/app/services/status_message_creation_service.rb b/app/services/status_message_creation_service.rb
index 3f0093bca1a414ac74fe90a858bd29e67a2389b1..d1de5c5558cb73ad702cbd5d851678d8cb1727ae 100644
--- a/app/services/status_message_creation_service.rb
+++ b/app/services/status_message_creation_service.rb
@@ -34,9 +34,9 @@ class StatusMessageCreationService
   end
 
   def destination_aspect_ids(params, user)
-    if params[:status_message][:public] || params[:status_message][:aspect_ids].first == "all_aspects"
+    if params[:status_message][:aspect_ids].first == "all_aspects"
       user.aspect_ids
-    else
+    elsif !params[:status_message][:public]
       params[:aspect_ids]
     end
   end
diff --git a/lib/diaspora/shareable.rb b/lib/diaspora/shareable.rb
index f0a5b31218c43e74d9a29ee619926ab93f7281d2..2c6b1b6ce80a08d05705c17f2234b2641a9bdc7e 100644
--- a/lib/diaspora/shareable.rb
+++ b/lib/diaspora/shareable.rb
@@ -24,6 +24,10 @@ module Diaspora
           joins("LEFT OUTER JOIN share_visibilities ON share_visibilities.shareable_id = #{table_name}.id")
         }
 
+        scope :with_aspects, -> {
+          joins("LEFT OUTER JOIN aspect_visibilities ON aspect_visibilities.shareable_id = #{table_name}.id")
+        }
+
         def self.owned_or_visible_by_user(user)
           with_visibility.where(
             visible_by_user(user).or(arel_table[:public].eq(true)
diff --git a/spec/controllers/reshares_controller_spec.rb b/spec/controllers/reshares_controller_spec.rb
index 8f90907844ad5609399b089c95d23ed6e3f31edc..90b2720d99cacb03ea34026dfc1376641723c749 100644
--- a/spec/controllers/reshares_controller_spec.rb
+++ b/spec/controllers/reshares_controller_spec.rb
@@ -33,11 +33,6 @@ describe ResharesController, :type => :controller do
         }.to change(Reshare, :count).by(1)
       end
 
-      it 'after save, calls add to streams' do
-        expect(bob).to receive(:add_to_streams)
-        post_request!
-      end
-
       it 'calls dispatch' do
         expect(bob).to receive(:dispatch_post).with(anything, hash_including(:additional_subscribers))
         post_request!