diff --git a/lib/post_destroyer.rb b/lib/post_destroyer.rb
index 68ae562a142..0fdbecaecab 100644
--- a/lib/post_destroyer.rb
+++ b/lib/post_destroyer.rb
@@ -53,26 +53,25 @@ class PostDestroyer
   # When a post is properly deleted. Well, it's still soft deleted, but it will no longer
   # show up in the topic
   def staff_destroyed
-    # the topic may be trashed, skip it
-    return unless @post.topic
-
     Post.transaction do
 
-      # Update the last post id to the previous post if it exists
-      last_post = Post.where("topic_id = ? and id <> ?", @post.topic_id, @post.id).order('created_at desc').limit(1).first
-      if last_post.present?
-        @post.topic.update_attributes(last_posted_at: last_post.created_at,
-                                      last_post_user_id: last_post.user_id,
-                                      highest_post_number: last_post.post_number)
+      if @post.topic
+        # Update the last post id to the previous post if it exists
+        last_post = Post.where("topic_id = ? and id <> ?", @post.topic_id, @post.id).order('created_at desc').limit(1).first
+        if last_post.present?
+          @post.topic.update_attributes(last_posted_at: last_post.created_at,
+                                        last_post_user_id: last_post.user_id,
+                                        highest_post_number: last_post.post_number)
 
-        # If the poster doesn't have any other posts in the topic, clear their posted flag
-        unless Post.exists?(["topic_id = ? and user_id = ? and id <> ?", @post.topic_id, @post.user_id, @post.id])
-          TopicUser.where(topic_id: @post.topic_id, user_id: @post.user_id).update_all 'posted = false'
+          # If the poster doesn't have any other posts in the topic, clear their posted flag
+          unless Post.exists?(["topic_id = ? and user_id = ? and id <> ?", @post.topic_id, @post.user_id, @post.id])
+            TopicUser.where(topic_id: @post.topic_id, user_id: @post.user_id).update_all 'posted = false'
+          end
         end
-      end
 
-      # Feature users in the topic
-      Jobs.enqueue(:feature_topic_users, topic_id: @post.topic_id, except_post_id: @post.id)
+        # Feature users in the topic
+        Jobs.enqueue(:feature_topic_users, topic_id: @post.topic_id, except_post_id: @post.id)
+      end
 
       @post.post_actions.each do |pa|
         pa.trash!(@user)
@@ -83,7 +82,7 @@ class PostDestroyer
 
       @post.trash!(@user)
 
-      Topic.reset_highest(@post.topic_id)
+      Topic.reset_highest(@post.topic_id) if @post.topic
 
       @post.update_flagged_posts_count
 
@@ -98,7 +97,7 @@ class PostDestroyer
       # Remove any notifications that point to this deleted post
       Notification.delete_all topic_id: @post.topic_id, post_number: @post.post_number
 
-      @post.topic.trash!(@user) if @post.post_number == 1
+      @post.topic.trash!(@user) if @post.topic and @post.post_number == 1
     end
   end
 
diff --git a/spec/components/post_destroyer_spec.rb b/spec/components/post_destroyer_spec.rb
index 5a404d59bc5..1a90601a1e0 100644
--- a/spec/components/post_destroyer_spec.rb
+++ b/spec/components/post_destroyer_spec.rb
@@ -8,6 +8,7 @@ describe PostDestroyer do
   end
 
   let(:moderator) { Fabricate(:moderator) }
+  let(:admin) { Fabricate(:admin) }
   let(:post) { create_post }
 
   describe 'destroy_old_stubs' do
@@ -56,9 +57,6 @@ describe PostDestroyer do
 
   describe 'basic destroying' do
 
-    let(:moderator) { Fabricate(:moderator) }
-    let(:admin) { Fabricate(:admin) }
-
     context "as the creator of the post" do
       before do
         @orig = post.cooked
@@ -146,6 +144,37 @@ describe PostDestroyer do
 
   end
 
+  context "deleting a post belonging to a deleted topic" do
+    let!(:topic) { post.topic }
+
+    before do
+      topic.trash!(admin)
+      post.reload
+    end
+
+    context "as a moderator" do
+      before do
+        PostDestroyer.new(moderator, post).destroy
+      end
+
+      it "deletes the post" do
+        post.deleted_at.should be_present
+        post.deleted_by.should == moderator
+      end
+    end
+
+    context "as an admin" do
+      before do
+        PostDestroyer.new(admin, post).destroy
+      end
+
+      it "deletes the post" do
+        post.deleted_at.should be_present
+        post.deleted_by.should == admin
+      end
+    end
+  end
+
   describe 'after delete' do
 
     let!(:coding_horror) { Fabricate(:coding_horror) }