diff --git a/erpnext/accounts/doctype/account/test_account.py b/erpnext/accounts/doctype/account/test_account.py
index 5cecab4..3774629 100644
--- a/erpnext/accounts/doctype/account/test_account.py
+++ b/erpnext/accounts/doctype/account/test_account.py
@@ -9,29 +9,29 @@
 		
 	accounts = [
 		# [account_name, parent_account, group_or_ledger]
-		["_Test Account Bank Account", "Bank Accounts", "Ledger"],
+		["_Test Account Bank Account", "Bank Accounts", "Ledger", "Bank"],
 		
-		["_Test Account Stock Expenses", "Direct Expenses", "Group"],
-		["_Test Account Shipping Charges", "_Test Account Stock Expenses", "Ledger"],
-		["_Test Account Customs Duty", "_Test Account Stock Expenses", "Ledger"],
+		["_Test Account Stock Expenses", "Direct Expenses", "Group", None],
+		["_Test Account Shipping Charges", "_Test Account Stock Expenses", "Ledger", "Chargeable"],
+		["_Test Account Customs Duty", "_Test Account Stock Expenses", "Ledger", "Tax"],
 		
 		
-		["_Test Account Tax Assets", "Current Assets", "Group"],
-		["_Test Account VAT", "_Test Account Tax Assets", "Ledger"],
-		["_Test Account Service Tax", "_Test Account Tax Assets", "Ledger"],
+		["_Test Account Tax Assets", "Current Assets", "Group", None],
+		["_Test Account VAT", "_Test Account Tax Assets", "Ledger", "Tax"],
+		["_Test Account Service Tax", "_Test Account Tax Assets", "Ledger", "Tax"],
 		
-		["_Test Account Reserves and Surplus", "Current Liabilities", "Ledger"],
+		["_Test Account Reserves and Surplus", "Current Liabilities", "Ledger", None],
 
-		["_Test Account Cost for Goods Sold", "Expenses", "Ledger"],
-		["_Test Account Excise Duty", "_Test Account Tax Assets", "Ledger"],
-		["_Test Account Education Cess", "_Test Account Tax Assets", "Ledger"],
-		["_Test Account S&H Education Cess", "_Test Account Tax Assets", "Ledger"],
-		["_Test Account CST", "Direct Expenses", "Ledger"],
-		["_Test Account Discount", "Direct Expenses", "Ledger"],
+		["_Test Account Cost for Goods Sold", "Expenses", "Ledger", None],
+		["_Test Account Excise Duty", "_Test Account Tax Assets", "Ledger", "Tax"],
+		["_Test Account Education Cess", "_Test Account Tax Assets", "Ledger", "Tax"],
+		["_Test Account S&H Education Cess", "_Test Account Tax Assets", "Ledger", "Tax"],
+		["_Test Account CST", "Direct Expenses", "Ledger", "Tax"],
+		["_Test Account Discount", "Direct Expenses", "Ledger", None],
 		
 		# related to Account Inventory Integration
-		["_Test Account Stock In Hand", "Current Assets", "Ledger"],
-		["_Test Account Fixed Assets", "Current Assets", "Ledger"],
+		["_Test Account Stock In Hand", "Current Assets", "Ledger", None],
+		["_Test Account Fixed Assets", "Current Assets", "Ledger", None],
 	]
 
 	for company, abbr in [["_Test Company", "_TC"], ["_Test Company 1", "_TC1"]]:
@@ -40,7 +40,8 @@
 				"account_name": account_name,
 				"parent_account": parent_account + " - " + abbr,
 				"company": company,
-				"group_or_ledger": group_or_ledger
-			} for account_name, parent_account, group_or_ledger in accounts])
+				"group_or_ledger": group_or_ledger,
+				"account_type": account_type
+			} for account_name, parent_account, group_or_ledger, account_type in accounts])
 	
 	return test_objects
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/shipping_rule/shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/shipping_rule.py
index 9e88f22..3cef992 100644
--- a/erpnext/accounts/doctype/shipping_rule/shipping_rule.py
+++ b/erpnext/accounts/doctype/shipping_rule/shipping_rule.py
@@ -26,14 +26,14 @@
 	def validate_from_to_values(self):
 		zero_to_values = []
 		
-		for d in self.shipping_rule_conditions:
+		for d in self.get("shipping_rule_conditions"):
 			self.round_floats_in(d)
 			
 			# values cannot be negative
 			self.validate_value("from_value", ">=", 0.0, d)
 			self.validate_value("to_value", ">=", 0.0, d)
 			
