diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index f1c9c42..235f34f 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -114,16 +114,6 @@
 		ret={'add_tax_rate' :rate and flt(rate[0][0]) or 0 }
 		return ret
 
-	def validate_duplicate_docname(self,doctype):
-		for d in getlist(self.doclist, 'entries'): 
-			if doctype == 'purchase_receipt' and cstr(self.doc.purchase_receipt_main) == cstr(d.purchase_receipt):
-				msgprint(cstr(self.doc.purchase_receipt_main) + " purchase receipt details have already been pulled.")
-				raise Exception , " Validation Error. "
-
-			if doctype == 'purchase_order' and cstr(self.doc.purchase_order_main) == cstr(d.purchase_order) and not d.purchase_receipt:
-				msgprint(cstr(self.doc.purchase_order_main) + " purchase order details have already been pulled.")
-				raise Exception , " Validation Error. "
-
 	def check_active_purchase_items(self):
 		for d in getlist(self.doclist, 'entries'):
 			if d.item_code:		# extra condn coz item_code is not mandatory in PV
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index 79f757f..93fb47f 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -276,25 +276,6 @@
 		
 		if self.doc.debit_to:
 			self.doc.customer = webnotes.conn.get_value('Account',self.doc.debit_to,'master_name')
-		
-	def update_accounts(self):
-		if not self.doc.debit_to:
-			self.doc.debit_to = self.get_debit_to().get("debit_to")
-
-		self.get_income_expense_account('entries')
-
-	def get_income_expense_account(self,doctype):
-		auto_inventory_accounting = cint(webnotes.defaults.get_global_default("auto_inventory_accounting"))
-		default_cost_center = webnotes.conn.get_value("Company", self.doc.company, "cost_center")
-		for d in getlist(self.doclist, doctype):			
-			if d.item_code:
-				item = webnotes.conn.get_value("Item", d.item_code, ["default_income_account", 
-					"default_sales_cost_center", "purchase_account"], as_dict=True)
-				d.income_account = item['default_income_account'] or ""
-				d.cost_center = item['default_sales_cost_center'] or default_cost_center
-				
-				if auto_inventory_accounting and cint(self.doc.update_stock):
-					d.expense_account = item['purchase_account'] or ""
 
 	def get_barcode_details(self, barcode):
 		return get_obj('Sales Common').get_barcode_details(barcode)
diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py
index 0ba00a6..406f3a9 100644
--- a/buying/doctype/purchase_order/purchase_order.py
+++ b/buying/doctype/purchase_order/purchase_order.py
@@ -231,6 +231,7 @@
 		}, 
 		"Purchase Taxes and Charges": {
 			"doctype": "Purchase Taxes and Charges", 
+			"add_if_empty": True
 		}
 	}, target_doclist, set_missing_values)
 
@@ -271,6 +272,7 @@
 		}, 
 		"Purchase Taxes and Charges": {
 			"doctype": "Purchase Taxes and Charges", 
+			"add_if_empty": True
 		}
 	}, target_doclist, set_missing_values)
 
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.py b/buying/doctype/supplier_quotation/supplier_quotation.py
index 128cee2..ae3fbd3 100644
--- a/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -102,6 +102,7 @@
 		}, 
 		"Purchase Taxes and Charges": {
 			"doctype": "Purchase Taxes and Charges", 
+			"add_if_empty": True
 		},
 	}, target_doclist, set_missing_values)
 
diff --git a/controllers/selling_controller.py b/controllers/selling_controller.py
index 80bb914..2cd1be2 100644
--- a/controllers/selling_controller.py
+++ b/controllers/selling_controller.py
@@ -29,6 +29,9 @@
 		self.set_missing_values()
 		
 		self.set_taxes("other_charges", "charge")
+		
+		if self.meta.get_field("debit_to") and not self.doc.debit_to:
+			self.doc.debit_to = self.get_debit_to().get("debit_to")
 			
 	def set_missing_values(self, for_validate=False):
 		super(SellingController, self).set_missing_values(for_validate)
diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py
index 37b0b47..c7b33e4 100644
--- a/hr/doctype/salary_structure/salary_structure.py
+++ b/hr/doctype/salary_structure/salary_structure.py
@@ -117,7 +117,8 @@
 				["depend_on_lwp", "d_depends_on_lwp"],
 				["d_modified_amt", "d_amount"],
 				["d_modified_amt", "d_modified_amount"]
-			]
+			],
+			"add_if_empty": True
 		}, 
 		"Salary Structure Earning": {
 			"doctype": "Salary Slip Earning", 
@@ -125,7 +126,8 @@
 				["depend_on_lwp", "e_depends_on_lwp"], 
 				["modified_value", "e_modified_amount"],
 				["modified_value", "e_amount"]
-			]
+			],
+			"add_if_empty": True
 		}
 	}, target_doclist, postprocess)
 
