frappe/frappe#478
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index 48c952f..d0df2e4 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -62,7 +62,7 @@
 
 	def set_total_invoiced_amount(self):
 		total = sum([flt(d.grand_total) for d in self.get('invoice_details')])
-		frappe.db.set(self.doc, 'total_invoiced_amount', total)
+		frappe.db.set(self, 'total_invoiced_amount', total)
 
 	def get_invoice_details(self, invoice_no):
 		"""	Pull details from invoices for referrence """
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index d916adb..449fca0 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -374,7 +374,7 @@
 			frappe.db.sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s
 					and parent = %s""", (self.amended_from,	self.c_form_no))
 
-			frappe.db.set(self.doc, 'c_form_no', '')
+			frappe.db.set(self, 'c_form_no', '')
 			
 	def update_current_stock(self):
 		for d in self.get('entries'):
@@ -422,14 +422,14 @@
 		if cint(self.is_pos) == 1:
 			if flt(self.paid_amount) == 0:
 				if self.cash_bank_account: 
-					frappe.db.set(self.doc, 'paid_amount', 
+					frappe.db.set(self, 'paid_amount', 
 						(flt(self.grand_total) - flt(self.write_off_amount)))
 				else:
 					# show message that the amount is not paid
-					frappe.db.set(self.doc,'paid_amount',0)
+					frappe.db.set(self,'paid_amount',0)
 					frappe.msgprint("Note: Payment Entry will not be created since 'Cash/Bank Account' was not specified.")
 		else:
-			frappe.db.set(self.doc,'paid_amount',0)
+			frappe.db.set(self,'paid_amount',0)
 		
 	def check_prev_docstatus(self):
 		for d in self.get('entries'):
@@ -609,7 +609,7 @@
 	def convert_to_recurring(self):
 		if self.convert_into_recurring_invoice:
 			if not self.recurring_id:
-				frappe.db.set(self.doc, "recurring_id",
+				frappe.db.set(self, "recurring_id",
 					make_autoname("RECINV/.#####"))
 			
 			self.set_next_date()
@@ -645,7 +645,7 @@
 		next_date = get_next_date(self.posting_date,
 			month_map[self.recurring_type], cint(self.repeat_on_day_of_month))
 		
-		frappe.db.set(self.doc, 'next_date', next_date)
+		frappe.db.set(self, 'next_date', next_date)
 	
 def get_next_date(dt, mcount, day=None):
 	dt = getdate(dt)
@@ -794,8 +794,8 @@
 
 
 @frappe.whitelist()
-def make_delivery_note(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_delivery_note(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		bean = frappe.bean(target)
@@ -808,7 +808,7 @@
 			flt(source_doc.rate)
 		target_doc.qty = flt(source_doc.qty) - flt(source_doc.delivered_qty)
 	
-	doclist = get_mapped_doclist("Sales Invoice", source_name, 	{
+	doclist = get_mapped_doc("Sales Invoice", source_name, 	{
 		"Sales Invoice": {
 			"doctype": "Delivery Note", 
 			"validation": {
@@ -835,6 +835,6 @@
 			},
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 	
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 7b1c24d..066afe0 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -135,7 +135,7 @@
 	def update_status(self, status):
 		self.check_modified_date()
 		# step 1:=> Set Status
-		frappe.db.set(self.doc,'status',cstr(status))
+		frappe.db.set(self,'status',cstr(status))
 
 		# step 2:=> Update Bin
 		self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
@@ -154,7 +154,7 @@
 		
 		purchase_controller.update_last_purchase_rate(self, is_submit = 1)
 		
-		frappe.db.set(self.doc,'status','Submitted')
+		frappe.db.set(self,'status','Submitted')
 	 
 	def on_cancel(self):
 		pc_obj = get_obj(dt = 'Purchase Common')		
@@ -172,7 +172,7 @@
 			msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
 			raise Exception
 
-		frappe.db.set(self.doc,'status','Cancelled')
+		frappe.db.set(self,'status','Cancelled')
 		self.update_prevdoc_status()
 		self.update_bin( is_submit = 0, is_stopped = 0)
 		pc_obj.update_last_purchase_rate(self, is_submit = 0)
@@ -181,8 +181,8 @@
 		pass
 		
 @frappe.whitelist()
-def make_purchase_receipt(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_purchase_receipt(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		bean = frappe.bean(target)
@@ -194,7 +194,7 @@
 		target.amount = (flt(obj.qty) - flt(obj.received_qty)) * flt(obj.rate)
 		target.base_amount = (flt(obj.qty) - flt(obj.received_qty)) * flt(obj.base_rate)
 
-	doclist = get_mapped_doclist("Purchase Order", source_name,	{
+	doclist = get_mapped_doc("Purchase Order", source_name,	{
 		"Purchase Order": {
 			"doctype": "Purchase Receipt", 
 			"validation": {
@@ -215,13 +215,13 @@
 			"doctype": "Purchase Taxes and Charges", 
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_purchase_invoice(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_purchase_invoice(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		bean = frappe.bean(target)
@@ -233,7 +233,7 @@
 		if flt(obj.base_rate):
 			target.qty = target.base_amount / flt(obj.base_rate)
 
-	doclist = get_mapped_doclist("Purchase Order", source_name,	{
+	doclist = get_mapped_doc("Purchase Order", source_name,	{
 		"Purchase Order": {
 			"doctype": "Purchase Invoice", 
 			"validation": {
@@ -253,6 +253,6 @@
 			"doctype": "Purchase Taxes and Charges", 
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index cb97d72..9179bc2 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -94,7 +94,7 @@
 	def after_rename(self, olddn, newdn, merge=False):
 		set_field = ''
 		if frappe.defaults.get_global_default('supp_master_name') == 'Supplier Name':
-			frappe.db.set(self.doc, "supplier_name", newdn)
+			frappe.db.set(self, "supplier_name", newdn)
 			self.update_contact()
 			set_field = ", supplier_name=%(newdn)s"
 		self.update_supplier_address(newdn, set_field)
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index 8a11bfe..ef48c79 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -7,9 +7,8 @@
 
 from erpnext.controllers.buying_controller import BuyingController
 class SupplierQuotation(BuyingController):
-	def __init__(self, doc, doclist=None):
-		self.doc, self.doclist = doc, doclist or []
-		self.tname, self.fname = "Supplier Quotation Item", "quotation_items"
+	tname = "Supplier Quotation Item"
+	fname = "quotation_items"
 	
 	def validate(self):
 		super(DocType, self).validate()
@@ -26,10 +25,10 @@
 		self.validate_uom_is_integer("uom", "qty")
 
 	def on_submit(self):
-		frappe.db.set(self.doc, "status", "Submitted")
+		frappe.db.set(self, "status", "Submitted")
 
 	def on_cancel(self):
-		frappe.db.set(self.doc, "status", "Cancelled")
+		frappe.db.set(self, "status", "Cancelled")
 		
 	def on_trash(self):
 		pass
@@ -53,8 +52,8 @@
 		pc.validate_for_items(self)
 
 @frappe.whitelist()
-def make_purchase_order(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_purchase_order(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		bean = frappe.bean(target)
@@ -64,7 +63,7 @@
 	def update_item(obj, target, source_parent):
 		target.conversion_factor = 1
 
-	doclist = get_mapped_doclist("Supplier Quotation", source_name,		{
+	doclist = get_mapped_doc("Supplier Quotation", source_name,		{
 		"Supplier Quotation": {
 			"doctype": "Purchase Order", 
 			"validation": {
@@ -88,6 +87,6 @@
 			"doctype": "Purchase Taxes and Charges", 
 			"add_if_empty": True
 		},
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index ebf84cd..d0e482e 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -103,7 +103,7 @@
 			self.net_total += item.base_amount
 			self.net_total_import += item.amount
 			
-		self.round_floats_in(self.doc, ["net_total", "net_total_import"])
+		self.round_floats_in(self, ["net_total", "net_total_import"])
 		
 	def calculate_totals(self):
 		self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist 
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index def5eb0..5495e6f 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -172,7 +172,7 @@
 			self.net_total += item.base_amount
 			self.net_total_export += item.amount
 		
-		self.round_floats_in(self.doc, ["net_total", "net_total_export"])
+		self.round_floats_in(self, ["net_total", "net_total_export"])
 				
 	def calculate_totals(self):
 		self.grand_total = flt(self.tax_doclist and \
@@ -223,7 +223,7 @@
 		# write_off_amount is only for POS Invoice
 		# total_advance is only for non POS Invoice
 		if self.doctype == "Sales Invoice" and self.docstatus == 0:
-			self.round_floats_in(self.doc, ["grand_total", "total_advance", "write_off_amount",
+			self.round_floats_in(self, ["grand_total", "total_advance", "write_off_amount",
 				"paid_amount"])
 			total_amount_to_pay = self.grand_total - self.write_off_amount
 			self.outstanding_amount = flt(total_amount_to_pay - self.total_advance \
@@ -231,7 +231,7 @@
 		
 	def calculate_commission(self):
 		if self.meta.get_field("commission_rate"):
-			self.round_floats_in(self.doc, ["net_total", "commission_rate"])
+			self.round_floats_in(self, ["net_total", "commission_rate"])
 			if self.commission_rate > 100.0:
 				msgprint(_(self.meta.get_label("commission_rate")) + " " + 
 					_("cannot be greater than 100"), raise_exception=True)
diff --git a/erpnext/hr/doctype/appraisal/appraisal.py b/erpnext/hr/doctype/appraisal/appraisal.py
index 4fd1f99..b7b1421 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.py
+++ b/erpnext/hr/doctype/appraisal/appraisal.py
@@ -6,12 +6,11 @@
 
 from frappe.utils import cstr, flt, getdate
 from frappe.model.bean import getlist
-from frappe import msgprint
-
+from frappe import msgprint, _
+from frappe.model.mapper import get_mapped_doc
 from frappe.model.document import Document
 
 class Appraisal(Document):
-
 	def validate(self):
 		if not self.status:
 			self.status = "Draft"
@@ -21,26 +20,23 @@
 		self.calculate_total()
 
 	def get_employee_name(self):
-		emp_nm = frappe.db.sql("select employee_name from `tabEmployee` where name=%s", self.employee)
-		emp_nm= emp_nm and emp_nm[0][0] or ''
-		self.employee_name = emp_nm
-		return emp_nm
+		self.employee_name = frappe.db.get_value("Employee", self.employee, "employee_name")
+		return self.employee_name
 		
 	def validate_dates(self):
 		if getdate(self.start_date) > getdate(self.end_date):
-			msgprint("End Date can not be less than Start Date")
-			raise Exception
+			frappe.throw(_("End Date can not be less than Start Date"))
 	
 	def validate_existing_appraisal(self):
 		chk = frappe.db.sql("""select name from `tabAppraisal` where employee=%s 
 			and (status='Submitted' or status='Completed') 
 			and ((start_date>=%s and start_date<=%s) 
-			or (end_date>=%s and end_date<=%s))""",(self.employee,self.start_date,self.end_date,self.start_date,self.end_date))
+			or (end_date>=%s and end_date<=%s))""",
+			(self.employee,self.start_date,self.end_date,self.start_date,self.end_date))
 		if chk:
