diff --git a/app/contexts/issues/bulk_update_context.rb b/app/contexts/issues/bulk_update_context.rb
index e92264a8bb16ad3aa5710753c4a178ad273ae098..73a3c353523ae8a92b4e9a5ea4d8643b9b3f1fc9 100644
--- a/app/contexts/issues/bulk_update_context.rb
+++ b/app/contexts/issues/bulk_update_context.rb
@@ -8,6 +8,16 @@ module Issues
       assignee_id  = update_data[:assignee_id]
       status       = update_data[:status]
 
+      new_state = nil
+
+      if status.present?
+        if status == 'closed'
+          new_state = :close
+        else
+          new_state = :reopen
+        end
+      end
+
       opts = {}
       opts[:milestone_id] = milestone_id if milestone_id.present?
       opts[:assignee_id] = assignee_id if assignee_id.present?
@@ -17,14 +27,7 @@ module Issues
 
       issues.each do |issue|
         issue.update_attributes(opts)
-
-        if status.present?
-          if status == 'closed'
-            issue.close
-          else
-            issue.reopen
-          end
-        end
+        issue.send new_state if new_state
       end
 
       {
diff --git a/spec/contexts/issues/bulk_update_context_spec.rb b/spec/contexts/issues/bulk_update_context_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0966ee35745fe7c754e3fa835889109ce02ced1f
--- /dev/null
+++ b/spec/contexts/issues/bulk_update_context_spec.rb
@@ -0,0 +1,110 @@
+require 'spec_helper'
+
+describe Issues::BulkUpdateContext do
+
+  let(:issue) {
+    create(:issue, project: @project)
+  } 
+
+  before do
+    @user = create :user
+    opts = {
+      name: "GitLab"
+    }
+    @project = Projects::CreateContext.new(@user, opts).execute
+  end
+
+  describe :close_issue do
+
+    before do
+      @issues = 5.times.collect do
+        create(:issue, project: @project)
+      end
+      @params = { 
+        update: {
+          status: 'closed',
+          issues_ids: @issues.map(&:id)
+        }
+      }
+    end
+
+    it {
+      result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      result[:success].should be_true
+      result[:count].should == @issues.count
+
+      @project.issues.opened.should be_empty
+      @project.issues.closed.should_not be_empty
+    }
+
+  end
+
+  describe :reopen_issues do
+
+    before do
+      @issues = 5.times.collect do
+        create(:closed_issue, project: @project)
+      end
+      @params = { 
+        update: {
+          status: 'reopen',
+          issues_ids: @issues.map(&:id)
+        }
+      }
+    end
+
+    it {
+      result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      result[:success].should be_true
+      result[:count].should == @issues.count
+
+      @project.issues.closed.should be_empty
+      @project.issues.opened.should_not be_empty
+    }
+
+  end
+
+  describe :update_assignee do
+
+    before do
+      @new_assignee = create :user
+      @params = { 
+        update: {
+          issues_ids: [issue.id],
+          assignee_id: @new_assignee.id
+        }
+      }
+    end
+
+    it {
+      result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      result[:success].should be_true
+      result[:count].should == 1
+
+      @project.issues.first.assignee.should == @new_assignee
+    }
+
+  end
+
+  describe :update_milestone do
+
+    before do
+      @milestone = create :milestone
+      @params = { 
+        update: {
+          issues_ids: [issue.id],
+          milestone_id: @milestone.id
+        }
+      }
+    end
+
+    it {
+      result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      result[:success].should be_true
+      result[:count].should == 1
+
+      @project.issues.first.milestone.should == @milestone
+    }
+  end
+
+end