diff --git a/selling/doctype/installation_note/installation_note.py b/selling/doctype/installation_note/installation_note.py
index a91db0e..fd85443 100644
--- a/selling/doctype/installation_note/installation_note.py
+++ b/selling/doctype/installation_note/installation_note.py
@@ -52,12 +52,6 @@
 		sales_com_obj = get_obj(dt = 'Sales Common')
 		sales_com_obj.check_active_sales_items(self)
 		sales_com_obj.get_prevdoc_date(self)
- 	
-	def validate_prev_docname(self):
-		for d in getlist(self.doclist, 'installed_item_details'): 
-			if self.doc.delivery_note_no == d.prevdoc_docname:
-				msgprint(cstr(self.doc.delivery_note_no) + 
-					" delivery note details have already been pulled", raise_exception=1)
 
 	def validate_fiscal_year(self):
 		from accounts.utils import validate_fiscal_year
diff --git a/selling/doctype/opportunity/opportunity.py b/selling/doctype/opportunity/opportunity.py
index fe4042b..d4a97b6 100644
--- a/selling/doctype/opportunity/opportunity.py
+++ b/selling/doctype/opportunity/opportunity.py
@@ -192,7 +192,8 @@
 				"parent": "prevdoc_docname", 
 				"parenttype": "prevdoc_doctype", 
 				"uom": "stock_uom"
-			}
+			},
+			"add_if_empty": True
 		}
 	}, target_doclist)
 		
diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py
index f1e11a0..1b286d1 100644
--- a/selling/doctype/quotation/quotation.py
+++ b/selling/doctype/quotation/quotation.py
@@ -235,7 +235,10 @@
 		if customer:
 			target[0].customer = customer.doc.name
 			target[0].customer_name = customer.doc.customer_name
-	
+			
+		si = webnotes.bean(target)
+		si.run_method("onload_post_render")
+			
 	doclist = get_mapped_doclist("Quotation", source_name, {
 			"Quotation": {
 				"doctype": "Sales Order", 
@@ -247,13 +250,16 @@
 				"doctype": "Sales Order Item", 
 				"field_map": {
 					"parent": "prevdoc_docname"
-				}
+				}, 
+				"add_if_empty": True
 			}, 
 			"Sales Taxes and Charges": {
 				"doctype": "Sales Taxes and Charges",
+				"add_if_empty": True
 			}, 
 			"Sales Team": {
 				"doctype": "Sales Team",
+				"add_if_empty": True
 			}
 		}, target_doclist, set_missing_values, ignore_permissions=ignore_permissions)
 		
diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py
index be57853..13f0e9f 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -340,6 +340,10 @@
 			from tabCurrency where ifnull(enabled,0)=1""")))
 	}
 	
+def set_missing_values(source, target):
+	bean = webnotes.bean(target)
+	bean.run_method("onload_post_render")
+	
 @webnotes.whitelist()
 def make_material_request(source_name, target_doclist=None):	
 	def postprocess(source, doclist):
@@ -395,11 +399,13 @@
 		}, 
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges", 
+			"add_if_empty": True
 		}, 
 		"Sales Team": {
-			"doctype": "Sales Team", 
+			"doctype": "Sales Team",
+			"add_if_empty": True
 		}
-	}, target_doclist)
+	}, target_doclist, set_missing_values)
 	
 	return [d.fields for d in doclist]
 
@@ -409,10 +415,6 @@
 		target.export_amount = flt(obj.amount) - flt(obj.billed_amt)
 		target.amount = target.export_amount / flt(source_parent.conversion_rate)
 		target.qty = obj.basic_rate and target.amount / flt(obj.basic_rate) or obj.qty
-		
-	def update_accounts(source, target):
-		si = webnotes.bean(target)
-		si.run_method("update_accounts")
 	
 	doclist = get_mapped_doclist("Sales Order", source_name, {
 		"Sales Order": {
@@ -433,11 +435,13 @@
 		}, 
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges", 
+			"add_if_empty": True
 		}, 
 		"Sales Team": {
 			"doctype": "Sales Team", 
+			"add_if_empty": True
 		}
-	}, target_doclist, update_accounts)
+	}, target_doclist, set_missing_values)
 	
 	return [d.fields for d in doclist]
 	
@@ -462,7 +466,8 @@
 				"doctype": "Maintenance Schedule Item", 
 				"field_map": {
 					"parent": "prevdoc_docname"
-				}
+				},
+				"add_if_empty": True
 			}
 		}, target_doclist)
 	
@@ -491,7 +496,8 @@
 				"field_map": {
 					"parent": "prevdoc_docname", 
 					"parenttype": "prevdoc_doctype"
-				}
+				},
+				"add_if_empty": True
 			}
 		}, target_doclist)
 	
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index 77038bb..77c70ee 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -136,22 +136,19 @@
 	def validate_for_items(self):
 		check_list, chk_dupl_itm = [], []
 		for d in getlist(self.doclist,'delivery_note_details'):
-			ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
-			if d.prevdoc_doctype and d.prevdoc_detail_docname and ch and ch[0][0]=='Yes':
-				self.validate_items_with_prevdoc(d)
-
-			# validates whether item is not entered twice
 			e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '', d.batch_no or '']
 			f = [d.item_code, d.description, d.prevdoc_docname or '']
 
-			if ch and ch[0][0] == 'Yes':
+			if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
 				if e in check_list:
-					msgprint("Please check whether item %s has been entered twice wrongly." % d.item_code)
+					msgprint("Please check whether item %s has been entered twice wrongly." 
+						% d.item_code)
 				else:
 					check_list.append(e)
-			elif ch and ch[0][0] == 'No':
+			else:
 				if f in chk_dupl_itm:
-					msgprint("Please check whether item %s has been entered twice wrongly." % d.item_code)
+					msgprint("Please check whether item %s has been entered twice wrongly." 
+						% d.item_code)
 				else:
 					chk_dupl_itm.append(f)
 
@@ -162,16 +159,6 @@
 					msgprint("Please enter Warehouse for item %s as it is stock item"
 						% d['item_code'], raise_exception=1)
 
-	def validate_items_with_prevdoc(self, d):
-		"""check if same item, warehouse present in prevdoc"""
-		prev_item_dt = (d.prevdoc_doctype == 'Sales Order') and 'Sales Order Item' or 'Purchase Receipt Item'
-		data = sql("select item_code from `tab%s` where parent = '%s' and name = '%s'"\
-		 	% (prev_item_dt, d.prevdoc_docname, d.prevdoc_detail_docname))
-		if not data or data[0][0] != d.item_code:
-			msgprint("Item: %s is not matching with Sales Order: %s. Sales Order might be modified after \
-				fetching data from it. Please delete items and fetch again." \
-				% (d.item_code, d.prevdoc_docname), raise_exception=1)
-
 
 	def update_current_stock(self):
 		for d in getlist(self.doclist, 'delivery_note_details'):
@@ -375,7 +362,7 @@
 		
 	def update_accounts(source, target):
 		si = webnotes.bean(target)
-		si.run_method("update_accounts")
+		si.run_method("onload_post_render")
 	
 	doclist = get_mapped_doclist("Delivery Note", source_name, 	{
 		"Delivery Note": {
@@ -397,12 +384,14 @@
 		}, 
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges", 
+			"add_if_empty": True
 		}, 
 		"Sales Team": {
 			"doctype": "Sales Team", 
 			"field_map": {
 				"incentives": "incentives"
-			}
+			},
+			"add_if_empty": True
 		}
 	}, target_doclist, update_accounts)
 	
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index 0ec7336..14d0c03 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -49,12 +49,6 @@
 	def get_bin_details(self, arg = ''):
 		return get_obj(dt='Purchase Common').get_bin_details(arg)
 
-	# validate if PO has been pulled twice
-	def validate_prev_docname(self):
-		for d in getlist(self.doclist, 'purchase_receipt_details'):
-			if self.doc.purchase_order_no and d.prevdoc_docname and self.doc.purchase_order_no == d.prevdoc_docname:
-				msgprint(cstr(self.doc.purchase_order_no) + " Purchase Order details have already been pulled. ")
-				raise Exception
 
 	# validate accepted and rejected qty
 	def validate_accepted_rejected_qty(self):
@@ -383,6 +377,7 @@
 		}, 
 		"Purchase Taxes and Charges": {
 			"doctype": "Purchase Taxes and Charges", 
+			"add_if_empty": True
 		}
 	}, target_doclist, set_missing_values)
 
diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py
index ed404dd..8f168f6 100644
--- a/utilities/transaction_base.py
+++ b/utilities/transaction_base.py
@@ -277,12 +277,18 @@
 		for key, val in ref.items():
 			is_child = val.get("is_child_table")
 			ref_doc = {}
+			item_ref_dn = []
 			for d in self.doclist.get({"doctype": source_dt}):
 				ref_dn = d.fields.get(val["ref_dn_field"])
 				if ref_dn:
 					if is_child:
 						self.compare_values({key: [ref_dn]}, val["compare_fields"], d)
-					elif ref_dn:								
+						if ref_dn not in item_ref_dn:
+							item_ref_dn.append(ref_dn)
+						else:
+							webnotes.msgprint(_("Row ") + cstr(d.idx + 1) + 
+								_(": Duplicate row from same ") + key, raise_exception=1)
+					elif ref_dn:
 						ref_doc.setdefault(key, [])
 						if ref_dn not in ref_doc[key]:
 							ref_doc[key].append(ref_dn)
