Replaced doc, doc.fields frappe/frappe#478
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 0587f47..4cc02ab 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -14,19 +14,19 @@
 class Bin(Document):	
 		
 	def validate(self):
-		if self.doc.fields.get("__islocal") or not self.doc.stock_uom:
-			self.doc.stock_uom = frappe.db.get_value('Item', self.doc.item_code, 'stock_uom')
+		if self.get("__islocal") or not self.stock_uom:
+			self.stock_uom = frappe.db.get_value('Item', self.item_code, 'stock_uom')
 				
 		self.validate_mandatory()
 		
-		self.doc.projected_qty = flt(self.doc.actual_qty) + flt(self.doc.ordered_qty) + \
-		 	flt(self.doc.indented_qty) + flt(self.doc.planned_qty) - flt(self.doc.reserved_qty)
+		self.projected_qty = flt(self.actual_qty) + flt(self.ordered_qty) + \
+		 	flt(self.indented_qty) + flt(self.planned_qty) - flt(self.reserved_qty)
 		
 	def validate_mandatory(self):
 		qf = ['actual_qty', 'reserved_qty', 'ordered_qty', 'indented_qty']
 		for f in qf:
-			if (not self.doc.fields.has_key(f)) or (not self.doc.fields[f]): 
-				self.doc.fields[f] = 0.0
+			if (not self.has_key(f)) or (not self.fields[f]): 
+				self.set(f, 0.0)
 		
 	def update_stock(self, args):
 		self.update_qty(args)
@@ -39,24 +39,24 @@
 			
 			# update valuation and qty after transaction for post dated entry
 			update_entries_after({
-				"item_code": self.doc.item_code,
-				"warehouse": self.doc.warehouse,
+				"item_code": self.item_code,
+				"warehouse": self.warehouse,
 				"posting_date": args.get("posting_date"),
 				"posting_time": args.get("posting_time")
 			})
 			
 	def update_qty(self, args):
 		# update the stock values (for current quantities)
-		self.doc.actual_qty = flt(self.doc.actual_qty) + flt(args.get("actual_qty"))
-		self.doc.ordered_qty = flt(self.doc.ordered_qty) + flt(args.get("ordered_qty"))
-		self.doc.reserved_qty = flt(self.doc.reserved_qty) + flt(args.get("reserved_qty"))
-		self.doc.indented_qty = flt(self.doc.indented_qty) + flt(args.get("indented_qty"))
-		self.doc.planned_qty = flt(self.doc.planned_qty) + flt(args.get("planned_qty"))
+		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"))
+		self.indented_qty = flt(self.indented_qty) + flt(args.get("indented_qty"))
+		self.planned_qty = flt(self.planned_qty) + flt(args.get("planned_qty"))
 		
-		self.doc.projected_qty = flt(self.doc.actual_qty) + flt(self.doc.ordered_qty) + \
-		 	flt(self.doc.indented_qty) + flt(self.doc.planned_qty) - flt(self.doc.reserved_qty)
+		self.projected_qty = flt(self.actual_qty) + flt(self.ordered_qty) + \
+		 	flt(self.indented_qty) + flt(self.planned_qty) - flt(self.reserved_qty)
 		
-		self.doc.save()
+		self.save()
 		
 	def get_first_sle(self):
 		sle = frappe.db.sql("""
@@ -65,5 +65,5 @@
 			and warehouse = %s
 			order by timestamp(posting_date, posting_time) asc, name asc
 			limit 1
-		""", (self.doc.item_code, self.doc.warehouse), as_dict=1)
+		""", (self.item_code, self.warehouse), as_dict=1)
 		return sle and sle[0] or None
\ No newline at end of file
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 8d91e49..617a883 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -32,13 +32,13 @@
 		
 	def onload(self):
 		billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Invoice Item`
-			where docstatus=1 and delivery_note=%s""", self.doc.name)
+			where docstatus=1 and delivery_note=%s""", self.name)
 		if billed_qty:
 			total_qty = sum((item.qty for item in self.get("delivery_note_details")))
-			self.doc.fields["__billing_complete"] = billed_qty[0][0] == total_qty
+			self.set("__billing_complete", billed_qty[0][0] == total_qty)
 			
 	def get_portal_page(self):
-		return "shipment" if self.doc.docstatus==1 else None
+		return "shipment" if self.docstatus==1 else None
 
 	def set_actual_qty(self):
 		for d in self.get('delivery_note_details'):
@@ -60,7 +60,7 @@
 		super(DocType, self).validate()
 		
 		from erpnext.utilities import validate_status
-		validate_status(self.doc.status, ["Draft", "Submitted", "Cancelled"])
+		validate_status(self.status, ["Draft", "Submitted", "Cancelled"])
 
 		self.so_required()
 		self.validate_proj_cust()
@@ -74,8 +74,8 @@
 		from erpnext.stock.doctype.packed_item.packed_item import make_packing_list
 		self.doclist = make_packing_list(self, 'delivery_note_details')
 		
-		self.doc.status = 'Draft'
-		if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'	
+		self.status = 'Draft'
+		if not self.installation_status: self.installation_status = 'Not Installed'	
 		
 	def validate_with_previous_doc(self):
 		items = self.get("delivery_note_details")
@@ -101,12 +101,12 @@
 						
 	def validate_proj_cust(self):
 		"""check for does customer belong to same project as entered.."""
-		if self.doc.project_name and self.doc.customer:
+		if self.project_name and self.customer:
 			res = frappe.db.sql("""select name from `tabProject` 
 				where name = %s and (customer = %s or 
-					ifnull(customer,'')='')""", (self.doc.project_name, self.doc.customer))
+					ifnull(customer,'')='')""", (self.project_name, self.customer))
 			if not res:
-				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
+				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.customer,self.project_name,self.project_name))
 				raise Exception
 
 	def validate_for_items(self):
@@ -150,7 +150,7 @@
 		self.validate_packed_qty()
 
 		# Check for Approving Authority
-		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self)
+		get_obj('Authorization Control').validate_approving_authority(self.doctype, self.company, self.grand_total, self)
 		
 		# update delivered qty in sales order	
 		self.update_prevdoc_status()
@@ -183,17 +183,17 @@
 		"""
 			Validate that if packed qty exists, it should be equal to qty
 		"""
-		if not any([flt(d.fields.get('packed_qty')) for d in self.doclist if
+		if not any([flt(d.get('packed_qty')) for d in self.doclist if
 				d.doctype=='Delivery Note Item']):
 			return
 		packing_error_list = []
 		for d in self.doclist:
 			if d.doctype != 'Delivery Note Item': continue
-			if flt(d.fields.get('qty')) != flt(d.fields.get('packed_qty')):
+			if flt(d.get('qty')) != flt(d.get('packed_qty')):
 				packing_error_list.append([
-					d.fields.get('item_code', ''),
-					d.fields.get('qty', 0),
-					d.fields.get('packed_qty', 0)
+					d.get('item_code', ''),
+					d.get('qty', 0),
+					d.get('packed_qty', 0)
 				])
 		if packing_error_list:
 			err_msg = "\n".join([("Item: " + d[0] + ", Qty: " + cstr(d[1]) \
@@ -204,7 +204,7 @@
 		submit_rv = frappe.db.sql("""select t1.name 
 			from `tabSales Invoice` t1,`tabSales Invoice Item` t2 
 			where t1.name = t2.parent and t2.delivery_note = %s and t1.docstatus = 1""", 
-			(self.doc.name))
+			(self.name))
 		if submit_rv:
 			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
 			raise Exception , "Validation Error."
@@ -212,7 +212,7 @@
 		submit_in = frappe.db.sql("""select t1.name 
 			from `tabInstallation Note` t1, `tabInstallation Note Item` t2 
 			where t1.name = t2.parent and t2.prevdoc_docname = %s and t1.docstatus = 1""", 
-			(self.doc.name))
+			(self.name))
 		if submit_in:
 			msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
 			raise Exception , "Validation Error."
@@ -222,7 +222,7 @@
 			Cancel submitted packing slips related to this delivery note
 		"""
 		res = frappe.db.sql("""SELECT name FROM `tabPacking Slip` WHERE delivery_note = %s 
-			AND docstatus = 1""", self.doc.name)
+			AND docstatus = 1""", self.name)
 
 		if res:
 			from frappe.model.bean import Bean
@@ -254,11 +254,11 @@
 			args = {
 				"item_code": d['item_code'],
 				"warehouse": d["reserved_warehouse"],
-				"voucher_type": self.doc.doctype,
-				"voucher_no": self.doc.name,
-				"reserved_qty": (self.doc.docstatus==1 and 1 or -1)*flt(d['reserved_qty']),
-				"posting_date": self.doc.posting_date,
-				"is_amended": self.doc.amended_from and 'Yes' or 'No'
+				"voucher_type": self.doctype,
+				"voucher_no": self.name,
+				"reserved_qty": (self.docstatus==1 and 1 or -1)*flt(d['reserved_qty']),
+				"posting_date": self.posting_date,
+				"is_amended": self.amended_from and 'Yes' or 'No'
 			}
 			update_bin(args)
 
@@ -269,7 +269,7 @@
 			if not (d.against_sales_order or d.against_sales_invoice):
 				amount += d.base_amount
 		if amount != 0:
-			total = (amount/self.doc.net_total)*self.doc.grand_total
+			total = (amount/self.net_total)*self.grand_total
 			self.check_credit(total)
 
 def get_invoiced_qty_map(delivery_note):
@@ -290,7 +290,7 @@
 	
 	def update_accounts(source, target):
 		si = frappe.bean(target)
-		si.doc.is_pos = 0
+		si.is_pos = 0
 		si.run_method("onload_post_render")
 		
 		si.set_doclist(si.doclist.get({"parentfield": ["!=", "entries"]}) +
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 1ad6507..4c6af1b 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -28,11 +28,11 @@
 		dn = frappe.bean(copy=test_records[0]).insert()
 		
 		self.assertRaises(frappe.ValidationError, make_sales_invoice, 
-			dn.doc.name)
+			dn.name)
 
-		dn = frappe.bean("Delivery Note", dn.doc.name)
+		dn = frappe.bean("Delivery Note", dn.name)
 		dn.submit()
-		si = make_sales_invoice(dn.doc.name)
+		si = make_sales_invoice(dn.name)
 		
 		self.assertEquals(len(si), len(dn.doclist))
 		
@@ -53,12 +53,12 @@
 		dn.submit()
 		
 		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
-			{"voucher_type": "Delivery Note", "voucher_no": dn.doc.name, 
+			{"voucher_type": "Delivery Note", "voucher_no": dn.name, 
 				"item_code": "_Test Item"}, ["stock_value", "stock_value_difference"])
 		self.assertEqual(stock_value, 0)
 		self.assertEqual(stock_value_difference, -375)
 			
-		self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
+		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
 		
 	def test_delivery_note_gl_entry(self):
 		self.clear_stock_account_balance()
@@ -76,12 +76,12 @@
 			{"master_name": dn.doclist[1].warehouse})
 		
 		from erpnext.accounts.utils import get_balance_on
-		prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
+		prev_bal = get_balance_on(stock_in_hand_account, dn.posting_date)
 
 		dn.insert()
 		dn.submit()
 		
-		gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
+		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
 		expected_values = {
 			stock_in_hand_account: [0.0, 375.0],
@@ -91,19 +91,19 @@
 			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))
 		
 		# check stock in hand balance
-		bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
+		bal = get_balance_on(stock_in_hand_account, dn.posting_date)
 		self.assertEquals(bal, prev_bal - 375.0)
 				
 		# back dated purchase receipt
 		pr = frappe.bean(copy=pr_test_records[0])
-		pr.doc.posting_date = "2013-01-01"
+		pr.posting_date = "2013-01-01"
 		pr.doclist[1].rate = 100
 		pr.doclist[1].base_amount = 100
 		
 		pr.insert()
 		pr.submit()
 		
-		gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
+		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
 		expected_values = {
 			stock_in_hand_account: [0.0, 666.67],
@@ -113,7 +113,7 @@
 			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))
 					
 		dn.cancel()
-		self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
+		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
 		set_perpetual_inventory(0)
 			
 	def test_delivery_note_gl_entry_packing_item(self):
@@ -131,12 +131,12 @@
 			{"master_name": dn.doclist[1].warehouse})
 		
 		from erpnext.accounts.utils import get_balance_on
-		prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
+		prev_bal = get_balance_on(stock_in_hand_account, dn.posting_date)
 	
 		dn.insert()
 		dn.submit()
 		
-		gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
+		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
 		
 		expected_values = {
@@ -147,11 +147,11 @@
 			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))
 					
 		# check stock in hand balance
-		bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
+		bal = get_balance_on(stock_in_hand_account, dn.posting_date)
 		self.assertEquals(bal, prev_bal - 525.0)
 		
 		dn.cancel()
-		self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
+		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
 		
 		set_perpetual_inventory(0)
 		
@@ -172,7 +172,7 @@
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Delivered")
 		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], 
-			"delivery_document_no"), dn.doc.name)
+			"delivery_document_no"), dn.name)
 			
 		return dn
 			
@@ -196,7 +196,7 @@
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
 		
 		sr = frappe.bean("Serial No", serial_nos[0])
-		sr.doc.status = "Not Available"
+		sr.status = "Not Available"
 		sr.save()
 		
 		dn = frappe.bean(copy=test_records[0])
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 2074925..9f556db 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -14,19 +14,19 @@
 
 class Item(DocListController):
 	def onload(self):
-		self.doc.fields["__sle_exists"] = self.check_if_sle_exists()
+		self.set("__sle_exists", self.check_if_sle_exists())
 	
 	def autoname(self):
 		if frappe.db.get_default("item_naming_by")=="Naming Series":
 			from frappe.model.naming import make_autoname
-			self.doc.item_code = make_autoname(self.doc.naming_series+'.#####')
-		elif not self.doc.item_code:
+			self.item_code = make_autoname(self.naming_series+'.#####')
+		elif not self.item_code:
 			msgprint(_("Item Code (item_code) is mandatory because Item naming is not sequential."), raise_exception=1)
 			
-		self.doc.name = self.doc.item_code
+		self.name = self.item_code
 			
 	def validate(self):
-		if not self.doc.stock_uom:
+		if not self.stock_uom:
 			msgprint(_("Please enter Default Unit of Measure"), raise_exception=1)
 		
 		self.check_warehouse_is_set_for_stock_item()
@@ -41,53 +41,53 @@
 		self.cant_change()
 		self.validate_item_type_for_reorder()
 		
-		if not self.doc.parent_website_route:
-			self.doc.parent_website_route = frappe.get_website_route("Item Group", self.doc.item_group)
+		if not self.parent_website_route:
+			self.parent_website_route = frappe.get_website_route("Item Group", self.item_group)
 
-		if self.doc.name:
-			self.old_page_name = frappe.db.get_value('Item', self.doc.name, 'page_name')
+		if self.name:
+			self.old_page_name = frappe.db.get_value('Item', self.name, 'page_name')
 			
 	def on_update(self):
 		self.validate_name_with_item_group()
 		self.update_item_price()
 
 	def check_warehouse_is_set_for_stock_item(self):
-		if self.doc.is_stock_item=="Yes" and not self.doc.default_warehouse:
+		if self.is_stock_item=="Yes" and not self.default_warehouse:
 			frappe.msgprint(_("Default Warehouse is mandatory for Stock Item."),
 				raise_exception=WarehouseNotSet)
 			
 	def add_default_uom_in_conversion_factor_table(self):
 		uom_conv_list = [d.uom for d in self.get("uom_conversion_details")]
-		if self.doc.stock_uom not in uom_conv_list:
-			ch = self.doc.append('uom_conversion_details', {})
-			ch.uom = self.doc.stock_uom
+		if self.stock_uom not in uom_conv_list:
+			ch = self.append('uom_conversion_details', {})
+			ch.uom = self.stock_uom
 			ch.conversion_factor = 1
 			
 		for d in self.get("uom_conversion_details"):
-			if d.conversion_factor == 1 and d.uom != self.doc.stock_uom:
+			if d.conversion_factor == 1 and d.uom != self.stock_uom:
 				self.doclist.remove(d)
 				
 
 	def check_stock_uom_with_bin(self):
-		if not self.doc.fields.get("__islocal"):
+		if not self.get("__islocal"):
 			matched=True
 			ref_uom = frappe.db.get_value("Stock Ledger Entry", 
-				{"item_code": self.doc.name}, "stock_uom")
+				{"item_code": self.name}, "stock_uom")
 			if ref_uom:
