diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb
index 0277fa88f3489fe762b8896337b1c6b139a094c9..173f133b8bd6f1190cabe792ea67524943569797 100644
--- a/app/controllers/people_controller.rb
+++ b/app/controllers/people_controller.rb
@@ -158,7 +158,7 @@ class PeopleController < ApplicationController
   def aspect_membership_dropdown
     @person = Person.find(params[:person_id])
     @contact = current_user.contact_for(@person) || Contact.new
-    render :partial => 'aspect_memberships/aspect_dropdown', :locals => {:contact => @contact, :person => @person, :hang => 'left'}
+    render :partial => 'aspect_membership_dropdown', :locals => {:contact => @contact, :person => @person, :hang => 'left'}
   end
 
   private
diff --git a/app/helpers/aspect_global_helper.rb b/app/helpers/aspect_global_helper.rb
index 0545d60f1dde0d046f7ae23ccfd3cc8292e3b01e..9b38b7a09c2efba19b5d26de7d759a7a64924f1e 100644
--- a/app/helpers/aspect_global_helper.rb
+++ b/app/helpers/aspect_global_helper.rb
@@ -65,8 +65,17 @@ module AspectGlobalHelper
     end
   end
 
-  def aspect_dropdown_list_item(aspect, contact, person)
-    checked = (contact.persisted? && contact.in_aspect?(aspect))
+  def aspect_membership_dropdown(contact, person, hang, aspect=nil)
+    selected_aspects = all_aspects.select{|aspect| contact.in_aspect?(aspect) }
+
+    render "shared/aspect_dropdown",
+      :selected_aspects => selected_aspects,
+      :person => person,
+      :hang => hang,
+      :dropdown_class => "aspect_membership"
+  end
+
+  def aspect_dropdown_list_item(aspect, checked)
     klass = checked ? "selected" : ""
 
     str = <<LISTITEM
@@ -76,4 +85,8 @@ module AspectGlobalHelper
 LISTITEM
     str.html_safe
   end
+
+  def dropdown_may_create_new_aspect
+    @aspect == :profile || @aspect == :tag || @aspect == :search || @aspect == :notification
+  end
 end
diff --git a/app/views/aspect_memberships/_aspect_dropdown.html.haml b/app/views/aspect_memberships/_aspect_dropdown.html.haml
deleted file mode 100644
index fc90b4174fb65cbd11672eb629af0f0b40287590..0000000000000000000000000000000000000000
--- a/app/views/aspect_memberships/_aspect_dropdown.html.haml
+++ /dev/null
@@ -1,21 +0,0 @@
--#   Copyright (c) 2011, Diaspora Inc.  This file is
--#   licensed under the Affero General Public License version 3 or later.  See
--#   the COPYRIGHT file.
-
-.dropdown{:class => "hang_#{hang} #{extra_class if defined?(extra_class)}"}
-  .button.toggle{:class => ("in_aspects" if contact.aspects.size > 0)}
-    - if contact.aspects.size == 1
-      = contact.aspects.first.name
-    - else
-      = t('.toggle', :count => contact.aspects.size)
-    &#9660;
-
-  .wrapper
-    %ul.dropdown_list{:unSelectable => 'on', 'data-person_id' => ((person.id) if person), 'data-service_uid' => (service_uid if defined?(service_uid))}
-      - for aspect in all_aspects
-        = aspect_dropdown_list_item(aspect, contact, person)
-
-      - if @aspect && (@aspect == :profile || @aspect == :getting_started || @aspect == :tag || @aspect == :search || @aspect == :notification)
-        %li.newItem
-          .add_aspect
-            = link_to t('contacts.index.add_a_new_aspect'), new_aspect_path(:person_id => person.id), :rel => 'facebox', :class => 'new_aspect'
diff --git a/app/views/aspect_memberships/_aspect_dropdown_list_item.haml b/app/views/aspect_memberships/_aspect_dropdown_list_item.haml
deleted file mode 100644
index d7508aa0cd097306860ceb7f249c51015f0d83a0..0000000000000000000000000000000000000000
--- a/app/views/aspect_memberships/_aspect_dropdown_list_item.haml
+++ /dev/null
@@ -1,6 +0,0 @@
--#   Copyright (c) 2011, Diaspora Inc.  This file is
--#   licensed under the Affero General Public License version 3 or later.  See
--#   the COPYRIGHT file.
-
-= aspect_dropdown_list_item(aspect, contact, person)
-
diff --git a/app/views/aspects/_aspect_stream.haml b/app/views/aspects/_aspect_stream.haml
index c727f32fca1d612b821b979cb8793aa558880fa2..b086f312745203f7b4b8a24ad28d344cfe1a77f7 100644
--- a/app/views/aspects/_aspect_stream.haml
+++ b/app/views/aspects/_aspect_stream.haml
@@ -16,7 +16,7 @@
     - else
       = @aspects.to_sentence
 
