merge
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index a2d9f6a..cddb92e 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -86,13 +86,19 @@
 	
 	if(cint(doc.is_pos) == 1) {
 		hide_field(par_flds);
+		$(cur_frm.fields_dict.payments_section.row.wrapper).toggle(true);
+		$(cur_frm.fields_dict.advances.row.wrapper).toggle(false);
 		for(f in item_flds_normal) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal[f], false);
 		for(f in item_flds_pos) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_pos[f], (doc.update_stock==1?true:false));
 	} else {
 		unhide_field(par_flds);
+		$(cur_frm.fields_dict.payments_section.row.wrapper).toggle(false);
+		$(cur_frm.fields_dict.advances.row.wrapper).toggle(true);
 		for(f in item_flds_normal) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal[f], true);
 		for(f in item_flds_pos) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_pos[f], false);
 	}
+	if (doc.docstatus==1) $(cur_frm.fields_dict.recurring_invoice.row.wrapper).toggle(true);
+	else $(cur_frm.fields_dict.recurring_invoice.row.wrapper).toggle(false);
 
 	// India related fields
 	var cp = wn.control_panel;
@@ -171,6 +177,7 @@
 					get_server_fields('get_cust_and_due_date','','',doc,dt,dn,1,
 					function(doc, dt, dn) {
 						cur_frm.refresh();
+						cur_frm.cscript.price_list_name(doc, dt, dn);
 					});
 					
 				}
@@ -235,9 +242,21 @@
 //refresh advance amount
 //-------------------------------------------------
 