-				if cstr(ref_uom) != cstr(self.doc.stock_uom):
+				if cstr(ref_uom) != cstr(self.stock_uom):
 					matched = False
 			else:
 				bin_list = frappe.db.sql("select * from tabBin where item_code=%s", 
-					self.doc.item_code, as_dict=1)
+					self.item_code, as_dict=1)
 				for bin in bin_list:
 					if (bin.reserved_qty > 0 or bin.ordered_qty > 0 or bin.indented_qty > 0 \
-						or bin.planned_qty > 0) and cstr(bin.stock_uom) != cstr(self.doc.stock_uom):
+						or bin.planned_qty > 0) and cstr(bin.stock_uom) != cstr(self.stock_uom):
 							matched = False
 							break
 						
 				if matched and bin_list:
 					frappe.db.sql("""update tabBin set stock_uom=%s where item_code=%s""",
-						(self.doc.stock_uom, self.doc.name))
+						(self.stock_uom, self.name))
 				
 			if not matched:
 				frappe.throw(_("Default Unit of Measure can not be changed directly because you have already made some transaction(s) with another UOM. To change default UOM, use 'UOM Replace Utility' tool under Stock module."))
@@ -101,38 +101,38 @@
 			else:
 				check_list.append(cstr(d.uom))
 
-			if d.uom and cstr(d.uom) == cstr(self.doc.stock_uom) and flt(d.conversion_factor) != 1:
+			if d.uom and cstr(d.uom) == cstr(self.stock_uom) and flt(d.conversion_factor) != 1:
 					msgprint(_("""Conversion Factor of UOM: %s should be equal to 1. As UOM: %s is Stock UOM of Item: %s.""" % 
-						(d.uom, d.uom, self.doc.name)), raise_exception=1)
-			elif d.uom and cstr(d.uom)!= self.doc.stock_uom and flt(d.conversion_factor) == 1:
+						(d.uom, d.uom, self.name)), raise_exception=1)
+			elif d.uom and cstr(d.uom)!= self.stock_uom and flt(d.conversion_factor) == 1:
 				msgprint(_("""Conversion Factor of UOM: %s should not be equal to 1. As UOM: %s is not Stock UOM of Item: %s""" % 
-					(d.uom, d.uom, self.doc.name)), raise_exception=1)
+					(d.uom, d.uom, self.name)), raise_exception=1)
 					
 	def validate_item_type(self):
-		if cstr(self.doc.is_manufactured_item) == "No":
-			self.doc.is_pro_applicable = "No"
+		if cstr(self.is_manufactured_item) == "No":
+			self.is_pro_applicable = "No"
 
-		if self.doc.is_pro_applicable == 'Yes' and self.doc.is_stock_item == 'No':
+		if self.is_pro_applicable == 'Yes' and self.is_stock_item == 'No':
 			frappe.throw(_("As Production Order can be made for this item, \
 				it must be a stock item."))
 
-		if self.doc.has_serial_no == 'Yes' and self.doc.is_stock_item == 'No':
+		if self.has_serial_no == 'Yes' and self.is_stock_item == 'No':
 			msgprint("'Has Serial No' can not be 'Yes' for non-stock item", raise_exception=1)
 			
 	def check_for_active_boms(self):
-		if self.doc.is_purchase_item != "Yes":
+		if self.is_purchase_item != "Yes":
 			bom_mat = frappe.db.sql("""select distinct t1.parent 
 				from `tabBOM Item` t1, `tabBOM` t2 where t2.name = t1.parent 
 				and t1.item_code =%s and ifnull(t1.bom_no, '') = '' and t2.is_active = 1 
-				and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name)
+				and t2.docstatus = 1 and t1.docstatus =1 """, self.name)
 				
 			if bom_mat and bom_mat[0][0]:
 				frappe.throw(_("Item must be a purchase item, \
 					as it is present in one or many Active BOMs"))
 					
-		if self.doc.is_manufactured_item != "Yes":
+		if self.is_manufactured_item != "Yes":
 			bom = frappe.db.sql("""select name from `tabBOM` where item = %s 
-				and is_active = 1""", (self.doc.name,))
+				and is_active = 1""", (self.name,))
 			if bom and bom[0][0]:
 				frappe.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many \
 					active BOMs present for this item"""))
@@ -142,7 +142,7 @@
 		cust_code=[]
 		for d in self.get('item_customer_details'):
 			cust_code.append(d.ref_code)
-		self.doc.customer_code=','.join(cust_code)
+		self.customer_code=','.join(cust_code)
 
 	def check_item_tax(self):
 		"""Check whether Tax Rate is not entered twice for same Tax Type"""
@@ -160,53 +160,53 @@
 						check_list.append(d.tax_type)
 						
 	def validate_barcode(self):
-		if self.doc.barcode:
+		if self.barcode:
 			duplicate = frappe.db.sql("""select name from tabItem where barcode = %s 
-				and name != %s""", (self.doc.barcode, self.doc.name))
+				and name != %s""", (self.barcode, self.name))
 			if duplicate:
 				msgprint("Barcode: %s already used in item: %s" % 
-					(self.doc.barcode, cstr(duplicate[0][0])), raise_exception = 1)
+					(self.barcode, cstr(duplicate[0][0])), raise_exception = 1)
 
 	def cant_change(self):
-		if not self.doc.fields.get("__islocal"):
-			vals = frappe.db.get_value("Item", self.doc.name, 
+		if not self.get("__islocal"):
+			vals = frappe.db.get_value("Item", self.name, 
 				["has_serial_no", "is_stock_item", "valuation_method"], as_dict=True)
 			
-			if vals and ((self.doc.is_stock_item == "No" and vals.is_stock_item == "Yes") or 
-				vals.has_serial_no != self.doc.has_serial_no or 
-				cstr(vals.valuation_method) != cstr(self.doc.valuation_method)):
+			if vals and ((self.is_stock_item == "No" and vals.is_stock_item == "Yes") or 
+				vals.has_serial_no != self.has_serial_no or 
+				cstr(vals.valuation_method) != cstr(self.valuation_method)):
 					if self.check_if_sle_exists() == "exists":
 						frappe.throw(_("As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Is Stock Item' and 'Valuation Method'"))
 							
 	def validate_item_type_for_reorder(self):
-		if self.doc.re_order_level or len(self.doclist.get({"parentfield": "item_reorder", 
+		if self.re_order_level or len(self.doclist.get({"parentfield": "item_reorder", 
 				"material_request_type": "Purchase"})):
-			if not self.doc.is_purchase_item:
+			if not self.is_purchase_item:
 				frappe.msgprint(_("""To set reorder level, item must be Purchase Item"""), 
 					raise_exception=1)
 	
 	def check_if_sle_exists(self):
 		sle = frappe.db.sql("""select name from `tabStock Ledger Entry` 
-			where item_code = %s""", self.doc.name)
+			where item_code = %s""", self.name)
 		return sle and 'exists' or 'not exists'
 
 	def validate_name_with_item_group(self):
 		# causes problem with tree build
-		if frappe.db.exists("Item Group", self.doc.name):
+		if frappe.db.exists("Item Group", self.name):
 			frappe.msgprint("An item group exists with same name (%s), \
 				please change the item name or rename the item group" % 
-				self.doc.name, raise_exception=1)
+				self.name, raise_exception=1)
 
 	def update_item_price(self):
 		frappe.db.sql("""update `tabItem Price` set item_name=%s, 
 			item_description=%s, modified=NOW() where item_code=%s""",
-			(self.doc.item_name, self.doc.description, self.doc.name))
+			(self.item_name, self.description, self.name))
 
 	def get_page_title(self):
-		if self.doc.name==self.doc.item_name:
-			page_name_from = self.doc.name
+		if self.name==self.item_name:
+			page_name_from = self.name
 		else:
-			page_name_from = self.doc.name + " " + self.doc.item_name
+			page_name_from = self.name + " " + self.item_name
 		
 		return page_name_from
 		
@@ -223,7 +223,7 @@
 		return ret
 		
 	def on_trash(self):
-		frappe.db.sql("""delete from tabBin where item_code=%s""", self.doc.item_code)
+		frappe.db.sql("""delete from tabBin where item_code=%s""", self.item_code)
 
 	def before_rename(self, olddn, newdn, merge=False):
 		if merge:
@@ -233,7 +233,7 @@
 			
 			field_list = ["stock_uom", "is_stock_item", "has_serial_no", "has_batch_no"]
 			new_properties = [cstr(d) for d in frappe.db.get_value("Item", newdn, field_list)]
-			if new_properties != [cstr(self.doc.fields[fld]) for fld in field_list]:
+			if new_properties != [cstr(self.fields[fld]) for fld in field_list]:
 				frappe.throw(_("To merge, following properties must be same for both items")
 					+ ": \n" + ", ".join([self.meta.get_label(fld) for fld in field_list]))
 
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index e86b113..8d99b2f 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -14,8 +14,8 @@
 	def test_default_warehouse(self):
 		from erpnext.stock.doctype.item.item import WarehouseNotSet
 		item = frappe.bean(copy=test_records[0])
-		item.doc.is_stock_item = "Yes"
-		item.doc.default_warehouse = None
+		item.is_stock_item = "Yes"
+		item.default_warehouse = None
 		self.assertRaises(WarehouseNotSet, item.insert)
 		
 	def test_get_item_details(self):
diff --git a/erpnext/stock/doctype/item_price/item_price.py b/erpnext/stock/doctype/item_price/item_price.py
index 3c3972b..8916628 100644
--- a/erpnext/stock/doctype/item_price/item_price.py
+++ b/erpnext/stock/doctype/item_price/item_price.py
@@ -19,39 +19,39 @@
 		self.update_item_details()
 		
 	def validate_item(self):
-		if not frappe.db.exists("Item", self.doc.item_code):
+		if not frappe.db.exists("Item", self.item_code):
 			throw("{doctype}: {item} {not_found}".format(**{
 				"doctype": _("Item"), 
-				"item": self.doc.item_code, 
+				"item": self.item_code, 
 				"not_found": _(" not found")
 			}))
 
 	def validate_price_list(self):
-		enabled = frappe.db.get_value("Price List", self.doc.price_list, "enabled")
+		enabled = frappe.db.get_value("Price List", self.price_list, "enabled")
 		if not enabled:
 			throw("{message}: {price_list} {disabled}".format(**{
 				"message": _("Price List"),
-				"price_list": self.doc.price_list,
+				"price_list": self.price_list,
 				"disabled": _("is disabled.")
 			}))
 
 	def check_duplicate_item(self):
 		if frappe.db.sql("""select name from `tabItem Price` 
 			where item_code=%s and price_list=%s and name!=%s""", 
-			(self.doc.item_code, self.doc.price_list, self.doc.name)):
+			(self.item_code, self.price_list, self.name)):
 				throw("{duplicate_item}: {item_code}, {already}: {price_list}".format(**{
 					"duplicate_item": _("Duplicate Item"),
-					"item_code": self.doc.item_code,
+					"item_code": self.item_code,
 					"already": _("already available in Price List"),
-					"price_list": self.doc.price_list
+					"price_list": self.price_list
 				}), ItemPriceDuplicateItem)
 
 	def update_price_list_details(self):
-		self.doc.buying, self.doc.selling, self.doc.currency = \
-			frappe.db.get_value("Price List", {"name": self.doc.price_list, "enabled": 1}, 
+		self.buying, self.selling, self.currency = \
+			frappe.db.get_value("Price List", {"name": self.price_list, "enabled": 1}, 
 				["buying", "selling", "currency"])
 
 	def update_item_details(self):
-		self.doc.item_name, self.doc.item_description = frappe.db.get_value("Item", 
-			self.doc.item_code, ["item_name", "description"])
+		self.item_name, self.item_description = frappe.db.get_value("Item", 
+			self.item_code, ["item_name", "description"])
 				
\ No newline at end of file
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 34cbe3e..2a80a4d 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -38,7 +38,7 @@
 			pr_items = pr_bean.get("purchase_tax_details")
 			
 			for lc in self.get("landed_cost_details"):
-				amt = flt(lc.amount) * flt(pr_bean.doc.net_total)/ flt(total_amt)
+				amt = flt(lc.amount) * flt(pr_bean.net_total)/ flt(total_amt)
 				
 				matched_row = pr_bean.doclist.get({
 					"parentfield": "other_charges", 
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index fda6849..76e6aa2 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -37,7 +37,7 @@
 				already_indented = frappe.db.sql("""select sum(ifnull(qty, 0)) 
 					from `tabMaterial Request Item` 
 					where item_code = %s and sales_order_no = %s and 
-					docstatus = 1 and parent != %s""", (item, so_no, self.doc.name))
+					docstatus = 1 and parent != %s""", (item, so_no, self.name))
 				already_indented = already_indented and flt(already_indented[0][0]) or 0
 				
 				actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item` 
@@ -51,7 +51,7 @@
 				
 	def validate_schedule_date(self):
 		for d in self.get('indent_details'):
-			if d.schedule_date < self.doc.transaction_date:
+			if d.schedule_date < self.transaction_date:
 				frappe.throw(_("Expected Date cannot be before Material Request Date"))
 				
 	# Validate
@@ -62,11 +62,11 @@
 		self.validate_schedule_date()
 		self.validate_uom_is_integer("uom", "qty")
 		
-		if not self.doc.status:
-			self.doc.status = "Draft"
+		if not self.status:
+			self.status = "Draft"
 
 		from erpnext.utilities import validate_status
-		validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
+		validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
 		
 		self.validate_value("material_request_type", "in", ["Purchase", "Transfer"])
 
@@ -95,7 +95,7 @@
 					"item_code": d.item_code,
 					"warehouse": d.warehouse,
 					"indented_qty": (is_submit and 1 or -1) * flt(qty),
-					"posting_date": self.doc.transaction_date
+					"posting_date": self.transaction_date
 				}
 				update_bin(args)		
 		
@@ -105,12 +105,12 @@
 	
 	def check_modified_date(self):
 		mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""", 
-			self.doc.name)
+			self.name)
 		date_diff = frappe.db.sql("""select TIMEDIFF('%s', '%s')"""
-			% (mod_db[0][0], cstr(self.doc.modified)))
+			% (mod_db[0][0], cstr(self.modified)))
 		
 		if date_diff and date_diff[0][0]:
-			frappe.throw(cstr(self.doc.doctype) + " => " + cstr(self.doc.name) + " has been modified. Please Refresh.")
+			frappe.throw(cstr(self.doctype) + " => " + cstr(self.name) + " has been modified. Please Refresh.")
 
 	def update_status(self, status):
 		self.check_modified_date()
@@ -121,7 +121,7 @@
 		frappe.db.set(self.doc, 'status', cstr(status))
 		
 		# Step 3:=> Acknowledge User
-		msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
+		msgprint(self.doctype + ": " + self.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
  
 
 	def on_cancel(self):
@@ -129,18 +129,18 @@
 		pc_obj = get_obj(dt='Purchase Common')
 		
 		# Step 2:=> Check for stopped status
-		pc_obj.check_for_stopped_status(self.doc.doctype, self.doc.name)
+		pc_obj.check_for_stopped_status(self.doctype, self.name)
 		
 		# Step 3:=> Check if Purchase Order has been submitted against current Material Request
-		pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.doc.name, detail_doctype = 'Purchase Order Item')
+		pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.name, detail_doctype = 'Purchase Order Item')
 		# Step 4:=> Update Bin
-		self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
+		self.update_bin(is_submit = 0, is_stopped = (cstr(self.status) == 'Stopped') and 1 or 0)
 		
 		# Step 5:=> Set Status
 		frappe.db.set(self.doc,'status','Cancelled')
 		
 	def update_completed_qty(self, mr_items=None):
-		if self.doc.material_request_type != "Transfer":
+		if self.material_request_type != "Transfer":
 			return
 			
 		item_doclist = self.get("indent_details")
@@ -154,7 +154,7 @@
 				d.ordered_qty =  flt(frappe.db.sql("""select sum(transfer_qty) 
 					from `tabStock Entry Detail` where material_request = %s 
 					and material_request_item = %s and docstatus = 1""", 
-					(self.doc.name, d.name))[0][0])
+					(self.name, d.name))[0][0])
 				frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
 				
 			# note: if qty is 0, its row is still counted in len(item_doclist)
@@ -164,11 +164,11 @@
 			elif d.qty > 0:
 				per_ordered += flt(d.ordered_qty / flt(d.qty))
 		
-		self.doc.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
-		frappe.db.set_value(self.doc.doctype, self.doc.name, "per_ordered", self.doc.per_ordered)
+		self.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
+		frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered)
 		
 def update_completed_qty(bean, method):
-	if bean.doc.doctype == "Stock Entry":
+	if bean.doctype == "Stock Entry":
 		material_request_map = {}
 		
 		for d in bean.get("mtn_details"):
@@ -179,9 +179,9 @@
 			mr_obj = frappe.get_obj("Material Request", mr_name, with_children=1)
 			mr_doctype = frappe.get_meta("Material Request")
 			