-= render 'shared/publisher', :aspect => aspect, :aspect_ids => aspect_ids
+= render 'shared/publisher', :selected_aspects => @aspects, :aspect_ids => aspect_ids, :aspect => @aspect
 
 - if posts.length == 0
   = render 'aspects/no_posts_message'
diff --git a/app/views/aspects/create.js.erb b/app/views/aspects/create.js.erb
index 30473247350558d42235d8fd4ea4ab977ac2528c..1b3b6d42893093b043bc8e6b249dea371e2396fc 100644
--- a/app/views/aspects/create.js.erb
+++ b/app/views/aspects/create.js.erb
@@ -3,7 +3,7 @@
 //   the COPYRIGHT file.
 
 var dropdown = $("ul.dropdown_list[data-person_id=<%= @person.id %>]")
-$('.newItem', dropdown).before("<%= escape_javascript( render('aspect_memberships/aspect_dropdown_list_item', :aspect => @aspect, :person => @person, :contact => @contact)) %>");
+$('.newItem', dropdown).before("<%= escape_javascript( aspect_dropdown_list_item(@aspect, @contact.aspects.include?(@aspect))) %>");
 
 ContactEdit.updateNumber(dropdown, "<%= @person.id %>", <%= @contact.aspects.size %>);
 $.facebox.close();
diff --git a/app/views/aspects/index.mobile.haml b/app/views/aspects/index.mobile.haml
index caea84c34945419675dc8ca8520917da79ce3246..e7e22f20a0ddb4b25115ff1313c1034391d0530f 100644
--- a/app/views/aspects/index.mobile.haml
+++ b/app/views/aspects/index.mobile.haml
@@ -17,4 +17,4 @@
       %a.more-link.paginate{:href => next_page_path}
         %h2= t("more")
 - content_for :subpages do
-  = render 'shared/publisher', :aspect_ids => @aspect_ids
+  = render 'shared/publisher', :aspect_ids => @aspect_ids, :selected_aspects => @aspects, :aspect => @aspect
diff --git a/app/views/contacts/sharing.haml b/app/views/contacts/sharing.haml
index 8e687f3618600add822495b9851e35bce1d04be4..3ef702ece7a416caf191e6df3b0716fd27541e73 100644
--- a/app/views/contacts/sharing.haml
+++ b/app/views/contacts/sharing.haml
@@ -23,7 +23,7 @@
                 = contact.person.diaspora_handle
 
             .right
-              = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => contact.person, :hang => 'right'
+              = aspect_membership_dropdown(contact, contact.person, 'right')
 
   %br
   %div{:style => "text-align:right;"}
diff --git a/app/views/notifications/index.html.haml b/app/views/notifications/index.html.haml
index cc02bb16ace8da225ad90fd2e257826abe9d823f..88a098ab2999c19d98693bed5b0408745dc4d3d8 100644
--- a/app/views/notifications/index.html.haml
+++ b/app/views/notifications/index.html.haml
@@ -24,7 +24,7 @@
             .stream_element{:data=>{:guid => note.id}, :class => "#{note.unread ? 'unread' : ''}"}
               - if note.type == "Notifications::StartedSharing" && contact = current_user.contact_for(note[:target])
                 .right
-                  = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => note[:target], :hang => 'left'
+                  = aspect_membership_dropdown(contact, note[:target], 'left')
 
               %span.from
                 = notification_message_for(note)