-			msgprint("You have already created Appraisal "\
+			frappe.throw("You have already created Appraisal "\
 				+cstr(chk[0][0])+" in the current date range for employee "\
 				+cstr(self.employee_name))
-			raise Exception
 	
 	def calculate_total(self):
 		total, total_w  = 0, 0
@@ -61,22 +57,20 @@
 		self.total_score = total
 			
 	def on_submit(self):
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 	
 	def on_cancel(self): 
-		frappe.db.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self, 'status', 'Cancelled')
 
 @frappe.whitelist()
-def fetch_appraisal_template(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
-	
-	doclist = get_mapped_doclist("Appraisal Template", source_name, {
+def fetch_appraisal_template(source_name, target_doc=None):
+	target_doc = get_mapped_doc("Appraisal Template", source_name, {
 		"Appraisal Template": {
 			"doctype": "Appraisal", 
 		}, 
 		"Appraisal Template Goal": {
 			"doctype": "Appraisal Goal", 
 		}
-	}, target_doclist)
+	}, target_doc)
 
-	return [d.fields for d in doclist]
\ No newline at end of file
+	return target_doc
\ No newline at end of file
diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.py b/erpnext/hr/doctype/appraisal_template/appraisal_template.py
index bd3cc5f..930d509 100644
--- a/erpnext/hr/doctype/appraisal_template/appraisal_template.py
+++ b/erpnext/hr/doctype/appraisal_template/appraisal_template.py
@@ -8,10 +8,9 @@
 from frappe.model.document import Document
 
 class AppraisalTemplate(Document):
-		
 	def validate(self):
 		self.total_points = 0
-		for d in self.doclist.get({"doctype":"Appraisal Template Goal"}):
+		for d in self.get("kra_sheet"):
 			self.total_points += int(d.per_weightage or 0)
 		
 		if int(self.total_points) != 100:
diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py
index 1478e9f..24dd188 100644
--- a/erpnext/hr/doctype/attendance/attendance.py
+++ b/erpnext/hr/doctype/attendance/attendance.py
@@ -6,8 +6,6 @@
 
 from frappe.utils import getdate, nowdate
 from frappe import msgprint, _
-
-
 from frappe.model.document import Document
 
 class Attendance(Document):
@@ -58,4 +56,4 @@
 		# this is done because sometimes user entered wrong employee name 
 		# while uploading employee attendance
 		employee_name = frappe.db.get_value("Employee", self.employee, "employee_name")
-		frappe.db.set(self.doc, 'employee_name', employee_name)
\ No newline at end of file
+		frappe.db.set(self, 'employee_name', employee_name)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 32812e2..f16f615 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -9,9 +9,6 @@
 from frappe.model.document import Document
 
 class LeaveAllocation(Document):
-	def __init__(self, doc, doclist):
-		self.doc, self.doclist = doc, doclist
-		
 	def validate(self):
 		self.validate_new_leaves_allocated_value()
 		self.check_existing_leave_allocation()
@@ -84,7 +81,7 @@
 			self.leave_type)
 		cf = cf and cint(cf[0][0]) or 0
 		if not cf:
