diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index 79b4b61..60f4bf0 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -19,7 +19,7 @@ class MessagesController < ApplicationController
   menu_item :boards
   before_filter :find_board, :only => [:new, :preview]
   before_filter :find_message, :except => [:new, :preview]
-  before_filter :authorize, :except => :preview
+  before_filter :authorize, :except => [:preview, :edit, :destroy]
 
   verify :method => :post, :only => [ :reply, :destroy ], :redirect_to => { :action => :show }
   verify :xhr => true, :only => :quote
@@ -65,7 +65,8 @@ class MessagesController < ApplicationController
 
   # Edit a message
   def edit
-    if params[:message] && User.current.allowed_to?(:edit_messages, @project)
+    render_403 and return false unless @message.editable_by?(User.current)
+    if params[:message]
       @message.locked = params[:message]['locked']
       @message.sticky = params[:message]['sticky']
     end
@@ -78,6 +79,7 @@ class MessagesController < ApplicationController
   
   # Delete a messages
   def destroy
+    render_403 and return false unless @message.destroyable_by?(User.current)
     @message.destroy
     redirect_to @message.parent.nil? ?
       { :controller => 'boards', :action => 'show', :project_id => @project, :id => @board } :
diff --git a/app/models/message.rb b/app/models/message.rb
index f1cb2d0..9a313e8 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -71,6 +71,14 @@ class Message < ActiveRecord::Base
   def project
     board.project
   end
+
+  def editable_by?(usr)
+    usr && usr.logged? && (usr.allowed_to?(:edit_messages, project) || (self.author == usr && usr.allowed_to?(:edit_own_messages, project)))
+  end
+
+  def destroyable_by?(usr)
+    usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project)))
+  end
   
   private
   
diff --git a/app/views/messages/show.rhtml b/app/views/messages/show.rhtml
index 31696d5..93a4fce 100644
--- a/app/views/messages/show.rhtml
+++ b/app/views/messages/show.rhtml
@@ -4,8 +4,12 @@
 <div class="contextual">
     <%= watcher_tag(@topic, User.current) %>
     <%= link_to_remote_if_authorized l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment' %>
-    <%= link_to_if_authorized l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit' %>
-    <%= link_to_if_authorized l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del' %>
+    <% if @message.editable_by?(User.current) -%>
+        <%= link_to l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit' %>
+    <% end -%>
+    <% if @message.destroyable_by?(User.current) -%>
+        <%= link_to l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del' %>
+    <% end -%>
 </div>
 
 <h2><%=h @topic.subject %></h2>
diff --git a/lang/en.yml b/lang/en.yml
index a76c5d1..acf3e87 100644
--- a/lang/en.yml
+++ b/lang/en.yml
@@ -269,7 +269,9 @@ permission_manage_boards: Manage boards
 permission_view_messages: View messages
 permission_add_messages: Post messages
 permission_edit_messages: Edit messages
+permission_edit_own_messages: Edit own messages
 permission_delete_messages: Delete messages
+permission_delete_won_messages: Delete own messages
 
 project_module_issue_tracking: Issue tracking
 project_module_time_tracking: Time tracking
diff --git a/lib/redmine.rb b/lib/redmine.rb
index eeb12e0..f45f14f 100644
--- a/lib/redmine.rb
+++ b/lib/redmine.rb
@@ -99,7 +99,9 @@ Redmine::AccessControl.map do |map|
     map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
     map.permission :add_messages, {:messages => [:new, :reply, :quote]}
     map.permission :edit_messages, {:messages => :edit}, :require => :member
+    map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin
     map.permission :delete_messages, {:messages => :destroy}, :require => :member
+    map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin
   end
 end
 
diff --git a/lib/redmine/default_data/loader.rb b/lib/redmine/default_data/loader.rb
index 1c3b1f9..b7cab56 100644
--- a/lib/redmine/default_data/loader.rb
+++ b/lib/redmine/default_data/loader.rb
@@ -65,6 +65,7 @@ module Redmine
                                                       :edit_wiki_pages,
                                                       :delete_wiki_pages,
                                                       :add_messages,
+                                                      :edit_own_messages,
                                                       :view_files,
                                                       :manage_files,
                                                       :browse_repository,
@@ -85,6 +86,7 @@ module Redmine
                                                     :view_wiki_pages,
                                                     :view_wiki_edits,
                                                     :add_messages,
+                                                    :edit_own_messages,
                                                     :view_files,
                                                     :browse_repository,
                                                     :view_changesets]