-			if mr_obj.doc.status in ["Stopped", "Cancelled"]:
-				frappe.throw(_("Material Request") + ": %s, " % mr_obj.doc.name 
-					+ _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.doc.status)
+			if mr_obj.status in ["Stopped", "Cancelled"]:
+				frappe.throw(_("Material Request") + ": %s, " % mr_obj.name 
+					+ _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.status)
 					+ _("Cannot continue."), exc=frappe.InvalidStatusError)
 				
 			_update_requested_qty(bean, mr_obj, mr_items)
@@ -195,7 +195,7 @@
 	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.doc.name, "material_request_item": mr_item_name})
+			"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)
@@ -214,7 +214,7 @@
 			"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.doc.posting_date,
+			"posting_date": bean.posting_date,
 		})
 
 def set_missing_values(source, target_doclist):
@@ -270,7 +270,7 @@
 		po_items = target_doclist.get({"parentfield": "po_details"})
 		target_doclist = target_doclist.get({"parentfield": ["!=", "po_details"]}) + \
 			[d for d in po_items 
-				if d.fields.get("item_code") in supplier_items and d.fields.get("qty") > 0]
+				if d.get("item_code") in supplier_items and d.get("qty") > 0]
 		
 		return target_doclist
 		
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index a41425b..f70f14c 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -18,11 +18,11 @@
 		mr = frappe.bean(copy=test_records[0]).insert()
 
 		self.assertRaises(frappe.ValidationError, make_purchase_order, 
-			mr.doc.name)
+			mr.name)
 
-		mr = frappe.bean("Material Request", mr.doc.name)
+		mr = frappe.bean("Material Request", mr.name)
 		mr.submit()
-		po = make_purchase_order(mr.doc.name)
+		po = make_purchase_order(mr.name)
 		
 		self.assertEquals(po[0]["doctype"], "Purchase Order")
 		self.assertEquals(len(po), len(mr.doclist))
@@ -33,11 +33,11 @@
 		mr = frappe.bean(copy=test_records[0]).insert()
 
 		self.assertRaises(frappe.ValidationError, make_supplier_quotation, 
-			mr.doc.name)
+			mr.name)
 
-		mr = frappe.bean("Material Request", mr.doc.name)
+		mr = frappe.bean("Material Request", mr.name)
 		mr.submit()
-		sq = make_supplier_quotation(mr.doc.name)
+		sq = make_supplier_quotation(mr.name)
 		
 		self.assertEquals(sq[0]["doctype"], "Supplier Quotation")
 		self.assertEquals(len(sq), len(mr.doclist))
@@ -49,12 +49,12 @@
 		mr = frappe.bean(copy=test_records[0]).insert()
 
 		self.assertRaises(frappe.ValidationError, make_stock_entry, 
-			mr.doc.name)
+			mr.name)
 
-		mr = frappe.bean("Material Request", mr.doc.name)
-		mr.doc.material_request_type = "Transfer"
+		mr = frappe.bean("Material Request", mr.name)
+		mr.material_request_type = "Transfer"
 		mr.submit()
-		se = make_stock_entry(mr.doc.name)
+		se = make_stock_entry(mr.name)
 		
 		self.assertEquals(se[0]["doctype"], "Stock Entry")
 		self.assertEquals(len(se), len(mr.doclist))
@@ -62,7 +62,7 @@
 	def _test_expected(self, doclist, expected_values):
 		for i, expected in enumerate(expected_values):
 			for fieldname, val in expected.items():