-			frappe.db.set(self.doc,'carry_forward',0)
+			frappe.db.set(self,'carry_forward',0)
 			msgprint("Sorry! You cannot carry forward %s" % (self.leave_type),
 				raise_exception=1)
 
@@ -107,8 +104,8 @@
 
 	def get_total_allocated_leaves(self):
 		leave_det = self.get_carry_forwarded_leaves()
-		frappe.db.set(self.doc,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
-		frappe.db.set(self.doc,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
+		frappe.db.set(self,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
+		frappe.db.set(self,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
 
 	def check_for_leave_application(self):
 		exists = frappe.db.sql("""select name from `tabLeave Application`
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
index 57bb224..81ab56b 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
@@ -14,11 +14,6 @@
 from frappe.model.document import Document
 
 class LeaveControlPanel(Document):
-	def __init__(self, doc, doclist):
-		self.doc = doc
-		self.doclist = doclist	 
-	
-
 	def get_employees(self):		
 		lst1 = [[self.employee_type,"employment_type"],[self.branch,"branch"],[self.designation,"designation"],[self.department, "department"],[self.grade,"grade"]]
 		condition = "where "
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index dbccaef..c81f22d 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -34,8 +34,8 @@
 		return struct and struct[0][0] or ''
 
 	def pull_sal_struct(self, struct):
-		from erpnext.hr.doctype.salary_structure.salary_structure import get_mapped_doclist
-		self.doclist = get_mapped_doclist(struct, self.doclist)
+		from erpnext.hr.doctype.salary_structure.salary_structure import get_mapped_doc
+		self.doclist = get_mapped_doc(struct, self.doclist)
 		
 	def pull_emp_details(self):
 		emp = frappe.db.get_value("Employee", self.employee, 
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index 340ffe9..4c01073 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -70,11 +70,11 @@
 		self.validate_amount()
 		
 @frappe.whitelist()
-def make_salary_slip(source_name, target_doclist=None):
-	return [d.fields for d in get_mapped_doclist(source_name, target_doclist)]
+def make_salary_slip(source_name, target_doc=None):
+	return [d.fields for d in get_mapped_doc(source_name, target_doc)]
 	
-def get_mapped_doclist(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def get_mapped_doc(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def postprocess(source, target):
 		sal_slip = frappe.bean(target)
@@ -82,7 +82,7 @@
 		sal_slip.run_method("get_leave_details")
 		sal_slip.run_method("calculate_net_pay")
 
-	doclist = get_mapped_doclist("Salary Structure", source_name, {
+	doclist = get_mapped_doc("Salary Structure", source_name, {
 		"Salary Structure": {
 			"doctype": "Salary Slip", 
 			"field_map": {
@@ -107,6 +107,6 @@
 			],
 			"add_if_empty": True
 		}
-	}, target_doclist, postprocess)
+	}, target_doc, postprocess)
 
 	return doclist
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index d3b822b..e3199f9 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -45,8 +45,8 @@
 		self.manage_default_bom()
 
 	def on_cancel(self):
-		frappe.db.set(self.doc, "is_active", 0)
-		frappe.db.set(self.doc, "is_default", 0)
+		frappe.db.set(self, "is_active", 0)
+		frappe.db.set(self, "is_default", 0)
 
 		# check if used in any other bom
 		self.validate_bom_links()
@@ -174,12 +174,12 @@
 		"""
 		if self.is_default and self.is_active:
 			from frappe.model.utils import set_default
-			set_default(self.doc, "item")
+			set_default(self, "item")
 			frappe.db.set_value("Item", self.item, "default_bom", self.name)
 		
 		else:
 			if not self.is_active:
-				frappe.db.set(self.doc, "is_default", 0)
+				frappe.db.set(self, "is_default", 0)
 			
 			frappe.db.sql("update `tabItem` set default_bom = null where name = %s and default_bom = %s", 
 				 (self.item, self.name))
diff --git a/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py b/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
index 96696c7..cf7750a 100644
--- a/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
+++ b/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
@@ -10,10 +10,6 @@
 from frappe.model.document import Document
 
 class BomReplaceTool(Document):
-	def __init__( self, doc, doclist=[]):
-		self.doc = doc
-		self.doclist = doclist
-		
 	def replace_bom(self):
 		self.validate_bom()
 		self.update_new_bom()
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index 4921d06..a22088a 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -94,20 +94,20 @@
 
 	def update_status(self, status):
 		if status == 'Stopped':
-			frappe.db.set(self.doc, 'status', cstr(status))
+			frappe.db.set(self, 'status', cstr(status))
 		else:
 			if flt(self.qty) == flt(self.produced_qty):
-				frappe.db.set(self.doc, 'status', 'Completed')
+				frappe.db.set(self, 'status', 'Completed')
 			if flt(self.qty) > flt(self.produced_qty):
-				frappe.db.set(self.doc, 'status', 'In Process')
+				frappe.db.set(self, 'status', 'In Process')
 			if flt(self.produced_qty) == 0:
-				frappe.db.set(self.doc, 'status', 'Submitted')
+				frappe.db.set(self, 'status', 'Submitted')
 
 
 	def on_submit(self):
 		if not self.wip_warehouse:
 			frappe.throw(_("WIP Warehouse required before Submit"))
-		frappe.db.set(self.doc,'status', 'Submitted')
+		frappe.db.set(self,'status', 'Submitted')
 		self.update_planned_qty(self.qty)
 		
 
@@ -119,7 +119,7 @@
 			frappe.throw("""Submitted Stock Entry %s exists against this production order. 
 				Hence can not be cancelled.""" % stock_entry[0][0])
 
-		frappe.db.set(self.doc,'status', 'Cancelled')
+		frappe.db.set(self,'status', 'Cancelled')
 		self.update_planned_qty(-self.qty)
 
 	def update_planned_qty(self, qty):
diff --git a/erpnext/manufacturing/doctype/workstation/workstation.py b/erpnext/manufacturing/doctype/workstation/workstation.py
index c2c492e..ec026c5 100644
--- a/erpnext/manufacturing/doctype/workstation/workstation.py
+++ b/erpnext/manufacturing/doctype/workstation/workstation.py
@@ -8,20 +8,16 @@
 from frappe.model.document import Document
 
 class Workstation(Document):
-  def __init__(self, doc, doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-
-  def update_bom_operation(self):
-      bom_list = frappe.db.sql("""select DISTINCT parent from `tabBOM Operation` 
-	  	where workstation = %s""", self.name)
-      for bom_no in bom_list:
-        frappe.db.sql("""update `tabBOM Operation` set hour_rate = %s 
-			where parent = %s and workstation = %s""", 
-			(self.hour_rate, bom_no[0], self.name))
-  
-  def on_update(self):
-    frappe.db.set(self.doc, 'overhead', flt(self.hour_rate_electricity) + 
+	def update_bom_operation(self):
+		bom_list = frappe.db.sql("""select DISTINCT parent from `tabBOM Operation` 
+			where workstation = %s""", self.name)
+		for bom_no in bom_list:
+			frappe.db.sql("""update `tabBOM Operation` set hour_rate = %s 
+				where parent = %s and workstation = %s""", 
+				(self.hour_rate, bom_no[0], self.name))
+	
+	def on_update(self):
+		frappe.db.set(self, 'overhead', flt(self.hour_rate_electricity) + 
 		flt(self.hour_rate_consumable) + flt(self.hour_rate_rent))
-    frappe.db.set(self.doc, 'hour_rate', flt(self.hour_rate_labour) + flt(self.overhead))
-    self.update_bom_operation()
\ No newline at end of file
+		frappe.db.set(self, 'hour_rate', flt(self.hour_rate_labour) + flt(self.overhead))
+		self.update_bom_operation()
\ No newline at end of file
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index c9e7992..e5364d0 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -128,7 +128,7 @@
 	def after_rename(self, olddn, newdn, merge=False):
 		set_field = ''
 		if frappe.defaults.get_global_default('cust_master_name') == 'Customer Name':
-			frappe.db.set(self.doc, "customer_name", newdn)
+			frappe.db.set(self, "customer_name", newdn)
 			self.update_contact()
 			set_field = ", customer_name=%(newdn)s"
 		self.update_customer_address(newdn, set_field)
diff --git a/erpnext/selling/doctype/installation_note/installation_note.py b/erpnext/selling/doctype/installation_note/installation_note.py
index 3b1ea40..db6d7ec 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.py
+++ b/erpnext/selling/doctype/installation_note/installation_note.py
@@ -100,12 +100,12 @@
 			msgprint("Please fetch items from Delivery Note selected", raise_exception=1)
 	
 	def on_update(self):
-		frappe.db.set(self.doc, 'status', 'Draft')
+		frappe.db.set(self, 'status', 'Draft')
 	
 	def on_submit(self):
 		self.validate_serial_no()
 		self.update_prevdoc_status()
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		for d in self.get('installed_item_details'):
@@ -115,4 +115,4 @@
 					frappe.db.set_value("Serial No", sr_no, "status", "Delivered")
 
 		self.update_prevdoc_status()
-		frappe.db.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self, 'status', 'Cancelled')
diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index 908ab48..9852429 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -71,11 +71,11 @@
 			"status": ["!=", "Lost"]})
 
 @frappe.whitelist()
-def make_customer(source_name, target_doclist=None):
-	return _make_customer(source_name, target_doclist)
+def make_customer(source_name, target_doc=None):
+	return _make_customer(source_name, target_doc)
 
-def _make_customer(source_name, target_doclist=None, ignore_permissions=False):
-	from frappe.model.mapper import get_mapped_doclist
+def _make_customer(source_name, target_doc=None, ignore_permissions=False):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		if source.company_name:
@@ -87,7 +87,7 @@
 			
 		target[0].customer_group = frappe.db.get_default("customer_group")
 			
-	doclist = get_mapped_doclist("Lead", source_name, 
+	doclist = get_mapped_doc("Lead", source_name, 
 		{"Lead": {
 			"doctype": "Customer",
 			"field_map": {
@@ -96,15 +96,15 @@
 				"contact_no": "phone_1",
 				"fax": "fax_1"
 			}
-		}}, target_doclist, set_missing_values, ignore_permissions=ignore_permissions)
+		}}, target_doc, set_missing_values, ignore_permissions=ignore_permissions)
 		
 	return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_opportunity(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_opportunity(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 		
-	doclist = get_mapped_doclist("Lead", source_name, 
+	doclist = get_mapped_doc("Lead", source_name, 
 		{"Lead": {
 			"doctype": "Opportunity",
 			"field_map": {
@@ -116,7 +116,7 @@
 				"email_id": "contact_email",
 				"mobile_no": "contact_mobile"
 			}
-		}}, target_doclist)
+		}}, target_doc)
 		
 	return [d if isinstance(d, dict) else d.fields for d in doclist]
 	
diff --git a/erpnext/selling/doctype/opportunity/opportunity.py b/erpnext/selling/doctype/opportunity/opportunity.py
index 4c6863c..8a103be 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.py
+++ b/erpnext/selling/doctype/opportunity/opportunity.py
@@ -118,8 +118,8 @@
 		
 	def declare_enquiry_lost(self,arg):
 		if not self.has_quotation():
-			frappe.db.set(self.doc, 'status', 'Lost')
-			frappe.db.set(self.doc, 'order_lost_reason', arg)
+			frappe.db.set(self, 'status', 'Lost')
+			frappe.db.set(self, 'order_lost_reason', arg)
 		else:
 			frappe.throw(_("Cannot declare as lost, because Quotation has been made."))
 
@@ -130,15 +130,15 @@
 		return frappe.db.get_value("Quotation Item", {"prevdoc_docname": self.name, "docstatus": 1})
 		
 @frappe.whitelist()
-def make_quotation(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_quotation(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		quotation = frappe.bean(target)
 		quotation.run_method("onload_post_render")
 		quotation.run_method("calculate_taxes_and_totals")
 	
-	doclist = get_mapped_doclist("Opportunity", source_name, {
+	doclist = get_mapped_doc("Opportunity", source_name, {
 		"Opportunity": {
 			"doctype": "Quotation", 
 			"field_map": {
@@ -159,6 +159,6 @@
 			},
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 		
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index 8f816c8..bcccdaa 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -59,8 +59,8 @@
 	
 	def declare_order_lost(self, arg):
 		if not self.has_sales_order():
-			frappe.db.set(self.doc, 'status', 'Lost')
-			frappe.db.set(self.doc, 'order_lost_reason', arg)
+			frappe.db.set(self, 'status', 'Lost')
+			frappe.db.set(self, 'order_lost_reason', arg)
 			self.update_opportunity()
 		else:
 			frappe.throw(_("Cannot set as Lost as Sales Order is made."))
@@ -95,11 +95,11 @@
 		
 	
 @frappe.whitelist()
-def make_sales_order(source_name, target_doclist=None):
-	return _make_sales_order(source_name, target_doclist)
+def make_sales_order(source_name, target_doc=None):
+	return _make_sales_order(source_name, target_doc)
 	
-def _make_sales_order(source_name, target_doclist=None, ignore_permissions=False):
-	from frappe.model.mapper import get_mapped_doclist
+def _make_sales_order(source_name, target_doc=None, ignore_permissions=False):
+	from frappe.model.mapper import get_mapped_doc
 	
 	customer = _make_customer(source_name, ignore_permissions)
 	
@@ -112,7 +112,7 @@
 		si.ignore_permissions = ignore_permissions
 		si.run_method("onload_post_render")
 			
-	doclist = get_mapped_doclist("Quotation", source_name, {
+	doclist = get_mapped_doc("Quotation", source_name, {
 			"Quotation": {
 				"doctype": "Sales Order", 
 				"validation": {
@@ -133,7 +133,7 @@
 				"doctype": "Sales Team",
 				"add_if_empty": True
 			}
-		}, target_doclist, set_missing_values, ignore_permissions=ignore_permissions)
+		}, target_doc, set_missing_values, ignore_permissions=ignore_permissions)
 		
 	# postprocess: fetch shipping address, set missing values
 		
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 98ccf11..ff235b1 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -9,20 +9,16 @@
 from frappe.model.bean import getlist
 from frappe.model.code import get_obj
 from frappe import msgprint
-from frappe.model.mapper import get_mapped_doclist
+from frappe.model.mapper import get_mapped_doc
 
 from erpnext.controllers.selling_controller import SellingController
 
 class SalesOrder(SellingController):
-	def __init__(self, doc, doclist=None):
-		self.doc = doc
-		if not doclist: doclist = []
-		self.doclist = doclist
-		self.tname = 'Sales Order Item'
-		self.fname = 'sales_order_details'
-		self.person_tname = 'Target Detail'
-		self.partner_tname = 'Partner Target Detail'
-		self.territory_tname = 'Territory Target Detail'
+	tname = 'Sales Order Item'
+	fname = 'sales_order_details'
+	person_tname = 'Target Detail'
+	partner_tname = 'Partner Target Detail'
+	territory_tname = 'Territory Target Detail'
 	
 	def validate_mandatory(self):
 		# validate transaction date v/s delivery date
@@ -168,7 +164,7 @@
 		get_obj('Authorization Control').validate_approving_authority(self.doctype, self.grand_total, self)
 		
 		self.update_prevdoc_status('submit')
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		# Cannot cancel stopped SO
@@ -180,7 +176,7 @@
 		
 		self.update_prevdoc_status('cancel')
 		
-		frappe.db.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self, 'status', 'Cancelled')
 		
 	def check_nextdoc_docstatus(self):
 		# Checks Delivery Note
@@ -224,14 +220,14 @@
 	def stop_sales_order(self):
 		self.check_modified_date()
 		self.update_stock_ledger(-1)
-		frappe.db.set(self.doc, 'status', 'Stopped')
+		frappe.db.set(self, 'status', 'Stopped')
 		msgprint("""%s: %s has been Stopped. To make transactions against this Sales Order 
 			you need to Unstop it.""" % (self.doctype, self.name))
 
 	def unstop_sales_order(self):
 		self.check_modified_date()
 		self.update_stock_ledger(1)
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 		msgprint("%s: %s has been Unstopped" % (self.doctype, self.name))
 
 
@@ -261,11 +257,11 @@
 	bean.run_method("onload_post_render")
 	
 @frappe.whitelist()
-def make_material_request(source_name, target_doclist=None):	
+def make_material_request(source_name, target_doc=None):	
 	def postprocess(source, doclist):
 		doclist[0].material_request_type = "Purchase"
 	
-	doclist = get_mapped_doclist("Sales Order", source_name, {
+	doclist = get_mapped_doc("Sales Order", source_name, {
 		"Sales Order": {
 			"doctype": "Material Request", 
 			"validation": {
@@ -279,18 +275,18 @@
 				"stock_uom": "uom"
 			}
 		}
-	}, target_doclist, postprocess)
+	}, target_doc, postprocess)
 	
 	return [(d if isinstance(d, dict) else d.fields) for d in doclist]
 
 @frappe.whitelist()
-def make_delivery_note(source_name, target_doclist=None):	
+def make_delivery_note(source_name, target_doc=None):	
 	def update_item(obj, target, source_parent):
 		target.base_amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.base_rate)
 		target.amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.rate)
 		target.qty = flt(obj.qty) - flt(obj.delivered_qty)
 			
-	doclist = get_mapped_doclist("Sales Order", source_name, {
+	doclist = get_mapped_doc("Sales Order", source_name, {
 		"Sales Order": {
 			"doctype": "Delivery Note", 
 			"field_map": {
@@ -319,12 +315,12 @@
 			"doctype": "Sales Team",
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 	
 	return [d.fields for d in doclist]
 
 @frappe.whitelist()
-def make_sales_invoice(source_name, target_doclist=None):
+def make_sales_invoice(source_name, target_doc=None):
 	def set_missing_values(source, target):
 		bean = frappe.bean(target)
 		bean.is_pos = 0
@@ -335,7 +331,7 @@
 		target.base_amount = target.amount * flt(source_parent.conversion_rate)
 		target.qty = obj.rate and target.amount / flt(obj.rate) or obj.qty
 			
-	doclist = get_mapped_doclist("Sales Order", source_name, {
+	doclist = get_mapped_doc("Sales Order", source_name, {
 		"Sales Order": {
 			"doctype": "Sales Invoice", 
 			"validation": {
@@ -359,18 +355,18 @@
 			"doctype": "Sales Team", 
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 	
 	return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_maintenance_schedule(source_name, target_doclist=None):
+def make_maintenance_schedule(source_name, target_doc=None):
 	maint_schedule = frappe.db.sql("""select t1.name 
 		from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 
 		where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1""", source_name)
 		
 	if not maint_schedule:
-		doclist = get_mapped_doclist("Sales Order", source_name, {
+		doclist = get_mapped_doc("Sales Order", source_name, {
 			"Sales Order": {
 				"doctype": "Maintenance Schedule", 
 				"field_map": {
@@ -387,19 +383,19 @@
 				},
 				"add_if_empty": True
 			}
-		}, target_doclist)
+		}, target_doc)
 	
 		return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_maintenance_visit(source_name, target_doclist=None):
+def make_maintenance_visit(source_name, target_doc=None):
 	visit = frappe.db.sql("""select t1.name 
 		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
 		where t2.parent=t1.name and t2.prevdoc_docname=%s 
 		and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name)
 		
 	if not visit:
-		doclist = get_mapped_doclist("Sales Order", source_name, {
+		doclist = get_mapped_doc("Sales Order", source_name, {
 			"Sales Order": {
 				"doctype": "Maintenance Visit", 
 				"field_map": {
@@ -417,6 +413,6 @@
 				},
 				"add_if_empty": True
 			}
-		}, target_doclist)
+		}, target_doc)
 	
 		return [d.fields for d in doclist]
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index b6b2305..2aa3245 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -107,8 +107,8 @@
 			self.import_chart_of_account()
 		else:
 			self.create_standard_accounts()
-			frappe.db.set(self.doc, "receivables_group", "Accounts Receivable - " + self.abbr)
-			frappe.db.set(self.doc, "payables_group", "Accounts Payable - " + self.abbr)
+			frappe.db.set(self, "receivables_group", "Accounts Receivable - " + self.abbr)
+			frappe.db.set(self, "payables_group", "Accounts Payable - " + self.abbr)
 			
 	def import_chart_of_account(self):
 		chart = frappe.bean("Chart of Accounts", self.chart_of_accounts)
@@ -132,7 +132,7 @@
 					"group_or_ledger": "Ledger", "company": self.name})
 
 				if account and not self.get(field):
-					frappe.db.set(self.doc, field, account)
+					frappe.db.set(self, field, account)
 			
 		_set_default_accounts({
 			"default_cash_account": "Cash",
@@ -170,7 +170,7 @@
 				cc_bean.ignore_mandatory = True
 			cc_bean.insert()
 			
-		frappe.db.set(self.doc, "cost_center", "Main - " + self.abbr)
+		frappe.db.set(self, "cost_center", "Main - " + self.abbr)
 
 	def on_trash(self):
 		"""
@@ -200,7 +200,7 @@
 			frappe.throw(_("Sorry, companies cannot be merged"))
 	
 	def after_rename(self, olddn, newdn, merge=False):
-		frappe.db.set(self.doc, "company_name", newdn)
+		frappe.db.set(self, "company_name", newdn)
 
 		frappe.db.sql("""update `tabDefaultValue` set defvalue=%s 
 			where defkey='Company' and defvalue=%s""", (newdn, olddn))
diff --git a/erpnext/setup/doctype/notification_control/notification_control.py b/erpnext/setup/doctype/notification_control/notification_control.py
index 9557171..8594856 100644
--- a/erpnext/setup/doctype/notification_control/notification_control.py
+++ b/erpnext/setup/doctype/notification_control/notification_control.py
@@ -19,6 +19,6 @@
 
 	def set_message(self, arg = ''):
 		fn = self.select_transaction.lower().replace(' ', '_') + '_message'
-		frappe.db.set(self.doc, fn, self.custom_message)
+		frappe.db.set(self, fn, self.custom_message)
 		msgprint("Custom Message for %s updated!" % self.select_transaction)
 
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 617a883..d48024f 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -9,7 +9,7 @@
 from frappe.model.code import get_obj
 from frappe import msgprint, _
 import frappe.defaults
-from frappe.model.mapper import get_mapped_doclist
+from frappe.model.mapper import get_mapped_doc
 from erpnext.stock.utils import update_bin
 from erpnext.controllers.selling_controller import SellingController
 
@@ -163,7 +163,7 @@
 		self.make_gl_entries()
 
 		# set DN status
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 
 
 	def on_cancel(self):
@@ -174,7 +174,7 @@
 		
 		self.update_stock_ledger()
 
-		frappe.db.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self, 'status', 'Cancelled')
 		self.cancel_packing_slips()
 		
 		self.make_cancel_gl_entries()
@@ -285,7 +285,7 @@
 	return invoiced_qty_map
 
 @frappe.whitelist()
-def make_sales_invoice(source_name, target_doclist=None):
+def make_sales_invoice(source_name, target_doc=None):
 	invoiced_qty_map = get_invoiced_qty_map(source_name)
 	
 	def update_accounts(source, target):
@@ -305,7 +305,7 @@
 	def update_item(source_doc, target_doc, source_parent):
 		target_doc.qty = source_doc.qty - invoiced_qty_map.get(source_doc.name, 0)
 	
-	doclist = get_mapped_doclist("Delivery Note", source_name, 	{
+	doclist = get_mapped_doc("Delivery Note", source_name, 	{
 		"Delivery Note": {
 			"doctype": "Sales Invoice", 
 			"validation": {
@@ -334,17 +334,17 @@
 			},
 			"add_if_empty": True
 		}
-	}, target_doclist, update_accounts)
+	}, target_doc, update_accounts)
 	
 	return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_installation_note(source_name, target_doclist=None):
+def make_installation_note(source_name, target_doc=None):
 	def update_item(obj, target, source_parent):
 		target.qty = flt(obj.qty) - flt(obj.installed_qty)
 		target.serial_no = obj.serial_no
 	
-	doclist = get_mapped_doclist("Delivery Note", source_name, 	{
+	doclist = get_mapped_doc("Delivery Note", source_name, 	{
 		"Delivery Note": {
 			"doctype": "Installation Note", 
 			"validation": {
@@ -361,6 +361,6 @@
 			"postprocess": update_item,
 			"condition": lambda doc: doc.installed_qty < doc.qty
 		}
-	}, target_doclist)
+	}, target_doc)
 
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 76e6aa2..30ebb1b 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -100,7 +100,7 @@
 				update_bin(args)		
 		
 	def on_submit(self):
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 		self.update_bin(is_submit = 1, is_stopped = 0)
 	
 	def check_modified_date(self):
@@ -118,7 +118,7 @@
 		self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
 
 		# Step 2:=> Set status 
-		frappe.db.set(self.doc, 'status', cstr(status))
+		frappe.db.set(self, 'status', cstr(status))
 		
 		# Step 3:=> Acknowledge User
 		msgprint(self.doctype + ": " + self.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
@@ -137,7 +137,7 @@
 		self.update_bin(is_submit = 0, is_stopped = (cstr(self.status) == 'Stopped') and 1 or 0)
 		
 		# Step 5:=> Set Status
-		frappe.db.set(self.doc,'status','Cancelled')
+		frappe.db.set(self,'status','Cancelled')
 		
 	def update_completed_qty(self, mr_items=None):
 		if self.material_request_type != "Transfer":
@@ -217,8 +217,8 @@
 			"posting_date": bean.posting_date,
 		})
 
-def set_missing_values(source, target_doclist):
-	po = frappe.bean(target_doclist)
+def set_missing_values(source, target_doc):
+	po = frappe.bean(target_doc)
 	po.run_method("set_missing_values")
 	
 def update_item(obj, target, source_parent):
@@ -226,10 +226,10 @@
 	target.qty = flt(obj.qty) - flt(obj.ordered_qty)
 
 @frappe.whitelist()
-def make_purchase_order(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_purchase_order(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 
-	doclist = get_mapped_doclist("Material Request", source_name, 	{
+	doclist = get_mapped_doc("Material Request", source_name, 	{
 		"Material Request": {
 			"doctype": "Purchase Order", 
 			"validation": {
@@ -248,34 +248,34 @@
 			],
 			"postprocess": update_item
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_purchase_order_based_on_supplier(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
-	if target_doclist:
-		if isinstance(target_doclist, basestring):
+def make_purchase_order_based_on_supplier(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
+	if target_doc:
+		if isinstance(target_doc, basestring):
 			import json
-			target_doclist = frappe.doclist(json.loads(target_doclist))
-		target_doclist = target_doclist.get({"parentfield": ["!=", "po_details"]})
+			target_doc = frappe.doclist(json.loads(target_doc))
+		target_doc = target_doc.get({"parentfield": ["!=", "po_details"]})
 		
 	material_requests, supplier_items = get_material_requests_based_on_supplier(source_name)
 	
-	def postprocess(source, target_doclist):
-		target_doclist[0].supplier = source_name
-		set_missing_values(source, target_doclist)
+	def postprocess(source, target_doc):
+		target_doc[0].supplier = source_name
+		set_missing_values(source, target_doc)
 		
-		po_items = target_doclist.get({"parentfield": "po_details"})
-		target_doclist = target_doclist.get({"parentfield": ["!=", "po_details"]}) + \
+		po_items = target_doc.get({"parentfield": "po_details"})
+		target_doc = target_doc.get({"parentfield": ["!=", "po_details"]}) + \
 			[d for d in po_items 
 				if d.get("item_code") in supplier_items and d.get("qty") > 0]
 		
-		return target_doclist
+		return target_doc
 		
 	for mr in material_requests:
-		target_doclist = get_mapped_doclist("Material Request", mr, 	{
+		target_doc = get_mapped_doc("Material Request", mr, 	{
 			"Material Request": {
 				"doctype": "Purchase Order", 
 			}, 
@@ -290,9 +290,9 @@
 				],
 				"postprocess": update_item
 			}
-		}, target_doclist, postprocess)
+		}, target_doc, postprocess)
 	
-	return [d.fields for d in target_doclist]
+	return [d.fields for d in target_doc]
 	
 def get_material_requests_based_on_supplier(supplier):
 	supplier_items = [d[0] for d in frappe.db.get_values("Item", 
@@ -309,10 +309,10 @@
 	return material_requests, supplier_items
 	
 @frappe.whitelist()
-def make_supplier_quotation(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_supplier_quotation(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 
-	doclist = get_mapped_doclist("Material Request", source_name, {
+	doclist = get_mapped_doc("Material Request", source_name, {
 		"Material Request": {
 			"doctype": "Supplier Quotation", 
 			"validation": {
@@ -328,13 +328,13 @@
 				"parenttype": "prevdoc_doctype"
 			}
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
 	
 @frappe.whitelist()
-def make_stock_entry(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_stock_entry(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def update_item(obj, target, source_parent):
 		target.conversion_factor = 1
@@ -346,7 +346,7 @@
 		se = frappe.bean(target)
 		se.run_method("get_stock_and_rate")
 
-	doclist = get_mapped_doclist("Material Request", source_name, {
+	doclist = get_mapped_doc("Material Request", source_name, {
 		"Material Request": {
 			"doctype": "Stock Entry", 
 			"validation": {
@@ -364,6 +364,6 @@
 			},
 			"postprocess": update_item
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index b6e0539..74c8cff 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -229,7 +229,7 @@
 		get_obj('Authorization Control').validate_approving_authority(self.doctype, self.company, self.grand_total)
 
 		# Set status as Submitted
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 
 		self.update_prevdoc_status()
 		
@@ -267,7 +267,7 @@
 			frappe.throw("Purchase Invoice : " + cstr(submitted[0][0]) + 
 				" has already been submitted !")
 		
-		frappe.db.set(self.doc,'status','Cancelled')
+		frappe.db.set(self,'status','Cancelled')
 
 		self.update_ordered_qty()
 		
@@ -295,14 +295,14 @@
 		
 	
 @frappe.whitelist()
-def make_purchase_invoice(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_purchase_invoice(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def set_missing_values(source, target):
 		bean = frappe.bean(target)
 		bean.run_method("set_missing_values")
 
-	doclist = get_mapped_doclist("Purchase Receipt", source_name,	{
+	doclist = get_mapped_doc("Purchase Receipt", source_name,	{
 		"Purchase Receipt": {
 			"doctype": "Purchase Invoice", 
 			"validation": {
@@ -322,6 +322,6 @@
 			"doctype": "Purchase Taxes and Charges", 
 			"add_if_empty": True
 		}
-	}, target_doclist, set_missing_values)
+	}, target_doc, set_missing_values)
 
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 88b2602..333f3f7 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -21,9 +21,8 @@
 class SerialNoDuplicateError(ValidationError): pass
 
 class SerialNo(StockController):
-	def __init__(self, doc, doclist=None):
-		self.doc = doc
-		self.doclist = doclist or []
+	def __init__(self, arg1, arg2=None):
+		super(SerialNo, self).__init__(arg1, arg2)
 		self.via_stock_ledger = False
 
 	def validate(self):
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index 69217b8..0482dd3 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -29,7 +29,7 @@
 		self.actual_amt_check()
 		
 		from erpnext.stock.doctype.serial_no.serial_no import process_serial_no
-		process_serial_no(self.doc)
+		process_serial_no(self)
 
 	#check for item quantity available in stock
 	def actual_amt_check(self):
diff --git a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index 6c49ed9..28972d3 100644
--- a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -10,9 +10,6 @@
 from frappe.model.document import Document
 
 class StockUomReplaceUtility(Document):
-	def __init__(self, d, dl=[]):
-		self.doc, self.doclist = d,dl
-
 	def validate_mandatory(self):
 		if not cstr(self.item_code):
 			msgprint("Please Enter an Item.")
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.py b/erpnext/support/doctype/customer_issue/customer_issue.py
index 619452b..7e69382 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.py
+++ b/erpnext/support/doctype/customer_issue/customer_issue.py
@@ -33,14 +33,14 @@
 			msgprint("Maintenance Visit No. "+lst1+" already created against this customer issue. So can not be Cancelled")
 			raise Exception
 		else:
-			frappe.db.set(self.doc, 'status', 'Cancelled')
+			frappe.db.set(self, 'status', 'Cancelled')
 
 	def on_update(self):
 		pass
 
 @frappe.whitelist()
-def make_maintenance_visit(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_maintenance_visit(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	visit = frappe.db.sql("""select t1.name 
 		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
@@ -48,7 +48,7 @@
 		and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name)
 		
 	if not visit:
-		doclist = get_mapped_doclist("Customer Issue", source_name, {
+		doclist = get_mapped_doc("Customer Issue", source_name, {
 			"Customer Issue": {
 				"doctype": "Maintenance Visit", 
 				"field_map": {
@@ -57,6 +57,6 @@
 					"name": "prevdoc_docname"
 				}
 			}
-		}, target_doclist)
+		}, target_doc)
 	
 		return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
index 1c40552..0052ab2 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -80,7 +80,7 @@
 						"ref_name": self.name
 					}).insert(ignore_permissions=1)
 
-		frappe.db.set(self.doc, 'status', 'Submitted')		
+		frappe.db.set(self, 'status', 'Submitted')		
 
 	def create_schedule_list(self, start_date, end_date, no_of_visit, sales_person):
 		schedule_list = []		
@@ -199,7 +199,7 @@
 		self.validate_sales_order()
 	
 	def on_update(self):
-		frappe.db.set(self.doc, 'status', 'Draft')
+		frappe.db.set(self, 'status', 'Draft')
 
 	def update_amc_date(self, serial_nos, amc_expiry_date=None):
 		for serial_no in serial_nos:
@@ -261,20 +261,20 @@
 			if d.serial_no:
 				serial_nos = get_valid_serial_nos(d.serial_no)
 				self.update_amc_date(serial_nos)
-		frappe.db.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self, 'status', 'Cancelled')
 		delete_events(self.doctype, self.name)
 
 	def on_trash(self):
 		delete_events(self.doctype, self.name)
 
 @frappe.whitelist()
-def make_maintenance_visit(source_name, target_doclist=None):
-	from frappe.model.mapper import get_mapped_doclist
+def make_maintenance_visit(source_name, target_doc=None):
+	from frappe.model.mapper import get_mapped_doc
 	
 	def update_status(source, target, parent):
 		target.maintenance_type = "Scheduled"
 	
-	doclist = get_mapped_doclist("Maintenance Schedule", source_name, {
+	doclist = get_mapped_doc("Maintenance Schedule", source_name, {
 		"Maintenance Schedule": {
 			"doctype": "Maintenance Visit", 
 			"field_map": {
@@ -293,6 +293,6 @@
 				"sales_person": "service_person"
 			}
 		}
-	}, target_doclist)
+	}, target_doc)
 
 	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
index c3f9181..f8eb96a 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
@@ -79,11 +79,11 @@
 	
 	def on_submit(self):
 		self.update_customer_issue(1)		
-		frappe.db.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		self.check_if_last_visit()		
-		frappe.db.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self, 'status', 'Cancelled')
 
 	def on_update(self):
 		pass
\ No newline at end of file
diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/support/doctype/newsletter/newsletter.py
index aed338ac..f28afa8 100644
--- a/erpnext/support/doctype/newsletter/newsletter.py
+++ b/erpnext/support/doctype/newsletter/newsletter.py
@@ -40,7 +40,7 @@
 			"doctype": self.send_to_doctype
 		}))
 
-		frappe.db.set(self.doc, "email_sent", 1)
+		frappe.db.set(self, "email_sent", 1)
 	
 	def get_recipients(self):
 		self.email_field = None