diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb
index 03567166e6eabf550afc6f8fa256734f07791650..89c774ffd8934af75eb5c9c55bc7659f909fc4eb 100644
--- a/app/controllers/invitations_controller.rb
+++ b/app/controllers/invitations_controller.rb
@@ -4,7 +4,7 @@
 
 class InvitationsController < Devise::InvitationsController
 
-  before_filter :check_token, :only => [:edit] 
+  before_filter :check_token, :only => [:edit]
 
 
   def create
@@ -27,7 +27,7 @@ class InvitationsController < Devise::InvitationsController
         flash[:notice] = I18n.t('invitations.create.sent') + good_emails.join(', ')
       end
 
-    redirect_to :back 
+    redirect_to :back
   end
 
   def update
diff --git a/app/models/user.rb b/app/models/user.rb
index 781bf83043c63baf41277e9a302634e69ccdb98c..7979cbed2c8ddebb9d69ceafdc86347958271ab7 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -10,7 +10,7 @@ class User
   include Diaspora::UserModules
   include Encryptor::Private
   include ActionView::Helpers::TextHelper
-  
+
   plugin MongoMapper::Devise
 
   devise :invitable, :database_authenticatable, :registerable,
@@ -141,17 +141,6 @@ class User
   end
 
   ######## Posting ########
-  def post(class_name, opts = {})
-    post = build_post(class_name, opts)
-
-    if post.save
-      raise 'MongoMapper failed to catch a failed save' unless post.id
-      add_to_streams(post, opts[:to])
-      dispatch_post(post, :to => opts[:to])
-    end
-    post
-  end
-
   def build_post(class_name, opts = {})
     opts[:person] = self.person
     opts[:diaspora_handle] = opts[:person].diaspora_handle
@@ -168,7 +157,7 @@ class User
     push_to_aspects(post, aspects_from_ids(aspect_ids))
 
     if post.public && post.respond_to?(:message)
-      
+
       if opts[:url] && post.photos.count > 0
 
         message = truncate(post.message, :length => (140 - (opts[:url].length + 1)))
@@ -201,14 +190,14 @@ class User
     if twitter_consumer_secret.blank? || twitter_consumer_secret.blank?
       Rails.logger.info "you have a blank twitter key or secret.... you should look into that"
     end
-    
+
     Twitter.configure do |config|
       config.consumer_key = twitter_key
       config.consumer_secret = twitter_consumer_secret
       config.oauth_token = service.access_token
       config.oauth_token_secret = service.access_secret
     end
-    
+
     Twitter.update(message)
   end
 
@@ -273,7 +262,7 @@ class User
     # calling nil? performs a necessary evaluation.
     if person.owner_id
       Rails.logger.info("event=push_to_person route=local sender=#{self.diaspora_handle} recipient=#{person.diaspora_handle} payload_type=#{post.class}")
-      Jobs::Receive.perform(person.owner_id, post.to_diaspora_xml, self.person.id)
+      Resque.enqueue(Jobs::Receive, person.owner_id, post.to_diaspora_xml, self.person.id)
     else
       xml = salmon.xml_for person
       Rails.logger.info("event=push_to_person route=remote sender=#{self.diaspora_handle} recipient=#{person.diaspora_handle} payload_type=#{post.class}")
@@ -281,24 +270,12 @@ class User
     end
   end
 
-
-
   def salmon(post)
     created_salmon = Salmon::SalmonSlap.create(self, post.to_diaspora_xml)
     created_salmon
   end
 
   ######## Commenting  ########
