diff --git a/app/models/issue.rb b/app/models/issue.rb
index a73160e577f4e8f02257bfdacd5b755a4aa55cb5..0e9e7745a8578ae719ca528a3851f322e4f7d22b 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -59,6 +59,11 @@ class Issue < ActiveRecord::Base
     if start_date && soonest_start && start_date < soonest_start
       errors.add :start_date, :activerecord_error_invalid
     end
+    
+    # validate assignment
+    if assigned_to && !assignable_users.include?(assigned_to)
+      errors.add :assigned_to_id, :activerecord_error_invalid
+    end
   end
   
   def before_create
@@ -105,6 +110,11 @@ class Issue < ActiveRecord::Base
     @current_journal
   end
   
+  # Users the issue can be assigned to
+  def assignable_users
+    project.members.select {|m| m.role.assignable?}.collect {|m| m.user}
+  end
+  
   def spent_hours
     @spent_hours ||= time_entries.sum(:hours) || 0
   end
diff --git a/app/views/issues/change_status.rhtml b/app/views/issues/change_status.rhtml
index 550a5d6e0d6df8b966840d4b4512d5bbf7488bdc..79a4412dbf2edcf3c0c30661da75d7e053798688 100644
--- a/app/views/issues/change_status.rhtml
+++ b/app/views/issues/change_status.rhtml
@@ -10,7 +10,7 @@
 <div class="box">
 <div class="splitcontentleft">
 <p><label><%=l(:label_issue_status_new)%></label> <%= @new_status.name %></p>
-<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
+<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
 <p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
 <p><%= f.select :fixed_version_id, (@project.versions.sort.collect {|v| [v.name, v.id]}), { :include_blank => true } %></p>
 </div>
diff --git a/app/views/issues/edit.rhtml b/app/views/issues/edit.rhtml
index 18d6e0108c73ceca1126bb916f8234c7c13a7b68..f131041edb604c20b4573bc74c7c7de90a623cbe 100644
--- a/app/views/issues/edit.rhtml
+++ b/app/views/issues/edit.rhtml
@@ -7,7 +7,7 @@
 <div class="splitcontentleft">
 <p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
