diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb
index a4566b44de112ead60ea7486942f75382bb9621d..d486f2001211570d36939aad03be00af26bfaf89 100644
--- a/app/controllers/publics_controller.rb
+++ b/app/controllers/publics_controller.rb
@@ -56,12 +56,7 @@ class PublicsController < ApplicationController
     end
 
     @user = person.owner
-     
-    begin
-      @user.receive_salmon(params[:xml])
-    rescue Exception => e
-      Rails.logger.info("bad salmon: #{e.message}")
-    end
+    Resque.enqueue(Jobs::ReceiveSalmon, @user.id, params[:xml])
 
     render :nothing => true, :status => 200
   end
diff --git a/app/models/jobs/receive_salmon.rb b/app/models/jobs/receive_salmon.rb
new file mode 100644
index 0000000000000000000000000000000000000000..229e45e3c85a415d7571821a74fdd9428989f4c7
--- /dev/null
+++ b/app/models/jobs/receive_salmon.rb
@@ -0,0 +1,10 @@
+module Jobs
+  class ReceiveSalmon
+    @queue = :receive
+    def self.perform(user_id, xml)
+      user = User.find(user_id)
+      user.receive_salmon(xml)
+    end
+  end
+end
+
diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb
index 9b4e452efe6afd95048026e7013de5aaab98352a..ece0002cc025325bf04a69e7595bccea1ae1b8f6 100644
--- a/config/initializers/resque.rb
+++ b/config/initializers/resque.rb
@@ -1,4 +1,3 @@
-Dir[File.join(Rails.root, 'app', 'jobs', '*.rb')].each { |file| require file }
 #config = YAML::load(File.open("#{Rails.root}/config/redis.yml"))
 #Resque.redis = Redis.new(:host => config['host'], :port => config['port'])
 require 'resque'
diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb
index c729c95eb86a89d9231306626db89317718f9cdc..58a6e1b062f04caf6b99c5702acb90a99c65bcdd 100644
--- a/spec/controllers/publics_controller_spec.rb
+++ b/spec/controllers/publics_controller_spec.rb
@@ -7,42 +7,20 @@ require 'spec_helper'
 
 describe PublicsController do
   render_views
-  let!(:user) { make_user }
-  let!(:user2) { make_user }
-  let!(:aspect1) { user.aspects.create(:name => "foo") }
-  let!(:aspect2) { user2.aspects.create(:name => "far") }
-  let!(:aspect2) { user2.aspects.create(:name => 'disciples') }
-  let!(:req) { user2.send_contact_request_to(user.person, aspect2) }
-  let!(:xml) { user2.salmon(req).xml_for(user.person) }
+  let(:user) { make_user }
   let(:person){Factory(:person)}
 
-  before do
-    sign_in :user, user
-
-  end
-  
   describe '#receive' do
-    before do
-      EventMachine::HttpRequest.stub!(:new).and_return(FakeHttpRequest.new(:success))
-    end
-
-    context 'success cases' do
-      before do
-        @person_mock = mock()
-        @user_mock = mock()
-        @user_mock.stub!(:receive_salmon).and_return(true)
-        @person_mock.stub!(:owner_id).and_return(true)
-        @person_mock.stub!(:owner).and_return(@user_mock)
-        Person.stub!(:first).and_return(@person_mock)
-      end
+    let(:xml) { "<walruses></walruses>" }
+     context 'success cases' do
       it 'should 200 on successful receipt of a request' do
         post :receive, :id =>user.person.id, :xml => xml
         response.code.should == '200'
       end
 
-      it 'should have the xml processed as salmon on success' do
-        @user_mock.should_receive(:receive_salmon).and_return(true)
-        post :receive, :id => user.person.id, :xml => xml
+      it 'enqueues a receive job' do
+        Resque.should_receive(:enqueue).with(Jobs::ReceiveSalmon, user.id, xml).once
+        post :receive, :id =>user.person.id, :xml => xml
       end
     end
 
@@ -55,8 +33,8 @@ describe PublicsController do
       post :receive, :id => person.id, :xml => xml
       response.code.should == '404'
     end
-  end
 
+  end
 
   describe '#hcard' do
     it 'queries by person id' do
@@ -97,33 +75,4 @@ describe PublicsController do
       response.should be_not_found
     end
   end
-
-  context 'intergration tests that should not be in this file' do
-    describe 'contact requests' do
-      before do
-        req.delete
-        user2.reload
-        user2.pending_requests.count.should be 1
-      end
-
-      it 'should accept a post from another node and save the information' do
-        pending
-        message = user2.build_post(:status_message, :message => "hi")
-
-        connect_users(user, aspect1, user2, aspect2)
-
-        user.reload
-        user.visible_post_ids.include?(message.id).should be false
-
-        xml1 = user2.salmon(message).xml_for(user.person)
-
-        EM::run{
-          post :receive, :id => user.person.id, :xml => xml1
-          EM.stop
-        }
-        user.reload
-        user.visible_post_ids.include?(message.id).should be true
-      end
-    end
-  end
 end
diff --git a/spec/models/jobs/receive_salmon_spec.rb b/spec/models/jobs/receive_salmon_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c4e66fffe1ba4fab853d13294f736fcd1a5988a8
--- /dev/null
+++ b/spec/models/jobs/receive_salmon_spec.rb
@@ -0,0 +1,19 @@
+require 'spec/spec_helper'
+
+describe Jobs::ReceiveSalmon do
+  before do
+    @user = make_user
+    @xml = '<xml></xml>'
+    User.stub(:find){ |id|
+      if id == @user.id
+        @user
+      else
+        nil
+      end
+    }
+  end
+  it 'calls receive_salmon' do
+    @user.should_receive(:receive_salmon).with(@xml).once
+    Jobs::ReceiveSalmon.perform(@user.id, @xml)
+  end
+end