-  def comment(text, options = {})
-    comment = build_comment(text, options)
-
-    if comment.save
-      raise 'MongoMapper failed to catch a failed save' unless comment.id
-      dispatch_comment comment
-    end
-    comment
-  end
-
   def build_comment(text, options = {})
     comment = Comment.new(:person_id => self.person.id,
                           :diaspora_handle => self.person.diaspora_handle,
@@ -321,7 +298,7 @@ class User
       #push DOWNSTREAM (to original audience)
       Rails.logger.info "event=dispatch_comment direction=downstream user=#{self.diaspora_handle} comment=#{comment.id}"
       aspects = aspects_with_post(comment.post_id)
-    
+
       #just socket to local users, as the comment has already
       #been associated and saved by post owner
       #  (we'll push to all of their aspects for now, the comment won't
diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb
index 52284f429a2e9c71bcddbf5df8dc3f7917bb6487..58a6e1b062f04caf6b99c5702acb90a99c65bcdd 100644
--- a/spec/controllers/publics_controller_spec.rb
+++ b/spec/controllers/publics_controller_spec.rb
@@ -14,7 +14,6 @@ describe PublicsController do
     let(:xml) { "<walruses></walruses>" }
      context 'success cases' do
       it 'should 200 on successful receipt of a request' do
-        Resque.should_receive(:enqueue)
         post :receive, :id =>user.person.id, :xml => xml
         response.code.should == '200'
       end
diff --git a/spec/helper_methods.rb b/spec/helper_methods.rb
index c4718aa1d1abb83342c84ee7767ff6a4b51ae123..722a199e6e056da9249e5fabf6927b60f099428f 100644
--- a/spec/helper_methods.rb
+++ b/spec/helper_methods.rb
@@ -22,27 +22,37 @@ module HelperMethods
     user.stub!(:push_to_person)
   end
 
+  def fantasy_resque
+    former_value = $process_queue
+    $process_queue = true
+    result = yield
+    $process_queue = former_value
+    result
+  end
+
   def connect_users(user1, aspect1, user2, aspect2)
-    user1.send_contact_request_to(user2.person, aspect1)
+    fantasy_resque do
+      user1.send_contact_request_to(user2.person, aspect1)
 
-    user1.reload
-    aspect1.reload
-    user2.reload
-    aspect2.reload
+      user1.reload
+      aspect1.reload
+      user2.reload
+      aspect2.reload
 
-    new_request = user2.pending_requests.find_by_from_id!(user1.person.id)
+      new_request = user2.pending_requests.find_by_from_id!(user1.person.id)
 
-    user1.reload
-    aspect1.reload
-    user2.reload
-    aspect2.reload
+      user1.reload
+      aspect1.reload
+      user2.reload
+      aspect2.reload
 
-    user2.accept_and_respond( new_request.id, aspect2.id)
+      user2.accept_and_respond( new_request.id, aspect2.id)
 
-    user1.reload
-    aspect1.reload
-    user2.reload
-    aspect2.reload
+      user1.reload
+      aspect1.reload
+      user2.reload
+      aspect2.reload
+    end
   end
 
   def stub_success(address = 'abc@example.com', opts = {})
diff --git a/spec/lib/diaspora/exporter_spec.rb b/spec/lib/diaspora/exporter_spec.rb
index 538d58c07f0f01edc26691c163f9d2fbed26c33d..00791fd3b143f82e976c505e3cc7a638768e17ab 100644
--- a/spec/lib/diaspora/exporter_spec.rb
+++ b/spec/lib/diaspora/exporter_spec.rb
@@ -7,57 +7,63 @@ require File.join(Rails.root, 'lib/diaspora/exporter')
 
 describe Diaspora::Exporter do
 
-  let!(:user1) { make_user }
-  let!(:user2) { make_user }
-  let!(:user3) { make_user }
-
-  let!(:aspect) { user1.aspects.create(:name => "Old Work")   }
-  let(:aspect1) { user1.aspects.create(:name => "Work")   }
-  let(:aspect2) { user2.aspects.create(:name => "Family") }
-  let(:aspect3) { user3.aspects.create(:name => "Pivots") }
-
-  let!(:status_message1) { user1.post(:status_message, :message => "One", :public => true, :to => aspect1.id) }
-  let!(:status_message2) { user1.post(:status_message, :message => "Two", :public => true, :to => aspect1.id) }
-  let!(:status_message3) { user2.post(:status_message, :message => "Three", :public => false, :to => aspect2.id) }
+  before do
+    @user1 =  make_user
+    @user2 =  make_user
+    @user3 =  make_user
+
+    @aspect  =  @user1.aspects.create(:name => "Old Work")
+    @aspect1 =  @user1.aspects.create(:name => "Work")
+    @aspect2 =  @user2.aspects.create(:name => "Family")
+    @aspect3 =  @user3.aspects.create(:name => "Pivots")
+
+    @status_message1 =  @user1.post(:status_message, :message => "One", :public => true, :to => @aspect1.id)
+    @status_message2 =  @user1.post(:status_message, :message => "Two", :public => true, :to => @aspect1.id)
+    @status_message3 =  @user2.post(:status_message, :message => "Three", :public => false, :to => @aspect2.id)
+
+    @user1.reload
+    @user2.reload
+  end
 
-  let(:exported) { Nokogiri::XML(Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1)) }
+  def exported
+    Nokogiri::XML(Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(@user1))
+  end
 
   context '<user/>' do
