diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index b726682..bbdf17e 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -9,7 +9,7 @@
 	
 from frappe.model.document import Document
 
-class GlEntry(Document):
+class GLEntry(Document):
 
 	def validate(self):
 		self.check_mandatory()
diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
index ff50dcd..0ba0208 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
@@ -353,13 +353,13 @@
 	jv.remark = 'Payment received against Sales Invoice {0}. {1}'.format(si.name, si.remarks)
 
 	# credit customer
-	jv["entries"][0].account = si.debit_to
-	jv["entries"][0].balance = get_balance_on(si.debit_to)
-	jv["entries"][0].credit = si.outstanding_amount
-	jv["entries"][0].against_invoice = si.name
+	jv.get("entries")[0].account = si.debit_to
+	jv.get("entries")[0].balance = get_balance_on(si.debit_to)
+	jv.get("entries")[0].credit = si.outstanding_amount
+	jv.get("entries")[0].against_invoice = si.name
 
 	# debit bank
-	jv["entries"][1].debit = si.outstanding_amount
+	jv.get("entries")[1].debit = si.outstanding_amount
 	
 	return jv.as_dict()
 
@@ -371,13 +371,13 @@
 	jv.remark = 'Payment against Purchase Invoice {0}. {1}'.format(pi.name, pi.remarks)
 	
 	# credit supplier
-	jv["entries"][0].account = pi.credit_to
-	jv["entries"][0].balance = get_balance_on(pi.credit_to)
-	jv["entries"][0].debit = pi.outstanding_amount
-	jv["entries"][0].against_voucher = pi.name
+	jv.get("entries")[0].account = pi.credit_to
+	jv.get("entries")[0].balance = get_balance_on(pi.credit_to)
+	jv.get("entries")[0].debit = pi.outstanding_amount
+	jv.get("entries")[0].against_voucher = pi.name
 
 	# credit bank
-	jv["entries"][1].credit = pi.outstanding_amount
+	jv.get("entries")[1].credit = pi.outstanding_amount
 	
 	return jv.as_dict()
 
diff --git a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
index 19c3cef..962d9a0 100644
--- a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
@@ -17,7 +17,7 @@
 			where against_jv=%s""", jv_invoice.name))
 		
 		jv_payment = frappe.copy_doc(test_records[0])
-		jv_payment["entries"][0].against_jv = jv_invoice.name
+		jv_payment.get("entries")[0].against_jv = jv_invoice.name
 		jv_payment.insert()
 		jv_payment.submit()
 		
@@ -38,7 +38,7 @@
 		set_perpetual_inventory()
 		
 		jv = frappe.copy_doc(test_records[0])
-		jv["entries"][0].account = "_Test Warehouse - _TC"
+		jv.get("entries")[0].account = "_Test Warehouse - _TC"
 		jv.insert()
 		
 		from erpnext.accounts.general_ledger import StockAccountInvalidTransaction
@@ -51,10 +51,10 @@
 		self.clear_account_balance()
 		
 		jv = frappe.copy_doc(test_records[0])
-		jv["entries"][1].account = "_Test Account Cost for Goods Sold - _TC"
-		jv["entries"][1].cost_center = "_Test Cost Center - _TC"
-		jv["entries"][1].debit = 20000.0
-		jv["entries"][0].credit = 20000.0
+		jv.get("entries")[1].account = "_Test Account Cost for Goods Sold - _TC"
+		jv.get("entries")[1].cost_center = "_Test Cost Center - _TC"
+		jv.get("entries")[1].debit = 20000.0
+		jv.get("entries")[0].credit = 20000.0
 		jv.insert()
 		jv.submit()
 		self.assertTrue(frappe.db.get_value("GL Entry", 
@@ -66,10 +66,10 @@
 		self.clear_account_balance()
 		
 		jv = frappe.copy_doc(test_records[0])
-		jv["entries"][1].account = "_Test Account Cost for Goods Sold - _TC"
-		jv["entries"][1].cost_center = "_Test Cost Center - _TC"
-		jv["entries"][1].debit = 20000.0
-		jv["entries"][0].credit = 20000.0
+		jv.get("entries")[1].account = "_Test Account Cost for Goods Sold - _TC"
+		jv.get("entries")[1].cost_center = "_Test Cost Center - _TC"
+		jv.get("entries")[1].debit = 20000.0
+		jv.get("entries")[0].credit = 20000.0
 		jv.insert()
 		
 		self.assertRaises(BudgetError, jv.submit)
@@ -85,10 +85,10 @@
 		
 		jv = frappe.copy_doc(test_records[0])
 		jv.posting_date = "2013-08-12"
-		jv["entries"][1].account = "_Test Account Cost for Goods Sold - _TC"
-		jv["entries"][1].cost_center = "_Test Cost Center - _TC"
-		jv["entries"][1].debit = 150000.0
-		jv["entries"][0].credit = 150000.0
+		jv.get("entries")[1].account = "_Test Account Cost for Goods Sold - _TC"
+		jv.get("entries")[1].cost_center = "_Test Cost Center - _TC"
+		jv.get("entries")[1].debit = 150000.0
+		jv.get("entries")[0].credit = 150000.0
 		jv.insert()
 		
 		self.assertRaises(BudgetError, jv.submit)
@@ -101,20 +101,20 @@
 		self.clear_account_balance()
 		
 		jv = frappe.copy_doc(test_records[0])
-		jv["entries"][0].account = "_Test Account Cost for Goods Sold - _TC"
-		jv["entries"][0].cost_center = "_Test Cost Center - _TC"
-		jv["entries"][0].credit = 30000.0
-		jv["entries"][1].debit = 30000.0
+		jv.get("entries")[0].account = "_Test Account Cost for Goods Sold - _TC"
+		jv.get("entries")[0].cost_center = "_Test Cost Center - _TC"
+		jv.get("entries")[0].credit = 30000.0
+		jv.get("entries")[1].debit = 30000.0
 		jv.submit()
 		
 		self.assertTrue(frappe.db.get_value("GL Entry", 
 			{"voucher_type": "Journal Voucher", "voucher_no": jv.name}))
 		
 		jv1 = frappe.copy_doc(test_records[0])
-		jv1["entries"][1].account = "_Test Account Cost for Goods Sold - _TC"
-		jv1["entries"][1].cost_center = "_Test Cost Center - _TC"
-		jv1["entries"][1].debit = 40000.0
-		jv1["entries"][0].credit = 40000.0
+		jv1.get("entries")[1].account = "_Test Account Cost for Goods Sold - _TC"
+		jv1.get("entries")[1].cost_center = "_Test Cost Center - _TC"
+		jv1.get("entries")[1].debit = 40000.0
+		jv1.get("entries")[0].credit = 40000.0
 		jv1.submit()
 		
 		self.assertTrue(frappe.db.get_value("GL Entry", 
diff --git a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
index 1a31989..ad58efc 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
@@ -17,9 +17,9 @@
 		jv.submit()
 		
 		jv1 = frappe.copy_doc(jv_records[0])
-		jv1["entries"][1].account = "_Test Account Cost for Goods Sold - _TC"
-		jv1["entries"][1].debit = 600.0
-		jv1["entries"][0].credit = 600.0
+		jv1.get("entries")[1].account = "_Test Account Cost for Goods Sold - _TC"
+		jv1.get("entries")[1].debit = 600.0
+		jv1.get("entries")[0].credit = 600.0
 		jv1.insert()
 		jv1.submit()
 		
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 30425fe..885ef46 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -23,7 +23,7 @@
 		wrapper.insert()
 		wrapper.submit()
 		wrapper.load_from_db()
-		dl = wrapper.doclist
+		dl = wrapper
 		
 		expected_gl_entries = {
 			"_Test Supplier - _TC": [0, 1512.30],
@@ -37,7 +37,7 @@
 			"_Test Account Discount - _TC": [0, 168.03],
 		}
 		gl_entries = frappe.db.sql("""select account, debit, credit from `tabGL Entry`
-			where voucher_type = 'Purchase Invoice' and voucher_no = %s""", dl[0].name, as_dict=1)
+			where voucher_type = 'Purchase Invoice' and voucher_no = %s""", dl.name, as_dict=1)
 		for d in gl_entries:
 			self.assertEqual([d.debit, d.credit], expected_gl_entries.get(d.account))
 			
@@ -74,10 +74,10 @@
 		self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
 		
 		pi = frappe.copy_doc(test_records[1])
-		pi["entries"][0].item_code = "_Test Non Stock Item"
-		pi["entries"][0].expense_account = "_Test Account Cost for Goods Sold - _TC"
-		pi.doclist.pop(2)
-		pi.doclist.pop(3)
+		pi.get("entries")[0].item_code = "_Test Non Stock Item"
+		pi.get("entries")[0].expense_account = "_Test Account Cost for Goods Sold - _TC"
+		pi.get("entries").pop(2)
+		pi.get("entries").pop(1)
 		pi.insert()
 		pi.submit()
 		
@@ -112,7 +112,7 @@
 			self.assertEqual(item.item_tax_amount, expected_values[i][1])
 			self.assertEqual(item.valuation_rate, expected_values[i][2])
 			