-				self.assertEquals(val, doclist[i].fields.get(fieldname))
+				self.assertEquals(val, doclist[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",
@@ -123,7 +123,7 @@
 		
 		# map a purchase order
 		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
-		po_doclist = make_purchase_order(mr.doc.name)
+		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
@@ -161,7 +161,7 @@
 		
 		# submit material request of type Purchase
 		mr = frappe.bean(copy=test_records[0])
-		mr.doc.material_request_type = "Transfer"
+		mr.material_request_type = "Transfer"
 		mr.insert()
 		mr.submit()
 
@@ -173,7 +173,7 @@
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 				
 		# map a stock entry
-		se_doclist = make_stock_entry(mr.doc.name)
+		se_doclist = make_stock_entry(mr.name)
 		se_doclist[0].update({
 			"posting_date": "2013-03-01",
 			"posting_time": "01:00",
@@ -224,7 +224,7 @@
 		
 		# submit material request of type Purchase
 		mr = frappe.bean(copy=test_records[0])
-		mr.doc.material_request_type = "Transfer"
+		mr.material_request_type = "Transfer"
 		mr.insert()
 		mr.submit()
 
@@ -236,7 +236,7 @@
 		# map a stock entry
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 
-		se_doclist = make_stock_entry(mr.doc.name)
+		se_doclist = make_stock_entry(mr.name)
 		se_doclist[0].update({
 			"posting_date": "2013-03-01",
 			"posting_time": "00:00",
@@ -284,14 +284,14 @@
 	def test_incorrect_mapping_of_stock_entry(self):
 		# submit material request of type Purchase
 		mr = frappe.bean(copy=test_records[0])
-		mr.doc.material_request_type = "Transfer"
+		mr.material_request_type = "Transfer"
 		mr.insert()
 		mr.submit()
 
 		# map a stock entry
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 		
-		se_doclist = make_stock_entry(mr.doc.name)
+		se_doclist = make_stock_entry(mr.name)
 		se_doclist[0].update({
 			"posting_date": "2013-03-01",
 			"posting_time": "00:00",
@@ -318,7 +318,7 @@
 	def test_warehouse_company_validation(self):
 		from erpnext.stock.utils import InvalidWarehouseCompany
 		mr = frappe.bean(copy=test_records[0])
-		mr.doc.company = "_Test Company 1"
+		mr.company = "_Test Company 1"
 		self.assertRaises(InvalidWarehouseCompany, mr.insert)
 
 test_dependencies = ["Currency Exchange"]
diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py
index b7a15b7..6c7ee51 100644
--- a/erpnext/stock/doctype/packed_item/packed_item.py
+++ b/erpnext/stock/doctype/packed_item/packed_item.py
@@ -38,7 +38,7 @@
 			break
 
 	if not exists:
-		pi = obj.doc.append('packing_details', {})
+		pi = obj.append('packing_details', {})
 
 	pi.parent_item = line.item_code
 	pi.item_code = packing_item_code
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.py b/erpnext/stock/doctype/packing_slip/packing_slip.py
index 99a6ee3..c4f69ac 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.py
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.py
@@ -31,7 +31,7 @@
 		"""
 			Validates if delivery note has status as draft
 		"""
-		if cint(frappe.db.get_value("Delivery Note", self.doc.delivery_note, "docstatus")) != 0:
+		if cint(frappe.db.get_value("Delivery Note", self.delivery_note, "docstatus")) != 0:
 			msgprint(_("""Invalid Delivery Note. Delivery Note should exist and should be in draft state. Please rectify and try again."""), raise_exception=1)
 	
 	def validate_items_mandatory(self):
@@ -43,11 +43,11 @@
 		"""
 			Validate if case nos overlap. If they do, recommend next case no.
 		"""
-		if not cint(self.doc.from_case_no):
+		if not cint(self.from_case_no):
 			frappe.msgprint(_("Please specify a valid 'From Case No.'"), raise_exception=1)
-		elif not self.doc.to_case_no:
-			self.doc.to_case_no = self.doc.from_case_no
-		elif self.doc.from_case_no > self.doc.to_case_no:
+		elif not self.to_case_no:
+			self.to_case_no = self.from_case_no
+		elif self.from_case_no > self.to_case_no:
 			frappe.msgprint(_("'To Case No.' cannot be less than 'From Case No.'"),
 				raise_exception=1)
 		
@@ -57,7 +57,7 @@
 			(from_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
 			OR to_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
 			OR %(from_case_no)s BETWEEN from_case_no AND to_case_no)
-			""", self.doc.fields)
+			""", self.fields)
 
 		if res:
 			frappe.msgprint(_("""Case No(s) already in use. Please rectify and try again.
@@ -102,10 +102,10 @@
 			from `tabDelivery Note Item` dni
 			where parent=%s %s 
 			group by item_code""" % ("%s", condition),
-			tuple([self.doc.delivery_note] + rows), as_dict=1)
+			tuple([self.delivery_note] + rows), as_dict=1)
 
 		ps_item_qty = dict([[d.item_code, d.qty] for d in self.doclist])
-		no_of_cases = cint(self.doc.to_case_no) - cint(self.doc.from_case_no) + 1
+		no_of_cases = cint(self.to_case_no) - cint(self.from_case_no) + 1
 
 		return res, ps_item_qty, no_of_cases
 
@@ -128,8 +128,8 @@
 		"""
 			Fill empty columns in Packing Slip Item
 		"""
-		if not self.doc.from_case_no:
-			self.doc.from_case_no = self.get_recommended_case_no()
+		if not self.from_case_no:
+			self.from_case_no = self.get_recommended_case_no()
 
 		for d in self.get("item_details"):
 			res = frappe.db.get_value("Item", d.item_code, 
@@ -145,7 +145,7 @@
 			note
 		"""
 		recommended_case_no = frappe.db.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip`
-			WHERE delivery_note = %(delivery_note)s AND docstatus=1""", self.doc.fields)
+			WHERE delivery_note = %(delivery_note)s AND docstatus=1""", self.fields)
 		
 		return cint(recommended_case_no[0][0]) + 1
 		
@@ -155,7 +155,7 @@
 		dn_details = self.get_details_for_packing()[0]
 		for item in dn_details:
 			if flt(item.qty) > flt(item.packed_qty):
-				ch = self.doc.append('item_details', {})
+				ch = self.append('item_details', {})
 				ch.item_code = item.item_code
 				ch.item_name = item.item_name
 				ch.stock_uom = item.stock_uom
diff --git a/erpnext/stock/doctype/price_list/price_list.py b/erpnext/stock/doctype/price_list/price_list.py
index bf49a51..bfb3ea7 100644
--- a/erpnext/stock/doctype/price_list/price_list.py
+++ b/erpnext/stock/doctype/price_list/price_list.py
@@ -10,7 +10,7 @@
 
 class PriceList(DocListController):
 	def validate(self):
-		if not cint(self.doc.buying) and not cint(self.doc.selling):
+		if not cint(self.buying) and not cint(self.selling):
 			throw(_("Price List must be applicable for Buying or Selling"))
 				
 		if not self.get("valid_for_territories"):
@@ -29,26 +29,26 @@
 		self.update_item_price()
 
 	def set_default_if_missing(self):
-		if cint(self.doc.selling):
+		if cint(self.selling):
 			if not frappe.db.get_value("Selling Settings", None, "selling_price_list"):
-				frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.doc.name)
+				frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.name)
 
-		elif cint(self.doc.buying):
+		elif cint(self.buying):
 			if not frappe.db.get_value("Buying Settings", None, "buying_price_list"):
-				frappe.set_value("Buying Settings", "Buying Settings", "buying_price_list", self.doc.name)
+				frappe.set_value("Buying Settings", "Buying Settings", "buying_price_list", self.name)
 
 	def update_item_price(self):
 		frappe.db.sql("""update `tabItem Price` set currency=%s, 
 			buying=%s, selling=%s, modified=NOW() where price_list=%s""", 
-			(self.doc.currency, cint(self.doc.buying), cint(self.doc.selling), self.doc.name))
+			(self.currency, cint(self.buying), cint(self.selling), self.name))
 
 	def on_trash(self):
 		def _update_default_price_list(module):
 			b = frappe.bean(module + " Settings")
 			price_list_fieldname = module.lower() + "_price_list"
 
-			if self.doc.name == b.doc.fields[price_list_fieldname]:
-				b.doc.fields[price_list_fieldname] = None
+			if self.name == b.fields[price_list_fieldname]:
+				b.set(price_list_fieldname, None)
 				b.save()
 		
 		for module in ["Selling", "Buying"]:
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index bad59a6..b6e0539 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -30,21 +30,21 @@
 		
 	def onload(self):
 		billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabPurchase Invoice Item`
-			where purchase_receipt=%s""", self.doc.name)
+			where purchase_receipt=%s""", self.name)
 		if billed_qty:
 			total_qty = sum((item.qty for item in self.get("purchase_receipt_details")))
-			self.doc.fields["__billing_complete"] = billed_qty[0][0] == total_qty
+			self.set("__billing_complete", billed_qty[0][0] == total_qty)
 
 	def validate(self):
 		super(DocType, self).validate()
 		
 		self.po_required()
 
-		if not self.doc.status:
-			self.doc.status = "Draft"
+		if not self.status:
+			self.status = "Draft"
 
 		from erpnext.utilities import validate_status
-		validate_status(self.doc.status, ["Draft", "Submitted", "Cancelled"])
+		validate_status(self.status, ["Draft", "Submitted", "Cancelled"])
 
 		self.validate_with_previous_doc()
 		self.validate_rejected_warehouse()
@@ -67,7 +67,7 @@
 	def validate_rejected_warehouse(self):
 		for d in self.get("purchase_receipt_details"):
 			if flt(d.rejected_qty) and not d.rejected_warehouse:
-				d.rejected_warehouse = self.doc.rejected_warehouse
+				d.rejected_warehouse = self.rejected_warehouse
 				if not d.rejected_warehouse:
 					frappe.throw(_("Rejected Warehouse is mandatory against regected item"))		
 
@@ -92,11 +92,11 @@
 
 	def validate_challan_no(self):
 		"Validate if same challan no exists for same supplier in a submitted purchase receipt"
-		if self.doc.challan_no:
+		if self.challan_no:
 			exists = frappe.db.sql("""
 			SELECT name FROM `tabPurchase Receipt`
 			WHERE name!=%s AND supplier=%s AND challan_no=%s
-		AND docstatus=1""", (self.doc.name, self.doc.supplier, self.doc.challan_no))
+		AND docstatus=1""", (self.name, self.supplier, self.challan_no))
 			if exists:
 				frappe.msgprint("Another Purchase Receipt using the same Challan No. already exists.\
 			Please enter a valid Challan No.", raise_exception=1)
@@ -178,15 +178,15 @@
 				update_bin({
 					"item_code": d.item_code,
 					"warehouse": ordered_warehouse,
-					"posting_date": self.doc.posting_date,
-					"ordered_qty": flt(ordered_qty) if self.doc.docstatus==1 else -flt(ordered_qty)
+					"posting_date": self.posting_date,
+					"ordered_qty": flt(ordered_qty) if self.docstatus==1 else -flt(ordered_qty)
 				})
 
 	def get_already_received_qty(self, po, po_detail):
 		qty = frappe.db.sql("""select sum(qty) from `tabPurchase Receipt Item` 
 			where prevdoc_detail_docname = %s and docstatus = 1 
 			and prevdoc_doctype='Purchase Order' and prevdoc_docname=%s 
-			and parent != %s""", (po_detail, po, self.doc.name))
+			and parent != %s""", (po_detail, po, self.name))
 		return qty and flt(qty[0][0]) or 0.0
 		
 	def get_po_qty_and_warehouse(self, po_detail):
@@ -200,7 +200,7 @@
 			# when PR is submitted and it has to be increased when PR is cancelled
 			sl_entries.append(self.get_sl_entries(d, {
 				"item_code": d.rm_item_code,
-				"warehouse": self.doc.supplier_warehouse,
+				"warehouse": self.supplier_warehouse,
 				"actual_qty": -1*flt(d.consumed_qty),
 				"incoming_rate": 0
 			}))
@@ -226,7 +226,7 @@
 		purchase_controller = frappe.get_obj("Purchase Common")
 
 		# Check for Approving Authority
-		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total)
+		get_obj('Authorization Control').validate_approving_authority(self.doctype, self.company, self.grand_total)
 
 		# Set status as Submitted
 		frappe.db.set(self.doc, 'status', 'Submitted')
@@ -248,7 +248,7 @@
 		submit_rv = frappe.db.sql("""select t1.name 
 			from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 
 			where t1.name = t2.parent and t2.purchase_receipt = %s and t1.docstatus = 1""", 
-			(self.doc.name))
+			(self.name))
 		if submit_rv:
 			msgprint("Purchase Invoice : " + cstr(self.submit_rv[0][0]) + " has already been submitted !")
 			raise Exception , "Validation Error."
@@ -262,7 +262,7 @@
 		submitted = frappe.db.sql("""select t1.name 
 			from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 
 			where t1.name = t2.parent and t2.purchase_receipt = %s and t1.docstatus = 1""", 
-			self.doc.name)
+			self.name)
 		if submitted:
 			frappe.throw("Purchase Invoice : " + cstr(submitted[0][0]) + 
 				" has already been submitted !")
@@ -280,8 +280,8 @@
 			
 	def get_current_stock(self):
 		for d in self.get('pr_raw_material_details'):
-			if self.doc.supplier_warehouse:
-				bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.doc.supplier_warehouse), as_dict = 1)
+			if self.supplier_warehouse:
+				bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.supplier_warehouse), as_dict = 1)
 				d.current_stock = bin and flt(bin[0]['actual_qty']) or 0
 
 	def get_rate(self,arg):
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 2a2e821..58b8d7d 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -17,11 +17,11 @@
 		pr = frappe.bean(copy=test_records[0]).insert()
 		
 		self.assertRaises(frappe.ValidationError, make_purchase_invoice, 
-			pr.doc.name)
+			pr.name)
 
-		pr = frappe.bean("Purchase Receipt", pr.doc.name)
+		pr = frappe.bean("Purchase Receipt", pr.name)
 		pr.submit()
-		pi = make_purchase_invoice(pr.doc.name)
+		pi = make_purchase_invoice(pr.name)
 		
 		self.assertEquals(pi[0]["doctype"], "Purchase Invoice")
 		self.assertEquals(len(pi), len(pr.doclist))
@@ -38,7 +38,7 @@
 		pr.submit()
 		
 		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
-			{"voucher_type": "Purchase Receipt", "voucher_no": pr.doc.name, 
+			{"voucher_type": "Purchase Receipt", "voucher_no": pr.name, 
 				"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"}, 
 			["stock_value", "stock_value_difference"])
 		self.assertEqual(stock_value, 375)
@@ -48,7 +48,7 @@
 			"warehouse": "_Test Warehouse - _TC"}, "stock_value")
 		self.assertEqual(bin_stock_value, 375)
 		
-		self.assertFalse(get_gl_entries("Purchase Receipt", pr.doc.name))
+		self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
 		
 	def test_purchase_receipt_gl_entry(self):
 		self._clear_stock_account_balance()
@@ -60,7 +60,7 @@
 		pr.insert()
 		pr.submit()
 		
-		gl_entries = get_gl_entries("Purchase Receipt", pr.doc.name)
+		gl_entries = get_gl_entries("Purchase Receipt", pr.name)
 		
 		self.assertTrue(gl_entries)
 		
@@ -80,7 +80,7 @@
 			self.assertEquals(expected_values[gle.account][1], gle.credit)
 			
 		pr.cancel()
-		self.assertFalse(get_gl_entries("Purchase Receipt", pr.doc.name))
+		self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
 		
 		set_perpetual_inventory(0)
 		
@@ -106,7 +106,7 @@
 		pr.submit()
 		
 		self.assertEquals(frappe.db.get_value("Serial No", pr.doclist[1].serial_no, 
-			"supplier"), pr.doc.supplier)
+			"supplier"), pr.supplier)
 			
 		return pr
 	
@@ -124,7 +124,7 @@
 		
 def set_perpetual_inventory(enable=1):
 	accounts_settings = frappe.bean("Accounts Settings")
-	accounts_settings.doc.auto_accounting_for_stock = enable
+	accounts_settings.auto_accounting_for_stock = enable
 	accounts_settings.save()
 	
 		
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 50b1d00..88b2602 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -27,7 +27,7 @@
 		self.via_stock_ledger = False
 
 	def validate(self):
-		if self.doc.fields.get("__islocal") and self.doc.warehouse:
+		if self.get("__islocal") and self.warehouse:
 			frappe.throw(_("New Serial No cannot have Warehouse. Warehouse must be \
 				set by Stock Entry or Purchase Receipt"), SerialNoCannotCreateDirectError)
 			
@@ -37,29 +37,29 @@
 		self.on_stock_ledger_entry()
 
 	def set_maintenance_status(self):
-		if not self.doc.warranty_expiry_date and not self.doc.amc_expiry_date:
-			self.doc.maintenance_status = None
+		if not self.warranty_expiry_date and not self.amc_expiry_date:
+			self.maintenance_status = None
 			
-		if self.doc.warranty_expiry_date and self.doc.warranty_expiry_date < nowdate():
-			self.doc.maintenance_status = "Out of Warranty"
+		if self.warranty_expiry_date and self.warranty_expiry_date < nowdate():
+			self.maintenance_status = "Out of Warranty"
 		
-		if self.doc.amc_expiry_date and self.doc.amc_expiry_date < nowdate():
-			self.doc.maintenance_status = "Out of AMC"
+		if self.amc_expiry_date and self.amc_expiry_date < nowdate():
+			self.maintenance_status = "Out of AMC"
 		
-		if self.doc.amc_expiry_date and self.doc.amc_expiry_date >= nowdate():
-			self.doc.maintenance_status = "Under AMC"
+		if self.amc_expiry_date and self.amc_expiry_date >= nowdate():
+			self.maintenance_status = "Under AMC"
 			
-		if self.doc.warranty_expiry_date and self.doc.warranty_expiry_date >= nowdate():
-			self.doc.maintenance_status = "Under Warranty"
+		if self.warranty_expiry_date and self.warranty_expiry_date >= nowdate():
+			self.maintenance_status = "Under Warranty"
 
 	def validate_warehouse(self):
-		if not self.doc.fields.get("__islocal"):
+		if not self.get("__islocal"):
 			item_code, warehouse = frappe.db.get_value("Serial No", 
-				self.doc.name, ["item_code", "warehouse"])
-			if item_code != self.doc.item_code:
+				self.name, ["item_code", "warehouse"])
+			if item_code != self.item_code:
 				frappe.throw(_("Item Code cannot be changed for Serial No."), 
 					SerialNoCannotCannotChangeError)
-			if not self.via_stock_ledger and warehouse != self.doc.warehouse:
+			if not self.via_stock_ledger and warehouse != self.warehouse:
 				frappe.throw(_("Warehouse cannot be changed for Serial No."), 
 					SerialNoCannotCannotChangeError)
 
@@ -67,15 +67,15 @@
 		"""
 			Validate whether serial no is required for this item
 		"""
-		item = frappe.doc("Item", self.doc.item_code)
+		item = frappe.doc("Item", self.item_code)
 		if item.has_serial_no!="Yes":
-			frappe.throw(_("Item must have 'Has Serial No' as 'Yes'") + ": " + self.doc.item_code)
+			frappe.throw(_("Item must have 'Has Serial No' as 'Yes'") + ": " + self.item_code)
 			
-		self.doc.item_group = item.item_group
-		self.doc.description = item.description
-		self.doc.item_name = item.item_name
-		self.doc.brand = item.brand
-		self.doc.warranty_period = item.warranty_period
+		self.item_group = item.item_group
+		self.description = item.description
+		self.item_name = item.item_name
+		self.brand = item.brand
+		self.warranty_period = item.warranty_period
 		
 	def set_status(self, last_sle):
 		if last_sle:
@@ -87,52 +87,52 @@
 
 			if last_sle.actual_qty > 0:
 				if document_type == "Sales Return":
-					self.doc.status = "Sales Returned"
+					self.status = "Sales Returned"
 				else:
-					self.doc.status = "Available"
+					self.status = "Available"
 			else:
 				if document_type == "Purchase Return":
-					self.doc.status = "Purchase Returned"
+					self.status = "Purchase Returned"
 				elif last_sle.voucher_type in ("Delivery Note", "Sales Invoice"):
-					self.doc.status = "Delivered"
+					self.status = "Delivered"
 				else:
-					self.doc.status = "Not Available"
+					self.status = "Not Available"
 		else:
-			self.doc.status = "Not Available"
+			self.status = "Not Available"
 		
 	def set_purchase_details(self, purchase_sle):
 		if purchase_sle:
-			self.doc.purchase_document_type = purchase_sle.voucher_type
-			self.doc.purchase_document_no = purchase_sle.voucher_no
-			self.doc.purchase_date = purchase_sle.posting_date
-			self.doc.purchase_time = purchase_sle.posting_time
-			self.doc.purchase_rate = purchase_sle.incoming_rate
+			self.purchase_document_type = purchase_sle.voucher_type
+			self.purchase_document_no = purchase_sle.voucher_no
+			self.purchase_date = purchase_sle.posting_date
+			self.purchase_time = purchase_sle.posting_time
+			self.purchase_rate = purchase_sle.incoming_rate
 			if purchase_sle.voucher_type == "Purchase Receipt":
-				self.doc.supplier, self.doc.supplier_name = \
+				self.supplier, self.supplier_name = \
 					frappe.db.get_value("Purchase Receipt", purchase_sle.voucher_no, 
 						["supplier", "supplier_name"])
 		else:
 			for fieldname in ("purchase_document_type", "purchase_document_no", 
 				"purchase_date", "purchase_time", "purchase_rate", "supplier", "supplier_name"):
-					self.doc.fields[fieldname] = None
+					self.set(fieldname, None)
 				
 	def set_sales_details(self, delivery_sle):
 		if delivery_sle:
-			self.doc.delivery_document_type = delivery_sle.voucher_type
-			self.doc.delivery_document_no = delivery_sle.voucher_no
-			self.doc.delivery_date = delivery_sle.posting_date
-			self.doc.delivery_time = delivery_sle.posting_time
-			self.doc.customer, self.doc.customer_name = \
+			self.delivery_document_type = delivery_sle.voucher_type
+			self.delivery_document_no = delivery_sle.voucher_no
+			self.delivery_date = delivery_sle.posting_date
+			self.delivery_time = delivery_sle.posting_time
+			self.customer, self.customer_name = \
 				frappe.db.get_value(delivery_sle.voucher_type, delivery_sle.voucher_no, 
 					["customer", "customer_name"])
-			if self.doc.warranty_period:
-				self.doc.warranty_expiry_date	= add_days(cstr(delivery_sle.posting_date), 
-					cint(self.doc.warranty_period))
+			if self.warranty_period:
+				self.warranty_expiry_date	= add_days(cstr(delivery_sle.posting_date), 
+					cint(self.warranty_period))
 		else:
 			for fieldname in ("delivery_document_type", "delivery_document_no", 
 				"delivery_date", "delivery_time", "customer", "customer_name", 
 				"warranty_expiry_date"):
-					self.doc.fields[fieldname] = None
+					self.set(fieldname, None)
 							
 	def get_last_sle(self):
 		entries = {}
@@ -154,8 +154,8 @@
 		for sle in frappe.db.sql("""select * from `tabStock Ledger Entry` 
 			where serial_no like %s and item_code=%s and ifnull(is_cancelled, 'No')='No' 
 			order by posting_date desc, posting_time desc, name desc""", 
-			("%%%s%%" % self.doc.name, self.doc.item_code), as_dict=1):
-				if self.doc.name.upper() in get_serial_nos(sle.serial_no):
+			("%%%s%%" % self.name, self.item_code), as_dict=1):
+				if self.name.upper() in get_serial_nos(sle.serial_no):
 					if sle.actual_qty > 0:
 						sle_dict.setdefault("incoming", []).append(sle)
 					else:
@@ -164,11 +164,11 @@
 		return sle_dict
 					
 	def on_trash(self):
-		if self.doc.status == 'Delivered':
-			frappe.throw(_("Delivered Serial No ") + self.doc.name + _(" can not be deleted"))
-		if self.doc.warehouse:
+		if self.status == 'Delivered':
+			frappe.throw(_("Delivered Serial No ") + self.name + _(" can not be deleted"))
+		if self.warehouse:
 			frappe.throw(_("Cannot delete Serial No in warehouse. \
-				First remove from warehouse, then delete.") + ": " + self.doc.name)
+				First remove from warehouse, then delete.") + ": " + self.name)
 	
 	def before_rename(self, old, new, merge=False):
 		if merge:
@@ -188,7 +188,7 @@
 					('\n'.join(serial_nos), item[0]))
 	
 	def on_stock_ledger_entry(self):
-		if self.via_stock_ledger and not self.doc.fields.get("__islocal"):
+		if self.via_stock_ledger and not self.get("__islocal"):
 			last_sle = self.get_last_sle()
 			self.set_status(last_sle.get("last_sle"))
 			self.set_purchase_details(last_sle.get("purchase_sle"))
@@ -226,22 +226,22 @@
 				if frappe.db.exists("Serial No", serial_no):
 					sr = frappe.bean("Serial No", serial_no)
 					
-					if sr.doc.item_code!=sle.item_code:
+					if sr.item_code!=sle.item_code:
 						frappe.throw(_("Serial No does not belong to Item") + 
 							(": %s (%s)" % (sle.item_code, serial_no)), SerialNoItemError)
 							
-					if sr.doc.warehouse and sle.actual_qty > 0:
-						frappe.throw(_("Same Serial No") + ": " + sr.doc.name + 
+					if sr.warehouse and sle.actual_qty > 0:
+						frappe.throw(_("Same Serial No") + ": " + sr.name + 
 							_(" can not be received twice"), SerialNoDuplicateError)
 					
 					if sle.actual_qty < 0:
-						if sr.doc.warehouse!=sle.warehouse:
+						if sr.warehouse!=sle.warehouse:
 							frappe.throw(_("Serial No") + ": " + serial_no + 
 								_(" does not belong to Warehouse") + ": " + sle.warehouse, 
 								SerialNoWarehouseError)
 					
 						if sle.voucher_type in ("Delivery Note", "Sales Invoice") \
-							and sr.doc.status != "Available":
+							and sr.status != "Available":
 							frappe.throw(_("Serial No status must be 'Available' to Deliver") 
 								+ ": " + serial_no, SerialNoStatusError)
 				elif sle.actual_qty < 0:
@@ -266,7 +266,7 @@
 			if frappe.db.exists("Serial No", serial_no):
 				sr = frappe.bean("Serial No", serial_no)
 				sr.make_controller().via_stock_ledger = True
-				sr.doc.warehouse = sle.warehouse if sle.actual_qty > 0 else None
+				sr.warehouse = sle.warehouse if sle.actual_qty > 0 else None
 				sr.save()
 			elif sle.actual_qty > 0:
 				make_serial_no(serial_no, sle)
@@ -282,21 +282,21 @@
 
 def make_serial_no(serial_no, sle):
 	sr = frappe.new_bean("Serial No")
-	sr.doc.serial_no = serial_no
-	sr.doc.item_code = sle.item_code
-	sr.doc.warehouse = None
+	sr.serial_no = serial_no
+	sr.item_code = sle.item_code
+	sr.warehouse = None
 	sr.make_controller().via_stock_ledger = True
 	sr.insert()
-	sr.doc.warehouse = sle.warehouse
-	sr.doc.status = "Available"
+	sr.warehouse = sle.warehouse
+	sr.status = "Available"
 	sr.save()
-	frappe.msgprint(_("Serial No created") + ": " + sr.doc.name)
-	return sr.doc.name
+	frappe.msgprint(_("Serial No created") + ": " + sr.name)
+	return sr.name
 	
 def update_serial_nos_after_submit(controller, parentfield):
 	stock_ledger_entries = frappe.db.sql("""select voucher_detail_no, serial_no
 		from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", 
-		(controller.doc.doctype, controller.doc.name), as_dict=True)
+		(controller.doctype, controller.name), as_dict=True)
 		
 	if not stock_ledger_entries: return
 
diff --git a/erpnext/stock/doctype/serial_no/test_serial_no.py b/erpnext/stock/doctype/serial_no/test_serial_no.py
index 8b295b4..dc9c155 100644
--- a/erpnext/stock/doctype/serial_no/test_serial_no.py
+++ b/erpnext/stock/doctype/serial_no/test_serial_no.py
@@ -15,15 +15,15 @@
 class TestSerialNo(unittest.TestCase):
 	def test_cannot_create_direct(self):
 		sr = frappe.new_bean("Serial No")
-		sr.doc.item_code = "_Test Serialized Item"
-		sr.doc.warehouse = "_Test Warehouse - _TC"
-		sr.doc.serial_no = "_TCSER0001"
-		sr.doc.purchase_rate = 10
+		sr.item_code = "_Test Serialized Item"
+		sr.warehouse = "_Test Warehouse - _TC"
+		sr.serial_no = "_TCSER0001"
+		sr.purchase_rate = 10
 		self.assertRaises(SerialNoCannotCreateDirectError, sr.insert)
 		
-		sr.doc.warehouse = None
+		sr.warehouse = None
 		sr.insert()
-		self.assertTrue(sr.doc.name)
+		self.assertTrue(sr.name)
 
-		sr.doc.warehouse = "_Test Warehouse - _TC"
-		self.assertTrue(SerialNoCannotCannotChangeError, sr.doc.save)
\ No newline at end of file
+		sr.warehouse = "_Test Warehouse - _TC"
+		self.assertTrue(SerialNoCannotCannotChangeError, sr.save)
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 785ad97..eeb8d82 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -29,8 +29,8 @@
 	def validate(self):
 		self.validate_posting_time()
 		self.validate_purpose()
-		pro_obj = self.doc.production_order and \
-			get_obj('Production Order', self.doc.production_order) or None
+		pro_obj = self.production_order and \
+			get_obj('Production Order', self.production_order) or None
 
 		self.validate_item()
 		self.validate_uom_is_integer("uom", "qty")
@@ -61,13 +61,13 @@
 		
 	def validate_fiscal_year(self):
 		from erpnext.accounts.utils import validate_fiscal_year
-		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year,
+		validate_fiscal_year(self.posting_date, self.fiscal_year,
 			self.meta.get_label("posting_date"))
 		
 	def validate_purpose(self):
 		valid_purposes = ["Material Issue", "Material Receipt", "Material Transfer", 
 			"Manufacture/Repack", "Subcontract", "Sales Return", "Purchase Return"]
-		if self.doc.purpose not in valid_purposes:
+		if self.purpose not in valid_purposes:
 			msgprint(_("Purpose must be one of ") + comma_or(valid_purposes),
 				raise_exception=True)
 		
@@ -87,32 +87,32 @@
 		validate_for_manufacture_repack = any([d.bom_no for d in self.doclist.get(
 			{"parentfield": "mtn_details"})])
 
-		if self.doc.purpose in source_mandatory and self.doc.purpose not in target_mandatory:
-			self.doc.to_warehouse = None
+		if self.purpose in source_mandatory and self.purpose not in target_mandatory:
+			self.to_warehouse = None
 			for d in self.get('mtn_details'):
 				d.t_warehouse = None
-		elif self.doc.purpose in target_mandatory and self.doc.purpose not in source_mandatory:
-			self.doc.from_warehouse = None
+		elif self.purpose in target_mandatory and self.purpose not in source_mandatory:
+			self.from_warehouse = None
 			for d in self.get('mtn_details'):
 				d.s_warehouse = None
 
 		for d in self.get('mtn_details'):
 			if not d.s_warehouse and not d.t_warehouse:
-				d.s_warehouse = self.doc.from_warehouse
-				d.t_warehouse = self.doc.to_warehouse
+				d.s_warehouse = self.from_warehouse
+				d.t_warehouse = self.to_warehouse
 
 			if not (d.s_warehouse or d.t_warehouse):
 				msgprint(_("Atleast one warehouse is mandatory"), raise_exception=1)
 			
-			if self.doc.purpose in source_mandatory and not d.s_warehouse:
+			if self.purpose in source_mandatory and not d.s_warehouse:
 				msgprint(_("Row # ") + "%s: " % cint(d.idx)
 					+ _("Source Warehouse") + _(" is mandatory"), raise_exception=1)
 				
-			if self.doc.purpose in target_mandatory and not d.t_warehouse:
+			if self.purpose in target_mandatory and not d.t_warehouse:
 				msgprint(_("Row # ") + "%s: " % cint(d.idx)
 					+ _("Target Warehouse") + _(" is mandatory"), raise_exception=1)
 
-			if self.doc.purpose == "Manufacture/Repack":
+			if self.purpose == "Manufacture/Repack":
 				if validate_for_manufacture_repack:
 					if d.bom_no:
 						d.s_warehouse = None
@@ -121,7 +121,7 @@
 							msgprint(_("Row # ") + "%s: " % cint(d.idx)
 								+ _("Target Warehouse") + _(" is mandatory"), raise_exception=1)
 						
-						elif pro_obj and cstr(d.t_warehouse) != pro_obj.doc.fg_warehouse:
+						elif pro_obj and cstr(d.t_warehouse) != pro_obj.fg_warehouse:
 							msgprint(_("Row # ") + "%s: " % cint(d.idx)
 								+ _("Target Warehouse") + _(" should be same as that in ")
 								+ _("Production Order"), raise_exception=1)
@@ -138,28 +138,28 @@
 				
 	def validate_production_order(self, pro_obj=None):
 		if not pro_obj:
-			if self.doc.production_order:
-				pro_obj = get_obj('Production Order', self.doc.production_order)
+			if self.production_order:
+				pro_obj = get_obj('Production Order', self.production_order)
 			else:
 				return
 		
-		if self.doc.purpose == "Manufacture/Repack":
+		if self.purpose == "Manufacture/Repack":
 			# check for double entry
 			self.check_duplicate_entry_for_production_order()
-		elif self.doc.purpose != "Material Transfer":
-			self.doc.production_order = None
+		elif self.purpose != "Material Transfer":
+			self.production_order = None
 	
 	def check_duplicate_entry_for_production_order(self):
 		other_ste = [t[0] for t in frappe.db.get_values("Stock Entry",  {
-			"production_order": self.doc.production_order,
-			"purpose": self.doc.purpose,
+			"production_order": self.production_order,
+			"purpose": self.purpose,
 			"docstatus": ["!=", 2],
-			"name": ["!=", self.doc.name]
+			"name": ["!=", self.name]
 		}, "name")]
 		
 		if other_ste:
 			production_item, qty = frappe.db.get_value("Production Order", 
-				self.doc.production_order, ["production_item", "qty"])
+				self.production_order, ["production_item", "qty"])
 			args = other_ste + [production_item]
 			fg_qty_already_entered = frappe.db.sql("""select sum(actual_qty)
 				from `tabStock Entry Detail` 
@@ -169,10 +169,10 @@
 			
 			if fg_qty_already_entered >= qty:
 				frappe.throw(_("Stock Entries already created for Production Order ") 
-					+ self.doc.production_order + ":" + ", ".join(other_ste), DuplicateEntryForProductionOrderError)
+					+ self.production_order + ":" + ", ".join(other_ste), DuplicateEntryForProductionOrderError)
 
 	def set_total_amount(self):
-		self.doc.total_amount = sum([flt(item.amount) for item in self.get("mtn_details")])
+		self.total_amount = sum([flt(item.amount) for item in self.get("mtn_details")])
 			
 	def get_stock_and_rate(self):
 		"""get stock and incoming rate on posting date"""
@@ -180,8 +180,8 @@
 			args = frappe._dict({
 				"item_code": d.item_code,
 				"warehouse": d.s_warehouse or d.t_warehouse,
-				"posting_date": self.doc.posting_date,
-				"posting_time": self.doc.posting_time,
+				"posting_date": self.posting_date,
+				"posting_time": self.posting_time,
 				"qty": d.s_warehouse and -1*d.transfer_qty or d.transfer_qty,
 				"serial_no": d.serial_no,
 				"bom_no": d.bom_no,
@@ -197,14 +197,14 @@
 			
 	def get_incoming_rate(self, args):
 		incoming_rate = 0
-		if self.doc.purpose == "Sales Return" and \
-				(self.doc.delivery_note_no or self.doc.sales_invoice_no):
+		if self.purpose == "Sales Return" and \
+				(self.delivery_note_no or self.sales_invoice_no):
 			sle = frappe.db.sql("""select name, posting_date, posting_time, 
 				actual_qty, stock_value, warehouse from `tabStock Ledger Entry` 
 				where voucher_type = %s and voucher_no = %s and 
 				item_code = %s limit 1""", 
-				((self.doc.delivery_note_no and "Delivery Note" or "Sales Invoice"),
-				self.doc.delivery_note_no or self.doc.sales_invoice_no, args.item_code), as_dict=1)
+				((self.delivery_note_no and "Delivery Note" or "Sales Invoice"),
+				self.delivery_note_no or self.sales_invoice_no, args.item_code), as_dict=1)
 			if sle:
 				args.update({
 					"posting_date": sle[0].posting_date,
@@ -237,13 +237,13 @@
 	def validate_finished_goods(self):
 		"""validation: finished good quantity should be same as manufacturing quantity"""
 		for d in self.get('mtn_details'):
-			if d.bom_no and flt(d.transfer_qty) != flt(self.doc.fg_completed_qty):
+			if d.bom_no and flt(d.transfer_qty) != flt(self.fg_completed_qty):
 				msgprint(_("Row #") + " %s: " % d.idx 
 					+ _("Quantity should be equal to Manufacturing Quantity. To fetch items again, click on 'Get Items' button or update the Quantity manually."), raise_exception=1)
 						
 	def validate_return_reference_doc(self):
 		"""validate item with reference doc"""
-		ref = get_return_doclist_and_details(self.doc.fields)
+		ref = get_return_doclist_and_details(self.fields)
 		
 		if ref.doclist:
 			# validate docstatus
@@ -260,8 +260,8 @@
 			# posting date check
 			ref_posting_datetime = "%s %s" % (cstr(ref.doclist[0].posting_date), 
 				cstr(ref.doclist[0].posting_time) or "00:00:00")
-			this_posting_datetime = "%s %s" % (cstr(self.doc.posting_date), 
-				cstr(self.doc.posting_time))
+			this_posting_datetime = "%s %s" % (cstr(self.posting_date), 
+				cstr(self.posting_time))
 			if this_posting_datetime < ref_posting_datetime:
 				from frappe.utils.dateutils import datetime_in_user_format
 				frappe.msgprint(_("Posting Date Time cannot be before")
@@ -295,12 +295,12 @@
 		return dict(frappe.db.sql("""select item_code, sum(transfer_qty) as qty
 			from `tabStock Entry Detail` where parent in (
 				select name from `tabStock Entry` where `%s`=%s and docstatus=1)
-			group by item_code""" % (ref_fieldname, "%s"), (self.doc.fields.get(ref_fieldname),)))
+			group by item_code""" % (ref_fieldname, "%s"), (self.get(ref_fieldname),)))
 						
 	def update_stock_ledger(self):
 		sl_entries = []			
 		for d in self.get('mtn_details'):
-			if cstr(d.s_warehouse) and self.doc.docstatus == 1:
+			if cstr(d.s_warehouse) and self.docstatus == 1:
 				sl_entries.append(self.get_sl_entries(d, {
 					"warehouse": cstr(d.s_warehouse),
 					"actual_qty": -flt(d.transfer_qty),
@@ -317,53 +317,53 @@
 			# On cancellation, make stock ledger entry for 
 			# target warehouse first, to update serial no values properly
 			
-			if cstr(d.s_warehouse) and self.doc.docstatus == 2:
+			if cstr(d.s_warehouse) and self.docstatus == 2:
 				sl_entries.append(self.get_sl_entries(d, {
 					"warehouse": cstr(d.s_warehouse),
 					"actual_qty": -flt(d.transfer_qty),
 					"incoming_rate": 0
 				}))
 				
-		self.make_sl_entries(sl_entries, self.doc.amended_from and 'Yes' or 'No')
+		self.make_sl_entries(sl_entries, self.amended_from and 'Yes' or 'No')
 
 	def update_production_order(self):
 		def _validate_production_order(pro_bean):
-			if flt(pro_bean.doc.docstatus) != 1:
+			if flt(pro_bean.docstatus) != 1:
 				frappe.throw(_("Production Order must be submitted") + ": " + 
-					self.doc.production_order)
+					self.production_order)
 					
-			if pro_bean.doc.status == 'Stopped':
+			if pro_bean.status == 'Stopped':
 				msgprint(_("Transaction not allowed against stopped Production Order") + ": " + 
-					self.doc.production_order)
+					self.production_order)
 		
-		if self.doc.production_order:
-			pro_bean = frappe.bean("Production Order", self.doc.production_order)
+		if self.production_order:
+			pro_bean = frappe.bean("Production Order", self.production_order)
 			_validate_production_order(pro_bean)
 			self.update_produced_qty(pro_bean)
-			if self.doc.purpose == "Manufacture/Repack":
+			if self.purpose == "Manufacture/Repack":
 				self.update_planned_qty(pro_bean)
 			
 	def update_produced_qty(self, pro_bean):
-		if self.doc.purpose == "Manufacture/Repack":
-			produced_qty = flt(pro_bean.doc.produced_qty) + \
-				(self.doc.docstatus==1 and 1 or -1 ) * flt(self.doc.fg_completed_qty)
+		if self.purpose == "Manufacture/Repack":
+			produced_qty = flt(pro_bean.produced_qty) + \
+				(self.docstatus==1 and 1 or -1 ) * flt(self.fg_completed_qty)
 				
-			if produced_qty > flt(pro_bean.doc.qty):
-				frappe.throw(_("Production Order") + ": " + self.doc.production_order + "\n" +
+			if produced_qty > flt(pro_bean.qty):
+				frappe.throw(_("Production Order") + ": " + self.production_order + "\n" +
 					_("Total Manufactured Qty can not be greater than Planned qty to manufacture") 
-					+ "(%s/%s)" % (produced_qty, flt(pro_bean.doc.qty)), StockOverProductionError)
+					+ "(%s/%s)" % (produced_qty, flt(pro_bean.qty)), StockOverProductionError)
 					
-			status = 'Completed' if flt(produced_qty) >= flt(pro_bean.doc.qty) else 'In Process'
+			status = 'Completed' if flt(produced_qty) >= flt(pro_bean.qty) else 'In Process'
 			frappe.db.sql("""update `tabProduction Order` set status=%s, produced_qty=%s 
-				where name=%s""", (status, produced_qty, self.doc.production_order))
+				where name=%s""", (status, produced_qty, self.production_order))
 			
 	def update_planned_qty(self, pro_bean):
 		from erpnext.stock.utils import update_bin
 		update_bin({
-			"item_code": pro_bean.doc.production_item,
-			"warehouse": pro_bean.doc.fg_warehouse,
-			"posting_date": self.doc.posting_date,
-			"planned_qty": (self.doc.docstatus==1 and -1 or 1 ) * flt(self.doc.fg_completed_qty)
+			"item_code": pro_bean.production_item,
+			"warehouse": pro_bean.fg_warehouse,
+			"posting_date": self.posting_date,
+			"planned_qty": (self.docstatus==1 and -1 or 1 ) * flt(self.fg_completed_qty)
 		})
 					
 	def get_item_details(self, arg):
@@ -414,8 +414,8 @@
 		ret = {}
 		if args.get('warehouse') and args.get('item_code'):
 			args.update({
-				"posting_date": self.doc.posting_date,
-				"posting_time": self.doc.posting_time,
+				"posting_date": self.posting_date,
+				"posting_time": self.posting_time,
 			})
 			args = frappe._dict(args)
 		
@@ -430,61 +430,61 @@
 		# self.set('mtn_details', [])
 		
 		pro_obj = None
-		if self.doc.production_order:
+		if self.production_order:
 			# common validations
-			pro_obj = get_obj('Production Order', self.doc.production_order)
+			pro_obj = get_obj('Production Order', self.production_order)
 			if pro_obj:
 				self.validate_production_order(pro_obj)
-				self.doc.bom_no = pro_obj.doc.bom_no
+				self.bom_no = pro_obj.bom_no
 			else:
 				# invalid production order
-				self.doc.production_order = None
+				self.production_order = None
 		
-		if self.doc.bom_no:
-			if self.doc.purpose in ["Material Issue", "Material Transfer", "Manufacture/Repack",
+		if self.bom_no:
+			if self.purpose in ["Material Issue", "Material Transfer", "Manufacture/Repack",
 					"Subcontract"]:
-				if self.doc.production_order and self.doc.purpose == "Material Transfer":
+				if self.production_order and self.purpose == "Material Transfer":
 					item_dict = self.get_pending_raw_materials(pro_obj)
 				else:
-					if not self.doc.fg_completed_qty:
+					if not self.fg_completed_qty:
 						frappe.throw(_("Manufacturing Quantity is mandatory"))
-					item_dict = self.get_bom_raw_materials(self.doc.fg_completed_qty)
+					item_dict = self.get_bom_raw_materials(self.fg_completed_qty)
 					for item in item_dict.values():
 						if pro_obj:
-							item["from_warehouse"] = pro_obj.doc.wip_warehouse
+							item["from_warehouse"] = pro_obj.wip_warehouse
 						item["to_warehouse"] = ""
 
 				# add raw materials to Stock Entry Detail table
 				idx = self.add_to_stock_entry_detail(item_dict)
 					
 			# add finished good item to Stock Entry Detail table -- along with bom_no
-			if self.doc.production_order and self.doc.purpose == "Manufacture/Repack":
-				item = frappe.db.get_value("Item", pro_obj.doc.production_item, ["item_name", 
+			if self.production_order and self.purpose == "Manufacture/Repack":
+				item = frappe.db.get_value("Item", pro_obj.production_item, ["item_name", 
 					"description", "stock_uom", "expense_account", "buying_cost_center"], as_dict=1)
 				self.add_to_stock_entry_detail({
-					cstr(pro_obj.doc.production_item): {
-						"to_warehouse": pro_obj.doc.fg_warehouse,
+					cstr(pro_obj.production_item): {
+						"to_warehouse": pro_obj.fg_warehouse,
 						"from_warehouse": "",
-						"qty": self.doc.fg_completed_qty,
+						"qty": self.fg_completed_qty,
 						"item_name": item.item_name,
 						"description": item.description,
 						"stock_uom": item.stock_uom,
 						"expense_account": item.expense_account,
 						"cost_center": item.buying_cost_center,
 					}
-				}, bom_no=pro_obj.doc.bom_no, idx=idx)
+				}, bom_no=pro_obj.bom_no, idx=idx)
 								
-			elif self.doc.purpose in ["Material Receipt", "Manufacture/Repack"]:
-				if self.doc.purpose=="Material Receipt":
-					self.doc.from_warehouse = ""
+			elif self.purpose in ["Material Receipt", "Manufacture/Repack"]:
+				if self.purpose=="Material Receipt":
+					self.from_warehouse = ""
 					
 				item = frappe.db.sql("""select name, item_name, description, 
 					stock_uom, expense_account, buying_cost_center from `tabItem` 
 					where name=(select item from tabBOM where name=%s)""", 
-					self.doc.bom_no, as_dict=1)
+					self.bom_no, as_dict=1)
 				self.add_to_stock_entry_detail({
 					item[0]["name"] : {
-						"qty": self.doc.fg_completed_qty,
+						"qty": self.fg_completed_qty,
 						"item_name": item[0].item_name,
 						"description": item[0]["description"],
 						"stock_uom": item[0]["stock_uom"],
@@ -492,7 +492,7 @@
 						"expense_account": item[0].expense_account,
 						"cost_center": item[0].buying_cost_center,
 					}
-				}, bom_no=self.doc.bom_no, idx=idx)
+				}, bom_no=self.bom_no, idx=idx)
 		
 		self.get_stock_and_rate()
 	
@@ -500,7 +500,7 @@
 		from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict
 		
 		# item dict = { item_code: {qty, description, stock_uom} }
-		item_dict = get_bom_items_as_dict(self.doc.bom_no, qty=qty, fetch_exploded = self.doc.use_multi_level_bom)
+		item_dict = get_bom_items_as_dict(self.bom_no, qty=qty, fetch_exploded = self.use_multi_level_bom)
 		
 		for item in item_dict.values():
 			item.from_warehouse = item.default_warehouse
@@ -515,12 +515,12 @@
 		item_dict = self.get_bom_raw_materials(1)
 		issued_item_qty = self.get_issued_qty()
 		
-		max_qty = flt(pro_obj.doc.qty)
+		max_qty = flt(pro_obj.qty)
 		only_pending_fetched = []
 		
 		for item in item_dict:
 			pending_to_issue = (max_qty * item_dict[item]["qty"]) - issued_item_qty.get(item, 0)
-			desire_to_transfer = flt(self.doc.fg_completed_qty) * item_dict[item]["qty"]
+			desire_to_transfer = flt(self.fg_completed_qty) * item_dict[item]["qty"]
 			if desire_to_transfer <= pending_to_issue:
 				item_dict[item]["qty"] = desire_to_transfer
 			else:
@@ -550,7 +550,7 @@
 			from `tabStock Entry Detail` t1, `tabStock Entry` t2
 			where t1.parent = t2.name and t2.production_order = %s and t2.docstatus = 1
 			and t2.purpose = 'Material Transfer'
-			group by t1.item_code""", self.doc.production_order)
+			group by t1.item_code""", self.production_order)
 		for t in result:
 			issued_item_qty[t[0]] = flt(t[1])
 		
@@ -558,14 +558,14 @@
 
 	def add_to_stock_entry_detail(self, item_dict, bom_no=None, idx=None):
 		if not idx:	idx = 1
-		expense_account, cost_center = frappe.db.get_values("Company", self.doc.company, \
+		expense_account, cost_center = frappe.db.get_values("Company", self.company, \
 			["default_expense_account", "cost_center"])[0]
 
 		for d in item_dict:
-			se_child = self.doc.append('mtn_details', {})
+			se_child = self.append('mtn_details', {})
 			se_child.idx = idx
-			se_child.s_warehouse = item_dict[d].get("from_warehouse", self.doc.from_warehouse)
-			se_child.t_warehouse = item_dict[d].get("to_warehouse", self.doc.to_warehouse)
+			se_child.s_warehouse = item_dict[d].get("from_warehouse", self.from_warehouse)
+			se_child.t_warehouse = item_dict[d].get("to_warehouse", self.to_warehouse)
 			se_child.item_code = cstr(d)
 			se_child.item_name = item_dict[d]["item_name"]
 			se_child.description = item_dict[d]["description"]
@@ -750,10 +750,10 @@
 @frappe.whitelist()
 def make_return_jv(stock_entry):
 	se = frappe.bean("Stock Entry", stock_entry)
-	if not se.doc.purpose in ["Sales Return", "Purchase Return"]:
+	if not se.purpose in ["Sales Return", "Purchase Return"]:
 		return
 	
-	ref = get_return_doclist_and_details(se.doc.fields)
+	ref = get_return_doclist_and_details(se.fields)
 	
 	if ref.doclist[0].doctype == "Delivery Note":
 		result = make_return_jv_from_delivery_note(se, ref)
@@ -766,10 +766,10 @@
 	jv_list = [{
 		"__islocal": 1,
 		"doctype": "Journal Voucher",
-		"posting_date": se.doc.posting_date,
-		"voucher_type": se.doc.purpose == "Sales Return" and "Credit Note" or "Debit Note",
-		"fiscal_year": se.doc.fiscal_year,
-		"company": se.doc.company
+		"posting_date": se.posting_date,
+		"voucher_type": se.purpose == "Sales Return" and "Credit Note" or "Debit Note",
+		"fiscal_year": se.fiscal_year,
+		"company": se.company
 	}]
 	
 	from erpnext.accounts.utils import get_balance_on
@@ -781,7 +781,7 @@
 			"account": r.get("account"),
 			"against_invoice": r.get("against_invoice"),
 			"against_voucher": r.get("against_voucher"),
-			"balance": get_balance_on(r.get("account"), se.doc.posting_date) \
+			"balance": get_balance_on(r.get("account"), se.posting_date) \
 				if r.get("account") else 0
 		})
 		
@@ -858,7 +858,7 @@
 				children.append(account)
 			
 			if not parent:
-				parent = {"account": si.doc.debit_to}
+				parent = {"account": si.debit_to}
 
 			break
 			
@@ -911,7 +911,7 @@
 				children.append(account)
 			
 			if not parent:
-				parent = {"account": pi.doc.credit_to}
+				parent = {"account": pi.credit_to}
 
 			break
 			
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index dc27cc9..bcdc0fe 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -52,10 +52,10 @@
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mr.doclist[1].t_warehouse})
 
-		self.check_stock_ledger_entries("Stock Entry", mr.doc.name,
+		self.check_stock_ledger_entries("Stock Entry", mr.name,
 			[["_Test Item", "_Test Warehouse - _TC", 50.0]])
 
-		self.check_gl_entries("Stock Entry", mr.doc.name,
+		self.check_gl_entries("Stock Entry", mr.name,
 			sorted([
 				[stock_in_hand_account, 5000.0, 0.0],
 				["Stock Adjustment - _TC", 0.0, 5000.0]
@@ -65,10 +65,10 @@
 		mr.cancel()
 
 		self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
-			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
+			where voucher_type='Stock Entry' and voucher_no=%s""", mr.name))
 
 		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