-    let(:user_xml) {exported.xpath('//user').to_s}
+    before do
+      @user_xml = exported.xpath('//user').to_s
+    end
     it 'should include a users private key' do
-      user_xml.to_s.should include user1.serialized_private_key
+      @user_xml.to_s.should include @user1.serialized_private_key
     end
   end
 
   context '<aspects/>' do
-    let(:aspects_xml) {exported.xpath('//aspects').to_s}
-    it 'should include the aspect name' do
-
-    end
 
     it 'should include the post_ids' do
-      aspects_xml.should include status_message1.id.to_s
-      aspects_xml.should include status_message2.id.to_s
+      aspects_xml = exported.xpath('//aspects').to_s
+      aspects_xml.should include @status_message1.id.to_s
+      aspects_xml.should include @status_message2.id.to_s
     end
   end
 
   context '<contacts/>' do
 
     before do
-      connect_users(user1, aspect1, user3, aspect3)
-      user1.add_person_to_aspect(user3.person.id, aspect.id)
-      user1.reload
+      connect_users(@user1, @aspect1, @user3, @aspect3)
+      @user1.add_person_to_aspect(@user3.person.id, @aspect.id)
+      @user1.reload
     end
 
     let(:contacts_xml) {exported.xpath('//contacts').to_s}
     it 'should include a person id' do
-      contacts_xml.should include user3.person.id.to_s
+      contacts_xml.should include @user3.person.id.to_s
     end
 
     it 'should include an aspects names of all aspects they are in' do
       #contact specific xml needs to be tested