diff --git a/app/views/people/_aspect_membership_dropdown.haml b/app/views/people/_aspect_membership_dropdown.haml
new file mode 100644
index 0000000000000000000000000000000000000000..778ca85bfb16b83a1367800f7d075f39d1a70133
--- /dev/null
+++ b/app/views/people/_aspect_membership_dropdown.haml
@@ -0,0 +1 @@
+= aspect_membership_dropdown(@contact, @person, 'left')
diff --git a/app/views/people/_relationship_action.haml b/app/views/people/_relationship_action.haml
index 9f70f9981c67981cdef285bca15cde28dc8eb0e4..98119128c08a183da6b1ccff33e2136577599b93 100644
--- a/app/views/people/_relationship_action.haml
+++ b/app/views/people/_relationship_action.haml
@@ -1,6 +1,6 @@
 - unless person == current_user.person
   - contact = current_user.contacts.find_by_person_id(person.id)
   - contact ||= Contact.new(:person => person)
-  = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => person, :hang => 'left'
+  = aspect_membership_dropdown(contact, person, 'left')
 -else
   = t('people.person.thats_you')
diff --git a/app/views/people/_sub_header.html.haml b/app/views/people/_sub_header.html.haml
index 4d376461f9ff76ffdf4e791c594b3a800880057d..fd9b705472e1db2e81bbf3aba86e8ee28604c3c9 100644
--- a/app/views/people/_sub_header.html.haml
+++ b/app/views/people/_sub_header.html.haml
@@ -1,7 +1,7 @@
 #author_info
   .right
     - if user_signed_in? && current_user.person != person
-      = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => person, :hang => 'left'
+      = aspect_membership_dropdown(contact, person, 'left')
     - elsif user_signed_in? && current_user.person == person
       = link_to t('people.profile_sidebar.edit_my_profile'), edit_profile_path, :class => 'button creation'
 
