diff --git a/app/assets/javascripts/discourse/controllers/topic_controller.js.coffee b/app/assets/javascripts/discourse/controllers/topic_controller.js.coffee
index cd8101f27..43c4a9b23 100644
--- a/app/assets/javascripts/discourse/controllers/topic_controller.js.coffee
+++ b/app/assets/javascripts/discourse/controllers/topic_controller.js.coffee
@@ -304,10 +304,12 @@ Discourse.TopicController = Ember.ObjectController.extend Discourse.Presence,
     post.recover()
 
   deletePost: (post) ->
-    if post.get('user_id') is Discourse.get('currentUser.id')
+    # Moderators can delete posts. Regular users can only create a deleted at message.
+    if Discourse.get('currentUser.moderator')
+      post.set('deleted_at', new Date())
+    else
       post.set('cooked', Discourse.Utilities.cook(Em.String.i18n("post.deleted_by_author")))
       post.set('can_delete', false)
-    else
-      post.set('deleted_at', new Date())
+      post.set('version', post.get('version') + 1)
 
     post.delete()
diff --git a/app/serializers/current_user_serializer.rb b/app/serializers/current_user_serializer.rb
index 7e424c366..c74965865 100644
--- a/app/serializers/current_user_serializer.rb
+++ b/app/serializers/current_user_serializer.rb
@@ -1,6 +1,12 @@
 class CurrentUserSerializer < BasicUserSerializer
 
-  attributes :name, :unread_notifications, :unread_private_messages, :admin, :notification_channel_position, :site_flagged_posts_count
+  attributes :name, 
+             :unread_notifications, 
+             :unread_private_messages, 
+             :admin?, 
+             :notification_channel_position, 
+             :site_flagged_posts_count,
+             :moderator?
 
   # we probably want to move this into site, but that json is cached so hanging it off current user seems okish
 
@@ -8,6 +14,10 @@ class CurrentUserSerializer < BasicUserSerializer
     object.admin
   end
 
+  def moderator?
+    object.has_trust_level?(:moderator)
+  end
+
   def site_flagged_posts_count
     PostAction.flagged_posts_count
   end