-		self.assertEqual(wrapper.doclist[0].net_total, 1250)
+		self.assertEqual(wrapper.net_total, 1250)
 		
 		# tax amounts
 		expected_values = [
@@ -133,7 +133,7 @@
 			
 	def test_purchase_invoice_with_subcontracted_item(self):
 		wrapper = frappe.copy_doc(test_records[0])
-		wrapper["entries"][0].item_code = "_Test FG Item"
+		wrapper.get("entries")[0].item_code = "_Test FG Item"
 		wrapper.insert()
 		wrapper.load_from_db()
 		
@@ -146,7 +146,7 @@
 			self.assertEqual(item.item_tax_amount, expected_values[i][1])
 			self.assertEqual(item.valuation_rate, expected_values[i][2])
 		
-		self.assertEqual(wrapper.doclist[0].net_total, 1250)
+		self.assertEqual(wrapper.net_total, 1250)
 
 		# tax amounts
 		expected_values = [
@@ -176,7 +176,7 @@
 		pi = frappe.copy_doc(test_records[0])
 		pi.append("advance_allocation_details", {
 			"journal_voucher": jv.name,
-			"jv_detail_no": jv["entries"][0].name,
+			"jv_detail_no": jv.get("entries")[0].name,
 			"advance_amount": 400,
 			"allocated_amount": 300,
 			"remarks": jv.remark
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index ba34b49..41be553 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -202,7 +202,7 @@
 				self.terms = frappe.db.get_value("Terms and Conditions", self.tc_name, "terms")
 			
 			# fetch charges
-			if self.charge and not len(self.get("other_charges")):
+			if self.taxes_and_charges and not len(self.get("other_charges")):
 				self.set_taxes("other_charges", "taxes_and_charges")
 	
 	def get_advances(self):
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index fdeb075..8baeb76 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -20,7 +20,7 @@
 		w.docstatus = '0'
 		w.insert()
 		
-		w2 = [d for d in w.doclist]
+		w2 = frappe.copy_doc(test_records[0])
 		w.submit()
 		
 		w = frappe.get_doc(w2)
@@ -89,10 +89,10 @@
 		si = frappe.copy_doc(test_records[2])
 		si.currency = "USD"
 		si.conversion_rate = 50
-		si["entries"][0].rate = 1
-		si["entries"][0].price_list_rate = 1
-		si["entries"][1].rate = 3
-		si["entries"][1].price_list_rate = 3
+		si.get("entries")[0].rate = 1
+		si.get("entries")[0].price_list_rate = 1
+		si.get("entries")[1].rate = 3
+		si.get("entries")[1].price_list_rate = 3
 		si.insert()
 		
 		expected_values = {
@@ -243,16 +243,16 @@
 		for i, tax in enumerate(si.get("other_charges")):
 			tax.idx = i+1
 		
-		si["entries"][0].price_list_rate = 62.5
-		si["entries"][0].price_list_rate = 191
-		for i in [3, 5, 6, 7, 8, 9]:
-			si.doclist[i].included_in_print_rate = 1
+		si.get("entries")[0].price_list_rate = 62.5
+		si.get("entries")[0].price_list_rate = 191
+		for i in [2, 4, 5, 6, 7, 8]:
+			si.get("other_charges")[i].included_in_print_rate = 1
 		
 		# tax type "Actual" cannot be inclusive
 		self.assertRaises(frappe.ValidationError, si.insert)
 		
 		# taxes above included type 'On Previous Row Total' should also be included
-		si.doclist[3].included_in_print_rate = 0
+		si.get("other_charges")[0].included_in_print_rate = 0
 		self.assertRaises(frappe.ValidationError, si.insert)
 		
 	def test_sales_invoice_calculation_base_currency_with_tax_inclusive_price(self):
@@ -305,11 +305,11 @@
 		si = frappe.copy_doc(test_records[3])
 		si.currency = "USD"
 		si.conversion_rate = 50
-		si["entries"][0].price_list_rate = 55.56
-		si["entries"][0].discount_percentage = 10
-		si["entries"][1].price_list_rate = 187.5
-		si["entries"][1].discount_percentage = 20
-		si.doclist[9].rate = 5000
+		si.get("entries")[0].price_list_rate = 55.56
+		si.get("entries")[0].discount_percentage = 10
+		si.get("entries")[1].price_list_rate = 187.5
+		si.get("entries")[1].discount_percentage = 20
+		si.get("other_charges")[5].rate = 5000
 		
 		si.insert()
 		
@@ -365,7 +365,7 @@
 			import test_records as jv_test_records
 			
 		jv = frappe.get_doc(frappe.copy_doc(jv_test_records[0]))
-		jv["entries"][0].against_invoice = w.name
+		jv.get("entries")[0].against_invoice = w.name
 		jv.insert()
 		jv.submit()
 		
@@ -381,7 +381,7 @@
 		tlb.submit()
 		
 		si = frappe.get_doc(frappe.copy_doc(test_records[0]))
-		si["entries"][0].time_log_batch = "_T-Time Log Batch-00001"
+		si.get("entries")[0].time_log_batch = "_T-Time Log Batch-00001"
 		si.insert()
 		si.submit()
 		
@@ -501,16 +501,16 @@
 			as pr_test_records
 		pr = frappe.copy_doc(pr_test_records[0])
 		pr.naming_series = "_T-Purchase Receipt-"
-		pr["entries"][0].warehouse = "_Test Warehouse No Account - _TC"
+		pr.get("entries")[0].warehouse = "_Test Warehouse No Account - _TC"
 		pr.insert()
 		pr.submit()
 		
-		si_doclist = frappe.copy_doc(test_records[1])
-		si_doclist[0]["update_stock"] = 1
-		si_doclist[0]["posting_time"] = "12:05"
-		si_doclist[1]["warehouse"] = "_Test Warehouse No Account - _TC"
+		si_doc = frappe.copy_doc(test_records[1])
+		si_doc["update_stock"] = 1
+		si_doc["posting_time"] = "12:05"
+		si_doc.get("entries")["warehouse"] = "_Test Warehouse No Account - _TC"
 
-		si = frappe.copy_doc(si_doclist)
+		si = frappe.copy_doc(si_doc)
 		si.insert()
 		si.submit()
 		
@@ -530,9 +530,9 @@
 		
 		expected_gl_entries = sorted([
 			[si.debit_to, 630.0, 0.0],
-			[si_doclist[1]["income_account"], 0.0, 500.0],
-			[si_doclist[2]["account_head"], 0.0, 80.0],
-			[si_doclist[3]["account_head"], 0.0, 50.0],
+			[si_doc.get("entries")["income_account"], 0.0, 500.0],
+			[si_doc.get("other_charges")[0]["account_head"], 0.0, 80.0],
+			[si_doc.get("other_charges")[1]["account_head"], 0.0, 50.0],
 		])
 		for i, gle in enumerate(gl_entries):
 			self.assertEquals(expected_gl_entries[i][0], gle.account)
@@ -638,7 +638,7 @@
 		si.append("advance_adjustment_details", {
 			"doctype": "Sales Invoice Advance",
 			"journal_voucher": jv.name,
-			"jv_detail_no": jv["entries"][0].name,
+			"jv_detail_no": jv.get("entries")[0].name,
 			"advance_amount": 400,
 			"allocated_amount": 300,
 			"remarks": jv.remark
@@ -677,13 +677,13 @@
 		})
 		
 		# monthly
-		si1 = frappe.copy_doc(base_si.doclist)
+		si1 = frappe.copy_doc(base_si)
 		si1.insert()
 		si1.submit()
 		self._test_recurring_invoice(si1, True)
 		
 		# monthly without a first and last day period
-		si2 = frappe.copy_doc(base_si.doclist)
+		si2 = frappe.copy_doc(base_si)
 		si2.update({
 			"invoice_period_from_date": today,
 			"invoice_period_to_date": add_to_date(today, days=30)
@@ -693,7 +693,7 @@
 		self._test_recurring_invoice(si2, False)
 		
 		# quarterly
-		si3 = frappe.copy_doc(base_si.doclist)
+		si3 = frappe.copy_doc(base_si)
 		si3.update({
 			"recurring_type": "Quarterly",
 			"invoice_period_from_date": get_first_day(today),
@@ -704,7 +704,7 @@
 		self._test_recurring_invoice(si3, True)
 		
 		# quarterly without a first and last day period
-		si4 = frappe.copy_doc(base_si.doclist)
+		si4 = frappe.copy_doc(base_si)
 		si4.update({
 			"recurring_type": "Quarterly",
 			"invoice_period_from_date": today,
@@ -715,7 +715,7 @@
 		self._test_recurring_invoice(si4, False)
 		
 		# yearly
-		si5 = frappe.copy_doc(base_si.doclist)
+		si5 = frappe.copy_doc(base_si)
 		si5.update({
 			"recurring_type": "Yearly",
 			"invoice_period_from_date": get_first_day(today),
@@ -726,7 +726,7 @@
 		self._test_recurring_invoice(si5, True)
 		
 		# yearly without a first and last day period
-		si6 = frappe.copy_doc(base_si.doclist)
+		si6 = frappe.copy_doc(base_si)
 		si6.update({
 			"recurring_type": "Yearly",
 			"invoice_period_from_date": today,
@@ -737,7 +737,7 @@
 		self._test_recurring_invoice(si6, False)
 		
 		# change posting date but keep recuring day to be today
-		si7 = frappe.copy_doc(base_si.doclist)
+		si7 = frappe.copy_doc(base_si)
 		si7.update({
 			"posting_date": add_to_date(today, days=-1)
 		})
@@ -808,13 +808,13 @@
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		
 		se = make_serialized_item()
-		serial_nos = get_serial_nos(se["entries"][0].serial_no)
+		serial_nos = get_serial_nos(se.get("entries")[0].serial_no)
 		
 		si = frappe.copy_doc(test_records[0])
 		si.update_stock = 1
-		si["entries"][0].item_code = "_Test Serialized Item With Series"
-		si["entries"][0].qty = 1
-		si["entries"][0].serial_no = serial_nos[0]
+		si.get("entries")[0].item_code = "_Test Serialized Item With Series"
+		si.get("entries")[0].qty = 1
+		si.get("entries")[0].serial_no = serial_nos[0]
 		si.insert()
 		si.submit()
 		
@@ -830,7 +830,7 @@
 		si = self.test_serialized()
 		si.cancel()
 
-		serial_nos = get_serial_nos(si["entries"][0].serial_no)
+		serial_nos = get_serial_nos(si.get("entries")[0].serial_no)
 
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Available")
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
@@ -842,7 +842,7 @@
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
 		
 		se = make_serialized_item()
-		serial_nos = get_serial_nos(se["entries"][0].serial_no)
+		serial_nos = get_serial_nos(se.get("entries")[0].serial_no)
 		
 		sr = frappe.get_doc("Serial No", serial_nos[0])
 		sr.status = "Not Available"
@@ -850,9 +850,9 @@
 		
 		si = frappe.copy_doc(test_records[0])
 		si.update_stock = 1
-		si["entries"][0].item_code = "_Test Serialized Item With Series"
-		si["entries"][0].qty = 1
-		si["entries"][0].serial_no = serial_nos[0]
+		si.get("entries")[0].item_code = "_Test Serialized Item With Series"
+		si.get("entries")[0].qty = 1
+		si.get("entries")[0].serial_no = serial_nos[0]
 		si.insert()
 
 		self.assertRaises(SerialNoStatusError, si.submit)
diff --git a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
index ce07f14..c53689e 100644
--- a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
+++ b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
@@ -10,12 +10,12 @@
 class TestShippingRule(unittest.TestCase):
 	def test_from_greater_than_to(self):
 		shipping_rule = frappe.copy_doc(test_records[0])
-		shipping_rule["shipping_rule_conditions"][0].from_value = 101
+		shipping_rule.get("shipping_rule_conditions")[0].from_value = 101
 		self.assertRaises(FromGreaterThanToError, shipping_rule.insert)
 		
 	def test_many_zero_to_values(self):
 		shipping_rule = frappe.copy_doc(test_records[0])
-		shipping_rule["shipping_rule_conditions"][0].to_value = 0
+		shipping_rule.get("shipping_rule_conditions")[0].to_value = 0
 		self.assertRaises(ManyBlankToValuesError, shipping_rule.insert)
 		
 	def test_overlapping_conditions(self):
@@ -27,8 +27,8 @@
 			((50, 150), (50, 150)),
 		]:
 			shipping_rule = frappe.copy_doc(test_records[0])
-			shipping_rule["shipping_rule_conditions"][0].from_value = range_a[0]
-			shipping_rule["shipping_rule_conditions"][0].to_value = range_a[1]
-			shipping_rule["shipping_rule_conditions"][1].from_value = range_b[0]
-			shipping_rule["shipping_rule_conditions"][1].to_value = range_b[1]
+			shipping_rule.get("shipping_rule_conditions")[0].from_value = range_a[0]
+			shipping_rule.get("shipping_rule_conditions")[0].to_value = range_a[1]
+			shipping_rule.get("shipping_rule_conditions")[1].from_value = range_b[0]
+			shipping_rule.get("shipping_rule_conditions")[1].to_value = range_b[1]
 			self.assertRaises(OverlappingConditionError, shipping_rule.insert)
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index 104baf9..f8b03f0 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -41,7 +41,7 @@
 
 		po = frappe.get_doc("Purchase Order", po.name)
 		po.is_subcontracted = "No"
-		po["po_details"][0].item_code = "_Test Item"
+		po.get("po_details")[0].item_code = "_Test Item"
 		po.submit()
 		
 		self.assertEquals(frappe.db.get_value("Bin", {"item_code": "_Test Item", 
@@ -107,7 +107,7 @@
 	def test_uom_integer_validation(self):
 		from erpnext.utilities.transaction_base import UOMMustBeIntegerError
 		po = frappe.copy_doc(test_records[0])
-		po["po_details"][0].qty = 3.4
+		po.get("po_details")[0].qty = 3.4
 		self.assertRaises(UOMMustBeIntegerError, po.insert)
 
 
diff --git a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py
index d526fd1..708b5e7 100644
--- a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py
@@ -21,7 +21,7 @@
 		po = make_purchase_order(sq.name)
 		
 		self.assertEquals(po[0]["doctype"], "Purchase Order")
-		self.assertEquals(len(po), len(sq.doclist))
+		self.assertEquals(len(po), len(sq))
 		
 		po[0]["naming_series"] = "_T-Purchase Order-"
 
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 24af1e3..ffe6a6a 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -369,7 +369,7 @@
 			'voucher_type': self.doctype,
 			'voucher_no': self.name,
 			'aging_date': self.get("aging_date") or self.posting_date,
-			'remarks': self.remarks,
+			'remarks': self.get("remarks"),
 			'fiscal_year': self.fiscal_year,
 			'debit': 0,
 			'credit': 0,
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index da37adb..027bfd2 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -336,8 +336,8 @@
 					'qty': d.qty,
 					'reserved_qty': reserved_qty_for_main_item,
 					'uom': d.stock_uom,
-					'batch_no': cstr(d.batch_no).strip(),
-					'serial_no': cstr(d.serial_no).strip(),
+					'batch_no': cstr(d.get("batch_no")).strip(),
+					'serial_no': cstr(d.get("serial_no")).strip(),
 					'name': d.name
 				}))
 		return il
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 62262ee..e5ad8c6 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -49,7 +49,7 @@
 							"account": warehouse_account[sle.warehouse],
 							"against": detail.expense_account,
 							"cost_center": detail.cost_center,
-							"remarks": self.remarks or "Accounting Entry for Stock",
+							"remarks": self.get("remarks") or "Accounting Entry for Stock",
 							"debit": flt(sle.stock_value_difference, 2)
 						}))
 
@@ -58,7 +58,7 @@
 							"account": detail.expense_account,
 							"against": warehouse_account[sle.warehouse],
 							"cost_center": detail.cost_center,
-							"remarks": self.remarks or "Accounting Entry for Stock",
+							"remarks": self.get("remarks") or "Accounting Entry for Stock",
 							"credit": flt(sle.stock_value_difference, 2)
 						}))
 					elif sle.warehouse not in warehouse_with_no_account:
@@ -103,8 +103,15 @@
 			for d in item_doclist:
 				if d.item_code and d.item_code not in items:
 					items.append(d.item_code)
-				if d.warehouse and d.warehouse not in warehouses:
+				
+				if d.get("warehouse") and d.warehouse not in warehouses:
 					warehouses.append(d.warehouse)
+				
+				if self.doctype == "Stock Entry":
+					if d.get("s_warehouse") and d.s_warehouse not in warehouses:
+						warehouses.append(d.s_warehouse)
+					if d.get("t_warehouse") and d.t_warehouse not in warehouses:
+						warehouses.append(d.t_warehouse)
 
 			warehouse_account = {wh: warehouse_account[wh] for wh in warehouses 
 				if warehouse_account.get(wh)}
@@ -234,20 +241,20 @@
 	def get_sl_entries(self, d, args):		
 		sl_dict = {
 			"item_code": d.item_code,
-			"warehouse": d.warehouse,
+			"warehouse": d.get("warehouse", None),
 			"posting_date": self.posting_date,
 			"posting_time": self.posting_time,
 			"voucher_type": self.doctype,
 			"voucher_no": self.name,
 			"voucher_detail_no": d.name,
-			"actual_qty": (self.docstatus==1 and 1 or -1)*flt(d.stock_qty),
+			"actual_qty": (self.docstatus==1 and 1 or -1)*flt(d.get("stock_qty")),
 			"stock_uom": d.stock_uom,
 			"incoming_rate": 0,
 			"company": self.company,
 			"fiscal_year": self.fiscal_year,
 			"batch_no": cstr(d.batch_no).strip(),
 			"serial_no": d.serial_no,
-			"project": d.project_name,
+			"project": d.get("project_name"),
 			"is_cancelled": self.docstatus==2 and "Yes" or "No"
 		}
 		
diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.py b/erpnext/manufacturing/doctype/production_order/test_production_order.py
index 31889b5..81fc616 100644
--- a/erpnext/manufacturing/doctype/production_order/test_production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/test_production_order.py
@@ -27,7 +27,7 @@
 		mr1.submit()
 		
 		mr2 = frappe.copy_doc(se_test_records[0])
-		mr2["mtn_details"][0].item_code = "_Test Item Home Desktop 100"
+		mr2.get("mtn_details")[0].item_code = "_Test Item Home Desktop 100"
 		mr2.insert()
 		mr2.submit()
 		
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index 1e71f5c..af52028 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -22,7 +22,7 @@
 		mr = make_material_request(so.name)
 		
 		self.assertEquals(mr[0]["material_request_type"], "Purchase")
-		self.assertEquals(len(mr), len(sales_order.doclist))
+		self.assertEquals(len(mr), len(sales_order))
 
 	def test_make_delivery_note(self):
 		from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
@@ -37,7 +37,7 @@
 		dn = make_delivery_note(so.name)
 		
 		self.assertEquals(dn[0]["doctype"], "Delivery Note")
-		self.assertEquals(len(dn), len(sales_order.doclist))
+		self.assertEquals(len(dn), len(sales_order))
 
 	def test_make_sales_invoice(self):
 		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
@@ -52,7 +52,7 @@
 		si = make_sales_invoice(so.name)
 		
 		self.assertEquals(si[0]["doctype"], "Sales Invoice")
-		self.assertEquals(len(si), len(sales_order.doclist))
+		self.assertEquals(len(si), len(sales_order))
 		self.assertEquals(len([d for d in si if d["doctype"]=="Sales Invoice Item"]), 1)
 		
 		si = frappe.get_doc(si)
@@ -64,11 +64,11 @@
 		self.assertEquals(len([d for d in si1 if d["doctype"]=="Sales Invoice Item"]), 0)
 		
 
-	def create_so(self, so_doclist = None):
-		if not so_doclist:
-			so_doclist = test_records[0]
+	def create_so(self, so_doc = None):
+		if not so_doc:
+			so_doc = test_records[0]
 		
-		w = frappe.copy_doc(so_doclist)
+		w = frappe.copy_doc(so_doc)
 		w.insert()
 		w.submit()
 
@@ -78,14 +78,14 @@
 		from erpnext.stock.doctype.delivery_note.test_delivery_note import test_records as dn_test_records
 		from erpnext.stock.doctype.delivery_note.test_delivery_note import _insert_purchase_receipt
 
-		_insert_purchase_receipt(so["sales_order_details"][0].item_code)
+		_insert_purchase_receipt(so.get("sales_order_details")[0].item_code)
 		
 		dn = frappe.get_doc(frappe.copy_doc(dn_test_records[0]))
-		dn["delivery_note_details"][0].item_code = so["sales_order_details"][0].item_code
-		dn["delivery_note_details"][0].against_sales_order = so.name
-		dn["delivery_note_details"][0].prevdoc_detail_docname = so["sales_order_details"][0].name
+		dn.get("delivery_note_details")[0].item_code = so.get("sales_order_details")[0].item_code
+		dn.get("delivery_note_details")[0].against_sales_order = so.name
+		dn.get("delivery_note_details")[0].prevdoc_detail_docname = so.get("sales_order_details")[0].name
 		if delivered_qty:
-			dn["delivery_note_details"][0].qty = delivered_qty
+			dn.get("delivery_note_details")[0].qty = delivered_qty
 		dn.insert()
 		dn.submit()
 		return dn
@@ -110,11 +110,11 @@
 		
 		# submit
 		so = self.create_so()
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 10.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 10.0)
 		
 		# cancel
 		so.cancel()
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 0.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 0.0)
 		
 	
 	def test_reserved_qty_for_partial_delivery(self):
@@ -130,21 +130,21 @@
 		# submit dn
 		dn = self.create_dn_against_so(so)
 		
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 5.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 5.0)
 		
 		# stop so
 		so.load_from_db()
 		so.obj.stop_sales_order()
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 0.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 0.0)
 		
 		# unstop so
 		so.load_from_db()
 		so.obj.unstop_sales_order()
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 5.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 5.0)
 		
 		# cancel dn
 		dn.cancel()
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 10.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 10.0)
 		
 	def test_reserved_qty_for_over_delivery(self):
 		# reset bin
@@ -157,15 +157,15 @@
 		frappe.db.set_default("allow_negative_stock", 1)
 		
 		# set over-delivery tolerance
-		frappe.db.set_value('Item', so["sales_order_details"][0].item_code, 'tolerance', 50)
+		frappe.db.set_value('Item', so.get("sales_order_details")[0].item_code, 'tolerance', 50)
 		
 		# submit dn
 		dn = self.create_dn_against_so(so, 15)
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 0.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 0.0)
 
 		# cancel dn
 		dn.cancel()
-		self.check_reserved_qty(so["sales_order_details"][0].item_code, so["sales_order_details"][0].warehouse, 10.0)
+		self.check_reserved_qty(so.get("sales_order_details")[0].item_code, so.get("sales_order_details")[0].warehouse, 10.0)
 		
 	def test_reserved_qty_for_so_with_packing_list(self):
 		from erpnext.selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
@@ -183,16 +183,16 @@
 		
 		
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 50.0)
+			so.get("sales_order_details")[0].warehouse, 50.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 20.0)
+			so.get("sales_order_details")[0].warehouse, 20.0)
 		
 		# cancel
 		so.cancel()
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 0.0)
+			so.get("sales_order_details")[0].warehouse, 0.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 0.0)
+			so.get("sales_order_details")[0].warehouse, 0.0)
 			
 	def test_reserved_qty_for_partial_delivery_with_packing_list(self):
 		from erpnext.selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