-<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
+<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
 <%= prompt_to_remote(l(:label_issue_category_new),
                      l(:label_issue_category_new), 'category[name]', 
diff --git a/app/views/projects/add_issue.rhtml b/app/views/projects/add_issue.rhtml
index d35f7f4845f148c33f29f0b1787f03b6cd27f7b7..1793ef1d8386d47970ad6a2e67e17bdeac8dbe49 100644
--- a/app/views/projects/add_issue.rhtml
+++ b/app/views/projects/add_issue.rhtml
@@ -9,7 +9,7 @@
 <div class="splitcontentleft">
 <p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p>
 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
-<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
+<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
 <%= prompt_to_remote(l(:label_issue_category_new),
                      l(:label_issue_category_new), 'category[name]', 
diff --git a/app/views/roles/_form.rhtml b/app/views/roles/_form.rhtml
index a80d990f99277c42a2bf4e2693147f8688fd7d70..d69fff132df50143727932a51e852b82bc26d049 100644
--- a/app/views/roles/_form.rhtml
+++ b/app/views/roles/_form.rhtml
@@ -2,6 +2,8 @@
 <div class="box">
 <!--[form:role]-->
 <p><%= f.text_field :name, :required => true %></p>
+<p><%= f.check_box :assignable %></p>
+<div class="clear"></div>
 
 <h3><%=l(:label_permissions)%></h3>
 <% permissions = @permissions.group_by {|p| p.group_id } %>
diff --git a/db/migrate/059_add_roles_assignable.rb b/db/migrate/059_add_roles_assignable.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a1ba7963433151164d1145d5d4bb17952f67f474
--- /dev/null
+++ b/db/migrate/059_add_roles_assignable.rb
@@ -0,0 +1,9 @@
+class AddRolesAssignable < ActiveRecord::Migration
+  def self.up
+    add_column :roles, :assignable, :boolean, :default => true
+  end
+
+  def self.down
+    remove_column :roles, :assignable
+  end
+end
diff --git a/lang/bg.yml b/lang/bg.yml
index 337b167b5832719927349aa660a082531005db57..9f616532d4357ce908818ff2efa1f6663109d1ae 100644
--- a/lang/bg.yml
+++ b/lang/bg.yml
@@ -155,6 +155,7 @@ field_identifier: Идентификатор
 field_is_filter: Използва се за филтър
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Заглавие
 setting_app_subtitle: Описание
diff --git a/lang/de.yml b/lang/de.yml
index 32ad4bcee75c4b34e9091c2cba04ffb9c749112a..da9f7ff8921bbfc561a6da35a94ab618d6ced3e7 100644
--- a/lang/de.yml
+++ b/lang/de.yml
@@ -155,6 +155,7 @@ field_identifier: Identifier
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Applikation Titel
 setting_app_subtitle: Applikation Untertitel
diff --git a/lang/en.yml b/lang/en.yml
index 3488ee345938c9e48f564ab3efa63e64a233cb7a..c7dd0d2efb79006ebd105bd2bb639e4035827df6 100644
--- a/lang/en.yml
+++ b/lang/en.yml
@@ -155,6 +155,7 @@ field_identifier: Identifier
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Application title
 setting_app_subtitle: Application subtitle
diff --git a/lang/es.yml b/lang/es.yml
index 26eca0bca778185a3795a85b1df6d539bdaf8b61..5bf61df6afe258d5be671ce1310f2c1973d61851 100644
--- a/lang/es.yml
+++ b/lang/es.yml
@@ -155,6 +155,7 @@ field_identifier: Identifier
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Título del aplicación
 setting_app_subtitle: Subtítulo del aplicación
diff --git a/lang/fr.yml b/lang/fr.yml
index 364359787a5f1ba23f63de54eed591163b0091da..ca1fb16bece72357542e14859497f8380a362fe0 100644
--- a/lang/fr.yml
+++ b/lang/fr.yml
@@ -155,6 +155,7 @@ field_identifier: Identifiant
 field_is_filter: Utilisé comme filtre
 field_issue_to_id: Demande liée
 field_delay: Retard
+field_assignable: Demandes assignables à ce rôle
 
 setting_app_title: Titre de l'application
 setting_app_subtitle: Sous-titre de l'application
diff --git a/lang/it.yml b/lang/it.yml
index d3f04b9c6662746e41150f4b8b5d2a3f8c0dbafb..b568873e73babad2782c195cadb6d8dae9293c6a 100644
--- a/lang/it.yml
+++ b/lang/it.yml
@@ -155,6 +155,7 @@ field_identifier: Identifier
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Titolo applicazione
 setting_app_subtitle: Sottotitolo applicazione
diff --git a/lang/ja.yml b/lang/ja.yml
index 703652bcc43250ab6af0e0ece5840cbb62274d7e..87fe5eb36899418da2236be2073a54284eee4d96 100644
--- a/lang/ja.yml
+++ b/lang/ja.yml
@@ -156,6 +156,7 @@ field_identifier: 識別子
 field_is_filter: フィルタとして使う
 field_issue_to_id: 関連する問題
 field_delay: 遅延
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: アプリケーションのタイトル
 setting_app_subtitle: アプリケーションのサブタイトル
diff --git a/lang/nl.yml b/lang/nl.yml
index 29b7751c57d3856d43cd1b74306e4962e6decea2..b80467aec6fe90f0b586bb66755bfbcfe7ba9b3b 100644
--- a/lang/nl.yml
+++ b/lang/nl.yml
@@ -155,6 +155,7 @@ field_identifier: Identificatiecode
 field_is_filter: Gebruikt als een filter
 field_issue_to_id: Gerelateerd issue
 field_delay: Vertraging
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Applicatie titel
 setting_app_subtitle: Applicatie ondertitel
diff --git a/lang/pt-br.yml b/lang/pt-br.yml
index 7196db85648e9cdf68e919c8f4d34e954de5e9c1..d7ac1ef5dae348a95cf82e8079f65ec57742f96f 100644
--- a/lang/pt-br.yml
+++ b/lang/pt-br.yml
@@ -155,6 +155,7 @@ field_identifier: Identificador
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Titulo da aplicacao
 setting_app_subtitle: Sub-titulo da aplicacao
diff --git a/lang/pt.yml b/lang/pt.yml
index face383c853645dd8b736fe1e075539d8c99176c..b0b2210fc353a6c014e29021112719c042f18ca8 100644
--- a/lang/pt.yml
+++ b/lang/pt.yml
@@ -155,6 +155,7 @@ field_identifier: Identificador
 field_is_filter: Usado como filtro
 field_issue_to_id: Tarefa relacionada
 field_delay: Atraso
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Título da aplicação
 setting_app_subtitle: Sub-título da aplicação
diff --git a/lang/sv.yml b/lang/sv.yml
index 70cb15c3da842e53b9383bb3bec32c77b6c4f3f4..8b0254602309cd46b6a13f3a4eadf69329c0ee5a 100644
--- a/lang/sv.yml
+++ b/lang/sv.yml
@@ -155,6 +155,7 @@ field_identifier: Identifierare
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: Applikationstitel
 setting_app_subtitle: Applicationsunderrubrik
diff --git a/lang/zh.yml b/lang/zh.yml
index de8cfdb7f5014be245e1e2861f005c4077f7c132..7a7ec7b3e0fecc7cf02338f1ba66285e27423b73 100644
--- a/lang/zh.yml
+++ b/lang/zh.yml
@@ -158,6 +158,7 @@ field_identifier: Identifier
 field_is_filter: Used as a filter
 field_issue_to_id: Related issue
 field_delay: Delay
+field_assignable: Issues can be assigned to this role
 
 setting_app_title: 应用程序标题
 setting_app_subtitle: 应用程序子标题