-			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
+			where voucher_type='Stock Entry' and voucher_no=%s""", mr.name))
 
 
 	def test_material_issue_gl_entry(self):
@@ -81,13 +81,13 @@
 		mi.insert()
 		mi.submit()
 
-		self.check_stock_ledger_entries("Stock Entry", mi.doc.name,
+		self.check_stock_ledger_entries("Stock Entry", mi.name,
 			[["_Test Item", "_Test Warehouse - _TC", -40.0]])
 
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mi.doclist[1].s_warehouse})
 
-		self.check_gl_entries("Stock Entry", mi.doc.name,
+		self.check_gl_entries("Stock Entry", mi.name,
 			sorted([
 				[stock_in_hand_account, 0.0, 4000.0],
 				["Stock Adjustment - _TC", 4000.0, 0.0]
@@ -96,10 +96,10 @@
 
 		mi.cancel()
 		self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
-			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
+			where voucher_type='Stock Entry' and voucher_no=%s""", mi.name))
 
 		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
-			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
+			where voucher_type='Stock Entry' and voucher_no=%s""", mi.name))
 
 		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
 			"item_code": mi.doclist[1].item_code}, "actual_qty"), 50)
@@ -117,7 +117,7 @@
 		mtn.insert()
 		mtn.submit()
 
-		self.check_stock_ledger_entries("Stock Entry", mtn.doc.name,
+		self.check_stock_ledger_entries("Stock Entry", mtn.name,
 			[["_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",
@@ -127,7 +127,7 @@
 			"master_name": mtn.doclist[1].t_warehouse})
 
 
-		self.check_gl_entries("Stock Entry", mtn.doc.name,
+		self.check_gl_entries("Stock Entry", mtn.name,
 			sorted([
 				[stock_in_hand_account, 0.0, 4500.0],
 				[fixed_asset_account, 4500.0, 0.0],
@@ -137,10 +137,10 @@
 
 		mtn.cancel()
 		self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
-			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
+			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.name))
 
 		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
-			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
+			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.name))
 
 
 	def test_repack_no_change_in_valuation(self):
@@ -153,13 +153,13 @@
 		repack.insert()
 		repack.submit()
 
-		self.check_stock_ledger_entries("Stock Entry", repack.doc.name,
+		self.check_stock_ledger_entries("Stock Entry", repack.name,
 			[["_Test Item", "_Test Warehouse - _TC", -50.0],
 				["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1]])
 
 		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
-			order by account desc""", repack.doc.name, as_dict=1)
+			order by account desc""", repack.name, as_dict=1)
 		self.assertFalse(gl_entries)
 
 		set_perpetual_inventory(0)
@@ -178,7 +178,7 @@
 		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": repack.doclist[2].t_warehouse})
 
-		self.check_gl_entries("Stock Entry", repack.doc.name,
+		self.check_gl_entries("Stock Entry", repack.name,
 			sorted([
 				[stock_in_hand_account, 1000.0, 0.0],
 				["Stock Adjustment - _TC", 0.0, 1000.0],
@@ -245,8 +245,8 @@
 		si.submit()
 
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Sales Return"
-		se.doc.sales_invoice_no = si.doc.name
+		se.purpose = "Sales Return"
+		se.sales_invoice_no = si.name
 		se.doclist[1].qty = returned_qty
 		se.doclist[1].transfer_qty = returned_qty
 		self.assertRaises(NotUpdateStockError, se.insert)
@@ -258,7 +258,7 @@
 
 		# insert a pos invoice with update stock
 		si = frappe.bean(copy=sales_invoice_test_records[1])
-		si.doc.is_pos = si.doc.update_stock = 1
+		si.is_pos = si.update_stock = 1
 		si.doclist[1].warehouse = "_Test Warehouse - _TC"
 		si.doclist[1].item_code = item_code
 		si.doclist[1].qty = 5.0
@@ -272,10 +272,10 @@
 
 		# check if item is validated
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Sales Return"
-		se.doc.sales_invoice_no = si.doc.name
-		se.doc.posting_date = "2013-03-10"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
+		se.purpose = "Sales Return"
+		se.sales_invoice_no = si.name
+		se.posting_date = "2013-03-10"
+		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].item_code = "_Test Item Home Desktop 200"
 		se.doclist[1].qty = returned_qty
 		se.doclist[1].transfer_qty = returned_qty
@@ -285,10 +285,10 @@
 
 		# try again
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Sales Return"
-		se.doc.posting_date = "2013-03-10"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
-		se.doc.sales_invoice_no = si.doc.name
+		se.purpose = "Sales Return"
+		se.posting_date = "2013-03-10"
+		se.fiscal_year = "_Test Fiscal Year 2013"
+		se.sales_invoice_no = si.name
 		se.doclist[1].qty = returned_qty
 		se.doclist[1].transfer_qty = returned_qty
 		# in both cases item code remains _Test Item when returning
@@ -330,11 +330,11 @@
 
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
 
-		si_doclist = make_sales_invoice(dn.doc.name)
+		si_doclist = make_sales_invoice(dn.name)
 
 		si = frappe.bean(si_doclist)
-		si.doc.posting_date = dn.doc.posting_date
-		si.doc.debit_to = "_Test Customer - _TC"
+		si.posting_date = dn.posting_date
+		si.debit_to = "_Test Customer - _TC"
 		for d in si.get("entries"):
 			d.income_account = "Sales - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
@@ -343,10 +343,10 @@
 
 		# insert and submit stock entry for sales return
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Sales Return"
-		se.doc.delivery_note_no = dn.doc.name
-		se.doc.posting_date = "2013-03-10"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
+		se.purpose = "Sales Return"
+		se.delivery_note_no = dn.name
+		se.posting_date = "2013-03-10"
+		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = returned_qty
 
 		se.insert()
@@ -367,11 +367,11 @@
 
 	def _test_sales_return_jv(self, se):
 		from erpnext.stock.doctype.stock_entry.stock_entry import make_return_jv
-		jv_list = make_return_jv(se.doc.name)
+		jv_list = make_return_jv(se.name)
 
 		self.assertEqual(len(jv_list), 3)
 		self.assertEqual(jv_list[0].get("voucher_type"), "Credit Note")
-		self.assertEqual(jv_list[0].get("posting_date"), se.doc.posting_date)
+		self.assertEqual(jv_list[0].get("posting_date"), se.posting_date)
 		self.assertEqual(jv_list[1].get("account"), "_Test Customer - _TC")
 		self.assertEqual(jv_list[2].get("account"), "Sales - _TC")
 		self.assertTrue(jv_list[1].get("against_invoice"))
@@ -416,11 +416,11 @@
 		so.insert()
 		so.submit()
 
-		dn_doclist = make_delivery_note(so.doc.name)
+		dn_doclist = make_delivery_note(so.name)
 
 		dn = frappe.bean(dn_doclist)
-		dn.doc.status = "Draft"
-		dn.doc.posting_date = so.doc.delivery_date
+		dn.status = "Draft"
+		dn.posting_date = so.delivery_date
 		dn.insert()
 		dn.submit()
 
@@ -428,11 +428,11 @@
 
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
 
-		si_doclist = make_sales_invoice(so.doc.name)
+		si_doclist = make_sales_invoice(so.name)
 
 		si = frappe.bean(si_doclist)
-		si.doc.posting_date = dn.doc.posting_date
-		si.doc.debit_to = "_Test Customer - _TC"
+		si.posting_date = dn.posting_date
+		si.debit_to = "_Test Customer - _TC"
 		for d in si.get("entries"):
 			d.income_account = "Sales - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
@@ -441,10 +441,10 @@
 
 		# insert and submit stock entry for sales return
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Sales Return"
-		se.doc.delivery_note_no = dn.doc.name
-		se.doc.posting_date = "2013-03-10"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
+		se.purpose = "Sales Return"
+		se.delivery_note_no = dn.name
+		se.posting_date = "2013-03-10"
+		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = returned_qty
 
 		se.insert()
@@ -474,11 +474,11 @@
 
 		self.assertEquals(actual_qty_0 + 5, actual_qty_1)
 
-		pi_doclist = make_purchase_invoice(pr.doc.name)
+		pi_doclist = make_purchase_invoice(pr.name)
 
 		pi = frappe.bean(pi_doclist)
-		pi.doc.posting_date = pr.doc.posting_date
-		pi.doc.credit_to = "_Test Supplier - _TC"
+		pi.posting_date = pr.posting_date
+		pi.credit_to = "_Test Supplier - _TC"
 		for d in pi.get("entries"):
 			d.expense_account = "_Test Account Cost for Goods Sold - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
@@ -487,16 +487,16 @@
 			d.cost_center = "_Test Cost Center - _TC"
 
 		pi.run_method("calculate_taxes_and_totals")
-		pi.doc.bill_no = "NA"
+		pi.bill_no = "NA"
 		pi.insert()
 		pi.submit()
 
 		# submit purchase return
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Purchase Return"
-		se.doc.purchase_receipt_no = pr.doc.name
-		se.doc.posting_date = "2013-03-01"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
+		se.purpose = "Purchase Return"
+		se.purchase_receipt_no = pr.name
+		se.posting_date = "2013-03-01"
+		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = 5
 		se.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 		se.insert()
@@ -508,7 +508,7 @@
 
 		frappe.db.set_default("company", self.old_default_company)
 
-		return se, pr.doc.name
+		return se, pr.name
 
 	def test_over_stock_return(self):
 		from erpnext.stock.doctype.stock_entry.stock_entry import StockOverReturnError
@@ -519,10 +519,10 @@
 
 		# submit purchase return - return another 6 qtys so that exception is raised
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Purchase Return"
-		se.doc.purchase_receipt_no = pr_docname
-		se.doc.posting_date = "2013-03-01"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
+		se.purpose = "Purchase Return"
+		se.purchase_receipt_no = pr_docname
+		se.posting_date = "2013-03-01"
+		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = 6
 		se.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 
@@ -530,11 +530,11 @@
 
 	def _test_purchase_return_jv(self, se):
 		from erpnext.stock.doctype.stock_entry.stock_entry import make_return_jv
-		jv_list = make_return_jv(se.doc.name)
+		jv_list = make_return_jv(se.name)
 
 		self.assertEqual(len(jv_list), 3)
 		self.assertEqual(jv_list[0].get("voucher_type"), "Debit Note")
-		self.assertEqual(jv_list[0].get("posting_date"), se.doc.posting_date)
+		self.assertEqual(jv_list[0].get("posting_date"), se.posting_date)
 		self.assertEqual(jv_list[1].get("account"), "_Test Supplier - _TC")
 		self.assertEqual(jv_list[2].get("account"), "_Test Account Cost for Goods Sold - _TC")
 		self.assertTrue(jv_list[1].get("against_voucher"))
@@ -560,16 +560,16 @@
 
 		# submit purchase receipt
 		po = frappe.bean(copy=purchase_order_test_records[0])
-		po.doc.is_subcontracted = None
+		po.is_subcontracted = None
 		po.doclist[1].item_code = "_Test Item"
 		po.doclist[1].rate = 50
 		po.insert()
 		po.submit()
 
-		pr_doclist = make_purchase_receipt(po.doc.name)
+		pr_doclist = make_purchase_receipt(po.name)
 
 		pr = frappe.bean(pr_doclist)
-		pr.doc.posting_date = po.doc.transaction_date
+		pr.posting_date = po.transaction_date
 		pr.insert()
 		pr.submit()
 
@@ -577,11 +577,11 @@
 
 		self.assertEquals(actual_qty_0 + 10, actual_qty_1)
 
-		pi_doclist = make_purchase_invoice(po.doc.name)
+		pi_doclist = make_purchase_invoice(po.name)
 
 		pi = frappe.bean(pi_doclist)
-		pi.doc.posting_date = pr.doc.posting_date
-		pi.doc.credit_to = "_Test Supplier - _TC"
+		pi.posting_date = pr.posting_date
+		pi.credit_to = "_Test Supplier - _TC"
 		for d in pi.get("entries"):
 			d.expense_account = "_Test Account Cost for Goods Sold - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
@@ -589,16 +589,16 @@
 			d.cost_center = "_Test Cost Center - _TC"
 
 		pi.run_method("calculate_taxes_and_totals")
-		pi.doc.bill_no = "NA"
+		pi.bill_no = "NA"
 		pi.insert()
 		pi.submit()
 
 		# submit purchase return
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Purchase Return"
-		se.doc.purchase_receipt_no = pr.doc.name
-		se.doc.posting_date = "2013-03-01"
-		se.doc.fiscal_year = "_Test Fiscal Year 2013"
+		se.purpose = "Purchase Return"
+		se.purchase_receipt_no = pr.name
+		se.posting_date = "2013-03-01"
+		se.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = 5
 		se.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 		se.insert()
@@ -610,7 +610,7 @@
 
 		frappe.db.set_default("company", self.old_default_company)
 
-		return se, pr.doc.name
+		return se, pr.name
 
 	def _clear_stock_account_balance(self):
 		frappe.db.sql("delete from `tabStock Ledger Entry`")
@@ -671,7 +671,7 @@
 	def test_serial_no_not_exists(self):
 		self._clear_stock_account_balance()
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Material Issue"
+		se.purpose = "Material Issue"
 		se.doclist[1].item_code = "_Test Serialized Item"
 		se.doclist[1].qty = 2
 		se.doclist[1].s_warehouse = "_Test Warehouse 1 - _TC"
@@ -709,7 +709,7 @@
 		self.test_serial_by_series()
 
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Material Transfer"
+		se.purpose = "Material Transfer"
 		se.doclist[1].item_code = "_Test Serialized Item"
 		se.doclist[1].qty = 1
 		se.doclist[1].transfer_qty = 1
@@ -725,7 +725,7 @@
 		serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
 
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Material Transfer"
+		se.purpose = "Material Transfer"
 		se.doclist[1].item_code = "_Test Serialized Item With Series"
 		se.doclist[1].qty = 1
 		se.doclist[1].transfer_qty = 1
@@ -744,7 +744,7 @@
 		make_serialized_item()
 
 		se = frappe.bean(copy=test_records[0])
-		se.doc.purpose = "Material Transfer"
+		se.purpose = "Material Transfer"
 		se.doclist[1].item_code = "_Test Serialized Item With Series"
 		se.doclist[1].qty = 1
 		se.doclist[1].transfer_qty = 1
@@ -790,13 +790,13 @@
 
 		frappe.set_user("test@example.com")
 		st1 = frappe.bean(copy=test_records[0])
-		st1.doc.company = "_Test Company 1"
+		st1.company = "_Test Company 1"
 		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
 		self.assertRaises(BeanPermissionError, st1.insert)
 
 		frappe.set_user("test2@example.com")
 		st1 = frappe.bean(copy=test_records[0])
-		st1.doc.company = "_Test Company 1"
+		st1.company = "_Test Company 1"
 		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
 		st1.insert()
 		st1.submit()
diff --git a/erpnext/stock/doctype/stock_ledger/stock_ledger.py b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
index 966e7ab..d0fe60a 100644
--- a/erpnext/stock/doctype/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
@@ -45,7 +45,7 @@
 		sle = frappe.bean([args])
 		sle.ignore_permissions = 1
 		sle.insert()
-		return sle.doc.name
+		return sle.name
 	
 	def repost(self):
 		"""
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index dfc75d5..69217b8 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -17,11 +17,11 @@
 		from erpnext.stock.utils import validate_warehouse_company
 		self.validate_mandatory()
 		self.validate_item()