@@ -216,33 +216,33 @@
 		dn = self.create_dn_against_so(so)
 		
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 25.0)
+			so.get("sales_order_details")[0].warehouse, 25.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 10.0)
+			so.get("sales_order_details")[0].warehouse, 10.0)
 				
 		# stop so
 		so.load_from_db()
 		so.obj.stop_sales_order()
 		
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 0.0)
+			so.get("sales_order_details")[0].warehouse, 0.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 0.0)
+			so.get("sales_order_details")[0].warehouse, 0.0)
 		
 		# unstop so
 		so.load_from_db()
 		so.obj.unstop_sales_order()
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 25.0)
+			so.get("sales_order_details")[0].warehouse, 25.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 10.0)
+			so.get("sales_order_details")[0].warehouse, 10.0)
 		
 		# cancel dn
 		dn.cancel()
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 50.0)
+			so.get("sales_order_details")[0].warehouse, 50.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 20.0)
+			so.get("sales_order_details")[0].warehouse, 20.0)
 			
 	def test_reserved_qty_for_over_delivery_with_packing_list(self):
 		from erpnext.selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
@@ -262,22 +262,22 @@
 		frappe.db.set_default("allow_negative_stock", 1)
 		
 		# set over-delivery tolerance
-		frappe.db.set_value('Item', so["sales_order_details"][0].item_code, 'tolerance', 50)
+		frappe.db.set_value('Item', so.get("sales_order_details")[0].item_code, 'tolerance', 50)
 		
 		# submit dn
 		dn = self.create_dn_against_so(so, 15)
 		
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 0.0)
+			so.get("sales_order_details")[0].warehouse, 0.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 0.0)
+			so.get("sales_order_details")[0].warehouse, 0.0)
 
 		# cancel dn
 		dn.cancel()
 		self.check_reserved_qty(sbom_test_records[0][1]["item_code"], 
-			so["sales_order_details"][0].warehouse, 50.0)
+			so.get("sales_order_details")[0].warehouse, 50.0)
 		self.check_reserved_qty(sbom_test_records[0][2]["item_code"], 
-			so["sales_order_details"][0].warehouse, 20.0)
+			so.get("sales_order_details")[0].warehouse, 20.0)
 
 	def test_warehouse_user(self):
 		frappe.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction")
@@ -293,7 +293,7 @@
 		so.company = "_Test Company 1"
 		so.conversion_rate = 0.02
 		so.plc_conversion_rate = 0.02
-		so["sales_order_details"][0].warehouse = "_Test Warehouse 2 - _TC1"
+		so.get("sales_order_details")[0].warehouse = "_Test Warehouse 2 - _TC1"
 		self.assertRaises(frappe.PermissionError, so.insert)
 
 		frappe.set_user("test2@example.com")
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index a5fd8ec..3f74c5c 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -3,16 +3,11 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe.utils import add_days, cint,flt, nowdate, get_url_to_form, formatdate
-from frappe import msgprint, _
-
+from frappe.utils import flt, nowdate
 import frappe.defaults
