diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.js b/accounts/doctype/purchase_invoice/purchase_invoice.js
index 8d37b77..1a9ef60 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -394,7 +394,9 @@
 
 // ***************** Get project name *****************
 cur_frm.fields_dict['entries'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
-	return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
+	return 'SELECT `tabProject`.name FROM `tabProject` \
+		WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+		AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
 
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index 16973f0..ad774fe 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -376,7 +376,10 @@
 cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
 	var cond = '';
 	if(doc.customer) cond = '(`tabProject`.customer = "'+doc.customer+'" OR IFNULL(`tabProject`.customer,"")="") AND';
-	return repl('SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND %(cond)s `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond});
+	return repl('SELECT `tabProject`.name FROM `tabProject` \
+		WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+		AND %(cond)s `tabProject`.name LIKE "%s" \
+		ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond});
 }
 
 //Territory
diff --git a/buying/doctype/purchase_order/purchase_order.js b/buying/doctype/purchase_order/purchase_order.js
index 0eb830b..d0d878d 100644
--- a/buying/doctype/purchase_order/purchase_order.js
+++ b/buying/doctype/purchase_order/purchase_order.js
@@ -99,7 +99,9 @@
 }
 
 cur_frm.fields_dict['po_details'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
-	return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
+	return 'SELECT `tabProject`.name FROM `tabProject` \
+		WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+		AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
 cur_frm.fields_dict['indent_no'].get_query = function(doc) {
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.js b/buying/doctype/supplier_quotation/supplier_quotation.js
index faaf296..7c9b55c 100644
--- a/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -77,7 +77,8 @@
 cur_frm.fields_dict['quotation_items'].grid.get_field('project_name').get_query = 
 	function(doc, cdt, cdn) {
 		return "select `tabProject`.name from `tabProject` \
-			where `tabProject`.status = \"Open\" and `tabProject`.name like \"%s\" \
+			where `tabProject`.status not in (\"Completed\", \"Cancelled\") \
+			and `tabProject`.name like \"%s\" \
 			order by `tabProject`.name ASC LIMIT 50";
 	}
 
diff --git a/production/doctype/bom/bom.js b/production/doctype/bom/bom.js
index 3931257..fd9be8f 100644
--- a/production/doctype/bom/bom.js
+++ b/production/doctype/bom/bom.js
@@ -145,7 +145,9 @@
 }
 
 cur_frm.fields_dict['project_name'].get_query = function(doc, dt, dn) {
-	return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
+	return 'SELECT `tabProject`.name FROM `tabProject` \
+		WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+		AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
 cur_frm.fields_dict['bom_materials'].grid.get_field('item_code').get_query = function(doc) {
diff --git a/production/doctype/production_order/production_order.js b/production/doctype/production_order/production_order.js
index 6ac7065..411f779 100644
--- a/production/doctype/production_order/production_order.js
+++ b/production/doctype/production_order/production_order.js
@@ -104,7 +104,9 @@
 }
 
 cur_frm.fields_dict['project_name'].get_query = function(doc, dt, dn) {
-  return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
+  return 'SELECT `tabProject`.name FROM `tabProject` \
+	  WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+	  AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
 cur_frm.fields_dict['bom_no'].get_query = function(doc)  {
diff --git a/projects/doctype/task/task.js b/projects/doctype/task/task.js
index d1317ae..295c58e 100644
--- a/projects/doctype/task/task.js
+++ b/projects/doctype/task/task.js
@@ -17,7 +17,9 @@
 cur_frm.fields_dict['project'].get_query = function(doc,cdt,cdn){
   var cond='';
   if(doc.customer) cond = 'ifnull(`tabProject`.customer, "") = "'+doc.customer+'" AND';  
-  return repl('SELECT distinct `tabProject`.`name` FROM `tabProject` WHERE %(cond)s `tabProject`.`name` LIKE "%s" ORDER BY `tabProject`.`name` ASC LIMIT 50', {cond:cond});
+  return repl('SELECT distinct `tabProject`.`name` FROM `tabProject` \
+  	WHERE %(cond)s `tabProject`.`name` LIKE "%s" \
+	ORDER BY `tabProject`.`name` ASC LIMIT 50', {cond:cond});
 }
 
 
diff --git a/projects/doctype/task/task.txt b/projects/doctype/task/task.txt
index 07a9343..2ced828 100644
--- a/projects/doctype/task/task.txt
+++ b/projects/doctype/task/task.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		u'creation': '2012-08-08 15:39:55',
+		u'creation': '2012-09-18 11:05:48',
 		u'docstatus': 0,
-		u'modified': '2012-09-17 10:58:32',
+		u'modified': '2012-10-29 14:24:55',
 		u'modified_by': u'Administrator',
 		u'owner': u'Administrator'
 	},
@@ -13,12 +13,14 @@
 	# These values are common for all DocType
 	{
 		'_last_update': u'1324880734',
+		'allow_attach': 1,
 		'allow_trash': 1,
 		'autoname': u'TASK.#####',
 		'colour': u'White:FFF',
 		'default_print_format': u'Standard',
 		u'doctype': u'DocType',
 		'document_type': u'Master',
+		'max_attachments': 5,
 		'module': u'Projects',
 		u'name': u'__common__',
 		'section_style': u'Tray',
@@ -298,6 +300,17 @@
 		'oldfieldtype': u'Date'
 	},
 
+	# DocField
+	{
+		u'doctype': u'DocField',
+		'fieldname': u'file_list',
+		'fieldtype': u'Text',
+		'hidden': 1,
+		'label': u'File List',
+		'no_copy': 1,
+		'print_hide': 1
+	},
+
 	# DocPerm
 	{
 		'cancel': 1,
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index d448c79..1285c84 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -168,7 +168,9 @@
 cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
 	var cond = '';
 	if(doc.customer) cond = '(`tabProject`.customer = "'+doc.customer+'" OR IFNULL(`tabProject`.customer,"")="") AND';
-	return repl('SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND %(cond)s `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond});
+	return repl('SELECT `tabProject`.name FROM `tabProject` \
+	WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+	AND %(cond)s `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond});
 }
 
 //---- get customer details ----------------------------
diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js
index 03743e2..e1f8b37 100644
--- a/stock/doctype/delivery_note/delivery_note.js
+++ b/stock/doctype/delivery_note/delivery_note.js
@@ -150,7 +150,10 @@
 cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
 	var cond = '';
 	if(doc.customer) cond = '(`tabProject`.customer = "'+doc.customer+'" OR IFNULL(`tabProject`.customer,"")="") AND';
-	return repl('SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND %(cond)s `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond});
+	return repl('SELECT `tabProject`.name FROM `tabProject` \
+		WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+		AND %(cond)s `tabProject`.name LIKE "%s" \
+		ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond});
 }
 
 
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.js b/stock/doctype/purchase_receipt/purchase_receipt.js
index 9cb13f4..b943314 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -128,7 +128,9 @@
 
 // ***************** Get project name *****************
 cur_frm.fields_dict['purchase_receipt_details'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
-	return 'SELECT `tabProject`.name FROM `tabProject` WHERE `tabProject`.status = "Open" AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
+	return 'SELECT `tabProject`.name FROM `tabProject` \
+		WHERE `tabProject`.status not in ("Completed", "Cancelled") \
+		AND `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50';
 }
 
 
diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py
index 75f4141..2373066 100644
--- a/utilities/transaction_base.py
+++ b/utilities/transaction_base.py
@@ -28,13 +28,9 @@
 	# -----------------------
 	def get_default_customer_address(self, args=''):
 		address_text, address_name = self.get_address_text(customer=self.doc.customer)
-		contact_text, contact_name, contact_email, contact_mobile = self.get_contact_text(customer=self.doc.customer)
 		self.doc.customer_address = address_name or ''
-		self.doc.contact_person = contact_name or ''
 		self.doc.address_display = address_text or ''
-		self.doc.contact_display = contact_text or ''
-		self.doc.contact_email = contact_email or ''
-		self.doc.contact_mobile = contact_mobile or ''
+		self.doc.fields.update(self.get_contact_text(customer=self.doc.customer))
 
 		if args != 'onload':
 			self.get_customer_details(self.doc.customer)
@@ -44,13 +40,9 @@
 	# -----------------------
 	def get_default_customer_shipping_address(self, args=''):		
 		address_text, address_name = self.get_address_text(customer=self.doc.customer,is_shipping_address=1)
-		contact_text, contact_name, contact_email, contact_mobile = self.get_contact_text(customer=self.doc.customer)		
 		self.doc.customer_address = address_name or ''
-		self.doc.contact_person = contact_name or ''
 		self.doc.address_display = address_text or ''
-		self.doc.contact_display = contact_text or ''
-		self.doc.contact_email = contact_email or ''
-		self.doc.contact_mobile = contact_mobile or ''
+		self.doc.fields.update(self.get_contact_text(customer=self.doc.customer))
 		
 		if self.doc.doctype != 'Quotation' and args != 'onload':
 			self.get_customer_details(self.doc.customer)
@@ -61,15 +53,13 @@
 	def get_customer_address(self, args):
 		args = load_json(args)		
 		address_text, address_name = self.get_address_text(address_name=args['address'])
-		contact_text, contact_name, contact_email, contact_mobile = self.get_contact_text(contact_name=args['contact'])
 		ret = {
 			'customer_address' : address_name,
-			'contact_person' : contact_name,
 			'address_display' : address_text,
-			'contact_display' : contact_text,
-			'contact_email' : contact_email,
-			'contact_mobile' : contact_mobile
 		}
+		
+		ret.update(self.get_contact_text(contact_name=args['contact']))
+		
 		return ret	
 			
 	# Get Address Text
@@ -112,11 +102,15 @@
 		contact_display = ''.join([a[0]+cstr(extract(a[1])) for a in contact_fields if extract(a[1])])
 		if contact_display.startswith('\n'): contact_display = contact_display[1:]
 		
-		contact_name = details and details[0]['name'] or ''
-		contact_email = details and details[0]['email_id'] or ''
-		contact_mobile = details and details[0]['mobile_no'] or ''
-		return contact_display, contact_name, contact_email, contact_mobile
-
+		return {
+			"contact_display": contact_display,
+			"contact_person": details and details[0]["name"] or "",
+			"contact_email": details and details[0]["email_id"] or "",
+			"contact_mobile": details and details[0]["mobile_no"] or "",
+			"contact_designation": details and details[0]["designation"] or "",
+			"contact_department": details and details[0]["department"] or "",
+		}
+		
 	def get_customer_details(self, name):
 		"""
 			Get customer details like name, group, territory
@@ -185,15 +179,11 @@
 	def get_default_supplier_address(self, args):
 		args = load_json(args)
 		address_text, address_name = self.get_address_text(supplier=args['supplier'])
-		contact_text, contact_name, contact_email, contact_mobile = self.get_contact_text(supplier=args['supplier'])
 		ret = {
 			'supplier_address' : address_name,
 			'address_display' : address_text,
-			'contact_person' : contact_name,
-			'contact_display' : contact_text,
-			'contact_email' : contact_email,
-			'contact_mobile' : contact_mobile						
 		}
+		ret.update(self.get_contact_text(supplier=args['supplier']))
 		ret.update(self.get_supplier_details(args['supplier']))
 		return ret
 		
@@ -202,15 +192,11 @@
 	def get_supplier_address(self, args):
 		args = load_json(args)
 		address_text, address_name = self.get_address_text(address_name=args['address'])
-		contact_text, contact_name, contact_email, contact_mobile = self.get_contact_text(contact_name=args['contact'])
 		ret = {
 			'supplier_address' : address_name,
 			'address_display' : address_text,
-			'contact_person' : contact_name,
-			'contact_display' : contact_text,
-			'contact_email' : contact_email,
-			'contact_mobile' : contact_mobile
 		}
+		ret.update(self.get_contact_text(contact_name=args['contact']))
 		return ret
 	
 	# Get Supplier Details