-		validate_warehouse_company(self.doc.warehouse, self.doc.company)
+		validate_warehouse_company(self.warehouse, self.company)
 		self.scrub_posting_time()
 		
 		from erpnext.accounts.utils import validate_fiscal_year
-		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, 
+		validate_fiscal_year(self.posting_date, self.fiscal_year, 
 			self.meta.get_label("posting_date"))
 
 	def on_submit(self):
@@ -33,75 +33,75 @@
 
 	#check for item quantity available in stock
 	def actual_amt_check(self):
-		if self.doc.batch_no:
+		if self.batch_no:
 			batch_bal_after_transaction = flt(frappe.db.sql("""select sum(actual_qty)
 				from `tabStock Ledger Entry`
 				where warehouse=%s and item_code=%s and batch_no=%s""",
-				(self.doc.warehouse, self.doc.item_code, self.doc.batch_no))[0][0])
+				(self.warehouse, self.item_code, self.batch_no))[0][0])
 
 			if batch_bal_after_transaction < 0:
-				self.doc.fields.update({
-					'batch_bal': batch_bal_after_transaction - self.doc.actual_qty
+				self.update({
+					'batch_bal': batch_bal_after_transaction - self.actual_qty
 				})
 
 				frappe.throw("""Not enough quantity (requested: %(actual_qty)s, \
 					current: %(batch_bal)s in Batch <b>%(batch_no)s</b> for Item \
 					<b>%(item_code)s</b> at Warehouse <b>%(warehouse)s</b> \
-					as on %(posting_date)s %(posting_time)s""" % self.doc.fields)
+					as on %(posting_date)s %(posting_time)s""" % self.fields)
 
-				self.doc.fields.pop('batch_bal')
+				self.pop('batch_bal')
 
 	def validate_mandatory(self):
 		mandatory = ['warehouse','posting_date','voucher_type','voucher_no','actual_qty','company']
 		for k in mandatory:
-			if not self.doc.fields.get(k):
+			if not self.get(k):
 				msgprint("Stock Ledger Entry: '%s' is mandatory" % k, raise_exception = 1)
 			elif k == 'warehouse':
-				if not frappe.db.exists("Warehouse", self.doc.fields.get(k)):
+				if not frappe.db.exists("Warehouse", self.get(k)):
 					msgprint("Warehouse: '%s' does not exist in the system. Please check." % 
-						self.doc.fields.get(k), raise_exception = 1)
+						self.get(k), raise_exception = 1)
 
 	def validate_item(self):
 		item_det = frappe.db.sql("""select name, has_batch_no, docstatus,
 			is_stock_item, has_serial_no, serial_no_series
 			from tabItem where name=%s""",
-			self.doc.item_code, as_dict=True)[0]
+			self.item_code, as_dict=True)[0]
 
 		if item_det.is_stock_item != 'Yes':
-			frappe.throw("""Item: "%s" is not a Stock Item.""" % self.doc.item_code)
+			frappe.throw("""Item: "%s" is not a Stock Item.""" % self.item_code)
 
 		# check if batch number is required
-		if item_det.has_batch_no =='Yes' and self.doc.voucher_type != 'Stock Reconciliation':
-			if not self.doc.batch_no:
-				frappe.throw("Batch number is mandatory for Item '%s'" % self.doc.item_code)
+		if item_det.has_batch_no =='Yes' and self.voucher_type != 'Stock Reconciliation':
+			if not self.batch_no:
+				frappe.throw("Batch number is mandatory for Item '%s'" % self.item_code)
 
 			# check if batch belongs to item
 			if not frappe.db.get_value("Batch", 
-					{"item": self.doc.item_code, "name": self.doc.batch_no}):
+					{"item": self.item_code, "name": self.batch_no}):
 				frappe.throw("'%s' is not a valid Batch Number for Item '%s'" % 
-					(self.doc.batch_no, self.doc.item_code))
+					(self.batch_no, self.item_code))
 
-		if not self.doc.stock_uom:
-			self.doc.stock_uom = item_det.stock_uom
+		if not self.stock_uom:
+			self.stock_uom = item_det.stock_uom
 
 	def check_stock_frozen_date(self):
 		stock_frozen_upto = frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
 		if stock_frozen_upto:
 			stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
-			if getdate(self.doc.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in frappe.user.get_roles():
+			if getdate(self.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in frappe.user.get_roles():
 				msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=StockFreezeError)
 
 		stock_frozen_upto_days = int(frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
 		if stock_frozen_upto_days:
 			stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
-			older_than_x_days_ago = (add_days(getdate(self.doc.posting_date), stock_frozen_upto_days) <= date.today())
+			older_than_x_days_ago = (add_days(getdate(self.posting_date), stock_frozen_upto_days) <= date.today())
 			if older_than_x_days_ago and not stock_auth_role in frappe.user.get_roles():
 				msgprint("You are not authorized to do / modify back dated stock entries older than %d days ago" %stock_frozen_upto_days, raise_exception=StockFreezeError)
 
 
 	def scrub_posting_time(self):
-		if not self.doc.posting_time or self.doc.posting_time == '00:0':
-			self.doc.posting_time = '00:00'
+		if not self.posting_time or self.posting_time == '00:0':
+			self.posting_time = '00:00'
 
 def on_doctype_update():
 	if not frappe.db.sql("""show index from `tabStock Ledger Entry`
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index c4195c6..60f37e1 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -28,10 +28,10 @@
 		self.make_cancel_gl_entries()
 		
 	def validate_data(self):
-		if not self.doc.reconciliation_json:
+		if not self.reconciliation_json:
 			return
 			
-		data = json.loads(self.doc.reconciliation_json)
+		data = json.loads(self.reconciliation_json)
 		
 		# strip out extra columns (if any)
 		data = [row[:4] for row in data]
@@ -45,7 +45,7 @@
 		if data.index(self.head_row) != 0:
 			head_row_no = data.index(self.head_row)
 			data = data[head_row_no:]
-			self.doc.reconciliation_json = json.dumps(data)
+			self.reconciliation_json = json.dumps(data)
 				
 		def _get_msg(row_num, msg):
 			return _("Row # ") + ("%d: " % (row_num+head_row_no+2)) + _(msg)
@@ -124,18 +124,18 @@
 			
 		row_template = ["item_code", "warehouse", "qty", "valuation_rate"]
 		
-		if not self.doc.reconciliation_json:
+		if not self.reconciliation_json:
 			msgprint(_("""Stock Reconciliation file not uploaded"""), raise_exception=1)
 		
-		data = json.loads(self.doc.reconciliation_json)
+		data = json.loads(self.reconciliation_json)
 		for row_num, row in enumerate(data[data.index(self.head_row)+1:]):
 			row = frappe._dict(zip(row_template, row))
 			row["row_num"] = row_num
 			previous_sle = get_previous_sle({
 				"item_code": row.item_code,
 				"warehouse": row.warehouse,
-				"posting_date": self.doc.posting_date,
-				"posting_time": self.doc.posting_time
+				"posting_date": self.posting_date,
+				"posting_time": self.posting_time
 			})
 
 			# check valuation rate mandatory
@@ -238,14 +238,14 @@
 			"doctype": "Stock Ledger Entry",
 			"item_code": row.item_code,
 			"warehouse": row.warehouse,
-			"posting_date": self.doc.posting_date,
-			"posting_time": self.doc.posting_time,
-			"voucher_type": self.doc.doctype,
-			"voucher_no": self.doc.name,
-			"company": self.doc.company,
+			"posting_date": self.posting_date,
+			"posting_time": self.posting_time,
+			"voucher_type": self.doctype,
+			"voucher_no": self.name,
+			"company": self.company,
 			"stock_uom": frappe.db.get_value("Item", row.item_code, "stock_uom"),
 			"voucher_detail_no": row.voucher_detail_no,
-			"fiscal_year": self.doc.fiscal_year,
+			"fiscal_year": self.fiscal_year,
 			"is_cancelled": "No"
 		})
 		args.update(opts)