-			if d.to_value == 0:
+			if not d.to_value:
 				zero_to_values.append(d)
 			elif d.from_value >= d.to_value:
 				msgprint(_("Error") + ": " + _("Row") + " # %d: " % d.idx + 
diff --git a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
index 0f41a56..9fee555 100644
--- a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
+++ b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
@@ -5,6 +5,8 @@
 import unittest
 from erpnext.accounts.doctype.shipping_rule.shipping_rule import FromGreaterThanToError, ManyBlankToValuesError, OverlappingConditionError
 
+test_records = frappe.get_test_records('Shipping Rule')
+
 class TestShippingRule(unittest.TestCase):
 	def test_from_greater_than_to(self):
 		shipping_rule = frappe.copy_doc(test_records[0])
@@ -29,6 +31,4 @@
 			shipping_rule.doclist[1].to_value = range_a[1]
 			shipping_rule.doclist[2].from_value = range_b[0]
 			shipping_rule.doclist[2].to_value = range_b[1]
-			self.assertRaises(OverlappingConditionError, shipping_rule.insert)
-
-test_records = frappe.get_test_records('Shipping Rule')
\ No newline at end of file
+			self.assertRaises(OverlappingConditionError, shipping_rule.insert)
\ No newline at end of file
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index a159a73..601fcd1 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -25,13 +25,12 @@
 	if not ignore_permissions and not frappe.has_permission(party_type, "read", party):
 		frappe.throw("Not Permitted", frappe.PermissionError)
 
-	party_doc = frappe.get_doc(party_type, party)
-	party = party_doc
+	party = frappe.get_doc(party_type, party)
 
 	set_address_details(out, party, party_type)
 	set_contact_details(out, party, party_type)
 	set_other_values(out, party, party_type)
-	set_price_list(out, party, price_list)
+	set_price_list(out, party, party_type, price_list)
 	
 	if not out.get("currency"):
 		out["currency"] = currency
@@ -41,7 +40,7 @@
 		out["sales_team"] = [{
 			"sales_person": d.sales_person, 
 			"sales_designation": d.sales_designation
-		} for d in party_doc.get("sales_team")]
+		} for d in party.get("sales_team")]
 	
 	return out
 
@@ -81,7 +80,7 @@
 		if party.get("default_" + f):
 			out[f] = party.get("default_" + f)
 
-def set_price_list(out, party, given_price_list):
+def set_price_list(out, party, party_type, given_price_list):
 	# price list	
 	price_list = get_restrictions().get("Price List")
 	if isinstance(price_list, list):
@@ -90,7 +89,7 @@
 	if not price_list:
 		price_list = party.default_price_list
 		
-	if not price_list and party.party_type=="Customer":
+	if not price_list and party_type=="Customer":
 		price_list =  frappe.db.get_value("Customer Group", 
 			party.customer_group, "default_price_list")
 
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 80af450..ffbbb45 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -81,7 +81,7 @@
 			if d.doctype == 'Purchase Receipt Item':
 				f_lst.pop('received_qty')
 			for x in f_lst :