-
-
 from frappe.model.document import Document
 
-class Bin(Document):	
-		
+class Bin(Document):
 	def validate(self):
 		if self.get("__islocal") or not self.stock_uom:
 			self.stock_uom = frappe.db.get_value('Item', self.item_code, 'stock_uom')
@@ -25,7 +20,7 @@
 	def validate_mandatory(self):
 		qf = ['actual_qty', 'reserved_qty', 'ordered_qty', 'indented_qty']
 		for f in qf:
-			if (not self.has_key(f)) or (not self.get(f)): 
+			if (not getattr(self, f, None)) or (not self.get(f)): 
 				self.set(f, 0.0)
 		
 	def update_stock(self, args):
@@ -47,6 +42,7 @@
 			
 	def update_qty(self, args):
 		# update the stock values (for current quantities)
+		
 		self.actual_qty = flt(self.actual_qty) + flt(args.get("actual_qty"))
 		self.ordered_qty = flt(self.ordered_qty) + flt(args.get("ordered_qty"))
 		self.reserved_qty = flt(self.reserved_qty) + flt(args.get("reserved_qty"))
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index b990063..347b1f4 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -313,7 +313,7 @@
 				"serial_no": "serial_no"
 			},
 			"postprocess": update_item,
-			"filter": lambda d: d.qty - invoiced_qty_map.get(d.name, 0)==0 
+			"filter": lambda d: d.qty - invoiced_qty_map.get(d.name, 0)<=0 
 		}, 
 		"Sales Taxes and Charges": {
 			"doctype": "Sales Taxes and Charges", 
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index e54b5c0..0260232 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -14,7 +14,7 @@
 		item_code = pr_test_records[0][1]["item_code"]
 	
 	pr = frappe.copy_doc(pr_test_records[0])
-	pr["purchase_receipt_details"][0].item_code = item_code
+	pr.get("purchase_receipt_details")[0].item_code = item_code
 	pr.insert()
 	pr.submit()
 	
@@ -34,7 +34,7 @@
 		dn.submit()
 		si = make_sales_invoice(dn.name)
 		
-		self.assertEquals(len(si), len(dn.doclist))
+		self.assertEquals(len(si), len(dn))
 		
 		# modify amount
 		si[1]["rate"] = 200
@@ -69,11 +69,11 @@
 		_insert_purchase_receipt()
 		
 		dn = frappe.copy_doc(test_records[0])
-		dn["delivery_note_details"][0].expense_account = "Cost of Goods Sold - _TC"
-		dn["delivery_note_details"][0].cost_center = "Main - _TC"
+		dn.get("delivery_note_details")[0].expense_account = "Cost of Goods Sold - _TC"
+		dn.get("delivery_note_details")[0].cost_center = "Main - _TC"
 
 		stock_in_hand_account = frappe.db.get_value("Account", 
-			{"master_name": dn["delivery_note_details"][0].warehouse})
+			{"master_name": dn.get("delivery_note_details")[0].warehouse})
 		
 		from erpnext.accounts.utils import get_balance_on
 		prev_bal = get_balance_on(stock_in_hand_account, dn.posting_date)
@@ -97,8 +97,8 @@
 		# back dated purchase receipt
 		pr = frappe.copy_doc(pr_test_records[0])
 		pr.posting_date = "2013-01-01"
-		pr["purchase_receipt_details"][0].rate = 100
-		pr["purchase_receipt_details"][0].base_amount = 100
+		pr.get("purchase_receipt_details")[0].rate = 100
+		pr.get("purchase_receipt_details")[0].base_amount = 100
 		
 		pr.insert()
 		pr.submit()
@@ -124,11 +124,11 @@
 		_insert_purchase_receipt("_Test Item Home Desktop 100")
 		
 		dn = frappe.copy_doc(test_records[0])
-		dn["delivery_note_details"][0].item_code = "_Test Sales BOM Item"
-		dn["delivery_note_details"][0].qty = 1
+		dn.get("delivery_note_details")[0].item_code = "_Test Sales BOM Item"
+		dn.get("delivery_note_details")[0].qty = 1
 	
 		stock_in_hand_account = frappe.db.get_value("Account", 
-			{"master_name": dn["delivery_note_details"][0].warehouse})
+			{"master_name": dn.get("delivery_note_details")[0].warehouse})
 		
 		from erpnext.accounts.utils import get_balance_on
 		prev_bal = get_balance_on(stock_in_hand_account, dn.posting_date)
@@ -160,12 +160,12 @@
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		
 		se = make_serialized_item()
-		serial_nos = get_serial_nos(se["mtn_details"][0].serial_no)
+		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)
 		
 		dn = frappe.copy_doc(test_records[0])
-		dn["delivery_note_details"][0].item_code = "_Test Serialized Item With Series"
-		dn["delivery_note_details"][0].qty = 1
-		dn["delivery_note_details"][0].serial_no = serial_nos[0]
+		dn.get("delivery_note_details")[0].item_code = "_Test Serialized Item With Series"
+		dn.get("delivery_note_details")[0].qty = 1
+		dn.get("delivery_note_details")[0].serial_no = serial_nos[0]
 		dn.insert()
 		dn.submit()
 		
@@ -181,7 +181,7 @@
 		dn = self.test_serialized()
 		dn.cancel()
 
-		serial_nos = get_serial_nos(dn["delivery_note_details"][0].serial_no)
+		serial_nos = get_serial_nos(dn.get("delivery_note_details")[0].serial_no)
 
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Available")
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
@@ -193,16 +193,16 @@
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
 		
 		se = make_serialized_item()
-		serial_nos = get_serial_nos(se["mtn_details"][0].serial_no)
+		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)
 		
 		sr = frappe.get_doc("Serial No", serial_nos[0])
 		sr.status = "Not Available"
 		sr.save()
 		
 		dn = frappe.copy_doc(test_records[0])
-		dn["delivery_note_details"][0].item_code = "_Test Serialized Item With Series"
-		dn["delivery_note_details"][0].qty = 1
-		dn["delivery_note_details"][0].serial_no = serial_nos[0]
+		dn.get("delivery_note_details")[0].item_code = "_Test Serialized Item With Series"
+		dn.get("delivery_note_details")[0].qty = 1
+		dn.get("delivery_note_details")[0].serial_no = serial_nos[0]
 		dn.insert()
 
 		self.assertRaises(SerialNoStatusError, dn.submit)
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index 9c51f7b..6d10d40 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -25,7 +25,7 @@
 		po = make_purchase_order(mr.name)
 		
 		self.assertEquals(po[0]["doctype"], "Purchase Order")
-		self.assertEquals(len(po), len(mr.doclist))
+		self.assertEquals(len(po), len(mr))
 		
 	def test_make_supplier_quotation(self):
 		from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
@@ -40,7 +40,7 @@
 		sq = make_supplier_quotation(mr.name)
 		
 		self.assertEquals(sq[0]["doctype"], "Supplier Quotation")
-		self.assertEquals(len(sq), len(mr.doclist))
+		self.assertEquals(len(sq), len(mr))
 		
 			
 	def test_make_stock_entry(self):
@@ -57,12 +57,12 @@
 		se = make_stock_entry(mr.name)
 		
 		self.assertEquals(se[0]["doctype"], "Stock Entry")
-		self.assertEquals(len(se), len(mr.doclist))
+		self.assertEquals(len(se), len(mr))
 	
-	def _test_expected(self, doclist, expected_values):
+	def _test_expected(self, doc, expected_values):
 		for i, expected in enumerate(expected_values):
 			for fieldname, val in expected.items():
-				self.assertEquals(val, doclist[i].get(fieldname))
+				self.assertEquals(val, doc[i].get(fieldname))
 				
 	def _test_requested_qty(self, qty1, qty2):
 		self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
@@ -117,42 +117,42 @@
 		mr.submit()
 		
 		# check if per complete is None