-      user1.contacts.find_by_person_id(user3.person.id).aspects.count.should > 0
-      user1.contacts.find_by_person_id(user3.person.id).aspects.each { |aspect|
+      @user1.contacts.find_by_person_id(@user3.person.id).aspects.count.should > 0
+      @user1.contacts.find_by_person_id(@user3.person.id).aspects.each { |aspect|
         contacts_xml.should include aspect.name
       }
     end
@@ -66,38 +72,38 @@ describe Diaspora::Exporter do
   context '<people/>' do
     let(:people_xml) {exported.xpath('//people').to_s}
     before do
-      connect_users(user1, aspect1, user3, aspect3)
-      user1.reload
+      connect_users(@user1, @aspect1, @user3, @aspect3)
+      @user1.reload
     end
     it 'should include persons id' do
-      people_xml.should include user3.person.id.to_s
+      people_xml.should include @user3.person.id.to_s
     end
 
     it 'should include their profile' do
-      people_xml.should include user3.person.profile.first_name 
-      people_xml.should include user3.person.profile.last_name 
+      people_xml.should include @user3.person.profile.first_name
+      people_xml.should include @user3.person.profile.last_name
     end
-    
+
     it 'should include their public key' do
-      people_xml.should include user3.person.exported_key
+      people_xml.should include @user3.person.exported_key
     end
 
     it 'should include their diaspora handle' do
-      people_xml.should include user3.person.diaspora_handle
+      people_xml.should include @user3.person.diaspora_handle
     end
   end
 
   context '<posts>' do
     let(:posts_xml) {exported.xpath('//posts').to_s}
     it 'should include many posts xml' do
-      posts_xml.should include status_message1.message
-      posts_xml.should include status_message2.message
-      posts_xml.should_not include status_message3.message
+      posts_xml.should include @status_message1.message
+      posts_xml.should include @status_message2.message
+      posts_xml.should_not include @status_message3.message
     end
-    
+
     it 'should include post created at time' do
       doc = Nokogiri::XML::parse(posts_xml)
-      Time.parse(doc.xpath('//posts/status_message/created_at').first.text).should == status_message1.created_at
+      Time.parse(doc.xpath('//posts/status_message/created_at').first.text).should == @status_message1.created_at
     end
   end
 end
diff --git a/spec/lib/diaspora/parser_spec.rb b/spec/lib/diaspora/parser_spec.rb
index 1f74d6c2517b6744199a61e795e2ca986b3bc477..f8baa96cdd9d8bbb59859943ca949c284d5f132a 100644
--- a/spec/lib/diaspora/parser_spec.rb
+++ b/spec/lib/diaspora/parser_spec.rb
@@ -49,7 +49,7 @@ describe Diaspora::Parser do
 
         Person.should_receive(:by_account_identifier).twice.and_return(new_person)
 
-        lambda { 
+        lambda {
           user.receive_salmon xml
         }.should change(Person, :count).by(1)
       end
@@ -60,8 +60,9 @@ describe Diaspora::Parser do
     it "should activate the Person if I initiated a request to that url" do
       user.send_contact_request_to(user2.person, aspect)
       request = user2.reload.pending_requests.find_by_to_id!(user2.person.id)
-      user2.accept_and_respond(request.id, aspect2.id)
-      
+      fantasy_resque do
+        user2.accept_and_respond(request.id, aspect2.id)
+      end
       user.reload
       aspect.reload
       new_contact = user.contact_for(user2.person)
diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb
index 414d8e3c19e921a0ca1919d1754a3f28a663b194..1db1d671f1604212a2eb444695e4cc99c1dc429d 100644
--- a/spec/misc_spec.rb
+++ b/spec/misc_spec.rb
@@ -29,7 +29,7 @@ describe 'making sure the spec runner works' do
       User.count.should == 2
       new_user.id.should_not == second_user.id
     end
-    
+
   end
 
   describe 'factories' do
@@ -37,7 +37,7 @@ describe 'making sure the spec runner works' do
       it 'does not save a built user' do
         Factory.build(:user).persisted?.should be_false
       end
-      
+
       it 'does not save a built person' do
         Factory.build(:person).persisted?.should be_false
       end
diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb
index be42ddbd525ef62341e92df2e57055e795b0237b..48b8ba604d1a819499458ecdea6f4faf6a847178 100644
--- a/spec/models/user/posting_spec.rb
+++ b/spec/models/user/posting_spec.rb
@@ -203,8 +203,22 @@ describe User do
 
         user.push_to_people(post, [user2.person, user3.person, remote_person])
       end
-
     end
 
+    describe '#push_to_person' do
+      before do
+        @salmon = user.salmon(post)
+        @xml = post.to_diaspora_xml
+      end
+      it 'enqueues receive for local contacts' do
+        Resque.should_receive(:enqueue).with(Jobs::Receive, user2.id, @xml, user.person.id)
+        user.push_to_person(@salmon, post, user2.person)
+      end
+      it 'calls the MessageHandler for remote contacts' do
+        person = Factory.create(:person)
+        MessageHandler.should_receive(:add_post_request).once
+        user.push_to_person(@salmon, post, person)
+      end
+    end
   end
 end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index e67237c3303ae359e5022c8f7334e327e2a8ac23..3e2cc23976da09d118db70987948a1850698f134 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -15,7 +15,7 @@ require 'webmock/rspec'
 include Devise::TestHelpers
 include WebMock::API
 include HelperMethods
-
+#
 # Requires supporting files with custom matchers and macros, etc,
 # in ./support/ and its subdirectories.
 Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
@@ -41,25 +41,57 @@ end
 
 module Resque
   def enqueue(klass, *args)
-    true
+    if $process_queue
+      klass.send(:perform, *args)
+    else
+      true
+    end
   end
 end
 
-class User  
-def send_contact_request_to(desired_contact, aspect)
-    request = Request.instantiate(:to => desired_contact, 
-                                  :from => self.person,
-                                  :into => aspect)
-    if request.save!
-      dispatch_request request
+ImageUploader.enable_processing = false
+class User
+  def send_contact_request_to(desired_contact, aspect)
+    fantasy_resque do
+      request = Request.instantiate(:to => desired_contact,
+                                    :from => self.person,
+                                    :into => aspect)
+      if request.save!
+        dispatch_request request
+      end
+      request
+    end
+  end
+
+  def post(class_name, opts = {})
+    fantasy_resque do
+      p = build_post(class_name, opts)
+      if p.save!
+        raise 'MongoMapper failed to catch a failed save' unless p.id
+
+        self.aspects.reload
+
+        add_to_streams(p, opts[:to])
+        dispatch_post(p, :to => opts[:to])
+      end
+      p
+    end
+  end
+
+  def comment(text, options = {})
+    fantasy_resque do
+      c = build_comment(text, options)
+      if c.save!
+        raise 'MongoMapper failed to catch a failed save' unless c.id
+        dispatch_comment(c)
+      end
+      c
     end
-    request
   end
 end
 
-ImageUploader.enable_processing = false
 
-  
+
 class FakeHttpRequest
   def initialize(callback_wanted)
     @callback = callback_wanted
@@ -82,12 +114,12 @@ class FakeHttpRequest
     self
   end
 
-  def post(opts = nil); 
-    self 
+  def post(opts = nil);
+    self
   end
 
   def get(opts = nil)
-    self 
+    self
   end
 
   def publish(opts = nil)