@@ -260,37 +260,37 @@
 				
 		existing_entries = frappe.db.sql("""select distinct item_code, warehouse 
 			from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", 
-			(self.doc.doctype, self.doc.name), as_dict=1)
+			(self.doctype, self.name), as_dict=1)
 				
 		# delete entries
 		frappe.db.sql("""delete from `tabStock Ledger Entry` 
-			where voucher_type=%s and voucher_no=%s""", (self.doc.doctype, self.doc.name))
+			where voucher_type=%s and voucher_no=%s""", (self.doctype, self.name))
 		
 		# repost future entries for selected item_code, warehouse
 		for entries in existing_entries:
 			update_entries_after({
 				"item_code": entries.item_code,
 				"warehouse": entries.warehouse,
-				"posting_date": self.doc.posting_date,
-				"posting_time": self.doc.posting_time
+				"posting_date": self.posting_date,
+				"posting_time": self.posting_time
 			})
 			
 	def get_gl_entries(self, warehouse_account=None):
-		if not self.doc.cost_center:
+		if not self.cost_center:
 			msgprint(_("Please enter Cost Center"), raise_exception=1)
 			
 		return super(DocType, self).get_gl_entries(warehouse_account, 		
-			self.doc.expense_account, self.doc.cost_center)
+			self.expense_account, self.cost_center)
 		
 			
 	def validate_expense_account(self):
 		if not cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
 			return
 			
-		if not self.doc.expense_account:
+		if not self.expense_account:
 			msgprint(_("Please enter Expense Account"), raise_exception=1)
 		elif not frappe.db.sql("""select * from `tabStock Ledger Entry`"""):
