diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 456c40a..42717fd 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -28,7 +28,11 @@
 
 	def validate(self):
 		self.validate_dates()
-		
+
+		if self.status!=self.get_db_value("status") and self.status == "Closed":
+			from frappe.desk.form.assign_to import clear
+			clear(self.doctype, self.name)
+
 	def validate_dates(self):
 		if self.exp_start_date and self.exp_end_date and getdate(self.exp_start_date) > getdate(self.exp_end_date):
 			frappe.throw(_("'Expected Start Date' can not be greater than 'Expected End Date'"))
@@ -41,17 +45,17 @@
 		self.reschedule_dependent_tasks()
 		self.update_percentage()
 		self.update_project()
-			
+
 	def update_percentage(self):
 		"""update percent complete in project"""
 		if self.project and not self.flags.from_project:
 			project = frappe.get_doc("Project", self.project)
 			project.run_method("update_percent_complete")
-			
+
 	def update_total_expense_claim(self):
-		self.total_expense_claim = frappe.db.sql("""select sum(total_sanctioned_amount) from `tabExpense Claim` 
+		self.total_expense_claim = frappe.db.sql("""select sum(total_sanctioned_amount) from `tabExpense Claim`
 			where project = %s and task = %s and approval_status = "Approved" and docstatus=1""",(self.project, self.name))
-			
+
 	def update_time_and_costing(self):
 		tl = frappe.db.sql("""select min(from_time) as start_date, max(to_time) as end_date,
 			 sum(billing_amount) as total_billing_amount, sum(costing_amount) as total_costing_amount,
@@ -64,14 +68,14 @@
 		self.actual_time= tl.time
 		self.act_start_date= tl.start_date
 		self.act_end_date= tl.end_date
-			
+
 	def update_project(self):
 		if self.project and frappe.db.exists("Project", self.project):
 			project = frappe.get_doc("Project", self.project)
 			project.flags.dont_sync_tasks = True
 			project.update_costing()
 			project.save()
-			
+
 	def check_recursion(self):
 		if self.flags.ignore_recursion_check: return
 		check_list = [['task', 'parent'], ['parent', 'task']]
@@ -88,7 +92,7 @@
 						task_list.append(b[0])
 				if count == 15:
 					break
-			
+
 	def reschedule_dependent_tasks(self):
 		end_date = self.exp_end_date or self.act_end_date
 		if end_date:
diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py
index 8880763..fced0a4 100644
--- a/erpnext/projects/doctype/task/test_task.py
+++ b/erpnext/projects/doctype/task/test_task.py
@@ -11,19 +11,19 @@
 
 class TestTask(unittest.TestCase):
 	def test_circular_reference(self):
-		
+
 		task1 =  frappe.new_doc('Task')
 		task1.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 1",
 			"exp_start_date": "2015-1-1",
 			"exp_end_date": "2015-1-10"
 		})
 		task1.save()
-		
+
 		task2 =  frappe.new_doc('Task')
 		task2.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 2",
 			"exp_start_date": "2015-1-11",
 			"exp_end_date": "2015-1-15",
@@ -34,10 +34,10 @@
 			]
 		})
 		task2.save()
-		
+
 		task3 =  frappe.new_doc('Task')
 		task3.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 2",
 			"exp_start_date": "2015-1-11",
 			"exp_end_date": "2015-1-15",
@@ -53,13 +53,13 @@
 			"task": task3.name
 		})
 		self.assertRaises(CircularReferenceError, task1.save)
-		
+
 		task1.set("depends_on", [])
 		task1.save()
-		
+
 		task4 =  frappe.new_doc('Task')
 		task4.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 1",
 			"exp_start_date": "2015-1-1",
 			"exp_end_date": "2015-1-15",
@@ -74,20 +74,20 @@
 		task3.append("depends_on", {
 			"task": task4.name
 		})
-		
+
 	def test_reschedule_dependent_task(self):
 		task1 =  frappe.new_doc('Task')
 		task1.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 1",
 			"exp_start_date": "2015-1-1",
 			"exp_end_date": "2015-1-10"
 		})
 		task1.save()
-		
+
 		task2 =  frappe.new_doc('Task')
 		task2.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 2",
 			"exp_start_date": "2015-1-11",
 			"exp_end_date": "2015-1-15",
@@ -98,10 +98,10 @@
 			]
 		})
 		task2.save()
-		
+
 		task3 =  frappe.new_doc('Task')
 		task3.update({
-			"status": "Open", 
+			"status": "Open",
 			"subject": "_Test Task 3",
 			"exp_start_date": "2015-1-16",
 			"exp_end_date": "2015-1-18",
@@ -112,18 +112,18 @@
 			]
 		})
 		task3.save()
-		
+
 		task1.update({
 			"exp_end_date": "2015-1-20"
 		})
 		task1.save()
-		
+
 		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_start_date"), getdate('2015-1-21'))
 		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_end_date"), getdate('2015-1-25'))
 
 		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_start_date"), getdate('2015-1-26'))
 		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_end_date"), getdate('2015-1-28'))
-		
+
 		time_log = frappe.new_doc('Time Log')
 		time_log.update({
 			"from_time": "2015-1-1",
@@ -131,18 +131,49 @@
 			"task": task1.name
 		})
 		time_log.submit()
-		
+
 		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_start_date"), getdate('2015-1-21'))
 		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_end_date"), getdate('2015-1-25'))
 
 		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_start_date"), getdate('2015-1-26'))
 		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_end_date"), getdate('2015-1-28'))
-		
+
 		time_log.cancel()
-		
+
 		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_start_date"), getdate('2015-1-21'))
 		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_end_date"), getdate('2015-1-25'))
 
 		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_start_date"), getdate('2015-1-26'))
 		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_end_date"), getdate('2015-1-28'))
-		
\ No newline at end of file
+
+
+	def test_close_assignment(self):
+		task = frappe.new_doc("Task")
+		task.subject = "Test Close Assignment"
+		task.insert()
+
+		def assign():
+			from frappe.desk.form import assign_to
+			assign_to.add({
+				"assign_to": "test@example.com",
+				"doctype": task.doctype,
+				"name": task.name,
+				"description": "Close this task"
+			})
+
+		def get_owner_and_status():
+			return frappe.db.get_value("ToDo", filters={"reference_type": task.doctype, "reference_name": task.name,
+					"description": "Close this task"}, fieldname=("owner", "status"), as_dict=True)
+
+		assign()
+		todo = get_owner_and_status()
+		self.assertEquals(todo.owner, "test@example.com")
+		self.assertEquals(todo.status, "Open")
+
+		# assignment should be
+		task.load_from_db()
+		task.status = "Closed"
+		task.save()
+		todo = get_owner_and_status()
+		self.assertEquals(todo.owner, "test@example.com")
+		self.assertEquals(todo.status, "Closed")
