diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index ef17f66..e9e9869 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -736,7 +736,7 @@
 	from frappe.core.doctype.print_format.print_format import get_html
 	frappe.sendmail(new_rv.notification_email_address, 
 		subject="New Invoice : " + new_rv.name, 
-		message = get_html(new_rv.doc, new_rv.doclist, "SalesInvoice"))
+		message = get_html(new_rv.doc, new_rv, "SalesInvoice"))
 		
 def notify_errors(inv, customer, owner):
 	from frappe.utils.user import get_system_managers
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 7804734..e86d6a9 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -41,7 +41,7 @@
 		out["sales_team"] = [{
 			"sales_person": d.sales_person, 
 			"sales_designation": d.sales_designation
-		} for d in party_bean.doclist.get({"doctype":"Sales Team"})]
+		} for d in party_bean.get("sales_team")]
 	
 	return out
 
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index f2e1c08..77b62ca 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -370,7 +370,7 @@
 						d.get(ref_fieldname))
 		
 def check_active_sales_items(obj):
-	for d in obj.doclist.get({"parentfield": obj.fname}):
+	for d in obj.get(obj.fname):
 		if d.item_code:
 			item = frappe.db.sql("""select docstatus, is_sales_item, 
 				is_service_item, income_account from tabItem where name = %s""", 
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 59ce41f..9b3095d 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -289,20 +289,15 @@
 		si = frappe.get_doc(target)
 		si.is_pos = 0
 		si.run_method("onload_post_render")
-		
-		si.set_doclist(si.doclist.get({"parentfield": ["!=", "entries"]}) +
-			si.doclist.get({"parentfield": "entries", "qty": [">", 0]}))
-		
-		if len(si.get("entries")) == 0:
-			frappe.msgprint(_("Hey! All these items have already been invoiced."),
-				raise_exception=True)
 				
-		return si.doclist
+		if len(si.get("entries")) == 0:
+			frappe.msgprint(_("All these items have already been invoiced."),
+				raise_exception=True)
 		
 	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_doc("Delivery Note", source_name, 	{
+	doc = get_mapped_doc("Delivery Note", source_name, 	{
 		"Delivery Note": {
 			"doctype": "Sales Invoice", 
 			"validation": {
@@ -318,7 +313,8 @@
 				"against_sales_order": "sales_order", 
 				"serial_no": "serial_no"
 			},
-			"postprocess": update_item
+			"postprocess": update_item,
+			"filter": lambda d: d.qty - invoiced_qty_map.get(d.name, 0)==0 
 		}, 
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges", 
@@ -333,7 +329,7 @@
 		}
 	}, target_doc, update_accounts)
 	
-	return doclist.as_dict()
+	return doc.as_dict()
 	
 @frappe.whitelist()
 def make_installation_note(source_name, target_doc=None):
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index 3850cec..968969d 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -40,8 +40,7 @@
 			for lc in self.get("landed_cost_details"):
 				amt = flt(lc.amount) * flt(pr_bean.net_total)/ flt(total_amt)
 				
-				matched_row = pr_bean.doclist.get({
-					"parentfield": "other_charges", 
+				matched_row = pr_bean.get("other_charges", {
 					"category": "Valuation",
 					"add_deduct_tax": "Add",
 					"charge_type": "Actual",
@@ -66,8 +65,8 @@
 					matched_row[0].cost_center = lc.cost_center
 					
 			pr_bean.run_method("validate")
-			for d in pr_bean.doclist:
-				d.save()
+			for d in pr_bean.get_all_children():
+				d.db_update()
 	
 	def get_total_pr_amt(self, purchase_receipts):
 		return frappe.db.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt` 
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 312a5a3..296dda9 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -191,29 +191,32 @@
 	"""update requested qty (before ordered_qty is updated)"""
 	from erpnext.stock.utils import update_bin
 	for mr_item_name in mr_items:
-		mr_item = mr_obj.doclist.getone({"parentfield": "indent_details", "name": mr_item_name})
-		se_detail = bean.doclist.getone({"parentfield": "mtn_details",
-			"material_request": mr_obj.name, "material_request_item": mr_item_name})
+		mr_item = mr_obj.get("indent_details", {"name": mr_item_name})
+		se_detail = bean.get("mtn_details", {"material_request": mr_obj.name, 
+			"material_request_item": mr_item_name})
 	
-		mr_item.ordered_qty = flt(mr_item.ordered_qty)
-		mr_item.qty = flt(mr_item.qty)
-		se_detail.transfer_qty = flt(se_detail.transfer_qty)
+		if mr_item and se_detail:
+			mr_item = mr_item[0]
+			se_detail = se_detail[0]
+			mr_item.ordered_qty = flt(mr_item.ordered_qty)
+			mr_item.qty = flt(mr_item.qty)
+			se_detail.transfer_qty = flt(se_detail.transfer_qty)
 	
-		if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \
-				and se_detail.transfer_qty == mr_item.ordered_qty:
-			add_indented_qty = mr_item.qty
-		elif se_detail.docstatus == 1 and \
-				mr_item.ordered_qty + se_detail.transfer_qty > mr_item.qty:
-			add_indented_qty = mr_item.qty - mr_item.ordered_qty
-		else:
-			add_indented_qty = se_detail.transfer_qty
+			if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \
+					and se_detail.transfer_qty == mr_item.ordered_qty:
+				add_indented_qty = mr_item.qty
+			elif se_detail.docstatus == 1 and \
+					mr_item.ordered_qty + se_detail.transfer_qty > mr_item.qty:
+				add_indented_qty = mr_item.qty - mr_item.ordered_qty
+			else:
+				add_indented_qty = se_detail.transfer_qty
 	
-		update_bin({
-			"item_code": se_detail.item_code,
-			"warehouse": se_detail.t_warehouse,
-			"indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty,
-			"posting_date": bean.posting_date,
-		})
+			update_bin({
+				"item_code": se_detail.item_code,
+				"warehouse": se_detail.t_warehouse,
+				"indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty,
+				"posting_date": bean.posting_date,
+			})
 
 def set_missing_values(source, target_doc):
 	po = frappe.get_doc(target_doc)
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 7f4c438..cab1424 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -299,7 +299,7 @@
 		
 	if not stock_ledger_entries: return
 
-	for d in controller.doclist.get({"parentfield": parentfield}):
+	for d in controller.get(parentfield):
 		serial_no = None
 		for sle in stock_ledger_entries:
 			if sle.voucher_detail_no==d.name:
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 1bcceaf..8841b96 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -241,23 +241,23 @@
 						
 	def validate_return_reference_doc(self):
 		"""validate item with reference doc"""
-		ref = get_return_doclist_and_details(self.fields)
+		ref = get_return_doc_and_details(self)
 		
-		if ref.doclist:
+		if ref.doc:
 			# validate docstatus
-			if ref.doclist[0].docstatus != 1:
-				frappe.msgprint(_(ref.doclist[0].doctype) + ' "' + ref.doclist[0].name + '": ' 
+			if ref.doc.docstatus != 1:
+				frappe.msgprint(_(ref.doc.doctype) + ' "' + ref.doc.name + '": ' 
 					+ _("Status should be Submitted"), raise_exception=frappe.InvalidStatusError)
 			
 			# update stock check
-			if ref.doclist[0].doctype == "Sales Invoice" and cint(ref.doclist[0].update_stock) != 1:
-				frappe.msgprint(_(ref.doclist[0].doctype) + ' "' + ref.doclist[0].name + '": ' 
+			if ref.doc.doctype == "Sales Invoice" and cint(ref.doc.update_stock) != 1:
+				frappe.msgprint(_(ref.doc.doctype) + ' "' + ref.doc.name + '": ' 
 					+ _("Update Stock should be checked."), 
 					raise_exception=NotUpdateStockError)
 			
 			# posting date check
-			ref_posting_datetime = "%s %s" % (cstr(ref.doclist[0].posting_date), 
-				cstr(ref.doclist[0].posting_time) or "00:00:00")
+			ref_posting_datetime = "%s %s" % (cstr(ref.doc.posting_date), 
+				cstr(ref.doc.posting_time) or "00:00:00")
 			this_posting_datetime = "%s %s" % (cstr(self.posting_date), 
 				cstr(self.posting_time))
 			if this_posting_datetime < ref_posting_datetime:
@@ -266,18 +266,18 @@
 					+ ": " + datetime_in_user_format(ref_posting_datetime),
 					raise_exception=True)
 			
-			stock_items = get_stock_items_for_return(ref.doclist, ref.parentfields)
+			stock_items = get_stock_items_for_return(ref.doc, ref.parentfields)
 			already_returned_item_qty = self.get_already_returned_item_qty(ref.fieldname)
 			
 			for item in self.get("mtn_details"):
-				# validate if item exists in the ref doclist and that it is a stock item
+				# validate if item exists in the ref doc and that it is a stock item
 				if item.item_code not in stock_items:
 					msgprint(_("Item") + ': "' + item.item_code + _("\" does not exist in ") +
-						ref.doclist[0].doctype + ": " + ref.doclist[0].name, 
+						ref.doc.doctype + ": " + ref.doc.name, 
 						raise_exception=frappe.DoesNotExistError)
 				
 				# validate quantity <= ref item's qty - qty already returned
-				ref_item = ref.doclist.getone({"item_code": item.item_code})
+				ref_item = ref.getone({"item_code": item.item_code})
 				returnable_qty = ref_item.qty - flt(already_returned_item_qty.get(item.item_code))
 				if not returnable_qty:
 					frappe.throw("{item}: {item_code} {returned}".format(
@@ -638,13 +638,13 @@
 def query_return_item(doctype, txt, searchfield, start, page_len, filters):
 	txt = txt.replace("%", "")
 
-	ref = get_return_doclist_and_details(filters)
+	ref = get_return_doc_and_details(filters)
 			
-	stock_items = get_stock_items_for_return(ref.doclist, ref.parentfields)
+	stock_items = get_stock_items_for_return(ref.doc, ref.parentfields)
 	
 	result = []
-	for item in ref.doclist.get({"parentfield": ["in", ref.parentfields]}):
-		if item.item_code in stock_items:
+	for item in ref.doc.get_all_children():
+		if getattr(item, "item_code", None) in stock_items:
 			item.item_name = cstr(item.item_name)
 			item.description = cstr(item.description)
 			if (txt in item.item_code) or (txt in item.item_name) or (txt in item.description):
@@ -704,28 +704,28 @@
 			limit %(start)s, %(page_len)s
 		""" % args)
 
-def get_stock_items_for_return(ref_doclist, parentfields):
-	"""return item codes filtered from doclist, which are stock items"""
+def get_stock_items_for_return(ref_doc, parentfields):
+	"""return item codes filtered from doc, which are stock items"""
 	if isinstance(parentfields, basestring):
 		parentfields = [parentfields]
 	
 	all_items = list(set([d.item_code for d in 
-		ref_doclist.get({"parentfield": ["in", parentfields]})]))
+		ref_doc.get_all_children() if d.item_code]))
 	stock_items = frappe.db.sql_list("""select name from `tabItem`
 		where is_stock_item='Yes' and name in (%s)""" % (", ".join(["%s"] * len(all_items))),
 		tuple(all_items))
 
 	return stock_items
 	
-def get_return_doclist_and_details(args):
+def get_return_doc_and_details(args):
 	ref = frappe._dict()
 	
-	# get ref_doclist
+	# get ref_doc
 	if args["purpose"] in return_map:
 		for fieldname, val in return_map[args["purpose"]].items():
 			if args.get(fieldname):
 				ref.fieldname = fieldname
-				ref.doclist = frappe.get_doclist(val[0], args[fieldname])
+				ref.doc = frappe.get_doc(val[0], args[fieldname])
 				ref.parentfields = val[1]
 				break
 				
@@ -748,16 +748,16 @@
 	if not se.purpose in ["Sales Return", "Purchase Return"]:
 		return
 	
-	ref = get_return_doclist_and_details(se.fields)
+	ref = get_return_doc_and_details(se.fields)
 	
-	if ref.doclist[0].doctype == "Delivery Note":
+	if ref.doc.doctype == "Delivery Note":
 		result = make_return_jv_from_delivery_note(se, ref)
-	elif ref.doclist[0].doctype == "Sales Invoice":
+	elif ref.doc.doctype == "Sales Invoice":
 		result = make_return_jv_from_sales_invoice(se, ref)
-	elif ref.doclist[0].doctype == "Purchase Receipt":
+	elif ref.doc.doctype == "Purchase Receipt":
 		result = make_return_jv_from_purchase_receipt(se, ref)
 	
-	# create jv doclist and fetch balance for each unique row item
+	# create jv doc and fetch balance for each unique row item
 	jv_list = [{
 		"__islocal": 1,
 		"doctype": "Journal Voucher",
@@ -785,28 +785,28 @@
 def make_return_jv_from_sales_invoice(se, ref):
 	# customer account entry
 	parent = {
-		"account": ref.doclist[0].debit_to,
-		"against_invoice": ref.doclist[0].name,
+		"account": ref.doc.debit_to,
+		"against_invoice": ref.doc.name,
 	}
 	
 	# income account entries
 	children = []
 	for se_item in se.get("mtn_details"):
-		# find item in ref.doclist
-		ref_item = ref.doclist.getone({"item_code": se_item.item_code})
+		# find item in ref.doc
+		ref_item = ref.doc.get({"item_code": se_item.item_code})[0]
 		
-		account = get_sales_account_from_item(ref.doclist, ref_item)
+		account = get_sales_account_from_item(ref.doc, ref_item)
 		
 		if account not in children:
 			children.append(account)
 			
 	return [parent] + [{"account": account} for account in children]
 	
-def get_sales_account_from_item(doclist, ref_item):
+def get_sales_account_from_item(doc, ref_item):
 	account = None
 	if not ref_item.income_account:
 		if ref_item.parent_item:
-			parent_item = doclist.getone({"item_code": ref_item.parent_item})
+			parent_item = doc.get({"item_code": ref_item.parent_item})[0]
 			account = parent_item.income_account
 	else:
 		account = ref_item.income_account
@@ -815,10 +815,10 @@
 	
 def make_return_jv_from_delivery_note(se, ref):
 	invoices_against_delivery = get_invoice_list("Sales Invoice Item", "delivery_note",
-		ref.doclist[0].name)
+		ref.doc.name)
 	
 	if not invoices_against_delivery:
-		sales_orders_against_delivery = [d.against_sales_order for d in ref.doclist if d.against_sales_order]
+		sales_orders_against_delivery = [d.against_sales_order for d in ref.doc.get_all_children() if d.against_sales_order]
 		
 		if sales_orders_against_delivery:
 			invoices_against_delivery = get_invoice_list("Sales Invoice Item", "sales_order",
@@ -827,8 +827,7 @@
 	if not invoices_against_delivery:
 		return []
 		
-	packing_item_parent_map = dict([[d.item_code, d.parent_item] for d in ref.doclist.get(
-		{"parentfield": ref.parentfields[1]})])
+	packing_item_parent_map = dict([[d.item_code, d.parent_item] for d in ref.doc.get(ref.parentfields[1])])
 	
 	parent = {}
 	children = []
@@ -838,16 +837,16 @@
 			si = frappe.get_doc("Sales Invoice", sales_invoice)
 			
 			if se_item.item_code in packing_item_parent_map:
-				ref_item = si.doclist.get({"item_code": packing_item_parent_map[se_item.item_code]})
+				ref_item = si.get({"item_code": packing_item_parent_map[se_item.item_code]})
 			else:
-				ref_item = si.doclist.get({"item_code": se_item.item_code})
+				ref_item = si.get({"item_code": se_item.item_code})
 			
 			if not ref_item:
 				continue
 				
 			ref_item = ref_item[0]
 			
-			account = get_sales_account_from_item(si.doclist, ref_item)
+			account = get_sales_account_from_item(si, ref_item)
 			
 			if account not in children:
 				children.append(account)
@@ -874,11 +873,11 @@
 			
 def make_return_jv_from_purchase_receipt(se, ref):
 	invoice_against_receipt = get_invoice_list("Purchase Invoice Item", "purchase_receipt",
-		ref.doclist[0].name)
+		ref.doc.name)
 	
 	if not invoice_against_receipt:
 		purchase_orders_against_receipt = [d.prevdoc_docname for d in 
-			ref.doclist.get({"prevdoc_doctype": "Purchase Order"}) if d.prevdoc_docname]
+			ref.get({"prevdoc_doctype": "Purchase Order"}) if d.prevdoc_docname]
 		
 		if purchase_orders_against_receipt:
 			invoice_against_receipt = get_invoice_list("Purchase Invoice Item", "purchase_order",
@@ -893,7 +892,7 @@
 	for se_item in se.get("mtn_details"):
 		for purchase_invoice in invoice_against_receipt:
 			pi = frappe.get_doc("Purchase Invoice", purchase_invoice)
-			ref_item = pi.doclist.get({"item_code": se_item.item_code})
+			ref_item = pi.get({"item_code": se_item.item_code})
 			
 			if not ref_item:
 				continue
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 57b2c2e..ed23cf7 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -209,12 +209,10 @@
 	
 def get_party_item_code(args, item_bean, out):
 	if args.transaction_type == "selling":
-		customer_item_code = item_bean.doclist.get({"parentfield": "item_customer_details",
-			"customer_name": args.customer})
+		customer_item_code = item_bean.get("item_customer_details", {"customer_name": args.customer})
 		out.customer_item_code = customer_item_code[0].ref_code if customer_item_code else None
 	else:
-		item_supplier = item_bean.doclist.get({"parentfield": "item_supplier_details",
-			"supplier": args.supplier})
+		item_supplier = item_bean.get({"item_supplier_details", {"supplier": args.supplier})
 		out.supplier_part_no = item_supplier[0].supplier_part_no if item_supplier else None
 		
 