-			if frappe.db.get_value("Account", self.doc.expense_account, 
+			if frappe.db.get_value("Account", self.expense_account, 
 					"report_type") == "Profit and Loss":
 				msgprint(_("""Expense Account can not be a PL Account, as this stock \
 					reconciliation is an opening entry. \
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index 558e1f1..ca1519c 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -52,7 +52,7 @@
 			# no gl entries
 			gl_entries = frappe.db.sql("""select name from `tabGL Entry` 
 				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""",
-				 stock_reco.doc.name)
+				 stock_reco.name)
 			self.assertFalse(gl_entries)
 			
 		
@@ -99,7 +99,7 @@
 			# no gl entries
 			gl_entries = frappe.db.sql("""select name from `tabGL Entry` 
 				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""", 
-				stock_reco.doc.name)
+				stock_reco.name)
 			self.assertFalse(gl_entries)
 			
 	def test_reco_fifo_gl_entries(self):
@@ -226,8 +226,8 @@
 		pr.submit()
 		
 		pr1 = frappe.bean(copy=stock_entry)
-		pr1.doc.posting_date = "2012-12-15"
-		pr1.doc.posting_time = "02:00"
+		pr1.posting_date = "2012-12-15"
+		pr1.posting_time = "02:00"
 		pr1.doclist[1].qty = 10
 		pr1.doclist[1].transfer_qty = 10
 		pr1.doclist[1].incoming_rate = 700
@@ -235,9 +235,9 @@
 		pr1.submit()
 		
 		pr2 = frappe.bean(copy=stock_entry)
-		pr2.doc.posting_date = "2012-12-25"
-		pr2.doc.posting_time = "03:00"
-		pr2.doc.purpose = "Material Issue"
+		pr2.posting_date = "2012-12-25"
+		pr2.posting_time = "03:00"
+		pr2.purpose = "Material Issue"
 		pr2.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 		pr2.doclist[1].t_warehouse = None
 		pr2.doclist[1].qty = 15
@@ -247,9 +247,9 @@
 		pr2.submit()
 		
 		pr3 = frappe.bean(copy=stock_entry)
-		pr3.doc.posting_date = "2012-12-31"
-		pr3.doc.posting_time = "08:00"
-		pr3.doc.purpose = "Material Issue"
+		pr3.posting_date = "2012-12-31"
+		pr3.posting_time = "08:00"
+		pr3.purpose = "Material Issue"
 		pr3.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 		pr3.doclist[1].t_warehouse = None
 		pr3.doclist[1].qty = 20
@@ -260,9 +260,9 @@
 		
 		
 		pr4 = frappe.bean(copy=stock_entry)
-		pr4.doc.posting_date = "2013-01-05"
-		pr4.doc.fiscal_year = "_Test Fiscal Year 2013"
-		pr4.doc.posting_time = "07:00"
+		pr4.posting_date = "2013-01-05"
+		pr4.fiscal_year = "_Test Fiscal Year 2013"
+		pr4.posting_time = "07:00"
 		pr4.doclist[1].qty = 15
 		pr4.doclist[1].transfer_qty = 15
 		pr4.doclist[1].incoming_rate = 1200
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py
index cb266ed..b505394 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.py
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.py
@@ -14,14 +14,14 @@
 	def validate(self):
 		for key in ["item_naming_by", "item_group", "stock_uom",
 			"allow_negative_stock"]:
-			frappe.db.set_default(key, self.doc.fields.get(key, ""))
+			frappe.db.set_default(key, self.get(key, ""))
 			
 		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Item", "item_code", 
-			self.doc.get("item_naming_by")=="Naming Series", hide_name_field=True)
+			self.get("item_naming_by")=="Naming Series", hide_name_field=True)
 
 		stock_frozen_limit = 356
-		submitted_stock_frozen = self.doc.stock_frozen_upto_days
+		submitted_stock_frozen = self.stock_frozen_upto_days
 		if submitted_stock_frozen > stock_frozen_limit:
-			self.doc.stock_frozen_upto_days = stock_frozen_limit
+			self.stock_frozen_upto_days = stock_frozen_limit
 			frappe.msgprint (_("`Freeze Stocks Older Than` should be smaller than %d days.") %stock_frozen_limit)
diff --git a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index 62c80d2..6c49ed9 100644
--- a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -14,38 +14,38 @@
 		self.doc, self.doclist = d,dl
 
 	def validate_mandatory(self):
-		if not cstr(self.doc.item_code):
+		if not cstr(self.item_code):
 			msgprint("Please Enter an Item.")
 			raise Exception
 		
-		if not cstr(self.doc.new_stock_uom):
+		if not cstr(self.new_stock_uom):
 			msgprint("Please Enter New Stock UOM.")
 			raise Exception
 
-		if cstr(self.doc.current_stock_uom) == cstr(self.doc.new_stock_uom):
+		if cstr(self.current_stock_uom) == cstr(self.new_stock_uom):
 			msgprint("Current Stock UOM and Stock UOM are same.")
 			raise Exception 
 	
 		# check conversion factor
-		if not flt(self.doc.conversion_factor):
+		if not flt(self.conversion_factor):
 			msgprint("Please Enter Conversion Factor.")
 			raise Exception
 		
-		stock_uom = frappe.db.get_value("Item", self.doc.item_code, "stock_uom")
-		if cstr(self.doc.new_stock_uom) == cstr(stock_uom):
-			msgprint("Item Master is already updated with New Stock UOM " + cstr(self.doc.new_stock_uom))
+		stock_uom = frappe.db.get_value("Item", self.item_code, "stock_uom")
+		if cstr(self.new_stock_uom) == cstr(stock_uom):
+			msgprint("Item Master is already updated with New Stock UOM " + cstr(self.new_stock_uom))
 			raise Exception
 			
 	def update_item_master(self):
-		item_bean = frappe.bean("Item", self.doc.item_code)
-		item_bean.doc.stock_uom = self.doc.new_stock_uom
+		item_bean = frappe.bean("Item", self.item_code)
+		item_bean.stock_uom = self.new_stock_uom
 		item_bean.save()
 		
-		msgprint(_("Default UOM updated in item ") + self.doc.item_code)
+		msgprint(_("Default UOM updated in item ") + self.item_code)
 		
 	def update_bin(self):
 		# update bin
-		if flt(self.doc.conversion_factor) != flt(1):
+		if flt(self.conversion_factor) != flt(1):
 			frappe.db.sql("""update `tabBin` 
 				set stock_uom = %s, 
 					indented_qty = ifnull(indented_qty,0) * %s, 
@@ -54,12 +54,12 @@
 					planned_qty = ifnull(planned_qty,0) * %s, 
 					projected_qty = actual_qty + ordered_qty + indented_qty + 
 						planned_qty - reserved_qty 
-				where item_code = %s""", (self.doc.new_stock_uom, self.doc.conversion_factor, 
-					self.doc.conversion_factor, self.doc.conversion_factor, 
-					self.doc.conversion_factor, self.doc.item_code))
+				where item_code = %s""", (self.new_stock_uom, self.conversion_factor, 
+					self.conversion_factor, self.conversion_factor, 
+					self.conversion_factor, self.item_code))
 		else:
 			frappe.db.sql("update `tabBin` set stock_uom = %s where item_code = %s", 
-				 (self.doc.new_stock_uom, self.doc.item_code) )
+				 (self.new_stock_uom, self.item_code) )
 
 		# acknowledge user
 		msgprint(" All Bins Updated Successfully.")
@@ -68,23 +68,23 @@
 		# update stock ledger entry
 		from erpnext.stock.stock_ledger import update_entries_after
 		
-		if flt(self.doc.conversion_factor) != flt(1):
+		if flt(self.conversion_factor) != flt(1):
 			frappe.db.sql("""update `tabStock Ledger Entry` 
 				set stock_uom = %s, actual_qty = ifnull(actual_qty,0) * %s 
 				where item_code = %s""", 
-				(self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
+				(self.new_stock_uom, self.conversion_factor, self.item_code))
 		else:
 			frappe.db.sql("""update `tabStock Ledger Entry` set stock_uom=%s 
-				where item_code=%s""", (self.doc.new_stock_uom, self.doc.item_code))
+				where item_code=%s""", (self.new_stock_uom, self.item_code))
 		
 		# acknowledge user
 		msgprint("Stock Ledger Entries Updated Successfully.")
 		
 		# update item valuation
-		if flt(self.doc.conversion_factor) != flt(1):
+		if flt(self.conversion_factor) != flt(1):
 			wh = frappe.db.sql("select name from `tabWarehouse`")
 			for w in wh:
-				update_entries_after({"item_code": self.doc.item_code, "warehouse": w[0]})
+				update_entries_after({"item_code": self.item_code, "warehouse": w[0]})
 
 		# acknowledge user
 		msgprint("Item Valuation Updated Successfully.")
@@ -102,8 +102,8 @@
 
 		
 	def validate_uom_integer_type(self):
-		current_is_integer = frappe.db.get_value("UOM", self.doc.current_stock_uom, "must_be_whole_number")
-		new_is_integer = frappe.db.get_value("UOM", self.doc.new_stock_uom, "must_be_whole_number")
+		current_is_integer = frappe.db.get_value("UOM", self.current_stock_uom, "must_be_whole_number")
+		new_is_integer = frappe.db.get_value("UOM", self.new_stock_uom, "must_be_whole_number")
 		
 		if current_is_integer and not new_is_integer:
 			frappe.msgprint("New UOM must be of type Whole Number", raise_exception=True)
@@ -111,7 +111,7 @@
 		if not current_is_integer and new_is_integer:
 			frappe.msgprint("New UOM must NOT be of type Whole Number", raise_exception=True)
 
-		if current_is_integer and new_is_integer and cint(self.doc.conversion_factor)!=self.doc.conversion_factor:
+		if current_is_integer and new_is_integer and cint(self.conversion_factor)!=self.conversion_factor:
 			frappe.msgprint("Conversion Factor cannot be fraction", raise_exception=True)
 
 @frappe.whitelist()
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index d098cfe..d621985 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -11,25 +11,25 @@
 class Warehouse(Document):
 	
 	def autoname(self):
-		suffix = " - " + frappe.db.get_value("Company", self.doc.company, "abbr")
-		if not self.doc.warehouse_name.endswith(suffix):
-			self.doc.name = self.doc.warehouse_name + suffix
+		suffix = " - " + frappe.db.get_value("Company", self.company, "abbr")
+		if not self.warehouse_name.endswith(suffix):
+			self.name = self.warehouse_name + suffix
 
 	def validate(self):
-		if self.doc.email_id and not validate_email_add(self.doc.email_id):
+		if self.email_id and not validate_email_add(self.email_id):
 				throw(_("Please enter valid Email Id"))
 				
 		self.update_parent_account()
 				
 	def update_parent_account(self):
-		if not self.doc.__islocal and (self.doc.create_account_under != 
-			frappe.db.get_value("Warehouse", self.doc.name, "create_account_under")):
+		if not self.__islocal and (self.create_account_under != 
+			frappe.db.get_value("Warehouse", self.name, "create_account_under")):
 				warehouse_account = frappe.db.get_value("Account", 
-					{"account_type": "Warehouse", "company": self.doc.company, 
-					"master_name": self.doc.name}, ["name", "parent_account"])
-				if warehouse_account and warehouse_account[1] != self.doc.create_account_under:
+					{"account_type": "Warehouse", "company": self.company, 
+					"master_name": self.name}, ["name", "parent_account"])
+				if warehouse_account and warehouse_account[1] != self.create_account_under:
 					acc_bean = frappe.bean("Account", warehouse_account[0])
-					acc_bean.doc.parent_account = self.doc.create_account_under
+					acc_bean.parent_account = self.create_account_under
 					acc_bean.save()
 				
 	def on_update(self):
@@ -38,74 +38,74 @@
 	def create_account_head(self):
 		if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
 			if not frappe.db.get_value("Account", {"account_type": "Warehouse", 
-					"master_name": self.doc.name}) and not frappe.db.get_value("Account", 
-					{"account_name": self.doc.warehouse_name}):
-				if self.doc.fields.get("__islocal") or not frappe.db.get_value(
-						"Stock Ledger Entry", {"warehouse": self.doc.name}):
+					"master_name": self.name}) and not frappe.db.get_value("Account", 
+					{"account_name": self.warehouse_name}):
+				if self.get("__islocal") or not frappe.db.get_value(
+						"Stock Ledger Entry", {"warehouse": self.name}):
 					self.validate_parent_account()
 					ac_bean = frappe.bean({
 						"doctype": "Account",
-						'account_name': self.doc.warehouse_name, 
-						'parent_account': self.doc.create_account_under, 
+						'account_name': self.warehouse_name, 
+						'parent_account': self.create_account_under, 
 						'group_or_ledger':'Ledger', 
-						'company':self.doc.company, 
+						'company':self.company, 
 						"account_type": "Warehouse",
-						"master_name": self.doc.name,
+						"master_name": self.name,
 						"freeze_account": "No"
 					})
 					ac_bean.ignore_permissions = True
 					ac_bean.insert()
 					
-					msgprint(_("Account Head") + ": " + ac_bean.doc.name + _(" created"))
+					msgprint(_("Account Head") + ": " + ac_bean.name + _(" created"))
 	
 	def validate_parent_account(self):
-		if not self.doc.create_account_under:
+		if not self.create_account_under:
 			parent_account = frappe.db.get_value("Account", 
-				{"account_name": "Stock Assets", "company": self.doc.company})
+				{"account_name": "Stock Assets", "company": self.company})
 			if parent_account:
-				self.doc.create_account_under = parent_account
+				self.create_account_under = parent_account
 			else:
 				frappe.throw(_("Please enter account group under which account \
-					for warehouse ") + self.doc.name +_(" will be created"))
+					for warehouse ") + self.name +_(" will be created"))
 		
 	def on_trash(self):
 		# delete bin
 		bins = frappe.db.sql("select * from `tabBin` where warehouse = %s", 
-			self.doc.name, as_dict=1)
+			self.name, as_dict=1)
 		for d in bins:
 			if d['actual_qty'] or d['reserved_qty'] or d['ordered_qty'] or \
 					d['indented_qty'] or d['projected_qty'] or d['planned_qty']:
 				throw("""Warehouse: %s can not be deleted as qty exists for item: %s""" 
-					% (self.doc.name, d['item_code']))
+					% (self.name, d['item_code']))
 			else:
 				frappe.db.sql("delete from `tabBin` where name = %s", d['name'])
 				
 		warehouse_account = frappe.db.get_value("Account", 
-			{"account_type": "Warehouse", "master_name": self.doc.name})
+			{"account_type": "Warehouse", "master_name": self.name})
 		if warehouse_account:
 			frappe.delete_doc("Account", warehouse_account)
 				
 		if frappe.db.sql("""select name from `tabStock Ledger Entry` 
-				where warehouse = %s""", self.doc.name):
+				where warehouse = %s""", self.name):
 			throw(_("""Warehouse can not be deleted as stock ledger entry 
 				exists for this warehouse."""))
 			
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
 		from erpnext.setup.doctype.company.company import get_name_with_abbr
-		new_warehouse = get_name_with_abbr(newdn, self.doc.company)
+		new_warehouse = get_name_with_abbr(newdn, self.company)
 
 		if merge:
 			if not frappe.db.exists("Warehouse", new_warehouse):
 				frappe.throw(_("Warehouse ") + new_warehouse +_(" does not exists"))
 				
-			if self.doc.company != frappe.db.get_value("Warehouse", new_warehouse, "company"):
+			if self.company != frappe.db.get_value("Warehouse", new_warehouse, "company"):
 				frappe.throw(_("Both Warehouse must belong to same Company"))
 				
 			frappe.db.sql("delete from `tabBin` where warehouse=%s", olddn)
 			
 		from erpnext.accounts.utils import rename_account_for
-		rename_account_for("Warehouse", olddn, newdn, merge, self.doc.company)
+		rename_account_for("Warehouse", olddn, newdn, merge, self.company)
 
 		return new_warehouse
 
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 3cd49d9..1bf431a 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -68,7 +68,7 @@
 	apply_pricing_rule(out, args)
 		
 	if args.get("doctype") in ("Sales Invoice", "Delivery Note"):
-		if item_bean.doc.has_serial_no == "Yes" and not args.serial_no:
+		if item_bean.has_serial_no == "Yes" and not args.serial_no:
 			out.serial_no = get_serial_nos_by_fifo(args, item_bean)
 			
 	if args.transaction_date and item.lead_time_days:
@@ -153,7 +153,7 @@
 	})
 	
 	for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"):
-		out[fieldname] = item.fields.get(fieldname)
+		out[fieldname] = item.get(fieldname)
 			
 	return out
 	
@@ -174,7 +174,7 @@
 		
 		if not out.price_list_rate and args.transaction_type == "buying":
 			from erpnext.stock.doctype.item.item import get_last_purchase_details
-			out.update(get_last_purchase_details(item_bean.doc.name, 
+			out.update(get_last_purchase_details(item_bean.name, 
 				args.docname, args.conversion_rate))
 			
 def validate_price_list(args):
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 4628b5b..e812285 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -53,7 +53,7 @@
 	sle.ignore_permissions = 1
 	sle.insert()
 	sle.submit()
-	return sle.doc.name
+	return sle.name
 	
 def delete_cancelled_entry(voucher_type, voucher_no):
 	frappe.db.sql("""delete from `tabStock Ledger Entry` 
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index e5099c4..981f674 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -297,7 +297,7 @@
 	msg="""<h3>Following Material Requests has been raised automatically \
 		based on item reorder level:</h3>"""
 	for mr in mr_list:
-		msg += "<p><b><u>" + mr.doc.name + """</u></b></p><table class='table table-bordered'><tr>
+		msg += "<p><b><u>" + mr.name + """</u></b></p><table class='table table-bordered'><tr>
 			<th>Item Code</th><th>Warehouse</th><th>Qty</th><th>UOM</th></tr>"""
 		for item in mr.get("indent_details"):
 			msg += "<tr><td>" + item.item_code + "</td><td>" + item.warehouse + "</td><td>" + \