-				if d.meta.has_field(x):
+				if d.meta.get_field(x):
 					d.set(x, f_lst[x])
 			
 			item = frappe.db.sql("""select is_stock_item, is_purchase_item, 
@@ -101,13 +101,13 @@
 				frappe.throw("Item %s is not a purchase item or sub-contracted item. Please check" % (d.item_code))
 			
 			# list criteria that should not repeat if item is stock item
-			e = [d.schedule_date, d.item_code, d.description, d.warehouse, d.uom, 
-				d.meta.has_field('prevdoc_docname') and d.prevdoc_docname or d.meta.has_field('sales_order_no') and d.sales_order_no or '', 
-				d.meta.has_field('prevdoc_detail_docname') and d.prevdoc_detail_docname or '', 
-				d.meta.has_field('batch_no') and d.batch_no or '']
+			e = [getattr(d, "schedule_date", None), d.item_code, d.description, d.warehouse, d.uom, 
+				d.meta.get_field('prevdoc_docname') and d.prevdoc_docname or d.meta.get_field('sales_order_no') and d.sales_order_no or '', 
+				d.meta.get_field('prevdoc_detail_docname') and d.prevdoc_detail_docname or '', 
+				d.meta.get_field('batch_no') and d.batch_no or '']
 			
 			# if is not stock item
-			f = [d.schedule_date, d.item_code, d.description]
+			f = [getattr(d, "schedule_date", None), d.item_code, d.description]
 			
 			ch = frappe.db.sql("""select is_stock_item from `tabItem` where name = %s""", d.item_code)
 			
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index afa9748..e7bb7c9 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -73,7 +73,7 @@
 	def check_for_stopped_status(self, pc_obj):
 		check_list =[]
 		for d in self.get('po_details'):
-			if d.meta.has_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list:
+			if d.meta.get_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list:
 				check_list.append(d.prevdoc_docname)
 				pc_obj.check_for_stopped_status( d.prevdoc_doctype, d.prevdoc_docname)
 
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 1b050d7..0b1c001 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -93,7 +93,7 @@
 					args.update(self.as_dict())
 					ret = get_item_details(args)
 					for fieldname, value in ret.items():
-						if self.meta.get_field(fieldname, parentfield=self.fname) and \
+						if item.meta.get_field(fieldname) and \
 							item.get(fieldname) is None and value is not None:
 								item.set(fieldname, value)
 							
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 24dce4b..6e03d47 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -17,7 +17,7 @@
 	
 	def validate(self):
 		super(BuyingController, self).validate()
-		if self.supplier and not self.supplier_name:
+		if getattr(self, "supplier", None) and not self.supplier_name:
 			self.supplier_name = frappe.db.get_value("Supplier", 
 				self.supplier, "supplier_name")
 		self.is_item_table_empty()
@@ -31,7 +31,7 @@
 		self.set_price_list_currency("Buying")
 		
 		# set contact and address details for supplier, if they are not mentioned
-		if self.supplier:
+		if getattr(self, "supplier", None):
 			self.update_if_missing(get_party_details(self.supplier, party_type="Supplier"))
 
 		self.set_missing_item_details()
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index bcc46bb..da37adb 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -35,7 +35,7 @@
 		if getattr(self, "customer", None):
 			from erpnext.accounts.party import _get_party_details
 			self.update_if_missing(_get_party_details(self.customer,
-				ignore_permissions=self.ignore_permissions))
+				ignore_permissions=getattr(self, "ignore_permissions", None)))
 		
 		elif getattr(self, "lead", None):
 			from erpnext.selling.doctype.lead.lead import get_lead_details
@@ -377,6 +377,6 @@
 				d.item_code, as_dict=True)[0]
 			if item.is_sales_item == 'No' and item.is_service_item == 'No':
 				frappe.throw(_("Item is neither Sales nor Service Item") + ": " + d.item_code)
-			if d.income_account and not item.income_account:
+			if getattr(d, "income_account", None) and not item.income_account:
 				frappe.db.set_value("Item", d.item_code, "income_account", 
 					d.income_account)
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index e00449d..62262ee 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -223,11 +223,11 @@
 			make_gl_entries(gl_entries)
 			
 	def check_expense_account(self, item):
-		if item.meta.has_field("expense_account") and not item.expense_account:
+		if item.meta.get_field("expense_account") and not item.expense_account:
 			msgprint(_("""Expense/Difference account is mandatory for item: """) + item.item_code, 
 				raise_exception=1)
 				
-		if item.meta.has_field("expense_account") and not item.cost_center:
+		if item.meta.get_field("expense_account") and not item.cost_center:
 			msgprint(_("""Cost Center is mandatory for item: """) + item.item_code, 
 				raise_exception=1)
 				
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index b507226..7dcc96e 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -384,7 +384,7 @@
 			ch.amount = flt(ch.qty) * flt(ch.rate)
 			ch.qty_consumed_per_unit = flt(ch.qty) / flt(self.quantity)
 			ch.docstatus = self.docstatus
-			ch.save(1)
+			ch.db_update()
 
 	def validate_bom_links(self):
 		if not self.is_active:
diff --git a/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.py b/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.py
index bd1b1af..48ea3c0 100644
--- a/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.py
+++ b/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.py
@@ -6,5 +6,5 @@
 
 from frappe.model.document import Document
 
-class BomExplosionItem(Document):
+class BOMExplosionItem(Document):
 	pass
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_bom_item/sales_bom_item.py b/erpnext/selling/doctype/sales_bom_item/sales_bom_item.py
index e1124d9..9a98c39 100644
--- a/erpnext/selling/doctype/sales_bom_item/sales_bom_item.py
+++ b/erpnext/selling/doctype/sales_bom_item/sales_bom_item.py
@@ -6,5 +6,5 @@
 
 from frappe.model.document import Document
 
-class SalesBomItem(Document):
+class SalesBOMItem(Document):
 	pass
\ No newline at end of file
diff --git a/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.py b/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.py
index 73ac394..be538a7 100644
--- a/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.py
+++ b/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.py
@@ -6,5 +6,5 @@
 
 from frappe.model.document import Document
 
-class TermsAndConditions(Document):
+class TermsandConditions(Document):
 	pass
\ 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 8dcdde1..b990063 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -80,7 +80,7 @@
 		items = self.get("delivery_note_details")
 		
 		for fn in (("Sales Order", "against_sales_order"), ("Sales Invoice", "against_sales_invoice")):
-			if filter(None, [(d[fn[1]] or None) for d in self.get(self.fname)]):
+			if filter(None, [getattr(d, fn[1], None) for d in items]):
 				super(DeliveryNote, self).validate_with_previous_doc(self.tname, {
 					fn[0]: {
 						"ref_dn_field": fn[1],
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 1cabce7..5a5bb03 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -68,7 +68,7 @@
 		
 		self.validate_value("material_request_type", "in", ["Purchase", "Transfer"])
 
-		pc_obj = frappe.get_doc(dt='Purchase Common')
+		pc_obj = frappe.get_doc('Purchase Common')
 		pc_obj.validate_for_items(self)
 		
 		# self.validate_qty_against_so()
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 59b9c98..1ac5826 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -216,7 +216,7 @@
 	def check_for_stopped_status(self, pc_obj):
 		check_list =[]
 		for d in self.get('purchase_receipt_details'):
-			if d.meta.has_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list:
+			if d.meta.get_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list:
 				check_list.append(d.prevdoc_docname)
 				pc_obj.check_for_stopped_status( d.prevdoc_doctype, d.prevdoc_docname)
 