-cur_frm.cscript.paid_amount = function(doc,dt,dn){
+
+cur_frm.cscript.write_off_outstanding_amount_automatically = function(doc) {
+	if (doc.write_off_outstanding_amount_automatically == 1) 
+		doc.write_off_amount = flt(doc.grand_total) - flt(doc.paid_amount);
+	
 	doc.outstanding_amount = flt(doc.grand_total) - flt(doc.paid_amount) - flt(doc.write_off_amount);
-	refresh_field('outstanding_amount');
+	refresh_field(['write_off_amount', 'outstanding_amount']);
+}
+
+cur_frm.cscript.paid_amount = function(doc) {
+	cur_frm.cscript.write_off_outstanding_amount_automatically(doc);
+}
+
+cur_frm.cscript.write_off_amount = function(doc) {
+	cur_frm.cscript.write_off_outstanding_amount_automatically(doc);
 }
 
 
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 1878526..19a8c74 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -126,7 +126,6 @@
 		
 		if self.doc.debit_to:
 			self.doc.customer = webnotes.conn.get_value('Account',self.doc.debit_to,'master_name')
-		#	get_obj('Sales Common').get_customer_details(self, inv_det_reqd = 0)
 
 
 	# Pull Details of Delivery Note or Sales Order Selected
@@ -467,8 +466,6 @@
 		sales_com_obj.validate_max_discount(self, 'entries')	 #verify whether rate is not greater than tolerance
 		sales_com_obj.get_allocated_sum(self)	# this is to verify that the allocated % of sales persons is 100%
 		sales_com_obj.validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
-		if not self.doc.customer:
-			get_obj('Sales Common').get_customer_details(self, inv_det_reqd = 0)
 		self.validate_customer()
 		self.validate_debit_to_acc()
 		self.validate_debit_acc()
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt b/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt
index c851e75..6e76145 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-04-11 13:17:25',
+		'creation': '2012-04-13 11:56:18',
 		'docstatus': 0,
-		'modified': '2012-04-13 11:26:44',
+		'modified': '2012-04-20 11:52:36',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -27,7 +27,7 @@
 		'server_code_error': u' ',
 		'show_in_menu': 0,
 		'subject': u'To %(customer_name)s worth %(currency)s %(grand_total_export)s due on %(due_date)s | %(outstanding_amount)s outstanding',
-		'version': 418
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -582,23 +582,6 @@
 
 	# DocField
 	{
-		'doctype': u'DocField',
-		'fieldname': u'section_break1',
-		'fieldtype': u'Section Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'column_break3',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
 		'description': u'Will be calculated automatically when you enter the details',
 		'doctype': u'DocField',
 		'fieldname': u'net_total',
@@ -613,83 +596,6 @@
 
 	# DocField
 	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:doc.is_pos==1',
-		'doctype': u'DocField',
-		'fieldname': u'cash_bank_account',
-		'fieldtype': u'Link',
-		'label': u'Cash/Bank Account',
-		'oldfieldname': u'cash_bank_account',
-		'oldfieldtype': u'Link',
-		'options': u'Account',
-		'permlevel': 0,
-		'print_hide': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:doc.is_pos==1',
-		'doctype': u'DocField',
-		'fieldname': u'paid_amount',
-		'fieldtype': u'Currency',
-		'label': u'Paid Amount',
-		'oldfieldname': u'paid_amount',
-		'oldfieldtype': u'Currency',
-		'permlevel': 0,
-		'print_hide': 1,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'column_break4',
-		'fieldtype': u'Column Break',
-		'permlevel': 0,
-		'width': u'50%'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:doc.is_pos==1',
-		'doctype': u'DocField',
-		'fieldname': u'write_off_account',
-		'fieldtype': u'Link',
-		'label': u'Write Off Account',
-		'options': u'Account',
-		'permlevel': 0,
-		'print_hide': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:doc.is_pos==1',
-		'doctype': u'DocField',
-		'fieldname': u'write_off_cost_center',
-		'fieldtype': u'Link',
-		'label': u'Write Off Cost Center',
-		'options': u'Cost Center',
-		'permlevel': 0,
-		'print_hide': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:doc.is_pos==1',
-		'doctype': u'DocField',
-		'fieldname': u'write_off_amount',
-		'fieldtype': u'Currency',
-		'label': u'Write Off Amount',
-		'permlevel': 0,
-		'print_hide': 1
-	},
-
-	# DocField
-	{
 		'doctype': u'DocField',
 		'fieldname': u'taxes',
 		'fieldtype': u'Section Break',
@@ -942,6 +848,109 @@
 	{
 		'colour': u'White:FFF',
 		'doctype': u'DocField',
+		'fieldname': u'payments_section',
+		'fieldtype': u'Section Break',
+		'label': u'Payments',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'column_break3',
+		'fieldtype': u'Column Break',
+		'permlevel': 0,
+		'width': u'50%'
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'paid_amount',
+		'fieldtype': u'Currency',
+		'label': u'Paid Amount',
+		'oldfieldname': u'paid_amount',
+		'oldfieldtype': u'Currency',
+		'permlevel': 0,
+		'print_hide': 1,
+		'trigger': u'Client'
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'cash_bank_account',
+		'fieldtype': u'Link',
+		'label': u'Cash/Bank Account',
+		'oldfieldname': u'cash_bank_account',
+		'oldfieldtype': u'Link',
+		'options': u'Account',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'column_break4',
+		'fieldtype': u'Column Break',
+		'permlevel': 0,
+		'width': u'50%'
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'write_off_outstanding_amount_automatically',
+		'fieldtype': u'Check',
+		'label': u'Write Off Outstanding Amount Automatically',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'write_off_amount',
+		'fieldtype': u'Currency',
+		'label': u'Write Off Amount',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'write_off_account',
+		'fieldtype': u'Link',
+		'label': u'Write Off Account',
+		'options': u'Account',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
+		'fieldname': u'write_off_cost_center',
+		'fieldtype': u'Link',
+		'label': u'Write Off Cost Center',
+		'options': u'Cost Center',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'colour': u'White:FFF',
+		'doctype': u'DocField',
 		'fieldname': u'terms_section_break',
 		'fieldtype': u'Section Break',
 		'label': u'Terms and Conditions',
@@ -1232,7 +1241,6 @@
 	# DocField
 	{
 		'colour': u'White:FFF',
-		'depends_on': u'eval:!doc.is_pos',
 		'doctype': u'DocField',
 		'fieldname': u'advances',
 		'fieldtype': u'Section Break',
@@ -1369,7 +1377,7 @@
 
 	# DocField
 	{
-		'depends_on': u'eval:doc.docstatus==1',
+		'colour': u'White:FFF',
 		'doctype': u'DocField',
 		'fieldname': u'recurring_invoice',
 		'fieldtype': u'Section Break',
diff --git a/erpnext/knowledge_base/__init__.py b/erpnext/knowledge_base/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/knowledge_base/__init__.py
+++ /dev/null
diff --git a/erpnext/knowledge_base/doctype/__init__.py b/erpnext/knowledge_base/doctype/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/knowledge_base/doctype/__init__.py
+++ /dev/null
diff --git a/erpnext/knowledge_base/page/__init__.py b/erpnext/knowledge_base/page/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/knowledge_base/page/__init__.py
+++ /dev/null
diff --git a/erpnext/selling/doctype/customer/customer.txt b/erpnext/selling/doctype/customer/customer.txt
index 59105b3..2914492 100644
--- a/erpnext/selling/doctype/customer/customer.txt
+++ b/erpnext/selling/doctype/customer/customer.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:07',
+		'creation': '2012-04-13 11:56:26',
 		'docstatus': 0,
-		'modified': '2012-03-27 18:47:38',
+		'modified': '2012-04-19 17:12:24',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -27,7 +27,7 @@
 		'show_in_menu': 0,
 		'subject': u'eval:"%(customer_name)s"=="%(name)s" ? "" : "%(customer_name)s"',
 		'tag_fields': u'customer_group,customer_type',
-		'version': 435
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -59,6 +59,46 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
 		'cancel': 1,
 		'create': 1,
 		'doctype': u'DocPerm',
@@ -77,46 +117,6 @@
 		'write': 0
 	},
 
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales User',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales User',
-		'write': 0
-	},
-
 	# DocField
 	{
 		'colour': u'White:FFF',
@@ -342,6 +342,16 @@
 
 	# DocField
 	{
+		'doctype': u'DocField',
+		'fieldname': u'default_price_list',
+		'fieldtype': u'Link',
+		'label': u'Default Price List',
+		'options': u'Price List',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'colour': u'White:FFF',
 		'description': u"Your Customer's TAX registration numbers (if applicable) or any general information",
 		'doctype': u'DocField',
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index f423a84..4be1f9a 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -96,8 +96,9 @@
 //customer
 cur_frm.cscript.customer = function(doc,dt,dn) {
 	var callback = function(r,rt) {
-			var doc = locals[cur_frm.doctype][cur_frm.docname];
-			cur_frm.refresh();
+		var doc = locals[cur_frm.doctype][cur_frm.docname];
+		cur_frm.refresh();		
+		cur_frm.cscript.price_list_name(doc, dt, dn); 
 	}
 
 	if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 
diff --git a/erpnext/selling/doctype/sales_common/sales_common.js b/erpnext/selling/doctype/sales_common/sales_common.js
index a2ff515..2347d72 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.js
+++ b/erpnext/selling/doctype/sales_common/sales_common.js
@@ -76,24 +76,6 @@
 }
 
 
-
-// ============== Customer and its primary contact Details ============================
-cur_frm.cscript.customer = function(doc, cdt, cdn) {
-	if(doc.customer){
-		if (!doc.company) {
-			msgprint("Please select company to proceed");
-			doc.customer = '';
-			refresh_field('customer');
-		} else {
-			var callback = function(r, rt){
-				cur_frm.refresh();
-			}
-			$c_obj(make_doclist(doc.doctype, doc.name), 'get_customer_details', '',callback);
-		}
-	}
-}
-
-
 var set_dynamic_label_par = function(doc, cdt, cdn, base_curr) {
 	//parent flds
 	par_cols_base = {'net_total': 'Net Total', 'other_charges_total': 'Taxes and Charges Total', 
diff --git a/erpnext/selling/doctype/sales_common/sales_common.py b/erpnext/selling/doctype/sales_common/sales_common.py
index b70382c..f9f8adb 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.py
+++ b/erpnext/selling/doctype/sales_common/sales_common.py
@@ -119,24 +119,6 @@
 			acc_head = webnotes.conn.sql("select name from `tabAccount` where name = '%s' and docstatus != 2" % (cstr(obj.doc.customer) + " - " + get_value('Company', obj.doc.company, 'abbr')))
 			obj.doc.debit_to = acc_head and acc_head[0][0] or ''
 
-
-	# Get Customer Details along with its primary contact details
-	# ==============================================================
-	def get_customer_details(self, obj = '', inv_det_reqd = 1):
-		details = webnotes.conn.sql("select customer_name,address, territory, customer_group, default_sales_partner, default_commission_rate from `tabCustomer` where name = '%s' and docstatus != 2" %(obj.doc.customer), as_dict = 1)
-		obj.doc.customer_name = details and details[0]['customer_name'] or ''
-		obj.doc.customer_address =	details and details[0]['address'] or ''
-		obj.doc.territory = details and details[0]['territory'] or ''
-		obj.doc.customer_group	=	details and details[0]['customer_group'] or ''
-		obj.doc.sales_partner	 =	details and details[0]['default_sales_partner'] or ''
-		obj.doc.commission_rate =	details and flt(details[0]['default_commission_rate']) or ''
-		if obj.doc.doctype != 'Sales Invoice':
-			obj.doc.delivery_address =	details and details[0]['address'] or ''
-			self.get_contact_details(obj,primary = 1) # get primary contact details
-		self.get_sales_person_details(obj) # get default sales person details
-
-		if obj.doc.doctype == 'Sales Invoice' and inv_det_reqd:
-			self.get_invoice_details(obj) # get invoice details
 	
 	
 	# Get Item Details
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 91d3fd5..8ed16a3 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -99,6 +99,8 @@
 		var callback2  = function(r, rt) {
 			if(doc.customer) unhide_field(['customer_address', 'contact_person', 'customer_name', 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory','customer_group','shipping_address']);
 			cur_frm.refresh();
+			cur_frm.cscript.price_list_name(doc, dt, dn); 
+
 		}
 		var doc = locals[cur_frm.doctype][cur_frm.docname];
 		get_server_fields('get_shipping_address',doc.customer,'',doc, dt, dn, 0, callback2);
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 6fa737c..8210d10 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -74,13 +74,6 @@
 			get_obj('DocType Mapper', 'Project-Sales Order').dt_map('Project', 'Sales Order', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Order']]")
 			
 	
-	# Get Customer Details
-	# ---------------------
-	#def get_customer_details(self):
-	#	sales_com_obj = get_obj('Sales Common')
-	#	sales_com_obj.get_customer_details(self)
-	#	sales_com_obj.get_shipping_details(self)
-
 	# Get contact person details based on customer selected
 	# ------------------------------------------------------
 	def get_contact_details(self):
diff --git a/erpnext/setup/doctype/customer_group/customer_group.txt b/erpnext/setup/doctype/customer_group/customer_group.txt
index c5ee40e..ceda674 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.txt
+++ b/erpnext/setup/doctype/customer_group/customer_group.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:19',
+		'creation': '2012-04-13 11:56:30',
 		'docstatus': 0,
-		'modified': '2012-03-27 14:36:19',
+		'modified': '2012-04-19 17:50:43',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -26,7 +26,7 @@
 		'section_style': u'Simple',
 		'server_code_error': u' ',
 		'show_in_menu': 0,
-		'version': 34
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -58,6 +58,56 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales Master Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
 		'cancel': 1,
 		'create': 1,
 		'doctype': u'DocPerm',
@@ -66,56 +116,6 @@
 		'write': 1
 	},
 
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales Master Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales User',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales User',
-		'write': 0
-	},
-
 	# DocField
 	{
 		'doctype': u'DocField',
@@ -185,6 +185,16 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'default_price_list',
+		'fieldtype': u'Link',
+		'label': u'Default Price List',
+		'options': u'Price List',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'lft',
 		'fieldtype': u'Int',
 		'hidden': 1,
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 0737cc1..f0fd801 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -79,6 +79,7 @@
 			var doc = locals[cur_frm.doctype][cur_frm.docname];
 			if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group','shipping_address']);
 			cur_frm.refresh();
+			cur_frm.cscript.price_list_name(doc, dt, dn); 
 	} 
 	var args = onload ? 'onload':''
 	if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_shipping_address', args, callback);
diff --git a/erpnext/knowledge_base/doctype/answer/__init__.py b/erpnext/utilities/doctype/answer/__init__.py
similarity index 100%
rename from erpnext/knowledge_base/doctype/answer/__init__.py
rename to erpnext/utilities/doctype/answer/__init__.py
diff --git a/erpnext/knowledge_base/doctype/answer/answer.txt b/erpnext/utilities/doctype/answer/answer.txt
similarity index 97%
rename from erpnext/knowledge_base/doctype/answer/answer.txt
rename to erpnext/utilities/doctype/answer/answer.txt
index 6d664f2..75c3f33 100644
--- a/erpnext/knowledge_base/doctype/answer/answer.txt
+++ b/erpnext/utilities/doctype/answer/answer.txt
@@ -18,7 +18,7 @@
 		'colour': u'White:FFF',
 		'doctype': 'DocType',
 		'in_create': 1,
-		'module': u'Knowledge Base',
+		'module': u'Utilities',
 		'name': '__common__',
 		'read_only': 1,
 		'section_style': u'Simple',
@@ -99,4 +99,4 @@
 		'label': u'Users Voted',
 		'print_hide': 1
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/knowledge_base/doctype/question/__init__.py b/erpnext/utilities/doctype/question/__init__.py
similarity index 100%
rename from erpnext/knowledge_base/doctype/question/__init__.py
rename to erpnext/utilities/doctype/question/__init__.py
diff --git a/erpnext/knowledge_base/doctype/question/question.py b/erpnext/utilities/doctype/question/question.py
similarity index 100%
rename from erpnext/knowledge_base/doctype/question/question.py
rename to erpnext/utilities/doctype/question/question.py
diff --git a/erpnext/knowledge_base/doctype/question/question.txt b/erpnext/utilities/doctype/question/question.txt
similarity index 98%
rename from erpnext/knowledge_base/doctype/question/question.txt
rename to erpnext/utilities/doctype/question/question.txt
index 01a86ee..1173867 100644
--- a/erpnext/knowledge_base/doctype/question/question.txt
+++ b/erpnext/utilities/doctype/question/question.txt
@@ -18,7 +18,7 @@
 		'colour': u'White:FFF',
 		'doctype': 'DocType',
 		'in_create': 1,
-		'module': u'Knowledge Base',
+		'module': u'Utilities',
 		'name': '__common__',
 		'read_only': 1,
 		'section_style': u'Simple',
@@ -155,4 +155,4 @@
 		'oldfieldname': u'file_list',
 		'oldfieldtype': u'Text'
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/knowledge_base/page/kb_common/kb_common.js b/erpnext/utilities/page/kb_common/kb_common.js
similarity index 97%
rename from erpnext/knowledge_base/page/kb_common/kb_common.js
rename to erpnext/utilities/page/kb_common/kb_common.js
index 23c1ba3..d77a938 100644
--- a/erpnext/knowledge_base/page/kb_common/kb_common.js
+++ b/erpnext/utilities/page/kb_common/kb_common.js
@@ -56,7 +56,7 @@
 			console.log(1);
 			this.innerHTML = 'deleting...'; 
 			this.disabled = 1;
-			$c_page('knowledge_base', 'questions', 'delete', {
+			$c_page('utilities', 'questions', 'delete', {
 				dt: me.doctype, dn: me.det.name}, function(r,rt) {
 				// reload the list
 				kb.list.run()
@@ -112,7 +112,7 @@
 			}
 			var btn = this;
 			$(btn).set_working();
-			$c_page('knowledge_base', 'question_view', 'update_item', {
+			$c_page('utilities', 'question_view', 'update_item', {
 					dt: me.dt, dn: me.dn, fn: me.fieldname, text: v
 				}, 
 				function(r) {
@@ -140,4 +140,4 @@
 		me.$w.find('.ed-text-input, .ed-text-save, .ed-text-cancel, .help').toggle(true);
 	}
 
-}
\ No newline at end of file
+}
diff --git a/erpnext/knowledge_base/page/question_view/__init__.py b/erpnext/utilities/page/question_view/__init__.py
similarity index 100%
rename from erpnext/knowledge_base/page/question_view/__init__.py
rename to erpnext/utilities/page/question_view/__init__.py
diff --git a/erpnext/knowledge_base/page/question_view/question_view.css b/erpnext/utilities/page/question_view/question_view.css
similarity index 100%
rename from erpnext/knowledge_base/page/question_view/question_view.css
rename to erpnext/utilities/page/question_view/question_view.css
diff --git a/erpnext/knowledge_base/page/question_view/question_view.html b/erpnext/utilities/page/question_view/question_view.html
similarity index 100%
rename from erpnext/knowledge_base/page/question_view/question_view.html
rename to erpnext/utilities/page/question_view/question_view.html
diff --git a/erpnext/knowledge_base/page/question_view/question_view.js b/erpnext/utilities/page/question_view/question_view.js
similarity index 93%
rename from erpnext/knowledge_base/page/question_view/question_view.js
rename to erpnext/utilities/page/question_view/question_view.js
index dedf09c..8f00037 100644
--- a/erpnext/knowledge_base/page/question_view/question_view.js
+++ b/erpnext/utilities/page/question_view/question_view.js
@@ -65,7 +65,7 @@
 	// check if users has answered 
 	// (if no) then add a box to add a new answer
 	this.make_add_answer = function() {
-		$c_page('knowledge_base', 'question_view', 'has_answered', qid, function(r, rt) {
+		$c_page('utilities', 'question_view', 'has_answered', qid, function(r, rt) {
 			if(r.message=='No') {
 				me.make_answer_box_link();
 			}
@@ -92,7 +92,7 @@
 			var v = wn.tinymce.get_value(me.input);
 			if(!v) { msgprint('Write something!'); return; }
 			me.btn.set_working();
-			$c_page('knowledge_base', 'question_view', 'add_answer', {qid: qid, answer:v}, 
+			$c_page('utilities', 'question_view', 'add_answer', {qid: qid, answer:v}, 
 				function(r, rt) {
 					me.btn.done_working();
 					me.ans_list.list.run();
@@ -107,7 +107,7 @@
 			this.make();
 		}
 		else {
-			$c_page('knowledge_base', 'question_view', 'get_question', qid, function(r, rt) {
+			$c_page('utilities', 'question_view', 'get_question', qid, function(r, rt) {
 				qtext = r.message;
 				me.make();
 			});
@@ -185,4 +185,4 @@
 }
 
 
-wn.require('erpnext/knowledge_base/page/kb_common/kb_common.js');
\ No newline at end of file
+wn.require('erpnext/utilities/page/kb_common/kb_common.js');
diff --git a/erpnext/knowledge_base/page/question_view/question_view.py b/erpnext/utilities/page/question_view/question_view.py
similarity index 100%
rename from erpnext/knowledge_base/page/question_view/question_view.py
rename to erpnext/utilities/page/question_view/question_view.py
diff --git a/erpnext/knowledge_base/page/question_view/question_view.txt b/erpnext/utilities/page/question_view/question_view.txt
similarity index 93%
rename from erpnext/knowledge_base/page/question_view/question_view.txt
rename to erpnext/utilities/page/question_view/question_view.txt
index 9a10f8f..719b551 100644
--- a/erpnext/knowledge_base/page/question_view/question_view.txt
+++ b/erpnext/utilities/page/question_view/question_view.txt
@@ -13,7 +13,7 @@
 	# These values are common for all Page
 	{
 		'doctype': 'Page',
-		'module': 'Knowledge Base',
+		'module': 'Utilities',
 		'name': '__common__',
 		'page_name': 'Question View',
 		'standard': 'Yes'
@@ -24,4 +24,4 @@
 		'doctype': 'Page',
 		'name': 'question-view'
 	}
-]
\ No newline at end of file
+]
diff --git a/erpnext/knowledge_base/page/questions/__init__.py b/erpnext/utilities/page/questions/__init__.py
similarity index 100%
rename from erpnext/knowledge_base/page/questions/__init__.py
rename to erpnext/utilities/page/questions/__init__.py
diff --git a/erpnext/knowledge_base/page/questions/questions.css b/erpnext/utilities/page/questions/questions.css
similarity index 100%
rename from erpnext/knowledge_base/page/questions/questions.css
rename to erpnext/utilities/page/questions/questions.css
diff --git a/erpnext/knowledge_base/page/questions/questions.html b/erpnext/utilities/page/questions/questions.html
similarity index 100%
rename from erpnext/knowledge_base/page/questions/questions.html
rename to erpnext/utilities/page/questions/questions.html
diff --git a/erpnext/knowledge_base/page/questions/questions.js b/erpnext/utilities/page/questions/questions.js
similarity index 97%
rename from erpnext/knowledge_base/page/questions/questions.js
rename to erpnext/utilities/page/questions/questions.js
index 5d2820a..6992fa1 100644
--- a/erpnext/knowledge_base/page/questions/questions.js
+++ b/erpnext/utilities/page/questions/questions.js
@@ -88,7 +88,7 @@
 	
 	// add a new question to the database
 	this.add_question = function(suggest_list) {
-		$c_page('knowledge_base', 'questions', 'add_question', {
+		$c_page('utilities', 'questions', 'add_question', {
 			question: this.search.value,
 			suggest: suggest_list
 		}, function(r,rt) {
@@ -219,4 +219,4 @@
 	this.make()
 }
 
-wn.require('erpnext/knowledge_base/page/kb_common/kb_common.js');
\ No newline at end of file
+wn.require('erpnext/utilities/page/kb_common/kb_common.js');
diff --git a/erpnext/knowledge_base/page/questions/questions.py b/erpnext/utilities/page/questions/questions.py
similarity index 100%
rename from erpnext/knowledge_base/page/questions/questions.py
rename to erpnext/utilities/page/questions/questions.py
diff --git a/erpnext/knowledge_base/page/questions/questions.txt b/erpnext/utilities/page/questions/questions.txt
similarity index 93%
rename from erpnext/knowledge_base/page/questions/questions.txt
rename to erpnext/utilities/page/questions/questions.txt
index 1ca11ff..8231625 100644
--- a/erpnext/knowledge_base/page/questions/questions.txt
+++ b/erpnext/utilities/page/questions/questions.txt
@@ -13,7 +13,7 @@
 	# These values are common for all Page
 	{
 		'doctype': 'Page',
-		'module': 'Knowledge Base',
+		'module': 'Utilities',
 		'name': '__common__',
 		'page_name': 'Questions',
 		'standard': 'Yes'
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 032b52f..eecbb06 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -33,9 +33,9 @@
 		self.doc.contact_display = contact_text or ''
 		self.doc.contact_email = contact_email or ''
 		self.doc.contact_mobile = contact_mobile or ''
-	
-		self.get_customer_details(self.doc.customer)
+
 		if args != 'onload':
+			self.get_customer_details(self.doc.customer)
 			self.get_sales_person(self.doc.customer)
 		
 	# Get Customer Default Shipping Address - first load
@@ -50,8 +50,8 @@
 		self.doc.contact_email = contact_email or ''
 		self.doc.contact_mobile = contact_mobile or ''
 		
-		self.get_customer_details(self.doc.customer)
 		if self.doc.doctype != 'Quotation' and args != 'onload':
+			self.get_customer_details(self.doc.customer)
 			self.get_sales_person(self.doc.customer)			
 
 	# Get Customer Address
@@ -118,13 +118,18 @@
 	# Get Customer Details
 	# -----------------------
 	def get_customer_details(self, name):		
-		customer_details = webnotes.conn.sql("select customer_name, customer_group, territory, default_sales_partner, default_commission_rate from tabCustomer where name = '%s' and docstatus != 2" %(name), as_dict = 1)
+		customer_details = webnotes.conn.sql("select customer_name, customer_group, territory, default_sales_partner, default_commission_rate, default_price_list from tabCustomer where name = '%s' and docstatus != 2" %(name), as_dict = 1)
 		if customer_details:
 			self.doc.customer_name = customer_details[0]['customer_name'] or ''
 			self.doc.customer_group = customer_details[0]['customer_group'] or ''
 			self.doc.territory = customer_details[0]['territory'] or ''
 			self.doc.sales_partner = customer_details[0]['default_sales_partner'] or ''
 			self.doc.commission_rate = customer_details[0]['default_commission_rate'] or ''
+			def_price_list = customer_details[0]['default_price_list'] or ''
+			if not def_price_list:
+				cg_price_list = webnotes.conn.sql("select default_price_list from `tabCustomer Group` where name = %s", customer_details[0]['customer_group'])
+				def_price_list = cg_price_list and cg_price_list[0][0] or ''
+			self.doc.price_list_name = def_price_list or self.doc.price_list_name
 			
 	# Get Customer Shipping Address
 	# -----------------------