diff --git a/app/models/post.rb b/app/models/post.rb
index 6a3b8fff114..2eb92b607b7 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -14,7 +14,8 @@ class Post < ActiveRecord::Base
     FLAG_THRESHOLD_REACHED_AGAIN = 2
   end
 
-  versioned
+  versioned if: :raw_changed?
+
   rate_limit
   acts_as_paranoid
 
@@ -271,9 +272,11 @@ class Post < ActiveRecord::Base
   # A list of versions including the initial version
   def all_versions
     result = []
-    result << { number: 1, display_username: user.name, created_at: created_at }
+    result << { number: 1, display_username: user.username, created_at: created_at }
     versions.order(:number).includes(:user).each do |v|
-      result << { number: v.number, display_username: v.user.name, created_at: v.created_at }
+      if v.user.present?
+        result << { number: v.number, display_username: v.user.username, created_at: v.created_at }
+      end
     end
     result
   end
diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb
index 1e11b9ef33a..7ae90800ccd 100644
--- a/spec/models/post_spec.rb
+++ b/spec/models/post_spec.rb
@@ -41,6 +41,32 @@ describe Post do
 
   end
 
+  describe "versions and deleting/recovery" do
+    let(:post) { Fabricate(:post, post_args) }
+
+    before do
+      post.destroy
+      post.reload
+    end
+
+    it "doesn't create a new version when deleted" do
+      post.versions.count.should == 0
+    end
+
+    describe "recovery" do
+      before do
+        post.recover
+        post.reload
+      end
+
+      it "doesn't create a new version when recovered" do
+        post.versions.count.should == 0
+      end
+    end
+
+  end
+
+
   describe 'post uniqueness' do
 
     context "disabled" do