diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb
index a627d2498eb2b3cadd8d66651e8aa4d81103d1e3..32d9429462902f82f69ba29f0deed03c6708f585 100644
--- a/app/controllers/people_controller.rb
+++ b/app/controllers/people_controller.rb
@@ -148,7 +148,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}
   end
 
   private
diff --git a/app/helpers/aspect_global_helper.rb b/app/helpers/aspect_global_helper.rb
index 5d7b71c7602d3abcd594c513931f687b9ef5fe2f..675af2e9d71f9da72fc1577cd3673b17122371ec 100644
--- a/app/helpers/aspect_global_helper.rb
+++ b/app/helpers/aspect_global_helper.rb
@@ -65,8 +65,24 @@ module AspectGlobalHelper
     end
   end
 
-  def aspect_dropdown_list_item(aspect, contact, person)
-    checked = (contact.persisted? && contact.aspect_memberships.detect{ |am| am.aspect_id == aspect.id})
+  def aspectmembership_dropdown(contact, person, hang, aspect=nil)
+    @selected_aspects = []
+    if contact.persisted?
+      @selected_aspects = all_aspects.find_all{|aspect| contact.aspect_memberships.detect{ |am| am.aspect_id == aspect.id}}
+    end
+    @selected_aspects = [@selected_aspects] if @selected_aspects.kind_of? Aspect
+
+    render "shared/aspect_dropdown",
+      :contact => @contact,
+      :selected_aspects => @selected_aspects,
+      :person => person,
+      :hang => hang,
+      :dropdown_class => "aspect_membership",
+      :button_class => ("in_aspects" if @selected_aspects.size > 0),
+      :may_create_new_aspect => ( @aspect == :profile || @aspect == :tag || @aspect == :search || @aspect == :notification)
+  end
+
+  def aspect_dropdown_list_item(aspect, checked)
     klass = checked ? "selected" : ""
 
     str = <<LISTITEM
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 2be491c2d70cff6042c5d94d776e5aafdb8f9977..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}"}
-  .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)}
-      - for aspect in all_aspects
-        = aspect_dropdown_list_item(aspect, contact, person)
-
-      - if defined?(@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/contacts/sharing.haml b/app/views/contacts/sharing.haml
index 8e687f3618600add822495b9851e35bce1d04be4..7ac6883c56f52829d0c9819561c6720f03c7b4de 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'
+              = aspectmembership_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..c78a657cdd00fcca28423e0640425362000b0bad 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'
+                  = aspectmembership_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..0636c85a1f2138b4734baf6326e1bd1487e96597
--- /dev/null
+++ b/app/views/people/_aspect_membership_dropdown.haml
@@ -0,0 +1 @@
+= aspectmembership_dropdown(@contact, @person, 'left')
diff --git a/app/views/people/_relationship_action.haml b/app/views/people/_relationship_action.haml
index 9f70f9981c67981cdef285bca15cde28dc8eb0e4..744b6dc9b319a99f466d3e72891785bd72b3c1f2 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'
+  = aspectmembership_dropdown(contact, person, 'left')
 -else
   = t('people.person.thats_you')
diff --git a/app/views/shared/_aspect_dropdown.html.haml b/app/views/shared/_aspect_dropdown.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..13ddfa5c8685be6c0ad9938308cbeb426e92ecef
--- /dev/null
+++ b/app/views/shared/_aspect_dropdown.html.haml
@@ -0,0 +1,24 @@
+-#   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]}
+  - selected_aspects = [selected_aspects] if selected_aspects.kind_of? Aspect
+  - if !selected_aspects.kind_of? Array
+    - selected_aspects = all_aspects
+  .button.toggle{:class => (button_class if defined?(button_class))}
+    - 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)}
+      - for aspect in all_aspects
+        = aspect_dropdown_list_item(aspect, selected_aspects.include?(aspect) )
+
+      - if (defined?may_create_new_aspect && 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/aspect_memberships/_aspect_dropdown_list_item.haml b/app/views/shared/_aspect_dropdown_list_item.haml
similarity index 100%
rename from app/views/aspect_memberships/_aspect_dropdown_list_item.haml
rename to app/views/shared/_aspect_dropdown_list_item.haml
diff --git a/app/views/shared/_publisher.html.haml b/app/views/shared/_publisher.html.haml
index d899c3d02a64d83ac969991682323652c11eba38..0261c4ef05d4dac8021c09a99ba867e94d65572d 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 => Aspect.find(aspect_ids), :hang => 'left'
           = status.submit t('.share'), :disable_with => t('.posting'), :class => 'button creation', :tabindex => 2
 
           .facebox_content
diff --git a/config/assets.yml b/config/assets.yml
index d8a16bd96aaf006d7ec3f1fa6c8c2a0414f047d8..3533bc5199aaef08a9f9505ee52d9654c425dddd 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/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 b12dbb9d7d8327fccce61f3428e839570966cbc2..4b585f72fda1ddf0f772a6b460c76667899e5a48 100644
--- a/public/javascripts/contact-edit.js
+++ b/public/javascripts/contact-edit.js
@@ -4,38 +4,12 @@
 
 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);
     });
   },
 
-  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 + ' â–¼');
-  },
-  
-  toggleCheckbox: 
-    function(check){
-      check.parent('li').toggleClass('selected');
-    },
-
   processClick: function(li, evt){
     var button = li.find('.button');
     if(button.hasClass('disabled') || li.hasClass('newItem')){ return; }
@@ -50,13 +24,13 @@ var ContactEdit = {
       "_method": (selected) ? "DELETE" : "POST"
     }, function(aspectMembership) {
       ContactEdit.toggleCheckbox(checkbox);
-      ContactEdit.updateNumber(li.closest(".dropdown_list"), li.parent().data("person_id"), aspectMembership.aspect_ids.length);
+      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()]);
     });
   },
 };
 
-  $(document).ready(function(){
-    ContactEdit.init();
-  });
+$(document).ready(function(){
+  ContactEdit.init();
+});
diff --git a/public/javascripts/publisher.js b/public/javascripts/publisher.js
index 77950f6e2636317f725239a9a6547fb97723a400..5549da2d44869e4b6cad9c4171c60fc43cad0a51 100644
--- a/public/javascripts/publisher.js
+++ b/public/javascripts/publisher.js
@@ -340,16 +340,24 @@ var Publisher = {
   },
 
   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', '');
@@ -371,6 +379,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 d2c1cd02fad896c26002611d1482977b6680acb0..2a6ccff020a391b54478dd4168c0d31282df10dd 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