diff --git a/app/views/services/_remote_friend.html.haml b/app/views/services/_remote_friend.html.haml
index 09d5fce2fbe5031394f1e6fc0f5a4992e6457ef4..db4a668c04dec1921cac4383686cab17b87975bb 100644
--- a/app/views/services/_remote_friend.html.haml
+++ b/app/views/services/_remote_friend.html.haml
@@ -4,9 +4,9 @@
     - if friend.already_invited?
       = link_to t('.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id)
     - elsif friend.on_diaspora?
-      = render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left'
+      = render 'shared/aspect_dropdown', :selected_aspects => contact_proxy(friend).aspects, :person => friend.person, :hang => 'left'
     - else
-      = render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left', :extra_class => 'inviter', :service_uid => friend.uid
+      = render 'shared/aspect_dropdown', :selected_aspects => contact_proxy(friend).aspects, :person => friend.person, :hang => 'left', :dropdown_class => 'inviter', :service_uid => friend.uid
 
   - if friend.on_diaspora?
     = person_image_link(friend.person, :size => :thumb_small)
diff --git a/app/views/shared/_aspect_dropdown.html.haml b/app/views/shared/_aspect_dropdown.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..33c9ae81108d5a9be816f12bd7532f499a902683
--- /dev/null
+++ b/app/views/shared/_aspect_dropdown.html.haml
@@ -0,0 +1,21 @@
+-#   Copyright (c) 2011, Diaspora Inc.  This file is
+-#   licensed under the Affero General Public License version 3 or later.  See
+-#   the COPYRIGHT file.
+
+.dropdown{:class => ["hang_#{hang}", defined?(dropdown_class) && dropdown_class]}
+  .button.toggle{:class => ("in_aspects" if selected_aspects.size > 0)}
+    - if selected_aspects.size == 1
+      = selected_aspects.first.name
+    - else
+      = t('.toggle', :count => selected_aspects.size)
+    &#9660;
+
+  .wrapper
+    %ul.dropdown_list{:unSelectable => 'on', 'data-person_id' => (person.id if defined?(person) && person), 'data-service_uid' => (service_uid if defined?(service_uid))}
+      - for aspect in all_aspects
+        = aspect_dropdown_list_item(aspect, selected_aspects.include?(aspect) )
+
+      - if (dropdown_may_create_new_aspect && defined?(person) && person)
+        %li.newItem
+          .add_aspect
+            = link_to t('contacts.index.add_a_new_aspect'), new_aspect_path(:person_id => person.id), :rel => 'facebox'
diff --git a/app/views/shared/_publisher.html.haml b/app/views/shared/_publisher.html.haml
index d899c3d02a64d83ac969991682323652c11eba38..3b534281a64ff6677e146c31f78f543ff7055ec4 100644
--- a/app/views/shared/_publisher.html.haml
+++ b/app/views/shared/_publisher.html.haml
@@ -29,12 +29,6 @@
         = hidden_field_tag 'aspect_ids[]', aspect_id.to_s
 
       .options_and_submit
-        - if aspect == :profile
-          .mention_helper
-            .badges
-              %i= t('.publishing_to')
-              = aspect_badges(aspects_with_person, :link => false)
-
         .public_toggle
           %span#publisher_service_icons
             = t("shared.publisher.click_to_share_with")
@@ -45,6 +39,7 @@
               - for service in current_user.services
                 = image_tag "social_media_logos/#{service.provider}-16x16.png", :title => service.provider.titleize, :class => "service_icon dim", :id =>"#{service.provider}", :maxchar => "#{service.class::MAX_CHARACTERS}"
             = link_to (image_tag "icons/monotone_wrench_settings.png"), "#question_mark_pane", :class => 'question_mark', :rel => 'facebox', :title => t('shared.public_explain.manage')
+          = render "shared/aspect_dropdown", :selected_aspects => selected_aspects, :hang => 'left'
           = status.submit t('.share'), :disable_with => t('.posting'), :class => 'button creation', :tabindex => 2
 
           .facebox_content
diff --git a/app/views/status_messages/bookmarklet.html.haml b/app/views/status_messages/bookmarklet.html.haml
index 134d01303c74455c1d6d897b0a6f220fd22a846f..3854a9255ff4102df79a6b92dbf32f5a09b6fa76 100644
--- a/app/views/status_messages/bookmarklet.html.haml
+++ b/app/views/status_messages/bookmarklet.html.haml
@@ -10,7 +10,7 @@
 
 :javascript
   Diaspora.widgets.i18n.loadLocale(#{get_javascript_strings_for(current_user.language).to_json}, "#{current_user.language}");
-  $(document).ready(function() 
+  $(document).ready(function()
     {
       Publisher.open();
       $("#publisher").bind('ajax:success', function(){
@@ -24,7 +24,7 @@
       if ("#{params[:notes]}".length > 0){
         contents = contents + " - #{params[:notes]}";
       }
-      
+
       $("#publisher #status_message_fake_text").val(contents);
       $("#publisher #status_message_text").val(contents);
       $('input.button')[0].removeAttribute('disabled');
@@ -34,5 +34,5 @@
   .span-15.last
     %h4
       =t('bookmarklet.post_something')
-    = render :partial => 'shared/publisher', :locals => { :aspect => :profile, :aspects_with_person => @aspects,  :aspect_ids => @aspect_ids}
+    = render :partial => 'shared/publisher', :locals => { :aspect => :profile, :selected_aspects => @aspects,  :aspect_ids => @aspect_ids }
 
diff --git a/app/views/status_messages/new.haml b/app/views/status_messages/new.haml
index acc8b16772c3e1355a4c4a1be290cd45cd8a2c51..003073df18bb0ee841c83ed6af077cf7b82b86d9 100644
--- a/app/views/status_messages/new.haml
+++ b/app/views/status_messages/new.haml
@@ -6,7 +6,7 @@
 = javascript_include_tag "publisher.js"
 
 :javascript
-  $(document).ready(function() 
+  $(document).ready(function()
     {
       var person = {name: '#{@person.name}', handle: '#{@person.diaspora_handle}' };
       Publisher.autocompletion.onSelect($("#status_message_fake_text"),person,'#{@person.name}');
@@ -21,5 +21,5 @@
       %h3
         = t('.mentioning', :person => @person.name)
 
-    = render :partial => 'shared/publisher', :locals => { :aspect => @aspect, :aspect_ids => @aspect_ids, :aspects_with_person => @aspects_with_person, :person => @person}
+    = render :partial => 'shared/publisher', :locals => { :aspect => @aspect, :aspect_ids => @aspect_ids, :selected_aspects => @aspects_with_person, :person => @person}
 
diff --git a/config/assets.yml b/config/assets.yml
index f45144dbf85c84f58d44f8cce27c1047717fa316..62a75ae4bbdaa6ca42216251499d5f61df93b204 100644
--- a/config/assets.yml
+++ b/config/assets.yml
@@ -42,6 +42,7 @@ javascripts:
     - public/javascripts/stream.js
     - public/javascripts/content-updater.js
     - public/javascripts/search.js
+    - public/javascripts/aspects-dropdown.js
     - public/javascripts/contact-edit.js
     - public/javascripts/contact-list.js
     - public/javascripts/aspect-sorting.js
diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml
index 93efc0d8ba4eb11980c43d99fefea39018ea4266..700fb2585aa3f9321f98d213bed1717118d3322d 100644
--- a/config/locales/diaspora/en.yml
+++ b/config/locales/diaspora/en.yml
@@ -180,14 +180,6 @@ en:
       success: "Successfully removed person from aspect"
       failure: "Failed to remove person from aspect"
       no_membership: "Could not find the selected person in that aspect"
-    aspect_dropdown:
-      add_to_aspect: "Add to aspect"
-      toggle:
-        zero: "Add to aspect"
-        one: "In %{count} aspect"
-        few: "In %{count} aspects"
-        many: "In %{count} aspects"
-        other: "In %{count} aspects"
 
   bookmarklet:
     heading: "Bookmarklet"
@@ -653,6 +645,14 @@ en:
       not_on_diaspora: "Not yet on Diaspora"
 
   shared:
+    aspect_dropdown:
+      add_to_aspect: "Add to aspect"
+      toggle:
+        zero: "Add to aspect"
+        one: "In %{count} aspect"
+        few: "In %{count} aspects"
+        many: "In %{count} aspects"
+        other: "In %{count} aspects"
     publisher:
       posting: "Posting..."
       share: "Share"
diff --git a/features/posts.feature b/features/posts.feature
index 95a6436eb63d50c12fd33498bca6c0354240a9d0..b95cea3cbae7dca3e406980d84b9a2b2f5b97f6b 100644
--- a/features/posts.feature
+++ b/features/posts.feature
@@ -154,7 +154,8 @@ Feature: posting
         And I click "Mention" button
         And I expand the publisher in the modal window
         And I append "I am eating a yogurt" to the publisher
-        And I follow "DidntPostTo" within "#publisher" in the modal window
+        And I press the aspect dropdown in the modal window
+        And I toggle the aspect "DidntPostTo" in the modal window
         And I press "Share" in the modal window
         And I am on the aspects page
         And I follow "<aspect>" within "#aspect_nav"
diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb
index 08b99dd746b9f2f7c4978b3d62de2712e8097f91..594ffc2f6dcb8c7c7e5f0be26dca5f09978e9727 100644
--- a/features/step_definitions/custom_web_steps.rb
+++ b/features/step_definitions/custom_web_steps.rb
@@ -11,6 +11,15 @@ And /^I expand the publisher$/ do
     ')
 end
 
+When /^I press the aspect dropdown$/ do
+  find('.dropdown .button').click
+end
+
+And /^I toggle the aspect "([^"]*)"$/ do |aspect_name|
+  aspect = @me.aspects.where(:name => aspect_name).first
+  find("li[data-aspect_id='#{aspect.id}']").click
+end
+
 Then /^the publisher should be collapsed$/ do
 	find("#publisher")["class"].should include("closed")
 end
diff --git a/public/javascripts/aspects-dropdown.js b/public/javascripts/aspects-dropdown.js
new file mode 100644
index 0000000000000000000000000000000000000000..5aed7eeb9c5ef0adf5ffbaecb4797548829db6e5
--- /dev/null
+++ b/public/javascripts/aspects-dropdown.js
@@ -0,0 +1,33 @@
+//   Copyright (c) 2011, Diaspora Inc.  This file is
+//   licensed under the Affero General Public License version 3 or later.  See
+//   the COPYRIGHT file.
+
+var AspectsDropdown = {
+  updateNumber: function(dropdown, personId, number, inAspectClass){
+    var button = dropdown.parents(".dropdown").children('.button.toggle'),
+        replacement;
+
+    if (number == 0) {
+      button.removeClass(inAspectClass);
+      replacement = Diaspora.widgets.i18n.t("aspect_dropdown.toggle.zero");
+    }else if (number == 1) { 
+      button.addClass(inAspectClass);
+      replacement = dropdown.find(".selected").first().text();
+    }else if (number < 3) {
+      replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.few', { count: number.toString()})
+    }else if (number > 3) {
+      replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.many', { count: number.toString()})
+    }else {
+      //the above one are a tautology, but I want to have them here once for once we figure out a neat way i18n them
+      replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.other', { count: number.toString()})
+    }
+
+    button.html(replacement + ' â–¼');
+  },
+  
+  toggleCheckbox: 
+    function(check){
+      check.parent('li').toggleClass('selected');
+    },
+};
+
diff --git a/public/javascripts/contact-edit.js b/public/javascripts/contact-edit.js
index 76795ba3d1e364aaea1457d5c71082464fa96383..9480257aabcd156c1b0aeeb71d50ecb13a399aaa 100644
--- a/public/javascripts/contact-edit.js
+++ b/public/javascripts/contact-edit.js
@@ -4,7 +4,8 @@
 
 var ContactEdit = {
   init: function(){
-    $('.dropdown .dropdown_list > li').live('click', function(evt){
+    $.extend(ContactEdit, AspectsDropdown);
+    $('.dropdown.aspect_membership .dropdown_list > li').live('click', function(evt){
       ContactEdit.processClick($(this), evt);
     });
   },
@@ -44,33 +45,11 @@ var ContactEdit = {
       "_method": (selected) ? "DELETE" : "POST"
     }, function(aspectMembership) {
       li.removeClass('loading')
-      li.toggleClass("selected");
-      ContactEdit.updateNumber(li.closest(".dropdown_list"), li.parent().data("person_id"), aspectMembership.aspect_ids.length);
+      ContactEdit.toggleCheckbox(checkbox);
+      ContactEdit.updateNumber(li.closest(".dropdown_list"), li.parent().data("person_id"), aspectMembership.aspect_ids.length, 'in_aspect');
       Diaspora.widgets.publish("aspectDropdown/updated", [li.parent().data("person_id"), li.parents(".dropdown").parent(".right").html()]);
     });
   },
-
-  updateNumber: function(dropdown, personId, number){
-    var button = dropdown.parents(".dropdown").children('.button.toggle'),
-        replacement;
-
-    if (number == 0) {
-      button.removeClass("in_aspects");
-      replacement = Diaspora.widgets.i18n.t("aspect_dropdown.toggle.zero");
-    }else if (number == 1) {
-      button.addClass("in_aspects");
-      replacement = dropdown.find(".selected").first().text();
-    }else if (number < 3) {
-      replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.few', { count: number.toString()})
-    }else if (number > 3) {
-      replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.many', { count: number.toString()})
-    }else {
-      //the above one are a tautology, but I want to have them here once for once we figure out a neat way i18n them
-      replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.other', { count: number.toString()})
-    }
-
-    button.html(replacement + ' â–¼');
-  },
 };
 
 $(document).ready(function(){
diff --git a/public/javascripts/publisher.js b/public/javascripts/publisher.js
index 77950f6e2636317f725239a9a6547fb97723a400..d3265c2eca6efbf110352c47c24dba8283b14bff 100644
--- a/public/javascripts/publisher.js
+++ b/public/javascripts/publisher.js
@@ -315,6 +315,12 @@ var Publisher = {
       '<input id="services_" name="services[]" type="hidden" value="'+provider+'">');
     }
   },
+  selectedAspectIds: function() {
+    var aspects = $('#publisher [name="aspect_ids[]"]');
+    var aspectIds = [];
+    aspects.each(function() { aspectIds.push( parseInt($(this).attr('value'))); });
+    return aspectIds;
+  },
   toggleAspectIds: function(aspectId) {
     var hidden_field = $('#publisher [name="aspect_ids[]"][value="'+aspectId+'"]');
     if(hidden_field.length > 0){
@@ -338,18 +344,25 @@ var Publisher = {
       $('#status_message_fake_text').charCount({allowed: min, warning: min/10 });
     }
   },
-
   bindAspectToggles: function() {
-    $('#publisher .aspect_badge').bind("click", function(){
-      var unremovedAspects = $(this).parent().children('.aspect_badge').length - $(this).parent().children(".aspect_badge.removed").length;
-      if(!$(this).hasClass('removed') && ( unremovedAspects == 1 )){
-        alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect'));
-      }else{
-        Publisher.toggleAspectIds($(this).children('a').attr('data-guid'));
-        $(this).toggleClass("removed");
-      }
+    $('#publisher .dropdown .dropdown_list li').bind("click", function(evt){
+      var li = $(this),
+          button = li.find('.button'),
+          checkbox = li.find('img.check');
+      if(button.hasClass('disabled')) { return; }
+
+      AspectsDropdown.toggleCheckbox(checkbox);
+      AspectsDropdown.updateNumber(li.closest(".dropdown_list"), null, li.parent().find('li.selected').length, '');
+
+      Publisher.toggleAspectIds(li.attr('data-aspect_id'));
     });
   },
+  beforeSubmit: function(){
+    if($("#publisher .content_creation form #aspect_ids_").length == 0){
+      alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect'));
+      return false;
+    }
+  },
   onSubmit: function(data, json, xhr){
     $("#photodropzone").find('li').remove();
     $("#publisher textarea").removeClass("with_attachments").css('paddingBottom', '');
@@ -363,7 +376,21 @@ var Publisher = {
     }
   },
   onSuccess: function(data, json, xhr){
-    ContentUpdater.addPostToStream(json.html);
+    var isPostVisible = false;
+    var postedTo = Publisher.selectedAspectIds();
+    $.each(AspectFilters.selectedGUIDS, function(index, value){
+      if(postedTo.indexOf(parseInt(value))>-1)
+        isPostVisible = true;
+    });
+
+    if(isPostVisible)
+      ContentUpdater.addPostToStream(json.html);
+    else
+      Diaspora.widgets.flashes.render({
+        success: true,
+        message: Diaspora.widgets.i18n.t('successfully_posted_message_to_an_aspects_that_is_not_visible')
+      });
+
     //collapse publisher
     Publisher.close();
     Publisher.clear();
@@ -371,6 +398,7 @@ var Publisher = {
     Stream.setUpAudioLinks();
   },
   bindAjax: function(){
+    Publisher.form().bind('submit', Publisher.beforeSubmit);
     Publisher.form().bind('ajax:loading', Publisher.onSubmit);
     Publisher.form().bind('ajax:failure', Publisher.onFailure);
     Publisher.form().bind('ajax:success', Publisher.onSuccess);
diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass
index 9fcb6b13b85626a5e5b1239727c08ec40c3bb5b8..78026adb135ae70afc5c8d399f96e23f36273401 100644
--- a/public/stylesheets/sass/application.sass
+++ b/public/stylesheets/sass/application.sass
@@ -765,8 +765,12 @@ a.paginate, #infscr-loading
   &:hover
     :border 1px solid #1C6D99
 
-#main_stream .pagination
-  :display none
+#main_stream
+  :position relative
+  :z-index 0
+
+  .pagination
+    :display none
 
 .request_buttons
   :position absolute
@@ -866,7 +870,7 @@ label
 
 #publisher
 
-  :z-index 0
+  :z-index 1
   :color #999
   :position relative
   :margin
@@ -930,6 +934,9 @@ label
     .public_toggle
       :text
         :align right
+      .dropdown
+        :text
+          :align left
 
     #publisher_service_icons
       :position relative
@@ -945,6 +952,7 @@ label
       :position relative
       :top -2px
 
+
   .content_creation
     :margin
       :top 1em