-		self._test_expected(mr.doclist, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
 		
 		self._test_requested_qty(54.0, 3.0)
 		
 		# map a purchase order
 		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
-		po_doclist = make_purchase_order(mr.name)
-		po_doclist[0]["supplier"] = "_Test Supplier"
-		po_doclist[0]["transaction_date"] = "2013-07-07"
-		po_doclist[1]["qty"] = 27.0
-		po_doclist[2]["qty"] = 1.5
-		po_doclist[1]["schedule_date"] = "2013-07-09"
-		po_doclist[2]["schedule_date"] = "2013-07-09"
+		po_doc = make_purchase_order(mr.name)
+		po_doc["supplier"] = "_Test Supplier"
+		po_doc["transaction_date"] = "2013-07-07"
+		po_doc.get("po_details")[0]["qty"] = 27.0
+		po_doc.get("po_details")[1]["qty"] = 1.5
+		po_doc.get("po_details")[0]["schedule_date"] = "2013-07-09"
+		po_doc.get("po_details")[1]["schedule_date"] = "2013-07-09"
 
 		
 		# check for stopped status of Material Request
-		po = frappe.copy_doc(po_doclist)
+		po = frappe.copy_doc(po_doc)
 		po.insert()
 		mr.obj.update_status('Stopped')
 		self.assertRaises(frappe.ValidationError, po.submit)
 		self.assertRaises(frappe.ValidationError, po.cancel)
 
 		mr.obj.update_status('Submitted')
-		po = frappe.copy_doc(po_doclist)
+		po = frappe.copy_doc(po_doc)
 		po.insert()
 		po.submit()
 		
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr.doclist, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
+		self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
 		self._test_requested_qty(27.0, 1.5)
 		
 		po.cancel()
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr.doclist, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
 		self._test_requested_qty(54.0, 3.0)
 		
 	def test_completed_qty_for_transfer(self):
@@ -166,26 +166,26 @@
 		mr.submit()
 
 		# check if per complete is None
-		self._test_expected(mr.doclist, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
 		
 		self._test_requested_qty(54.0, 3.0)
 
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 				
 		# map a stock entry
-		se_doclist = make_stock_entry(mr.name)
-		se_doclist[0].update({
+		se_doc = make_stock_entry(mr.name)
+		se_doc.update({
 			"posting_date": "2013-03-01",
 			"posting_time": "01:00",
 			"fiscal_year": "_Test Fiscal Year 2013",
 		})
-		se_doclist[1].update({
+		se_doc.get("mtn_details")[0].update({
 			"qty": 27.0,
 			"transfer_qty": 27.0,
 			"s_warehouse": "_Test Warehouse 1 - _TC",
 			"incoming_rate": 1.0
 		})
-		se_doclist[2].update({
+		se_doc.get("mtn_details")[1].update({
 			"qty": 1.5,
 			"transfer_qty": 1.5,
 			"s_warehouse": "_Test Warehouse 1 - _TC",
@@ -196,26 +196,26 @@
 		self._insert_stock_entry(27.0, 1.5)
 		
 		# check for stopped status of Material Request
-		se = frappe.copy_doc(se_doclist)
+		se = frappe.copy_doc(se_doc)
 		se.insert()
 		mr.obj.update_status('Stopped')
 		self.assertRaises(frappe.ValidationError, se.submit)
 		self.assertRaises(frappe.ValidationError, se.cancel)
 		
 		mr.obj.update_status('Submitted')
-		se = frappe.copy_doc(se_doclist)
+		se = frappe.copy_doc(se_doc)
 		se.insert()
 		se.submit()
 		
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr.doclist, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
+		self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
 		self._test_requested_qty(27.0, 1.5)
 		
 		# check if per complete is as expected for Stock Entry cancelled
 		se.cancel()
 		mr.load_from_db()
-		self._test_expected(mr.doclist, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
+		self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
 		self._test_requested_qty(54.0, 3.0)
 		
 	def test_completed_qty_for_over_transfer(self):
@@ -229,26 +229,26 @@
 		mr.submit()
 
 		# check if per complete is None
-		self._test_expected(mr.doclist, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
 		
 		self._test_requested_qty(54.0, 3.0)
 		
 		# map a stock entry
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 
-		se_doclist = make_stock_entry(mr.name)
-		se_doclist[0].update({
+		se_doc = make_stock_entry(mr.name)
+		se_doc.update({
 			"posting_date": "2013-03-01",
 			"posting_time": "00:00",
 			"fiscal_year": "_Test Fiscal Year 2013",
 		})
-		se_doclist[1].update({
+		se_doc.get("mtn_details")[0].update({
 			"qty": 60.0,
 			"transfer_qty": 60.0,
 			"s_warehouse": "_Test Warehouse 1 - _TC",
 			"incoming_rate": 1.0
 		})
-		se_doclist[2].update({
+		se_doc.get("mtn_details")[1].update({
 			"qty": 3.0,
 			"transfer_qty": 3.0,
 			"s_warehouse": "_Test Warehouse 1 - _TC",
@@ -259,26 +259,26 @@
 		self._insert_stock_entry(60.0, 3.0)
 		
 		# check for stopped status of Material Request
-		se = frappe.copy_doc(se_doclist)
+		se = frappe.copy_doc(se_doc)
 		se.insert()
 		mr.obj.update_status('Stopped')
 		self.assertRaises(frappe.ValidationError, se.submit)
 		self.assertRaises(frappe.ValidationError, se.cancel)
 		
 		mr.obj.update_status('Submitted')
-		se = frappe.copy_doc(se_doclist)
+		se = frappe.copy_doc(se_doc)
 		se.insert()
 		se.submit()
 		
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr.doclist, [{"per_ordered": 100}, {"ordered_qty": 60.0}, {"ordered_qty": 3.0}])
+		self._test_expected(mr, [{"per_ordered": 100}, {"ordered_qty": 60.0}, {"ordered_qty": 3.0}])
 		self._test_requested_qty(0.0, 0.0)
 		
 		# check if per complete is as expected for Stock Entry cancelled
 		se.cancel()
 		mr.load_from_db()
-		self._test_expected(mr.doclist, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
+		self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
 		self._test_requested_qty(54.0, 3.0)
 		
 	def test_incorrect_mapping_of_stock_entry(self):
@@ -291,20 +291,20 @@
 		# map a stock entry
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 		
-		se_doclist = make_stock_entry(mr.name)
-		se_doclist[0].update({
+		se_doc = make_stock_entry(mr.name)
+		se_doc.update({
 			"posting_date": "2013-03-01",
 			"posting_time": "00:00",
 			"fiscal_year": "_Test Fiscal Year 2013",
 		})
-		se_doclist[1].update({
+		se_doc.get("mtn_details")[0].update({
 			"qty": 60.0,
 			"transfer_qty": 60.0,
 			"s_warehouse": "_Test Warehouse - _TC",
 			"t_warehouse": "_Test Warehouse 1 - _TC",
 			"incoming_rate": 1.0
 		})
-		se_doclist[2].update({
+		se_doc.get("mtn_details")[1].update({
 			"qty": 3.0,
 			"transfer_qty": 3.0,
 			"s_warehouse": "_Test Warehouse 1 - _TC",
@@ -312,7 +312,7 @@
 		})
 		
 		# check for stopped status of Material Request
-		se = frappe.copy_doc(se_doclist)
+		se = frappe.copy_doc(se_doc)
 		self.assertRaises(frappe.MappingMismatchError, se.insert)
 		
 	def test_warehouse_company_validation(self):
diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py
index 5a09121..cf208ee 100644
--- a/erpnext/stock/doctype/packed_item/packed_item.py
+++ b/erpnext/stock/doctype/packed_item/packed_item.py
@@ -53,7 +53,7 @@
 	if not pi.warehouse:
 		pi.warehouse = warehouse
 	if not pi.batch_no:
-		pi.batch_no = cstr(line.batch_no)
+		pi.batch_no = cstr(line.get("batch_no"))
 	pi.idx = packing_list_idx
 	
 	packing_list_idx += 1
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 74939b6..f0de633 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -23,11 +23,11 @@
 		pr.submit()
 		pi = make_purchase_invoice(pr.name)
 		
-		self.assertEquals(pi[0]["doctype"], "Purchase Invoice")
-		self.assertEquals(len(pi), len(pr.doclist))
+		self.assertEquals(pi["doctype"], "Purchase Invoice")
+		self.assertEquals(len(pi.get("entries")), len(pr.get("purchase_receipt_details")))
 		
 		# modify rate
-		pi[1]["rate"] = 200
+		pi.get("entries")[0]["rate"] = 200
 		self.assertRaises(frappe.ValidationError, frappe.get_doc(pi).submit)
 		
 	def test_purchase_receipt_no_gl_entry(self):
@@ -65,9 +65,9 @@
 		self.assertTrue(gl_entries)
 		
 		stock_in_hand_account = frappe.db.get_value("Account", 
-			{"master_name": pr["purchase_receipt_details"][0].warehouse})		
+			{"master_name": pr.get("purchase_receipt_details")[0].warehouse})		
 		fixed_asset_account = frappe.db.get_value("Account", 
-			{"master_name": pr["purchase_receipt_details"][1].warehouse})
+			{"master_name": pr.get("purchase_receipt_details")[1].warehouse})
 		
 		expected_values = {
 			stock_in_hand_account: [375.0, 0.0],
@@ -94,18 +94,18 @@
 		pr.run_method("calculate_taxes_and_totals")
 		pr.insert()
 		
-		self.assertEquals(pr["purchase_receipt_details"][0].rm_supp_cost, 70000.0)
+		self.assertEquals(pr.get("purchase_receipt_details")[0].rm_supp_cost, 70000.0)
 		self.assertEquals(len(pr.get("pr_raw_material_details")), 2)
 		
 	def test_serial_no_supplier(self):
 		pr = frappe.copy_doc(test_records[0])
-		pr["purchase_receipt_details"][0].item_code = "_Test Serialized Item With Series"
-		pr["purchase_receipt_details"][0].qty = 1
-		pr["purchase_receipt_details"][0].received_qty = 1
+		pr.get("purchase_receipt_details")[0].item_code = "_Test Serialized Item With Series"
+		pr.get("purchase_receipt_details")[0].qty = 1
+		pr.get("purchase_receipt_details")[0].received_qty = 1
 		pr.insert()
 		pr.submit()
 		
-		self.assertEquals(frappe.db.get_value("Serial No", pr["purchase_receipt_details"][0].serial_no, 
+		self.assertEquals(frappe.db.get_value("Serial No", pr.get("purchase_receipt_details")[0].serial_no, 
 			"supplier"), pr.supplier)
 			
 		return pr
@@ -114,7 +114,7 @@
 		pr = self.test_serial_no_supplier()
 		pr.cancel()
 		
-		self.assertFalse(frappe.db.get_value("Serial No", pr["purchase_receipt_details"][0].serial_no, 
+		self.assertFalse(frappe.db.get_value("Serial No", pr.get("purchase_receipt_details")[0].serial_no, 
 			"warehouse"))
 			
 def get_gl_entries(voucher_type, voucher_no):
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 7a259f8..9078655 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -284,6 +284,7 @@
 	sr.serial_no = serial_no
 	sr.item_code = sle.item_code
 	sr.warehouse = None
+	sr.company = sle.company
 	sr.via_stock_ledger = True
 	sr.insert()
 	sr.warehouse = sle.warehouse
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index cdfff04..b5d46a2 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -277,7 +277,7 @@
 						raise_exception=frappe.DoesNotExistError)
 				
 				# validate quantity <= ref item's qty - qty already returned
-				ref_item = ref.getone({"item_code": item.item_code})
+				ref_item = ref.doc.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(
@@ -710,7 +710,7 @@
 		parentfields = [parentfields]
 	
 	all_items = list(set([d.item_code for d in 
-		ref_doc.get_all_children() if d.item_code]))
+		ref_doc.get_all_children() if d.get("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))
@@ -720,9 +720,9 @@
 def get_return_doc_and_details(args):
 	ref = frappe._dict()
 	
-	# get ref_doc
+	# get ref_doc	
 	if args.get("purpose") in return_map:
-		for fieldname, val in return_map[args["purpose"]].items():
+		for fieldname, val in return_map[args.get("purpose")].items():
 			if args.get(fieldname):
 				ref.fieldname = fieldname
 				ref.doc = frappe.get_doc(val[0], args.get(fieldname))
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 00718f1..0aa0433 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe, unittest
-from frappe.utils import flt
+from frappe.utils import flt, getdate
 from erpnext.stock.doctype.serial_no.serial_no import *
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 from erpnext.stock.doctype.stock_ledger_entry.stock_ledger_entry import StockFreezeError
@@ -29,7 +29,7 @@
 		st2 = frappe.copy_doc(test_records[1])
 		st2.insert()
 		st2.submit()
-				
+
 		from erpnext.stock.utils import reorder_item
 
 		reorder_item()
@@ -50,7 +50,7 @@
 		mr.submit()
 
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
-			"master_name": mr["mtn_details"][0].t_warehouse})
+			"master_name": mr.get("mtn_details")[0].t_warehouse})
 
 		self.check_stock_ledger_entries("Stock Entry", mr.name,
 			[["_Test Item", "_Test Warehouse - _TC", 50.0]])
@@ -85,7 +85,7 @@
 			[["_Test Item", "_Test Warehouse - _TC", -40.0]])
 
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
-			"master_name": mi["mtn_details"][0].s_warehouse})
+			"master_name": mi.get("mtn_details")[0].s_warehouse})
 
 		self.check_gl_entries("Stock Entry", mi.name,
 			sorted([
@@ -101,11 +101,11 @@
 		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mi.name))
 
-		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi["mtn_details"][0].s_warehouse,
-			"item_code": mi["mtn_details"][0].item_code}, "actual_qty"), 50)
+		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.get("mtn_details")[0].s_warehouse,
+			"item_code": mi.get("mtn_details")[0].item_code}, "actual_qty"), 50)
 
-		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi["mtn_details"][0].s_warehouse,
-			"item_code": mi["mtn_details"][0].item_code}, "stock_value"), 5000)
+		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.get("mtn_details")[0].s_warehouse,
+			"item_code": mi.get("mtn_details")[0].item_code}, "stock_value"), 5000)
 
 	def test_material_transfer_gl_entry(self):
 		self._clear_stock_account_balance()
@@ -121,10 +121,10 @@
 			[["_Test Item", "_Test Warehouse - _TC", -45.0], ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]])
 
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
-			"master_name": mtn["mtn_details"][0].s_warehouse})
+			"master_name": mtn.get("mtn_details")[0].s_warehouse})
 
 		fixed_asset_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
-			"master_name": mtn["mtn_details"][0].t_warehouse})
+			"master_name": mtn.get("mtn_details")[0].t_warehouse})
 
 
 		self.check_gl_entries("Stock Entry", mtn.name,
@@ -171,12 +171,12 @@
 		self._insert_material_receipt()
 
 		repack = frappe.copy_doc(test_records[3])
-		repack["mtn_details"][1].incoming_rate = 6000
+		repack.get("mtn_details")[1].incoming_rate = 6000
 		repack.insert()
 		repack.submit()
 
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
-			"master_name": repack["mtn_details"][1].t_warehouse})
+			"master_name": repack.get("mtn_details")[1].t_warehouse})
 
 		self.check_gl_entries("Stock Entry", repack.name,
 			sorted([
@@ -223,7 +223,7 @@
 		se1.submit()
 
 		se2 = frappe.copy_doc(test_records[0])
-		se2["mtn_details"][0].item_code = "_Test Item Home Desktop 100"
+		se2.get("mtn_details")[0].item_code = "_Test Item Home Desktop 100"
 		se2.insert()
 		se2.submit()
 
@@ -235,7 +235,7 @@
 
 	def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
 		from erpnext.stock.doctype.stock_entry.stock_entry import NotUpdateStockError
-		
+
 		from erpnext.accounts.doctype.sales_invoice.test_sales_invoice \
 			import test_records as sales_invoice_test_records
 
@@ -247,8 +247,8 @@
 		se = frappe.copy_doc(test_records[0])
 		se.purpose = "Sales Return"
 		se.sales_invoice_no = si.name
-		se["mtn_details"][0].qty = returned_qty
-		se["mtn_details"][0].transfer_qty = returned_qty
+		se.get("mtn_details")[0].qty = returned_qty
+		se.get("mtn_details")[0].transfer_qty = returned_qty
 		self.assertRaises(NotUpdateStockError, se.insert)
 
 		self._insert_material_receipt()
@@ -259,9 +259,9 @@
 		# insert a pos invoice with update stock
 		si = frappe.copy_doc(sales_invoice_test_records[1])
 		si.is_pos = si.update_stock = 1
-		si["mtn_details"][0].warehouse = "_Test Warehouse - _TC"
-		si["mtn_details"][0].item_code = item_code
-		si["mtn_details"][0].qty = 5.0
+		si.get("entries")[0].warehouse = "_Test Warehouse - _TC"
+		si.get("entries")[0].item_code = item_code
+		si.get("entries")[0].qty = 5.0
 		si.insert()
 		si.submit()
 
@@ -276,9 +276,9 @@
 		se.sales_invoice_no = si.name
 		se.posting_date = "2013-03-10"
 		se.fiscal_year = "_Test Fiscal Year 2013"
-		se["mtn_details"][0].item_code = "_Test Item Home Desktop 200"
-		se["mtn_details"][0].qty = returned_qty
-		se["mtn_details"][0].transfer_qty = returned_qty
+		se.get("mtn_details")[0].item_code = "_Test Item Home Desktop 200"
+		se.get("mtn_details")[0].qty = returned_qty
+		se.get("mtn_details")[0].transfer_qty = returned_qty
 
 		# check if stock entry gets submitted
 		self.assertRaises(frappe.DoesNotExistError, se.insert)
@@ -289,8 +289,8 @@
 		se.posting_date = "2013-03-10"
 		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.sales_invoice_no = si.name
-		se["mtn_details"][0].qty = returned_qty
-		se["mtn_details"][0].transfer_qty = returned_qty
+		se.get("mtn_details")[0].qty = returned_qty
+		se.get("mtn_details")[0].transfer_qty = returned_qty
 		# in both cases item code remains _Test Item when returning
 		se.insert()
 
@@ -322,7 +322,7 @@
 		actual_qty_0 = self._get_actual_qty()
 		# make a delivery note based on this invoice
 		dn = frappe.copy_doc(delivery_note_test_records[0])
-		dn["delivery_note_details"][0].item_code = item_code
+		dn.get("delivery_note_details")[0].item_code = item_code
 		dn.insert()
 		dn.submit()
 
@@ -330,9 +330,9 @@
 
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
 
-		si_doclist = make_sales_invoice(dn.name)
+		si_doc = make_sales_invoice(dn.name)
 
-		si = frappe.get_doc(si_doclist)
+		si = frappe.get_doc(si_doc)
 		si.posting_date = dn.posting_date
 		si.debit_to = "_Test Customer - _TC"
 		for d in si.get("entries"):
@@ -347,7 +347,7 @@
 		se.delivery_note_no = dn.name
 		se.posting_date = "2013-03-10"
 		se.fiscal_year = "_Test Fiscal Year 2013"
-		se["mtn_details"][0].qty = se["mtn_details"][0].transfer_qty = returned_qty
+		se.get("mtn_details")[0].qty = se.get("mtn_details")[0].transfer_qty = returned_qty
 
 		se.insert()
 		se.submit()
@@ -409,28 +409,25 @@
 		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice, make_delivery_note
 
 		actual_qty_0 = self._get_actual_qty()
-
 		so = frappe.copy_doc(sales_order_test_records[0])
-		so["sales_order_details"][0].item_code = item_code
-		so["sales_order_details"][0].qty = 5.0
+		so.get("sales_order_details")[0].item_code = item_code
+		so.get("sales_order_details")[0].qty = 5.0
 		so.insert()
 		so.submit()
+		dn_doc = make_delivery_note(so.name)
 
-		dn_doclist = make_delivery_note(so.name)
-
-		dn = frappe.get_doc(dn_doclist)
+		dn = frappe.get_doc(dn_doc)
 		dn.status = "Draft"
 		dn.posting_date = so.delivery_date
 		dn.insert()
 		dn.submit()
 
 		actual_qty_1 = self._get_actual_qty()
-
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
 
-		si_doclist = make_sales_invoice(so.name)
+		si_doc = make_sales_invoice(so.name)
 
-		si = frappe.get_doc(si_doclist)
+		si = frappe.get_doc(si_doc)
 		si.posting_date = dn.posting_date
 		si.debit_to = "_Test Customer - _TC"
 		for d in si.get("entries"):
@@ -445,7 +442,7 @@
 		se.delivery_note_no = dn.name
 		se.posting_date = "2013-03-10"
 		se.fiscal_year = "_Test Fiscal Year 2013"
-		se["mtn_details"][0].qty = se["mtn_details"][0].transfer_qty = returned_qty
+		se.get("mtn_details")[0].qty = se.get("mtn_details")[0].transfer_qty = returned_qty
 
 		se.insert()
 		se.submit()
@@ -464,7 +461,7 @@
 			import test_records as purchase_receipt_test_records
 
 		from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
-		
+
 		# submit purchase receipt
 		pr = frappe.copy_doc(purchase_receipt_test_records[0])
 		pr.insert()
@@ -474,9 +471,9 @@
 
 		self.assertEquals(actual_qty_0 + 5, actual_qty_1)
 
-		pi_doclist = make_purchase_invoice(pr.name)
+		pi_doc = make_purchase_invoice(pr.name)
 
-		pi = frappe.get_doc(pi_doclist)
+		pi = frappe.get_doc(pi_doc)
 		pi.posting_date = pr.posting_date
 		pi.credit_to = "_Test Supplier - _TC"
 		for d in pi.get("entries"):
@@ -497,8 +494,8 @@
 		se.purchase_receipt_no = pr.name
 		se.posting_date = "2013-03-01"
 		se.fiscal_year = "_Test Fiscal Year 2013"
-		se["mtn_details"][0].qty = se["mtn_details"][0].transfer_qty = 5
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
+		se.get("mtn_details")[0].qty = se.get("mtn_details")[0].transfer_qty = 5
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
 		se.insert()
 		se.submit()
 
@@ -523,8 +520,8 @@
 		se.purchase_receipt_no = pr_docname
 		se.posting_date = "2013-03-01"
 		se.fiscal_year = "_Test Fiscal Year 2013"
-		se["mtn_details"][0].qty = se["mtn_details"][0].transfer_qty = 6
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
+		se.get("mtn_details")[0].qty = se.get("mtn_details")[0].transfer_qty = 6
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
 
 		self.assertRaises(StockOverReturnError, se.insert)
 
@@ -551,24 +548,24 @@
 		self._clear_stock_account_balance()
 
 		actual_qty_0 = self._get_actual_qty()
-		
+
 		from erpnext.buying.doctype.purchase_order.test_purchase_order \
 			import test_records as purchase_order_test_records
-		
+
 		from erpnext.buying.doctype.purchase_order.purchase_order import \
 			make_purchase_receipt, make_purchase_invoice
 
 		# submit purchase receipt
 		po = frappe.copy_doc(purchase_order_test_records[0])
 		po.is_subcontracted = None
-		po["po_details"][0].item_code = "_Test Item"
-		po["po_details"][0].rate = 50
+		po.get("po_details")[0].item_code = "_Test Item"
+		po.get("po_details")[0].rate = 50
 		po.insert()
 		po.submit()
 
-		pr_doclist = make_purchase_receipt(po.name)
+		pr_doc = make_purchase_receipt(po.name)
 
-		pr = frappe.get_doc(pr_doclist)
+		pr = frappe.get_doc(pr_doc)
 		pr.posting_date = po.transaction_date
 		pr.insert()
 		pr.submit()
@@ -577,9 +574,9 @@
 
 		self.assertEquals(actual_qty_0 + 10, actual_qty_1)
 
-		pi_doclist = make_purchase_invoice(po.name)
+		pi_doc = make_purchase_invoice(po.name)
 
-		pi = frappe.get_doc(pi_doclist)
+		pi = frappe.get_doc(pi_doc)
 		pi.posting_date = pr.posting_date
 		pi.credit_to = "_Test Supplier - _TC"
 		for d in pi.get("entries"):
@@ -599,8 +596,8 @@
 		se.purchase_receipt_no = pr.name
 		se.posting_date = "2013-03-01"
 		se.fiscal_year = "_Test Fiscal Year 2013"
-		se["mtn_details"][0].qty = se["mtn_details"][0].transfer_qty = 5
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
+		se.get("mtn_details")[0].qty = se.get("mtn_details")[0].transfer_qty = 5
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
 		se.insert()
 		se.submit()
 
@@ -622,43 +619,43 @@
 
 	def test_serial_no_not_reqd(self):
 		se = frappe.copy_doc(test_records[0])
-		se["mtn_details"][0].serial_no = "ABCD"
+		se.get("mtn_details")[0].serial_no = "ABCD"
 		se.insert()
 		self.assertRaises(SerialNoNotRequiredError, se.submit)
 
 	def test_serial_no_reqd(self):
 		se = frappe.copy_doc(test_records[0])
-		se["mtn_details"][0].item_code = "_Test Serialized Item"
-		se["mtn_details"][0].qty = 2
-		se["mtn_details"][0].transfer_qty = 2
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item"
+		se.get("mtn_details")[0].qty = 2
+		se.get("mtn_details")[0].transfer_qty = 2
 		se.insert()
 		self.assertRaises(SerialNoRequiredError, se.submit)
 
 	def test_serial_no_qty_more(self):
 		se = frappe.copy_doc(test_records[0])
-		se["mtn_details"][0].item_code = "_Test Serialized Item"
-		se["mtn_details"][0].qty = 2
-		se["mtn_details"][0].serial_no = "ABCD\nEFGH\nXYZ"
-		se["mtn_details"][0].transfer_qty = 2
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item"
+		se.get("mtn_details")[0].qty = 2
+		se.get("mtn_details")[0].serial_no = "ABCD\nEFGH\nXYZ"
+		se.get("mtn_details")[0].transfer_qty = 2
 		se.insert()
 		self.assertRaises(SerialNoQtyError, se.submit)
 
 	def test_serial_no_qty_less(self):
 		se = frappe.copy_doc(test_records[0])
-		se["mtn_details"][0].item_code = "_Test Serialized Item"
-		se["mtn_details"][0].qty = 2
-		se["mtn_details"][0].serial_no = "ABCD"
-		se["mtn_details"][0].transfer_qty = 2
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item"
+		se.get("mtn_details")[0].qty = 2
+		se.get("mtn_details")[0].serial_no = "ABCD"
+		se.get("mtn_details")[0].transfer_qty = 2
 		se.insert()
 		self.assertRaises(SerialNoQtyError, se.submit)
 
 	def test_serial_no_transfer_in(self):
 		self._clear_stock_account_balance()
 		se = frappe.copy_doc(test_records[0])
-		se["mtn_details"][0].item_code = "_Test Serialized Item"
-		se["mtn_details"][0].qty = 2
-		se["mtn_details"][0].serial_no = "ABCD\nEFGH"
-		se["mtn_details"][0].transfer_qty = 2
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item"
+		se.get("mtn_details")[0].qty = 2
+		se.get("mtn_details")[0].serial_no = "ABCD\nEFGH"
+		se.get("mtn_details")[0].transfer_qty = 2
 		se.insert()
 		se.submit()
 
@@ -672,12 +669,12 @@
 		self._clear_stock_account_balance()
 		se = frappe.copy_doc(test_records[0])
 		se.purpose = "Material Issue"
-		se["mtn_details"][0].item_code = "_Test Serialized Item"
-		se["mtn_details"][0].qty = 2
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse 1 - _TC"
-		se["mtn_details"][0].t_warehouse = None
-		se["mtn_details"][0].serial_no = "ABCD\nEFGH"
-		se["mtn_details"][0].transfer_qty = 2
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item"
+		se.get("mtn_details")[0].qty = 2
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse 1 - _TC"
+		se.get("mtn_details")[0].t_warehouse = None
+		se.get("mtn_details")[0].serial_no = "ABCD\nEFGH"
+		se.get("mtn_details")[0].transfer_qty = 2
 		se.insert()
 		self.assertRaises(SerialNoNotExistsError, se.submit)
 
@@ -686,10 +683,10 @@
 		self.test_serial_by_series()
 
 		se = frappe.copy_doc(test_records[0])
-		se["mtn_details"][0].item_code = "_Test Serialized Item With Series"
-		se["mtn_details"][0].qty = 1
-		se["mtn_details"][0].serial_no = "ABCD00001"
-		se["mtn_details"][0].transfer_qty = 1
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item With Series"
+		se.get("mtn_details")[0].qty = 1
+		se.get("mtn_details")[0].serial_no = "ABCD00001"
+		se.get("mtn_details")[0].transfer_qty = 1
 		se.insert()
 		self.assertRaises(SerialNoDuplicateError, se.submit)
 
@@ -697,7 +694,7 @@
 		self._clear_stock_account_balance()
 		se = make_serialized_item()
 
-		serial_nos = get_serial_nos(se["mtn_details"][0].serial_no)
+		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)
 
 		self.assertTrue(frappe.db.exists("Serial No", serial_nos[0]))
 		self.assertTrue(frappe.db.exists("Serial No", serial_nos[1]))
@@ -710,28 +707,28 @@
 
 		se = frappe.copy_doc(test_records[0])
 		se.purpose = "Material Transfer"
-		se["mtn_details"][0].item_code = "_Test Serialized Item"
-		se["mtn_details"][0].qty = 1
-		se["mtn_details"][0].transfer_qty = 1
-		se["mtn_details"][0].serial_no = "ABCD00001"
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
-		se["mtn_details"][0].t_warehouse = "_Test Warehouse 1 - _TC"
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item"
+		se.get("mtn_details")[0].qty = 1
+		se.get("mtn_details")[0].transfer_qty = 1
+		se.get("mtn_details")[0].serial_no = "ABCD00001"
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
+		se.get("mtn_details")[0].t_warehouse = "_Test Warehouse 1 - _TC"
 		se.insert()
 		self.assertRaises(SerialNoItemError, se.submit)
 
 	def test_serial_move(self):
 		self._clear_stock_account_balance()
 		se = make_serialized_item()
-		serial_no = get_serial_nos(se["mtn_details"][0].serial_no)[0]
+		serial_no = get_serial_nos(se.get("mtn_details")[0].serial_no)[0]
 
 		se = frappe.copy_doc(test_records[0])
 		se.purpose = "Material Transfer"
-		se["mtn_details"][0].item_code = "_Test Serialized Item With Series"
-		se["mtn_details"][0].qty = 1
-		se["mtn_details"][0].transfer_qty = 1
-		se["mtn_details"][0].serial_no = serial_no
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
-		se["mtn_details"][0].t_warehouse = "_Test Warehouse 1 - _TC"
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item With Series"
+		se.get("mtn_details")[0].qty = 1
+		se.get("mtn_details")[0].transfer_qty = 1
+		se.get("mtn_details")[0].serial_no = serial_no
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
+		se.get("mtn_details")[0].t_warehouse = "_Test Warehouse 1 - _TC"
 		se.insert()
 		se.submit()
 		self.assertTrue(frappe.db.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
@@ -745,12 +742,12 @@
 
 		se = frappe.copy_doc(test_records[0])
 		se.purpose = "Material Transfer"
-		se["mtn_details"][0].item_code = "_Test Serialized Item With Series"
-		se["mtn_details"][0].qty = 1
-		se["mtn_details"][0].transfer_qty = 1
-		se["mtn_details"][0].serial_no = "ABCD00001"
-		se["mtn_details"][0].s_warehouse = "_Test Warehouse 1 - _TC"
-		se["mtn_details"][0].t_warehouse = "_Test Warehouse - _TC"
+		se.get("mtn_details")[0].item_code = "_Test Serialized Item With Series"
+		se.get("mtn_details")[0].qty = 1
+		se.get("mtn_details")[0].transfer_qty = 1
+		se.get("mtn_details")[0].serial_no = "ABCD00001"
+		se.get("mtn_details")[0].s_warehouse = "_Test Warehouse 1 - _TC"
+		se.get("mtn_details")[0].t_warehouse = "_Test Warehouse - _TC"
 		se.insert()
 		self.assertRaises(SerialNoWarehouseError, se.submit)
 
@@ -759,9 +756,9 @@
 		se = self.test_serial_by_series()
 		se.cancel()
 
-		serial_no = get_serial_nos(se["mtn_details"][0].serial_no)[0]
+		serial_no = get_serial_nos(se.get("mtn_details")[0].serial_no)[0]
 		self.assertFalse(frappe.db.get_value("Serial No", serial_no, "warehouse"))
-		
+
 	def test_warehouse_company_validation(self):
 		set_perpetual_inventory(0)
 		self._clear_stock_account_balance()
@@ -771,15 +768,15 @@
 
 		from erpnext.stock.utils import InvalidWarehouseCompany
 		st1 = frappe.copy_doc(test_records[0])
-		st1["mtn_details"][0].t_warehouse="_Test Warehouse 2 - _TC1"
+		st1.get("mtn_details")[0].t_warehouse="_Test Warehouse 2 - _TC1"
 		st1.insert()
 		self.assertRaises(InvalidWarehouseCompany, st1.submit)
-		
+
 	# permission tests
 	def test_warehouse_user(self):
 		import frappe.defaults
 		set_perpetual_inventory(0)
-		
+
 		frappe.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction")
 		frappe.defaults.add_default("Warehouse", "_Test Warehouse 2 - _TC1", "test2@example.com", "Restriction")
 		frappe.get_doc("User", "test@example.com")\
@@ -790,19 +787,19 @@
 		frappe.set_user("test@example.com")
 		st1 = frappe.copy_doc(test_records[0])
 		st1.company = "_Test Company 1"
-		st1["mtn_details"][0].t_warehouse="_Test Warehouse 2 - _TC1"
-		self.assertRaises(frappe.PermissionErrorp, st1.insert)
+		st1.get("mtn_details")[0].t_warehouse="_Test Warehouse 2 - _TC1"
+		self.assertRaises(frappe.PermissionError, st1.insert)
 
 		frappe.set_user("test2@example.com")
 		st1 = frappe.copy_doc(test_records[0])
 		st1.company = "_Test Company 1"
-		st1["mtn_details"][0].t_warehouse="_Test Warehouse 2 - _TC1"
+		st1.get("mtn_details")[0].t_warehouse="_Test Warehouse 2 - _TC1"
 		st1.insert()
 		st1.submit()
-		
+
 		frappe.defaults.clear_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", parenttype="Restriction")
 		frappe.defaults.clear_default("Warehouse", "_Test Warehouse 2 - _TC1", "test2@example.com", parenttype="Restriction")
-		
+
 	def test_freeze_stocks (self):
 		self._clear_stock_account_balance()
 		frappe.db.set_value('Stock Settings', None,'stock_auth_role', '')
@@ -822,11 +819,11 @@
 
 def make_serialized_item():
 	se = frappe.copy_doc(test_records[0])
-	se["mtn_details"][0].item_code = "_Test Serialized Item With Series"
-	se["mtn_details"][0].qty = 2
-	se["mtn_details"][0].transfer_qty = 2
+	se.get("mtn_details")[0].item_code = "_Test Serialized Item With Series"
+	se.get("mtn_details")[0].qty = 2
+	se.get("mtn_details")[0].transfer_qty = 2
 	se.insert()
 	se.submit()
 	return se
 
-test_records = frappe.get_test_records('Stock Entry')
\ No newline at end of file
+test_records = frappe.get_test_records('Stock Entry')
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index 0553830..c1ffd02 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -228,9 +228,9 @@
 		pr1 = frappe.copy_doc(stock_entry)
 		pr1.posting_date = "2012-12-15"
 		pr1.posting_time = "02:00"
-		pr1["mtn_details"][0].qty = 10
-		pr1["mtn_details"][0].transfer_qty = 10
-		pr1["mtn_details"][0].incoming_rate = 700
+		pr1.get("mtn_details")[0].qty = 10
+		pr1.get("mtn_details")[0].transfer_qty = 10
+		pr1.get("mtn_details")[0].incoming_rate = 700
 		pr1.insert()
 		pr1.submit()
 		
@@ -238,11 +238,11 @@
 		pr2.posting_date = "2012-12-25"
 		pr2.posting_time = "03:00"
 		pr2.purpose = "Material Issue"
-		pr2["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
-		pr2["mtn_details"][0].t_warehouse = None
-		pr2["mtn_details"][0].qty = 15
-		pr2["mtn_details"][0].transfer_qty = 15
-		pr2["mtn_details"][0].incoming_rate = 0
+		pr2.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
+		pr2.get("mtn_details")[0].t_warehouse = None
+		pr2.get("mtn_details")[0].qty = 15
+		pr2.get("mtn_details")[0].transfer_qty = 15
+		pr2.get("mtn_details")[0].incoming_rate = 0
 		pr2.insert()
 		pr2.submit()
 		
@@ -250,11 +250,11 @@
 		pr3.posting_date = "2012-12-31"
 		pr3.posting_time = "08:00"
 		pr3.purpose = "Material Issue"
-		pr3["mtn_details"][0].s_warehouse = "_Test Warehouse - _TC"
-		pr3["mtn_details"][0].t_warehouse = None
-		pr3["mtn_details"][0].qty = 20
-		pr3["mtn_details"][0].transfer_qty = 20
-		pr3["mtn_details"][0].incoming_rate = 0
+		pr3.get("mtn_details")[0].s_warehouse = "_Test Warehouse - _TC"
+		pr3.get("mtn_details")[0].t_warehouse = None
+		pr3.get("mtn_details")[0].qty = 20
+		pr3.get("mtn_details")[0].transfer_qty = 20
+		pr3.get("mtn_details")[0].incoming_rate = 0
 		pr3.insert()
 		pr3.submit()
 		
@@ -263,9 +263,9 @@
 		pr4.posting_date = "2013-01-05"
 		pr4.fiscal_year = "_Test Fiscal Year 2013"
 		pr4.posting_time = "07:00"
-		pr4["mtn_details"][0].qty = 15
-		pr4["mtn_details"][0].transfer_qty = 15
-		pr4["mtn_details"][0].incoming_rate = 1200
+		pr4.get("mtn_details")[0].qty = 15
+		pr4.get("mtn_details")[0].transfer_qty = 15
+		pr4.get("mtn_details")[0].incoming_rate = 1200
 		pr4.insert()
 		pr4.submit()
 		
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index cf95845..8a19bb1 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -17,36 +17,35 @@
 def make_sl_entries(sl_entries, is_amended=None):
 	if sl_entries:
 		from erpnext.stock.utils import update_bin
-	
+
 		cancel = True if sl_entries[0].get("is_cancelled") == "Yes" else False
 		if cancel:
 			set_as_cancel(sl_entries[0].get('voucher_no'), sl_entries[0].get('voucher_type'))
-	
+
 		for sle in sl_entries:
 			sle_id = None
 			if sle.get('is_cancelled') == 'Yes':
 				sle['actual_qty'] = -flt(sle['actual_qty'])
-		
+
 			if sle.get("actual_qty"):
 				sle_id = make_entry(sle)
-			
+
 			args = sle.copy()
 			args.update({
 				"sle_id": sle_id,
 				"is_amended": is_amended
 			})
 			update_bin(args)
-		
 		if cancel:
-			delete_cancelled_entry(sl_entries[0].get('voucher_type'), 
+			delete_cancelled_entry(sl_entries[0].get('voucher_type'),
 				sl_entries[0].get('voucher_no'))
-			
+
 def set_as_cancel(voucher_type, voucher_no):
 	frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
 		modified=%s, modified_by=%s
-		where voucher_no=%s and voucher_type=%s""", 
+		where voucher_no=%s and voucher_type=%s""",
 		(now(), frappe.session.user, voucher_type, voucher_no))
-		
+
 def make_entry(args):
 	args.update({"doctype": "Stock Ledger Entry"})
 	sle = frappe.get_doc(args)
@@ -54,16 +53,16 @@
 	sle.insert()
 	sle.submit()
 	return sle.name
-	
+
 def delete_cancelled_entry(voucher_type, voucher_no):
-	frappe.db.sql("""delete from `tabStock Ledger Entry` 
+	frappe.db.sql("""delete from `tabStock Ledger Entry`
 		where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
 
 def update_entries_after(args, verbose=1):
 	"""
-		update valution rate and qty after transaction 
+		update valution rate and qty after transaction
 		from the current time-bucket onwards
-		
+
 		args = {
 			"item_code": "ABC",
 			"warehouse": "XYZ",
@@ -73,15 +72,15 @@
 	"""
 	if not _exceptions:
 		frappe.local.stockledger_exceptions = []
-	
+
 	previous_sle = get_sle_before_datetime(args)
-	
+
 	qty_after_transaction = flt(previous_sle.get("qty_after_transaction"))
 	valuation_rate = flt(previous_sle.get("valuation_rate"))
 	stock_queue = json.loads(previous_sle.get("stock_queue") or "[]")
 	stock_value = flt(previous_sle.get("stock_value"))
 	prev_stock_value = flt(previous_sle.get("stock_value"))
-	
+
 	entries_to_fix = get_sle_after_datetime(previous_sle or \
 		{"item_code": args["item_code"], "warehouse": args["warehouse"]}, for_update=True)
 
@@ -90,7 +89,7 @@
 
 	for sle in entries_to_fix:
 		if sle.serial_no or not cint(frappe.db.get_default("allow_negative_stock")):
-			# validate negative stock for serialized items, fifo valuation 
+			# validate negative stock for serialized items, fifo valuation
 			# or when negative stock is not allowed for moving average
 			if not validate_negative_stock(qty_after_transaction, sle):
 				qty_after_transaction += flt(sle.actual_qty)
@@ -102,9 +101,9 @@
 			valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate)
 		else:
 			valuation_rate = get_fifo_values(qty_after_transaction, sle, stock_queue)
-				
+
 		qty_after_transaction += flt(sle.actual_qty)
-		
+
 		# get stock value
 		if sle.serial_no:
 			stock_value = qty_after_transaction * valuation_rate
@@ -113,29 +112,29 @@
 				(qty_after_transaction * valuation_rate) or 0
 		else:
 			stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in stock_queue))
-		
+
 		# rounding as per precision
 		from frappe.model.meta import get_field_precision
 		meta = frappe.get_meta("Stock Ledger Entry")
-		
-		stock_value = flt(stock_value, get_field_precision(meta.get_field("stock_value"), 
+
+		stock_value = flt(stock_value, get_field_precision(meta.get_field("stock_value"),
 			frappe._dict({"fields": sle})))
-		
+
 		stock_value_difference = stock_value - prev_stock_value
 		prev_stock_value = stock_value
-			
+
 		# update current sle
 		frappe.db.sql("""update `tabStock Ledger Entry`
 			set qty_after_transaction=%s, valuation_rate=%s, stock_queue=%s,
-			stock_value=%s, stock_value_difference=%s where name=%s""", 
+			stock_value=%s, stock_value_difference=%s where name=%s""",
 			(qty_after_transaction, valuation_rate,
 			json.dumps(stock_queue), stock_value, stock_value_difference, sle.name))
-	
+
 	if _exceptions:
 		_raise_exceptions(args, verbose)
-	
+
 	# update bin
-	if not frappe.db.exists({"doctype": "Bin", "item_code": args["item_code"], 
+	if not frappe.db.exists({"doctype": "Bin", "item_code": args["item_code"],
 			"warehouse": args["warehouse"]}):
 		bin_wrapper = frappe.get_doc({
 			"doctype": "Bin",
@@ -144,13 +143,13 @@
 		})
 		bin_wrapper.ignore_permissions = 1
 		bin_wrapper.insert()
-	
+
 	frappe.db.sql("""update `tabBin` set valuation_rate=%s, actual_qty=%s,
-		stock_value=%s, 
+		stock_value=%s,
 		projected_qty = (actual_qty + indented_qty + ordered_qty + planned_qty - reserved_qty)
 		where item_code=%s and warehouse=%s""", (valuation_rate, qty_after_transaction,
 		stock_value, args["item_code"], args["warehouse"]))
-		
+
 def get_sle_before_datetime(args, for_update=False):
 	"""
 		get previous stock ledger entry before current time-bucket
@@ -164,23 +163,23 @@
 	sle = get_stock_ledger_entries(args,
 		["timestamp(posting_date, posting_time) < timestamp(%(posting_date)s, %(posting_time)s)"],
 		"desc", "limit 1", for_update=for_update)
-	
+
 	return sle and sle[0] or frappe._dict()
-	
+
 def get_sle_after_datetime(args, for_update=False):
 	"""get Stock Ledger Entries after a particular datetime, for reposting"""
-	# NOTE: using for update of 
+	# NOTE: using for update of
 	return get_stock_ledger_entries(args,
 		["timestamp(posting_date, posting_time) > timestamp(%(posting_date)s, %(posting_time)s)"],
 		"asc", for_update=for_update)
-				
+
 def get_stock_ledger_entries(args, conditions=None, order="desc", limit=None, for_update=False):
 	"""get stock ledger entries filtered by specific posting datetime conditions"""
 	if not args.get("posting_date"):
 		args["posting_date"] = "1900-01-01"
 	if not args.get("posting_time"):
 		args["posting_time"] = "00:00"
-	
+
 	return frappe.db.sql("""select * from `tabStock Ledger Entry`
 		where item_code = %%(item_code)s
 		and warehouse = %%(warehouse)s
@@ -193,7 +192,7 @@
 			"for_update": for_update and "for update" or "",
 			"order": order
 		}, args, as_dict=1)
-		
+
 def validate_negative_stock(qty_after_transaction, sle):
 	"""
 		validate negative stock for entries current datetime onwards
@@ -203,7 +202,7 @@
 
 	if not _exceptions:
 		frappe.local.stockledger_exceptions = []
-	
+
 	if diff < 0 and abs(diff) > 0.0001:
 		# negative stock!
 		exc = sle.copy().update({"diff": diff})
@@ -211,12 +210,12 @@
 		return False
 	else:
 		return True
-	
+
 def get_serialized_values(qty_after_transaction, sle, valuation_rate):
 	incoming_rate = flt(sle.incoming_rate)
 	actual_qty = flt(sle.actual_qty)
 	serial_no = cstr(sle.serial_no).split("\n")
-	
+
 	if incoming_rate < 0:
 		# wrong incoming rate
 		incoming_rate = valuation_rate
@@ -226,7 +225,7 @@
 		incoming_rate = flt(frappe.db.sql("""select avg(ifnull(purchase_rate, 0))
 			from `tabSerial No` where name in (%s)""" % (", ".join(["%s"]*len(serial_no))),
 			tuple(serial_no))[0][0])
-	
+
 	if incoming_rate and not valuation_rate:
 		valuation_rate = incoming_rate
 	else:
@@ -237,33 +236,33 @@
 				# calculate new valuation rate only if stock value is positive
 				# else it remains the same as that of previous entry
 				valuation_rate = new_stock_value / new_stock_qty
-				
+
 	return valuation_rate
-	
+
 def get_moving_average_values(qty_after_transaction, sle, valuation_rate):
 	incoming_rate = flt(sle.incoming_rate)
-	actual_qty = flt(sle.actual_qty)	
-	
+	actual_qty = flt(sle.actual_qty)
+
 	if not incoming_rate:
 		# In case of delivery/stock issue in_rate = 0 or wrong incoming rate
 		incoming_rate = valuation_rate
-	
+
 	elif qty_after_transaction < 0:
 		# if negative stock, take current valuation rate as incoming rate
 		valuation_rate = incoming_rate
-		
+
 	new_stock_qty = qty_after_transaction + actual_qty
 	new_stock_value = qty_after_transaction * valuation_rate + actual_qty * incoming_rate
-	
+
 	if new_stock_qty > 0 and new_stock_value > 0:
 		valuation_rate = new_stock_value / flt(new_stock_qty)
 	elif new_stock_qty <= 0:
 		valuation_rate = 0.0
-	
+
 	# NOTE: val_rate is same as previous entry if new stock value is negative
-	
+
 	return valuation_rate
-	
+
 def get_fifo_values(qty_after_transaction, sle, stock_queue):
 	incoming_rate = flt(sle.incoming_rate)
 	actual_qty = flt(sle.actual_qty)
@@ -282,9 +281,9 @@
 		while qty_to_pop:
 			if not stock_queue:
 				stock_queue.append([0, 0])
-			
+
 			batch = stock_queue[0]
-			
+
 			if 0 < batch[0] <= qty_to_pop:
 				# if batch qty > 0
 				# not enough or exactly same qty in current batch, clear batch
@@ -296,7 +295,7 @@
 				incoming_cost += flt(qty_to_pop) * flt(batch[1])
 				batch[0] -= qty_to_pop
 				qty_to_pop = 0
-		
+
 	stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in stock_queue))
 	stock_qty = sum((flt(batch[0]) for batch in stock_queue))
 
@@ -306,9 +305,9 @@
 
 def _raise_exceptions(args, verbose=1):
 	deficiency = min(e["diff"] for e in _exceptions)
-	msg = """Negative stock error: 
+	msg = """Negative stock error:
 		Cannot complete this transaction because stock will start
-		becoming negative (%s) for Item <b>%s</b> in Warehouse 
+		becoming negative (%s) for Item <b>%s</b> in Warehouse
 		<b>%s</b> on <b>%s %s</b> in Transaction %s %s.
 		Total Quantity Deficiency: <b>%s</b>""" % \
 		(_exceptions[0]["diff"], args.get("item_code"), args.get("warehouse"),
@@ -319,13 +318,13 @@
 		msgprint(msg, raise_exception=NegativeStockError)
 	else:
 		raise NegativeStockError, msg
-		
+
 def get_previous_sle(args, for_update=False):
 	"""
-		get the last sle on or before the current time-bucket, 
+		get the last sle on or before the current time-bucket,
 		to get actual qty before transaction, this function
 		is called from various transaction like stock entry, reco etc
-		
+
 		args = {
 			"item_code": "ABC",
 			"warehouse": "XYZ",
@@ -335,7 +334,7 @@
 		}
 	"""
 	if not args.get("sle"): args["sle"] = ""
-	
+
 	sle = get_stock_ledger_entries(args, ["name != %(sle)s",
 		"timestamp(posting_date, posting_time) <= timestamp(%(posting_date)s, %(posting_time)s)"],
 		"desc", "limit 1", for_update=for_update)
