diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index e178d03..8860a78 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -17,17 +17,20 @@
 class PurchaseInvoice(BuyingController):
 	tname = 'Purchase Invoice Item'
 	fname = 'entries'
-	status_updater = [{
-		'source_dt': 'Purchase Invoice Item',
-		'target_dt': 'Purchase Order Item',
-		'join_field': 'po_detail',
-		'target_field': 'billed_amt',
-		'target_parent_dt': 'Purchase Order',
-		'target_parent_field': 'per_billed',
-		'target_ref_field': 'amount',
-		'source_field': 'amount',
-		'percent_join_field': 'purchase_order',
-	}]
+
+	def __init__(self, arg1, arg2=None):
+		super(PurchaseInvoice, self).__init__(arg1, arg2)
+		self.status_updater = [{
+			'source_dt': 'Purchase Invoice Item',
+			'target_dt': 'Purchase Order Item',
+			'join_field': 'po_detail',
+			'target_field': 'billed_amt',
+			'target_parent_dt': 'Purchase Order',
+			'target_parent_field': 'per_billed',
+			'target_ref_field': 'amount',
+			'source_field': 'amount',
+			'percent_join_field': 'purchase_order',
+		}]
 
 	def validate(self):
 		if not self.is_opening:
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 04a9959..fb36484 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -20,20 +20,23 @@
 class SalesInvoice(SellingController):
 	tname = 'Sales Invoice Item'
 	fname = 'entries'
-	status_updater = [{
-		'source_dt': 'Sales Invoice Item',
-		'target_field': 'billed_amt',
-		'target_ref_field': 'amount',
-		'target_dt': 'Sales Order Item',
-		'join_field': 'so_detail',
-		'target_parent_dt': 'Sales Order',
-		'target_parent_field': 'per_billed',
-		'source_field': 'amount',
-		'join_field': 'so_detail',
-		'percent_join_field': 'sales_order',
-		'status_field': 'billing_status',
-		'keyword': 'Billed'
-	}]
+
+	def __init__(self, arg1, arg2=None):
+		super(SalesInvoice, self).__init__(arg1, arg2)
+		self.status_updater = [{
+			'source_dt': 'Sales Invoice Item',
+			'target_field': 'billed_amt',
+			'target_ref_field': 'amount',
+			'target_dt': 'Sales Order Item',
+			'join_field': 'so_detail',
+			'target_parent_dt': 'Sales Order',
+			'target_parent_field': 'per_billed',
+			'source_field': 'amount',
+			'join_field': 'so_detail',
+			'percent_join_field': 'sales_order',
+			'status_field': 'billing_status',
+			'keyword': 'Billed'
+		}]
 
 	def validate(self):
 		super(SalesInvoice, self).validate()
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index ffbbb45..6009c18 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -11,13 +11,13 @@
 from erpnext.controllers.buying_controller import BuyingController
 
 class PurchaseCommon(BuyingController):
-	
+
 	def update_last_purchase_rate(self, obj, is_submit):
 		"""updates last_purchase_rate in item table for each item"""
-		
+
 		import frappe.utils
 		this_purchase_date = frappe.utils.getdate(obj.get('posting_date') or obj.get('transaction_date'))
-		
+
 		for d in obj.get(obj.fname):
 			# get last purchase details
 			last_purchase_details = get_last_purchase_details(d.item_code, obj.name)
@@ -33,19 +33,19 @@
 				if flt(d.conversion_factor):
 					last_purchase_rate = flt(d.base_rate) / flt(d.conversion_factor)
 				else:
-					frappe.throw(_("Row ") + cstr(d.idx) + ": " + 
+					frappe.throw(_("Row ") + cstr(d.idx) + ": " +
 						_("UOM Conversion Factor is mandatory"))
 
 			# update last purchsae rate
 			if last_purchase_rate:
 				frappe.db.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""",
 					(flt(last_purchase_rate), d.item_code))
-	
+
 	def get_last_purchase_rate(self, obj):
 		"""get last purchase rates for all items"""
 		doc_name = obj.name
 		conversion_rate = flt(obj.get('conversion_rate')) or 1.0
-		
+
 		for d in obj.get(obj.fname):
 			if d.item_code:
 				last_purchase_details = get_last_purchase_details(d.item_code, doc_name)
@@ -59,113 +59,113 @@
 				else:
 					# if no last purchase found, reset all values to 0
 					d.base_price_list_rate = d.base_rate = d.price_list_rate = d.rate = d.discount_percentage = 0
-					
+
 					item_last_purchase_rate = frappe.db.get_value("Item",
 						d.item_code, "last_purchase_rate")
 					if item_last_purchase_rate:
 						d.base_price_list_rate = d.base_rate = d.price_list_rate \
 							= d.rate = item_last_purchase_rate
-			
+
 	def validate_for_items(self, obj):
 		check_list, chk_dupl_itm=[],[]
 		for d in obj.get(obj.fname):
-			# validation for valid qty	
+			# validation for valid qty
 			if flt(d.qty) < 0 or (d.parenttype != 'Purchase Receipt' and not flt(d.qty)):
 				frappe.throw("Please enter valid qty for item %s" % cstr(d.item_code))
-			
+
 			# udpate with latest quantities
-			bin = frappe.db.sql("""select projected_qty from `tabBin` where 
+			bin = frappe.db.sql("""select projected_qty from `tabBin` where
 				item_code = %s and warehouse = %s""", (d.item_code, d.warehouse), as_dict=1)
-			
+
 			f_lst ={'projected_qty': bin and flt(bin[0]['projected_qty']) or 0, 'ordered_qty': 0, 'received_qty' : 0}
 			if d.doctype == 'Purchase Receipt Item':
 				f_lst.pop('received_qty')
 			for x in f_lst :
 				if d.meta.get_field(x):
 					d.set(x, f_lst[x])
-			
-			item = frappe.db.sql("""select is_stock_item, is_purchase_item, 
+
+			item = frappe.db.sql("""select is_stock_item, is_purchase_item,
 				is_sub_contracted_item, end_of_life from `tabItem` where name=%s""", d.item_code)
 			if not item:
 				frappe.throw("Item %s does not exist in Item Master." % cstr(d.item_code))
-			
+
 			from erpnext.stock.doctype.item.item import validate_end_of_life
 			validate_end_of_life(d.item_code, item[0][3])
-			
+
 			# validate stock item
 			if item[0][0]=='Yes' and d.qty and not d.warehouse:
 				frappe.throw("Warehouse is mandatory for %s, since it is a stock item" % d.item_code)
-			
+
 			# validate purchase item
 			if item[0][1] != 'Yes' and item[0][2] != 'Yes':
 				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 = [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 '', 
+			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 = [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)
-			
-			if ch and ch[0][0] == 'Yes':	
+
+			if ch and ch[0][0] == 'Yes':
 				# check for same items
 				if e in check_list:
-					frappe.throw("""Item %s has been entered more than once with same description, schedule date, warehouse and uom.\n 
+					frappe.throw("""Item %s has been entered more than once with same description, schedule date, warehouse and uom.\n
 						Please change any of the field value to enter the item twice""" % d.item_code)
 				else:
 					check_list.append(e)
-					
+
 			elif ch and ch[0][0] == 'No':
 				# check for same items
 				if f in chk_dupl_itm:
-					frappe.throw("""Item %s has been entered more than once with same description, schedule date.\n 
+					frappe.throw("""Item %s has been entered more than once with same description, schedule date.\n
 						Please change any of the field value to enter the item twice.""" % d.item_code)
 				else:
 					chk_dupl_itm.append(f)
-					
+
 	def get_qty(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, transaction, curr_parent_name):
 		# Get total Quantities of current doctype (eg. PR) except for qty of this transaction
 		#------------------------------
 		# please check as UOM changes from Material Request - Purchase Order ,so doing following else uom should be same .
 		# i.e. in PO uom is NOS then in PR uom should be NOS
 		# but if in Material Request uom KG it can change in PO
-		
+
 		get_qty = (transaction == 'Material Request - Purchase Order') and 'qty * conversion_factor' or 'qty'
-		qty = frappe.db.sql("""select sum(%s) from `tab%s` where %s = %s and 
-			docstatus = 1 and parent != %s""" % (get_qty, curr_doctype, ref_tab_fname, '%s', '%s'), 
+		qty = frappe.db.sql("""select sum(%s) from `tab%s` where %s = %s and
+			docstatus = 1 and parent != %s""" % (get_qty, curr_doctype, ref_tab_fname, '%s', '%s'),
 			(ref_tab_dn, curr_parent_name))
-		qty = qty and flt(qty[0][0]) or 0 
-		
+		qty = qty and flt(qty[0][0]) or 0
+
 		# get total qty of ref doctype
 		#--------------------
-		max_qty = frappe.db.sql("""select qty from `tab%s` where name = %s 
+		max_qty = frappe.db.sql("""select qty from `tab%s` where name = %s
 			and docstatus = 1""" % (ref_doc_tname, '%s'), ref_tab_dn)
 		max_qty = max_qty and flt(max_qty[0][0]) or 0
-		
+
 		return cstr(qty)+'~~~'+cstr(max_qty)
 
 	def check_for_stopped_status(self, doctype, docname):
-		stopped = frappe.db.sql("""select name from `tab%s` where name = %s and 
+		stopped = frappe.db.sql("""select name from `tab%s` where name = %s and
 			status = 'Stopped'""" % (doctype, '%s'), docname)
 		if stopped:
-			frappe.throw("One cannot do any transaction against %s : %s, it's status is 'Stopped'" % 
-				(doctype, docname))
-	
+			frappe.throw("One cannot do any transaction against %s : %s, it's status is 'Stopped'" %
+				(doctype, docname), exc=frappe.InvalidStatusError)
+
 	def check_docstatus(self, check, doctype, docname, detail_doctype = ''):
 		if check == 'Next':
-			submitted = frappe.db.sql("""select t1.name from `tab%s` t1,`tab%s` t2 
-				where t1.name = t2.parent and t2.prevdoc_docname = %s and t1.docstatus = 1""" 
+			submitted = frappe.db.sql("""select t1.name from `tab%s` t1,`tab%s` t2
+				where t1.name = t2.parent and t2.prevdoc_docname = %s and t1.docstatus = 1"""
 				% (doctype, detail_doctype, '%s'), docname)
 			if submitted:
-				frappe.throw(cstr(doctype) + ": " + cstr(submitted[0][0]) 
+				frappe.throw(cstr(doctype) + ": " + cstr(submitted[0][0])
 					+ _("has already been submitted."))
 
 		if check == 'Previous':
-			submitted = frappe.db.sql("""select name from `tab%s` 
+			submitted = frappe.db.sql("""select name from `tab%s`
 				where docstatus = 1 and name = %s""" % (doctype, '%s'), docname)
 			if not submitted:
 				frappe.throw(cstr(doctype) + ": " + cstr(submitted[0][0]) + _("not submitted"))
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 720a1d5..d39f6b6 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -3,27 +3,27 @@
 
 from __future__ import unicode_literals
 import frappe
-
 from frappe.utils import cstr, flt
-
 from frappe import msgprint
-
-
 from erpnext.controllers.buying_controller import BuyingController
+
 class PurchaseOrder(BuyingController):
 	tname = 'Purchase Order Item'
 	fname = 'po_details'
-	status_updater = [{
-		'source_dt': 'Purchase Order Item',
-		'target_dt': 'Material Request Item',
-		'join_field': 'prevdoc_detail_docname',
-		'target_field': 'ordered_qty',
-		'target_parent_dt': 'Material Request',
-		'target_parent_field': 'per_ordered',
-		'target_ref_field': 'qty',
-		'source_field': 'qty',
-		'percent_join_field': 'prevdoc_docname',
-	}]
+
+	def __init__(self, arg1, arg2=None):
+		super(PurchaseOrder, self).__init__(arg1, arg2)
+		self.status_updater = [{
+			'source_dt': 'Purchase Order Item',
+			'target_dt': 'Material Request Item',
+			'join_field': 'prevdoc_detail_docname',
+			'target_field': 'ordered_qty',
+			'target_parent_dt': 'Material Request',
+			'target_parent_field': 'per_ordered',
+			'target_ref_field': 'qty',
+			'source_field': 'qty',
+			'percent_join_field': 'prevdoc_docname',
+		}]
 
 	def validate(self):
 		super(PurchaseOrder, self).validate()
@@ -156,7 +156,7 @@
 		frappe.db.set(self,'status','Submitted')
 
 	def on_cancel(self):
-		pc_obj = frappe.get_doc(dt = 'Purchase Common')
+		pc_obj = frappe.get_doc('Purchase Common')
 		self.check_for_stopped_status(pc_obj)
 
 		# Check if Purchase Receipt has been submitted against current Purchase Order
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 7228100..0fceebf 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -64,11 +64,11 @@
 	def update_prevdoc_status(self):
 		self.update_qty()
 		self.validate_qty()
-	
+
 	def set_status(self, update=False):
 		if self.get("__islocal"):
 			return
-			
+
 		if self.doctype in status_map:
 			sl = status_map[self.doctype][:]
 			sl.reverse()
@@ -83,15 +83,15 @@
 				elif getattr(self, s[1])():
 					self.status = s[0]
 					break
-		
+
 			if update:
 				frappe.db.set_value(self.doctype, self.name, "status", self.status)
-	
+
 	def on_communication(self):
 		self.communication_set = True
 		self.set_status(update=True)
 		del self.communication_set
-	
+
 	def communication_received(self):
 		if getattr(self, "communication_set", False):
 			last_comm = self.get("communications")
@@ -103,14 +103,14 @@
 			last_comm = self.get("communications")
 			if last_comm:
 				return last_comm[-1].sent_or_received == "Sent"
-			
+
 	def validate_qty(self):
 		"""
 			Validates qty at row level
 		"""
 		self.tolerance = {}
 		self.global_tolerance = None
-		
+
 		for args in self.status_updater:
 			# get unique transactions to update
 			for d in self.get_all_children():
@@ -118,10 +118,10 @@
 					args['name'] = d.get(args['join_field'])
 
 					# get all qty where qty > target_field
-					item = frappe.db.sql("""select item_code, `{target_ref_field}`, 
-						`{target_field}`, parenttype, parent from `tab{target_dt}` 
-						where `{target_ref_field}` < `{target_field}` 
-						and name=%s and docstatus=1""".format(**args), 
+					item = frappe.db.sql("""select item_code, `{target_ref_field}`,
+						`{target_field}`, parenttype, parent from `tab{target_dt}`
+						where `{target_ref_field}` < `{target_field}`
+						and name=%s and docstatus=1""".format(**args),
 						args['name'], as_dict=1)
 					if item:
 						item = item[0]
@@ -142,38 +142,37 @@
 									is <b>""" % item + cstr(item[args['target_ref_field']]) +
 									 """</b>.<br>You must reduce the %(target_ref_field)s by \
 									%(reduce_by)s""" % item, raise_exception=1)
-					
+
 						else:
 							self.check_overflow_with_tolerance(item, args)
-						
+
 	def check_overflow_with_tolerance(self, item, args):
 		"""
 			Checks if there is overflow condering a relaxation tolerance
 		"""
-	
 		# check if overflow is within tolerance
-		tolerance, self.tolerance, self.global_tolerance = get_tolerance_for(item['item_code'], 
+		tolerance, self.tolerance, self.global_tolerance = get_tolerance_for(item['item_code'],
 			self.tolerance, self.global_tolerance)
-			
-		overflow_percent = ((item[args['target_field']] - item[args['target_ref_field']]) / 
+
+		overflow_percent = ((item[args['target_field']] - item[args['target_ref_field']]) /
 		 	item[args['target_ref_field']]) * 100
-	
+
 		if overflow_percent - tolerance > 0.01:
 			item['max_allowed'] = flt(item[args['target_ref_field']] * (100+tolerance)/100)
 			item['reduce_by'] = item[args['target_field']] - item['max_allowed']
-		
+
 			msgprint("""
 				Row #%(idx)s: Max %(target_ref_field)s allowed for <b>Item %(item_code)s</b> \
-				against <b>%(parenttype)s %(parent)s</b> is <b>%(max_allowed)s</b>. 
-				
+				against <b>%(parenttype)s %(parent)s</b> is <b>%(max_allowed)s</b>.
+
 				If you want to increase your overflow tolerance, please increase tolerance %% in \
-				Global Defaults or Item master. 
-				
+				Global Defaults or Item master.
+
 				Or, you must reduce the %(target_ref_field)s by %(reduce_by)s
-				
-				Also, please check if the order item has already been billed in the Sales Order""" % 
+
+				Also, please check if the order item has already been billed in the Sales Order""" %
 				item, raise_exception=1)
-	
+
 
 	def update_qty(self, change_modified=True):
 		"""
@@ -185,103 +184,103 @@
 				args['cond'] = ' or parent="%s"' % self.name.replace('"', '\"')
 			else:
 				args['cond'] = ' and parent!="%s"' % self.name.replace('"', '\"')
-			
+
 			args['modified_cond'] = ''
 			if change_modified:
 				args['modified_cond'] = ', modified = now()'
-		
+
 			# update quantities in child table
 			for d in self.get_all_children():
 				if d.doctype == args['source_dt']:
 					# updates qty in the child table
 					args['detail_id'] = d.get(args['join_field'])
-					
+
 					args['second_source_condition'] = ""
 					if args.get('second_source_dt') and args.get('second_source_field') \
 							and args.get('second_join_field'):
-						args['second_source_condition'] = """ + (select sum(%(second_source_field)s) 
-							from `tab%(second_source_dt)s` 
-							where `%(second_join_field)s`="%(detail_id)s" 
+						args['second_source_condition'] = """ + (select sum(%(second_source_field)s)
+							from `tab%(second_source_dt)s`
+							where `%(second_join_field)s`="%(detail_id)s"
 							and (docstatus=1))""" % args
-			
+
 					if args['detail_id']:
-						frappe.db.sql("""update `tab%(target_dt)s` 
-							set %(target_field)s = (select sum(%(source_field)s) 
-								from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" 
+						frappe.db.sql("""update `tab%(target_dt)s`
+							set %(target_field)s = (select sum(%(source_field)s)
+								from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s"
 								and (docstatus=1 %(cond)s)) %(second_source_condition)s
 							where name='%(detail_id)s'""" % args)
-		
+
 			# get unique transactions to update
 			for name in set([d.get(args['percent_join_field']) for d in self.get_all_children(args['source_dt'])]):
 				if name:
 					args['name'] = name
-				
+
 					# update percent complete in the parent table
-					frappe.db.sql("""update `tab%(target_parent_dt)s` 
-						set %(target_parent_field)s = (select sum(if(%(target_ref_field)s > 
-							ifnull(%(target_field)s, 0), %(target_field)s, 
-							%(target_ref_field)s))/sum(%(target_ref_field)s)*100 
+					frappe.db.sql("""update `tab%(target_parent_dt)s`
+						set %(target_parent_field)s = (select sum(if(%(target_ref_field)s >
+							ifnull(%(target_field)s, 0), %(target_field)s,
+							%(target_ref_field)s))/sum(%(target_ref_field)s)*100
 							from `tab%(target_dt)s` where parent="%(name)s") %(modified_cond)s
 						where name='%(name)s'""" % args)
 
 					# update field
 					if args.get('status_field'):
-						frappe.db.sql("""update `tab%(target_parent_dt)s` 
-							set %(status_field)s = if(ifnull(%(target_parent_field)s,0)<0.001, 
-								'Not %(keyword)s', if(%(target_parent_field)s>=99.99, 
+						frappe.db.sql("""update `tab%(target_parent_dt)s`
+							set %(status_field)s = if(ifnull(%(target_parent_field)s,0)<0.001,
+								'Not %(keyword)s', if(%(target_parent_field)s>=99.99,
 								'Fully %(keyword)s', 'Partly %(keyword)s'))
 							where name='%(name)s'""" % args)
-							
-							
+
+
 	def update_billing_status_for_zero_amount_refdoc(self, ref_dt):
 		ref_fieldname = ref_dt.lower().replace(" ", "_")
 		zero_amount_refdoc = []
-		all_zero_amount_refdoc = frappe.db.sql_list("""select name from `tab%s` 
+		all_zero_amount_refdoc = frappe.db.sql_list("""select name from `tab%s`
 			where docstatus=1 and net_total = 0""" % ref_dt)
-	
+
 		for item in self.get("entries"):
 			if item.get(ref_fieldname) \
 				and item.get(ref_fieldname) in all_zero_amount_refdoc \
 				and item.get(ref_fieldname) not in zero_amount_refdoc:
 					zero_amount_refdoc.append(item.get(ref_fieldname))
-		
+
 		if zero_amount_refdoc:
 			self.update_biling_status(zero_amount_refdoc, ref_dt, ref_fieldname)
-	
+
 	def update_biling_status(self, zero_amount_refdoc, ref_dt, ref_fieldname):
 		for ref_dn in zero_amount_refdoc:
-			ref_doc_qty = flt(frappe.db.sql("""select sum(ifnull(qty, 0)) from `tab%s Item` 
+			ref_doc_qty = flt(frappe.db.sql("""select sum(ifnull(qty, 0)) from `tab%s Item`
 				where parent=%s""" % (ref_dt, '%s'), (ref_dn))[0][0])
-			
-			billed_qty = flt(frappe.db.sql("""select sum(ifnull(qty, 0)) 
-				from `tab%s Item` where %s=%s and docstatus=1""" % 
+
+			billed_qty = flt(frappe.db.sql("""select sum(ifnull(qty, 0))
+				from `tab%s Item` where %s=%s and docstatus=1""" %
 				(self.doctype, ref_fieldname, '%s'), (ref_dn))[0][0])
-			
+
 			per_billed = ((ref_doc_qty if billed_qty > ref_doc_qty else billed_qty)\
 				/ ref_doc_qty)*100
 			frappe.db.set_value(ref_dt, ref_dn, "per_billed", per_billed)
-			
+
 			if frappe.get_meta(ref_dt).get_field("billing_status"):
 				if per_billed < 0.001: billing_status = "Not Billed"
 				elif per_billed >= 99.99: billing_status = "Fully Billed"
 				else: billing_status = "Partly Billed"
-			
+
 				frappe.db.set_value(ref_dt, ref_dn, "billing_status", billing_status)
-							
+
 def get_tolerance_for(item_code, item_tolerance={}, global_tolerance=None):
 	"""
 		Returns the tolerance for the item, if not set, returns global tolerance
 	"""
 	if item_tolerance.get(item_code):
 		return item_tolerance[item_code], item_tolerance, global_tolerance
-	
+
 	tolerance = flt(frappe.db.get_value('Item',item_code,'tolerance') or 0)
 
 	if not tolerance:
 		if global_tolerance == None:
-			global_tolerance = flt(frappe.db.get_value('Global Defaults', None, 
+			global_tolerance = flt(frappe.db.get_value('Global Defaults', None,
 				'tolerance'))
 		tolerance = global_tolerance
-	
+
 	item_tolerance[item_code] = tolerance
-	return tolerance, item_tolerance, global_tolerance
\ No newline at end of file
+	return tolerance, item_tolerance, global_tolerance
diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py
index ea8997a..15c9819 100644
--- a/erpnext/home/__init__.py
+++ b/erpnext/home/__init__.py
@@ -1,16 +1,16 @@
 # ERPNext - web based ERP (http://erpnext.com)
 # Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
+#
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -22,35 +22,35 @@
 	# Project
 	'Project': ['[%(status)s]', '#000080'],
 	'Task': ['[%(status)s] %(subject)s', '#000080'],
-	
+
 	# Sales
 	'Lead': ['%(lead_name)s', '#000080'],
 	'Quotation': ['[%(status)s] To %(customer_name)s worth %(currency)s %(grand_total_export)s', '#4169E1'],
 	'Sales Order': ['[%(status)s] To %(customer_name)s worth %(currency)s %(grand_total_export)s', '#4169E1'],
-	
+
 	# Purchase
 	'Supplier': ['%(supplier_name)s, %(supplier_type)s', '#6495ED'],
 	'Purchase Order': ['[%(status)s] %(name)s To %(supplier_name)s for %(currency)s  %(grand_total_import)s', '#4169E1'],
-	
+
 	# Stock
 	'Delivery Note': ['[%(status)s] To %(customer_name)s', '#4169E1'],
 	'Purchase Receipt': ['[%(status)s] From %(supplier)s', '#4169E1'],
-	
+
 	# Accounts
 	'Journal Voucher': ['[%(voucher_type)s] %(name)s', '#4169E1'],
 	'Purchase Invoice': ['To %(supplier_name)s for %(currency)s %(grand_total_import)s', '#4169E1'],
 	'Sales Invoice': ['To %(customer_name)s for %(currency)s %(grand_total_export)s', '#4169E1'],
-	
+
 	# HR
 	'Expense Claim': ['[%(approval_status)s] %(name)s by %(employee_name)s', '#4169E1'],
 	'Salary Slip': ['%(employee_name)s for %(month)s %(fiscal_year)s', '#4169E1'],
 	'Leave Transaction': ['%(leave_type)s for %(employee)s', '#4169E1'],
-	
+
 	# Support
 	'Customer Issue': ['[%(status)s] %(description)s by %(customer_name)s', '#000080'],
 	'Maintenance Visit': ['To %(customer_name)s', '#4169E1'],
 	'Support Ticket': ["[%(status)s] %(subject)s", '#000080'],
-	
+
 	# Website
 	'Web Page': ['%(title)s', '#000080'],
 	'Blog': ['%(title)s', '#000080']
@@ -63,12 +63,12 @@
 
 	if feedtype in ('Login', 'Comment', 'Assignment'):
 		# delete old login, comment feed
-		frappe.db.sql("""delete from tabFeed where 
+		frappe.db.sql("""delete from tabFeed where
 			datediff(curdate(), creation) > 7 and doc_type in ('Comment', 'Login', 'Assignment')""")
 	else:
 		# one feed per item
 		frappe.db.sql("""delete from tabFeed
-			where doc_type=%s and doc_name=%s 
+			where doc_type=%s and doc_name=%s
 			and ifnull(feed_type,'') != 'Comment'""", (doctype, name))
 
 	f = frappe.new_doc('Feed')
@@ -79,9 +79,9 @@
 	f.subject = subject
 	f.color = color
 	f.full_name = get_fullname(owner)
-	f.save()
+	f.save(ignore_permissions=True)
 
-def update_feed(doc, method=None):   
+def update_feed(doc, method=None):
 	"adds a new feed"
 	if method in ['on_update', 'on_submit']:
 		subject, color = feed_dict.get(doc.doctype, [None, None])
diff --git a/erpnext/selling/doctype/installation_note/installation_note.py b/erpnext/selling/doctype/installation_note/installation_note.py
index b69e319..1fa91cc 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.py
+++ b/erpnext/selling/doctype/installation_note/installation_note.py
@@ -7,70 +7,73 @@
 from frappe.utils import cstr, getdate
 
 from frappe import msgprint
-from erpnext.stock.utils import get_valid_serial_nos	
+from erpnext.stock.utils import get_valid_serial_nos
 
 from erpnext.utilities.transaction_base import TransactionBase
 
 class InstallationNote(TransactionBase):
 	tname = 'Installation Note Item'
 	fname = 'installed_item_details'
-	status_updater = [{
-		'source_dt': 'Installation Note Item',
-		'target_dt': 'Delivery Note Item',
-		'target_field': 'installed_qty',
-		'target_ref_field': 'qty',
-		'join_field': 'prevdoc_detail_docname',
-		'target_parent_dt': 'Delivery Note',
-		'target_parent_field': 'per_installed',
-		'source_field': 'qty',
-		'percent_join_field': 'prevdoc_docname',
-		'status_field': 'installation_status',
-		'keyword': 'Installed'
-	}]
+
+	def __init__(self, arg1, arg2=None):
+		super(InstallationNote, self).__init__(arg1, arg2)
+		self.status_updater = [{
+			'source_dt': 'Installation Note Item',
+			'target_dt': 'Delivery Note Item',
+			'target_field': 'installed_qty',
+			'target_ref_field': 'qty',
+			'join_field': 'prevdoc_detail_docname',
+			'target_parent_dt': 'Delivery Note',
+			'target_parent_field': 'per_installed',
+			'source_field': 'qty',
+			'percent_join_field': 'prevdoc_docname',
+			'status_field': 'installation_status',
+			'keyword': 'Installed'
+		}]
 
 	def validate(self):
 		self.validate_fiscal_year()
 		self.validate_installation_date()
 		self.check_item_table()
-		
+
 		from erpnext.controllers.selling_controller import check_active_sales_items
 		check_active_sales_items(self)
 
 	def validate_fiscal_year(self):
 		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.inst_date, self.fiscal_year, "Installation Date")
-	
+
 	def is_serial_no_added(self, item_code, serial_no):
 		ar_required = frappe.db.get_value("Item", item_code, "has_serial_no")
 		if ar_required == 'Yes' and not serial_no:
 			msgprint("Serial No is mandatory for item: " + item_code, raise_exception=1)
 		elif ar_required != 'Yes' and cstr(serial_no).strip():
-			msgprint("If serial no required, please select 'Yes' in 'Has Serial No' in Item :" + 
+			msgprint("If serial no required, please select 'Yes' in 'Has Serial No' in Item :" +
 				item_code, raise_exception=1)
-	
+
 	def is_serial_no_exist(self, item_code, serial_no):
 		for x in serial_no:
 			if not frappe.db.exists("Serial No", x):
 				msgprint("Serial No " + x + " does not exist in the system", raise_exception=1)
-	
+
 	def is_serial_no_installed(self,cur_s_no,item_code):
 		for x in cur_s_no:
 			status = frappe.db.sql("select status from `tabSerial No` where name = %s", x)
 			status = status and status[0][0] or ''
-			
+
 			if status == 'Installed':
-				msgprint("Item "+item_code+" with serial no. " + x + " already installed", 
+				msgprint("Item "+item_code+" with serial no. " + x + " already installed",
 					raise_exception=1)
-	
+
 	def get_prevdoc_serial_no(self, prevdoc_detail_docname):
-		serial_nos = frappe.db.get_value("Delivery Note Item", 
+		serial_nos = frappe.db.get_value("Delivery Note Item",
 			prevdoc_detail_docname, "serial_no")
 		return get_valid_serial_nos(serial_nos)
-		
+
 	def is_serial_no_match(self, cur_s_no, prevdoc_s_no, prevdoc_docname):
 		for sr in cur_s_no:
 			if sr not in prevdoc_s_no:
-				msgprint("Serial No. " + sr + " is not matching with the Delivery Note " + 
+				msgprint("Serial No. " + sr + " is not matching with the Delivery Note " +
 					prevdoc_docname, raise_exception = 1)
 
 	def validate_serial_no(self):
@@ -80,33 +83,33 @@
 			if d.serial_no:
 				sr_list = get_valid_serial_nos(d.serial_no, d.qty, d.item_code)
 				self.is_serial_no_exist(d.item_code, sr_list)
-				
+
 				prevdoc_s_no = self.get_prevdoc_serial_no(d.prevdoc_detail_docname)
 				if prevdoc_s_no:
 					self.is_serial_no_match(sr_list, prevdoc_s_no, d.prevdoc_docname)
-				
+
 				self.is_serial_no_installed(sr_list, d.item_code)
 
 	def validate_installation_date(self):
 		for d in self.get('installed_item_details'):
 			if d.prevdoc_docname:
-				d_date = frappe.db.get_value("Delivery Note", d.prevdoc_docname, "posting_date")				
+				d_date = frappe.db.get_value("Delivery Note", d.prevdoc_docname, "posting_date")
 				if d_date > getdate(self.inst_date):
-					msgprint("Installation Date can not be before Delivery Date " + cstr(d_date) + 
+					msgprint("Installation Date can not be before Delivery Date " + cstr(d_date) +
 						" for item "+d.item_code, raise_exception=1)
-	
+
 	def check_item_table(self):
 		if not(self.get('installed_item_details')):
 			msgprint("Please fetch items from Delivery Note selected", raise_exception=1)
-	
+
 	def on_update(self):
 		frappe.db.set(self, 'status', 'Draft')
-	
+
 	def on_submit(self):
 		self.validate_serial_no()
 		self.update_prevdoc_status()
 		frappe.db.set(self, 'status', 'Submitted')
-	
+
 	def on_cancel(self):
 		for d in self.get('installed_item_details'):
 			if d.serial_no:
diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py
index d393a3d..97d4110 100644
--- a/erpnext/selling/doctype/quotation/test_quotation.py
+++ b/erpnext/selling/doctype/quotation/test_quotation.py
@@ -21,9 +21,9 @@
 		sales_order = make_sales_order(quotation.name)
 
 		self.assertEquals(sales_order.doctype, "Sales Order")
-		self.assertEquals(len(sales_order.get("sales_order_details")), 2)
-		self.assertEquals(sales_order.get("sales_order_details")[0]["doctype"], "Sales Order Item")
-		self.assertEquals(sales_order.get("sales_order_details")[0]["prevdoc_docname"], quotation.name)
+		self.assertEquals(len(sales_order.get("sales_order_details")), 1)
+		self.assertEquals(sales_order.get("sales_order_details")[0].doctype, "Sales Order Item")
+		self.assertEquals(sales_order.get("sales_order_details")[0].prevdoc_docname, quotation.name)
 		self.assertEquals(sales_order.customer, "_Test Customer")
 
 		sales_order.delivery_date = "2014-01-01"
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index f4b6833..b302c7c 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -281,10 +281,10 @@
 
 @frappe.whitelist()
 def make_delivery_note(source_name, target_doc=None):
-	def update_item(obj, target, source_parent):
-		target.base_amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.base_rate)
-		target.amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.rate)
-		target.qty = flt(obj.qty) - flt(obj.delivered_qty)
+	def update_item(source, target, source_parent):
+		target.base_amount = (flt(source.qty) - flt(source.delivered_qty)) * flt(source.base_rate)
+		target.amount = (flt(source.qty) - flt(source.delivered_qty)) * flt(source.rate)
+		target.qty = flt(source.qty) - flt(source.delivered_qty)
 
 	doclist = get_mapped_doc("Sales Order", source_name, {
 		"Sales Order": {
@@ -326,10 +326,10 @@
 		doc.is_pos = 0
 		doc.run_method("onload_post_render")
 
-	def update_item(obj, target, source_parent):
-		target.amount = flt(obj.amount) - flt(obj.billed_amt)
+	def update_item(source, target, source_parent):
+		target.amount = flt(source.amount) - flt(source.billed_amt)
 		target.base_amount = target.amount * flt(source_parent.conversion_rate)
-		target.qty = obj.rate and target.amount / flt(obj.rate) or obj.qty
+		target.qty = source.rate and target.amount / flt(source.rate) or obj.qty
 
 	doclist = get_mapped_doc("Sales Order", source_name, {
 		"Sales Order": {
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index b41027b..52bde1e 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -106,7 +106,7 @@
 
 	def test_reserved_qty_for_so(self):
 		# reset bin
-		so_item = test_records[0]["sales_order_details"][0]
+		so_item = test_records[0]["sales_order_details"][0].copy()
 		self.delete_bin(so_item["item_code"], so_item["warehouse"])
 
 		# submit
@@ -120,7 +120,7 @@
 
 	def test_reserved_qty_for_partial_delivery(self):
 		# reset bin
-		so_item = test_records[0]["sales_order_details"][0]
+		so_item = test_records[0]["sales_order_details"][0].copy()
 		self.delete_bin(so_item["item_code"], so_item["warehouse"])
 
 		# submit so
@@ -150,7 +150,7 @@
 
 	def test_reserved_qty_for_over_delivery(self):
 		# reset bin
-		so_item = test_records[0]["sales_order_details"][0]
+		so_item = test_records[0]["sales_order_details"][0].copy()
 		self.delete_bin(so_item["item_code"], so_item["warehouse"])
 
 		# submit so
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index e744ae2..4b0dc11 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -5,22 +5,33 @@
 import frappe
 
 from frappe.utils.nestedset import NestedSet
+from frappe.website.website_generator import WebsiteGenerator
 
-class ItemGroup(NestedSet):
+class ItemGroup(NestedSet, WebsiteGenerator):
 	nsm_parent_field = 'parent_item_group'
-	
+
+	def autoname(self):
+		self.name = self.item_group_name
+
 	def validate(self):
 		if not self.parent_website_route:
-			self.parent_website_route = frappe.get_website_route("Item Group", 
+			self.parent_website_route = frappe.get_website_route("Item Group",
 				self.parent_item_group)
-		
+
 	def on_update(self):
 		NestedSet.on_update(self)
-		
+		WebsiteGenerator.on_update(self)
 		self.validate_name_with_item()
-		
 		self.validate_one_root()
-		
+
+	def after_rename(self, olddn, newdn, merge=False):
+		NestedSet.after_rename(self, olddn, newdn, merge)
+		WebsiteGenerator.after_rename(self, olddn, newdn, merge)
+
+	def on_trash(self):
+		NestedSet.on_trash(self)
+		WebsiteGenerator.on_trash(self)
+
 	def validate_name_with_item(self):
 		if frappe.db.exists("Item", self.name):
 			frappe.msgprint("An item exists with same name (%s), please change the \
diff --git a/erpnext/setup/doctype/item_group/test_item_group.py b/erpnext/setup/doctype/item_group/test_item_group.py
index 6f1d4db..3eac0aa 100644
--- a/erpnext/setup/doctype/item_group/test_item_group.py
+++ b/erpnext/setup/doctype/item_group/test_item_group.py
@@ -13,15 +13,14 @@
 	def test_basic_tree(self, records=None):
 		min_lft = 1
 		max_rgt = frappe.db.sql("select max(rgt) from `tabItem Group`")[0][0]
-		
+
 		if not records:
 			records = test_records[2:]
-		
+
 		for item_group in records:
-			item_group = item_group[0]
-			lft, rgt, parent_item_group = frappe.db.get_value("Item Group", item_group["item_group_name"], 
+			lft, rgt, parent_item_group = frappe.db.get_value("Item Group", item_group["item_group_name"],
 				["lft", "rgt", "parent_item_group"])
-			
+
 			if parent_item_group:
 				parent_lft, parent_rgt = frappe.db.get_value("Item Group", parent_item_group,
 					["lft", "rgt"])
@@ -29,7 +28,7 @@
 				# root
 				parent_lft = min_lft - 1
 				parent_rgt = max_rgt + 1
-			
+
 			self.assertTrue(lft)
 			self.assertTrue(rgt)
 			self.assertTrue(lft < rgt)
@@ -38,69 +37,69 @@
 			self.assertTrue(rgt < parent_rgt)
 			self.assertTrue(lft >= min_lft)
 			self.assertTrue(rgt <= max_rgt)
-			
+
 			no_of_children = self.get_no_of_children(item_group["item_group_name"])
 			self.assertTrue(rgt == (lft + 1 + (2 * no_of_children)))
-			
+
 			no_of_children = self.get_no_of_children(parent_item_group)
 			self.assertTrue(parent_rgt == (parent_lft + 1 + (2 * no_of_children)))
-			
+
 	def get_no_of_children(self, item_group):
 		def get_no_of_children(item_groups, no_of_children):
 			children = []
 			for ig in item_groups:
 				children += frappe.db.sql_list("""select name from `tabItem Group`
 				where ifnull(parent_item_group, '')=%s""", ig or '')
-			
+
 			if len(children):
 				return get_no_of_children(children, no_of_children + len(children))
 			else:
 				return no_of_children
-			
+
 		return get_no_of_children([item_group], 0)
-			
+
 	def test_recursion(self):
 		group_b = frappe.get_doc("Item Group", "_Test Item Group B")
 		group_b.parent_item_group = "_Test Item Group B - 3"
 		self.assertRaises(NestedSetRecursionError, group_b.save)
-		
+
 		# cleanup
 		group_b.parent_item_group = "All Item Groups"
 		group_b.save()
-	
+
 	def test_rebuild_tree(self):
 		rebuild_tree("Item Group", "parent_item_group")
 		self.test_basic_tree()
-		
+
 	def move_it_back(self):
 		group_b = frappe.get_doc("Item Group", "_Test Item Group B")
 		group_b.parent_item_group = "All Item Groups"
 		group_b.save()
 		self.test_basic_tree()
-		
+
 	def test_move_group_into_another(self):
 		# before move
 		old_lft, old_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
-		
+
 		# put B under C
 		group_b = frappe.get_doc("Item Group", "_Test Item Group B")
 		lft, rgt = group_b.lft, group_b.rgt
-		
+
 		group_b.parent_item_group = "_Test Item Group C"
 		group_b.save()
 		self.test_basic_tree()
-		
+
 		# after move
 		new_lft, new_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
-		
+
 		# lft should reduce
 		self.assertEquals(old_lft - new_lft, rgt - lft + 1)
-		
+
 		# adjacent siblings, hence rgt diff will be 0
 		self.assertEquals(new_rgt - old_rgt, 0)
-		
+
 		self.move_it_back()
-		
+
 	def test_move_group_into_root(self):
 		group_b = frappe.get_doc("Item Group", "_Test Item Group B")
 		group_b.parent_item_group = ""
@@ -108,101 +107,101 @@
 
 		# trick! works because it hasn't been rolled back :D
 		self.test_basic_tree()
-		
+
 		self.move_it_back()
-		
+
 	def print_tree(self):
 		import json
 		print json.dumps(frappe.db.sql("select name, lft, rgt from `tabItem Group` order by lft"), indent=1)
-		
+
 	def test_move_leaf_into_another_group(self):
 		# before move
 		old_lft, old_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
-		
+
 		group_b_3 = frappe.get_doc("Item Group", "_Test Item Group B - 3")
 		lft, rgt = group_b_3.lft, group_b_3.rgt
-		
+
 		# child of right sibling is moved into it
 		group_b_3.parent_item_group = "_Test Item Group C"
 		group_b_3.save()
 		self.test_basic_tree()
-		
+
 		new_lft, new_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
-		
+
 		# lft should remain the same
 		self.assertEquals(old_lft - new_lft, 0)
-		
+
 		# rgt should increase
 		self.assertEquals(new_rgt - old_rgt, rgt - lft + 1)
-		
+
 		# move it back
 		group_b_3 = frappe.get_doc("Item Group", "_Test Item Group B - 3")
 		group_b_3.parent_item_group = "_Test Item Group B"
 		group_b_3.save()
 		self.test_basic_tree()
-		
+
 	def test_delete_leaf(self):
 		# for checking later
 		parent_item_group = frappe.db.get_value("Item Group", "_Test Item Group B - 3", "parent_item_group")
 		rgt = frappe.db.get_value("Item Group", parent_item_group, "rgt")
-		
+
 		ancestors = get_ancestors_of("Item Group", "_Test Item Group B - 3")
 		ancestors = frappe.db.sql("""select name, rgt from `tabItem Group`
 			where name in ({})""".format(", ".join(["%s"]*len(ancestors))), tuple(ancestors), as_dict=True)
-		
+
 		frappe.delete_doc("Item Group", "_Test Item Group B - 3")
 		records_to_test = test_records[2:]
 		del records_to_test[4]
 		self.test_basic_tree(records=records_to_test)
-		
+
 		# rgt of each ancestor would reduce by 2
 		for item_group in ancestors:
 			new_lft, new_rgt = frappe.db.get_value("Item Group", item_group.name, ["lft", "rgt"])
 			self.assertEquals(new_rgt, item_group.rgt - 2)
-		
+
 		# insert it back
 		frappe.copy_doc(test_records[6]).insert()
-		
+
 		self.test_basic_tree()
-		
+
 	def test_delete_group(self):
 		# cannot delete group with child, but can delete leaf
 		self.assertRaises(NestedSetChildExistsError, frappe.delete_doc, "Item Group", "_Test Item Group B")
-		
+
 	def test_merge_groups(self):
 		frappe.rename_doc("Item Group", "_Test Item Group B", "_Test Item Group C", merge=True)
 		records_to_test = test_records[2:]
 		del records_to_test[1]
 		self.test_basic_tree(records=records_to_test)
-		
+
 		# insert Group B back
 		frappe.copy_doc(test_records[3]).insert()
 		self.test_basic_tree()
-		
+
 		# move its children back
 		for name in frappe.db.sql_list("""select name from `tabItem Group`
 			where parent_item_group='_Test Item Group C'"""):
-			
+
 			doc = frappe.get_doc("Item Group", name)
 			doc.parent_item_group = "_Test Item Group B"
 			doc.save()
 
 		self.test_basic_tree()
-		
+
 	def test_merge_leaves(self):
 		frappe.rename_doc("Item Group", "_Test Item Group B - 2", "_Test Item Group B - 1", merge=True)
 		records_to_test = test_records[2:]
 		del records_to_test[3]
 		self.test_basic_tree(records=records_to_test)
-		
+
 		# insert Group B - 2back
 		frappe.copy_doc(test_records[5]).insert()
 		self.test_basic_tree()
-		
+
 	def test_merge_leaf_into_group(self):
-		self.assertRaises(NestedSetInvalidMergeError, frappe.rename_doc, "Item Group", "_Test Item Group B - 3", 
+		self.assertRaises(NestedSetInvalidMergeError, frappe.rename_doc, "Item Group", "_Test Item Group B - 3",
 			"_Test Item Group B", merge=True)
-		
+
 	def test_merge_group_into_leaf(self):
-		self.assertRaises(NestedSetInvalidMergeError, frappe.rename_doc, "Item Group", "_Test Item Group B", 
-			"_Test Item Group B - 3", merge=True)
\ No newline at end of file
+		self.assertRaises(NestedSetInvalidMergeError, frappe.rename_doc, "Item Group", "_Test Item Group B",
+			"_Test Item Group B - 3", merge=True)
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py
index a7449ab..b90b65e 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.py
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.py
@@ -4,9 +4,12 @@
 from __future__ import unicode_literals
 import frappe
 from frappe.utils import cint, cstr, filter_strip_join
-from frappe.model.document import Document
+from frappe.website.website_generator import WebsiteGenerator
 
-class SalesPartner(Document):
+class SalesPartner(WebsiteGenerator):
+	def autoname(self):
+		self.name = self.partner_name
+
 	def validate(self):
 		if self.partner_website and not self.partner_website.startswith("http"):
 			self.partner_website = "http://" + self.partner_website
@@ -14,8 +17,8 @@
 	def get_contacts(self, nm):
 		if nm:
 			return frappe.db.convert_to_lists(frappe.db.sql("""
-				select name, CONCAT(IFNULL(first_name,''), 
-					' ',IFNULL(last_name,'')),contact_no,email_id 
+				select name, CONCAT(IFNULL(first_name,''),
+					' ',IFNULL(last_name,'')),contact_no,email_id
 				from `tabContact` where sales_partner = %s""", nm))
 		else:
 			return ''
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index ba1509f..e91c36d 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -15,19 +15,22 @@
 class DeliveryNote(SellingController):
 	tname = 'Delivery Note Item'
 	fname = 'delivery_note_details'
-	status_updater = [{
-		'source_dt': 'Delivery Note Item',
-		'target_dt': 'Sales Order Item',
-		'join_field': 'prevdoc_detail_docname',
-		'target_field': 'delivered_qty',
-		'target_parent_dt': 'Sales Order',
-		'target_parent_field': 'per_delivered',
-		'target_ref_field': 'qty',
-		'source_field': 'qty',
-		'percent_join_field': 'against_sales_order',
-		'status_field': 'delivery_status',
-		'keyword': 'Delivered'
-	}]
+
+	def __init__(self, arg1, arg2=None):
+		super(DeliveryNote, self).__init__(arg1, arg2)
+		self.status_updater = [{
+			'source_dt': 'Delivery Note Item',
+			'target_dt': 'Sales Order Item',
+			'join_field': 'prevdoc_detail_docname',
+			'target_field': 'delivered_qty',
+			'target_parent_dt': 'Sales Order',
+			'target_parent_field': 'per_delivered',
+			'target_ref_field': 'qty',
+			'source_field': 'qty',
+			'percent_join_field': 'against_sales_order',
+			'status_field': 'delivery_status',
+			'keyword': 'Delivered'
+		}]
 
 	def onload(self):
 		billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Invoice Item`
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 0260232..6e82ae9 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -11,76 +11,76 @@
 
 def _insert_purchase_receipt(item_code=None):
 	if not item_code:
-		item_code = pr_test_records[0][1]["item_code"]
-	
+		item_code = pr_test_records[0]["purchase_receipt_details"][0]["item_code"]
+
 	pr = frappe.copy_doc(pr_test_records[0])
 	pr.get("purchase_receipt_details")[0].item_code = item_code
 	pr.insert()
 	pr.submit()
-	
+
 class TestDeliveryNote(unittest.TestCase):
 	def test_over_billing_against_dn(self):
 		self.clear_stock_account_balance()
 		_insert_purchase_receipt()
-		
+
 		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
 		_insert_purchase_receipt()
 		dn = frappe.copy_doc(test_records[0]).insert()
-		
-		self.assertRaises(frappe.ValidationError, make_sales_invoice, 
+
+		self.assertRaises(frappe.ValidationError, make_sales_invoice,
 			dn.name)
 
 		dn = frappe.get_doc("Delivery Note", dn.name)
 		dn.submit()
 		si = make_sales_invoice(dn.name)
-		
-		self.assertEquals(len(si), len(dn))
-		
+
+		self.assertEquals(len(si.get("entries")), len(dn.get("delivery_note_details")))
+
 		# modify amount
-		si[1]["rate"] = 200
+		si.get("entries")[0].rate = 200
 		self.assertRaises(frappe.ValidationError, frappe.get_doc(si).insert)
-		
-	
+
+
 	def test_delivery_note_no_gl_entry(self):
 		self.clear_stock_account_balance()
 		set_perpetual_inventory(0)
 		self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 0)
-		
+
 		_insert_purchase_receipt()
-		
+
 		dn = frappe.copy_doc(test_records[0])
 		dn.insert()
 		dn.submit()
-		
-		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
-			{"voucher_type": "Delivery Note", "voucher_no": dn.name, 
+
+		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
+			{"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.name))
-		
+
 	def test_delivery_note_gl_entry(self):
 		self.clear_stock_account_balance()
 		set_perpetual_inventory()
 		self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
 		frappe.db.set_value("Item", "_Test Item", "valuation_method", "FIFO")
-		
+
 		_insert_purchase_receipt()
-		
+
 		dn = frappe.copy_doc(test_records[0])
 		dn.get("delivery_note_details")[0].expense_account = "Cost of Goods Sold - _TC"
 		dn.get("delivery_note_details")[0].cost_center = "Main - _TC"
 
-		stock_in_hand_account = frappe.db.get_value("Account", 
+		stock_in_hand_account = frappe.db.get_value("Account",
 			{"master_name": dn.get("delivery_note_details")[0].warehouse})
-		
+
 		from erpnext.accounts.utils import get_balance_on
 		prev_bal = get_balance_on(stock_in_hand_account, dn.posting_date)
 
 		dn.insert()
 		dn.submit()
-		
+
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
 		expected_values = {
@@ -89,20 +89,20 @@
 		}
 		for i, gle in enumerate(gl_entries):
 			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.posting_date)
 		self.assertEquals(bal, prev_bal - 375.0)
-				
+
 		# back dated purchase receipt
 		pr = frappe.copy_doc(pr_test_records[0])
 		pr.posting_date = "2013-01-01"
 		pr.get("purchase_receipt_details")[0].rate = 100
 		pr.get("purchase_receipt_details")[0].base_amount = 100
-		
+
 		pr.insert()
 		pr.submit()
-		
+
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
 		expected_values = {
@@ -111,71 +111,71 @@
 		}
 		for i, gle in enumerate(gl_entries):
 			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))
-					
+
 		dn.cancel()
 		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
 		set_perpetual_inventory(0)
-			
+
 	def test_delivery_note_gl_entry_packing_item(self):
 		self.clear_stock_account_balance()
 		set_perpetual_inventory()
-		
+
 		_insert_purchase_receipt()
 		_insert_purchase_receipt("_Test Item Home Desktop 100")
-		
+
 		dn = frappe.copy_doc(test_records[0])
 		dn.get("delivery_note_details")[0].item_code = "_Test Sales BOM Item"
 		dn.get("delivery_note_details")[0].qty = 1
-	
-		stock_in_hand_account = frappe.db.get_value("Account", 
+
+		stock_in_hand_account = frappe.db.get_value("Account",
 			{"master_name": dn.get("delivery_note_details")[0].warehouse})
-		
+
 		from erpnext.accounts.utils import get_balance_on
 		prev_bal = get_balance_on(stock_in_hand_account, dn.posting_date)
-	
+
 		dn.insert()
 		dn.submit()
-		
+
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
-		
+
 		expected_values = {
 			stock_in_hand_account: [0.0, 525],
 			"Cost of Goods Sold - _TC": [525.0, 0.0]
 		}
 		for i, gle in enumerate(gl_entries):
 			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.posting_date)
 		self.assertEquals(bal, prev_bal - 525.0)
-		
+
 		dn.cancel()
 		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
-		
+
 		set_perpetual_inventory(0)
-		
+
 	def test_serialized(self):
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
-		
+
 		se = make_serialized_item()
 		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)
-		
+
 		dn = frappe.copy_doc(test_records[0])
 		dn.get("delivery_note_details")[0].item_code = "_Test Serialized Item With Series"
 		dn.get("delivery_note_details")[0].qty = 1
 		dn.get("delivery_note_details")[0].serial_no = serial_nos[0]
 		dn.insert()
 		dn.submit()
-		
+
 		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], 
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
 			"delivery_document_no"), dn.name)
-			
+
 		return dn
-			
+
 	def test_serialized_cancel(self):
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		dn = self.test_serialized()
@@ -185,20 +185,20 @@
 
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Available")
 		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
-		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], 
+		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0],
 			"delivery_document_no"))
 
 	def test_serialize_status(self):
 		from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
-		
+
 		se = make_serialized_item()
 		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)
-		
+
 		sr = frappe.get_doc("Serial No", serial_nos[0])
 		sr.status = "Not Available"
 		sr.save()
-		
+
 		dn = frappe.copy_doc(test_records[0])
 		dn.get("delivery_note_details")[0].item_code = "_Test Serialized Item With Series"
 		dn.get("delivery_note_details")[0].qty = 1
@@ -206,7 +206,7 @@
 		dn.insert()
 
 		self.assertRaises(SerialNoStatusError, dn.submit)
-		
+
 	def clear_stock_account_balance(self):
 		frappe.db.sql("""delete from `tabBin`""")
 		frappe.db.sql("delete from `tabStock Ledger Entry`")
@@ -214,4 +214,4 @@
 
 test_dependencies = ["Sales BOM"]
 
-test_records = frappe.get_test_records('Delivery Note')
\ No newline at end of file
+test_records = frappe.get_test_records('Delivery Note')
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 54ac383..dd364ff 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -3,32 +3,29 @@
 
 from __future__ import unicode_literals
 import frappe
-
-from frappe.utils import cstr, flt, getdate, now_datetime, formatdate
-
 from frappe import msgprint, _
-
-from frappe.model.controller import DocListController
+from frappe.utils import cstr, flt, getdate, now_datetime, formatdate
+from frappe.website.website_generator import WebsiteGenerator
 
 class WarehouseNotSet(Exception): pass
 
-class Item(DocListController):
+class Item(WebsiteGenerator):
 	def onload(self):
 		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.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.name = self.item_code
-			
+
 	def validate(self):
 		if not self.stock_uom:
 			msgprint(_("Please enter Default Unit of Measure"), raise_exception=1)
-		
+
 		self.check_warehouse_is_set_for_stock_item()
 		self.check_stock_uom_with_bin()
 		self.add_default_uom_in_conversion_factor_table()
@@ -40,14 +37,15 @@
 		self.validate_barcode()
 		self.cant_change()
 		self.validate_item_type_for_reorder()
-		
+
 		if not self.parent_website_route:
 			self.parent_website_route = frappe.get_website_route("Item Group", self.item_group)
 
 		if self.name:
 			self.old_page_name = frappe.db.get_value('Item', self.name, 'page_name')
-			
+
 	def on_update(self):
+		super(Item, self).on_update()
 		self.validate_name_with_item_group()
 		self.update_item_price()
 
@@ -55,46 +53,46 @@
 		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.stock_uom not in uom_conv_list:
 			ch = self.append('uom_conversion_details', {})
 			ch.uom = self.stock_uom
 			ch.conversion_factor = 1
-		
+
 		to_remove = []
 		for d in self.get("uom_conversion_details"):
 			if d.conversion_factor == 1 and d.uom != self.stock_uom:
 				to_remove.append(d)
-				
+
 		[self.remove(d) for d in to_remove]
-				
+
 
 	def check_stock_uom_with_bin(self):
 		if not self.get("__islocal"):
 			matched=True
-			ref_uom = frappe.db.get_value("Stock Ledger Entry", 
+			ref_uom = frappe.db.get_value("Stock Ledger Entry",
 				{"item_code": self.name}, "stock_uom")
 			if ref_uom:
 				if cstr(ref_uom) != cstr(self.stock_uom):
 					matched = False
 			else:
-				bin_list = frappe.db.sql("select * from tabBin where item_code=%s", 
+				bin_list = frappe.db.sql("select * from tabBin where item_code=%s",
 					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.stock_uom):
 							matched = False
 							break
-						
+
 				if matched and bin_list:
 					frappe.db.sql("""update tabBin set stock_uom=%s where item_code=%s""",
 						(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."))
-	
+
 	def validate_conversion_factor(self):
 		check_list = []
 		for d in self.get('uom_conversion_details'):
@@ -105,12 +103,12 @@
 				check_list.append(cstr(d.uom))
 
 			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.""" % 
+					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.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""" % 
+				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.name)), raise_exception=1)
-					
+
 	def validate_item_type(self):
 		if cstr(self.is_manufactured_item) == "No":
 			self.is_pro_applicable = "No"
@@ -121,25 +119,25 @@
 
 		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.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 
+			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.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.is_manufactured_item != "Yes":
-			bom = frappe.db.sql("""select name from `tabBOM` where item = %s 
+			bom = frappe.db.sql("""select name from `tabBOM` where item = %s
 				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"""))
-					
+
 	def fill_customer_code(self):
 		""" Append all the customer codes and insert into "customer_code" field of item table """
 		cust_code=[]
@@ -153,7 +151,7 @@
 		for d in self.get('item_tax'):
 			if d.tax_type:
 				account_type = frappe.db.get_value("Account", d.tax_type, "account_type")
-				
+
 				if account_type not in ['Tax', 'Chargeable', 'Income Account', 'Expense Account']:
 					msgprint("'%s' is not Tax / Chargeable / Income / Expense Account" % d.tax_type, raise_exception=1)
 				else:
@@ -161,34 +159,34 @@
 						msgprint("Rate is entered twice for: '%s'" % d.tax_type, raise_exception=1)
 					else:
 						check_list.append(d.tax_type)
-						
+
 	def validate_barcode(self):
 		if self.barcode:
-			duplicate = frappe.db.sql("""select name from tabItem where barcode = %s 
+			duplicate = frappe.db.sql("""select name from tabItem where barcode = %s
 				and name != %s""", (self.barcode, self.name))
 			if duplicate:
-				msgprint("Barcode: %s already used in item: %s" % 
+				msgprint("Barcode: %s already used in item: %s" %
 					(self.barcode, cstr(duplicate[0][0])), raise_exception = 1)
 
 	def cant_change(self):
 		if not self.get("__islocal"):
-			vals = frappe.db.get_value("Item", self.name, 
+			vals = frappe.db.get_value("Item", self.name,
 				["has_serial_no", "is_stock_item", "valuation_method"], as_dict=True)
-			
-			if vals and ((self.is_stock_item == "No" and vals.is_stock_item == "Yes") or 
-				vals.has_serial_no != self.has_serial_no or 
+
+			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.re_order_level or len(self.get("item_reorder", {"material_request_type": "Purchase"})):
 			if not self.is_purchase_item:
-				frappe.msgprint(_("""To set reorder level, item must be 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` 
+		sle = frappe.db.sql("""select name from `tabStock Ledger Entry`
 			where item_code = %s""", self.name)
 		return sle and 'exists' or 'not exists'
 
@@ -196,11 +194,11 @@
 		# causes problem with tree build
 		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" % 
+				please change the item name or rename the item group" %
 				self.name, raise_exception=1)
 
 	def update_item_price(self):
-		frappe.db.sql("""update `tabItem Price` set item_name=%s, 
+		frappe.db.sql("""update `tabItem Price` set item_name=%s,
 			item_description=%s, modified=NOW() where item_code=%s""",
 			(self.item_name, self.description, self.name))
 
@@ -209,9 +207,9 @@
 			page_name_from = self.name
 		else:
 			page_name_from = self.name + " " + self.item_name
-		
+
 		return page_name_from
-		
+
 	def get_tax_rate(self, tax_type):
 		return { "tax_rate": frappe.db.get_value("Account", tax_type, "tax_rate") }
 
@@ -223,8 +221,9 @@
 			'description'	:	file and file[0]['description'] or ''
 		}
 		return ret
-		
+
 	def on_trash(self):
+		super(Item, self).on_trash()
 		frappe.db.sql("""delete from tabBin where item_code=%s""", self.item_code)
 
 	def before_rename(self, olddn, newdn, merge=False):
@@ -232,7 +231,7 @@
 			# Validate properties before merging
 			if not frappe.db.exists("Item", newdn):
 				frappe.throw(_("Item ") + newdn +_(" does not exists"))
-			
+
 			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.get(fld)) for fld in field_list]:
@@ -242,32 +241,33 @@
 			frappe.db.sql("delete from `tabBin` where item_code=%s", olddn)
 
 	def after_rename(self, olddn, newdn, merge):
+		super(Item, self).after_rename(olddn, newdn, merge)
+
 		frappe.db.set_value("Item", newdn, "item_code", newdn)
-			
 		if merge:
 			self.set_last_purchase_rate(newdn)
 			self.recalculate_bin_qty(newdn)
-			
+
 	def set_last_purchase_rate(self, newdn):
 		last_purchase_rate = get_last_purchase_details(newdn).get("base_rate", 0)
 		frappe.db.set_value("Item", newdn, "last_purchase_rate", last_purchase_rate)
-			
+
 	def recalculate_bin_qty(self, newdn):
 		from erpnext.utilities.repost_stock import repost_stock
 		frappe.db.auto_commit_on_many_writes = 1
 		frappe.db.set_default("allow_negative_stock", 1)
-		
+
 		for warehouse in frappe.db.sql("select name from `tabWarehouse`"):
 			repost_stock(newdn, warehouse[0])
-		
-		frappe.db.set_default("allow_negative_stock", 
+
+		frappe.db.set_default("allow_negative_stock",
 			frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
 		frappe.db.auto_commit_on_many_writes = 0
 
 def validate_end_of_life(item_code, end_of_life=None, verbose=1):
 	if not end_of_life:
 		end_of_life = frappe.db.get_value("Item", item_code, "end_of_life")
-	
+
 	if end_of_life and getdate(end_of_life) <= now_datetime().date():
 		msg = (_("Item") + " %(item_code)s: " + _("reached its end of life on") + \
 			" %(date)s. " + _("Please check") + ": %(end_of_life_label)s " + \
@@ -276,29 +276,29 @@
 				"date": formatdate(end_of_life),
 				"end_of_life_label": frappe.get_meta("Item").get_label("end_of_life")
 			}
-		
+
 		_msgprint(msg, verbose)
-		
+
 def validate_is_stock_item(item_code, is_stock_item=None, verbose=1):
 	if not is_stock_item:
 		is_stock_item = frappe.db.get_value("Item", item_code, "is_stock_item")
-		
+
 	if is_stock_item != "Yes":
 		msg = (_("Item") + " %(item_code)s: " + _("is not a Stock Item")) % {
 			"item_code": item_code,
 		}
-		
+
 		_msgprint(msg, verbose)
-		
+
 def validate_cancelled_item(item_code, docstatus=None, verbose=1):
 	if docstatus is None:
 		docstatus = frappe.db.get_value("Item", item_code, "docstatus")
-	
+
 	if docstatus == 2:
 		msg = (_("Item") + " %(item_code)s: " + _("is a cancelled Item")) % {
 			"item_code": item_code,
 		}
-		
+
 		_msgprint(msg, verbose)
 
 def _msgprint(msg, verbose):
@@ -306,22 +306,22 @@
 		msgprint(msg, raise_exception=True)
 	else:
 		raise frappe.ValidationError, msg
-		
-		
+
+
 def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0):
 	"""returns last purchase details in stock uom"""
 	# get last purchase order item details
 	last_purchase_order = frappe.db.sql("""\
 		select po.name, po.transaction_date, po.conversion_rate,
-			po_item.conversion_factor, po_item.base_price_list_rate, 
+			po_item.conversion_factor, po_item.base_price_list_rate,
 			po_item.discount_percentage, po_item.base_rate
 		from `tabPurchase Order` po, `tabPurchase Order Item` po_item
-		where po.docstatus = 1 and po_item.item_code = %s and po.name != %s and 
+		where po.docstatus = 1 and po_item.item_code = %s and po.name != %s and
 			po.name = po_item.parent
 		order by po.transaction_date desc, po.name desc
 		limit 1""", (item_code, cstr(doc_name)), as_dict=1)
 
-	# get last purchase receipt item details		
+	# get last purchase receipt item details
 	last_purchase_receipt = frappe.db.sql("""\
 		select pr.name, pr.posting_date, pr.posting_time, pr.conversion_rate,
 			pr_item.conversion_factor, pr_item.base_price_list_rate, pr_item.discount_percentage,
@@ -342,16 +342,16 @@
 		# use purchase order
 		last_purchase = last_purchase_order[0]
 		purchase_date = purchase_order_date
-		
+
 	elif (purchase_receipt_date > purchase_order_date) or \
 			(last_purchase_receipt and not last_purchase_order):
 		# use purchase receipt
 		last_purchase = last_purchase_receipt[0]
 		purchase_date = purchase_receipt_date
-		
+
 	else:
 		return frappe._dict()
-	
+
 	conversion_factor = flt(last_purchase.conversion_factor)
 	out = frappe._dict({
 		"base_price_list_rate": flt(last_purchase.base_price_list_rate) / conversion_factor,
@@ -366,5 +366,5 @@
 		"rate": out.base_rate / conversion_rate,
 		"base_rate": out.base_rate
 	})
-	
-	return out
\ No newline at end of file
+
+	return out
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 3f67cd2..156751e 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -169,11 +169,10 @@
 
 		for mr_name, mr_items in material_request_map.items():
 			mr_obj = frappe.get_doc("Material Request", mr_name)
-			mr_doctype = frappe.get_meta("Material Request")
 
 			if mr_obj.status in ["Stopped", "Cancelled"]:
 				frappe.throw(_("Material Request") + ": %s, " % mr_obj.name
-					+ _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.status)
+					+ _(mr_obj.meta.get_label("status")) + " = %s. " % _(mr_obj.status)
 					+ _("Cannot continue."), exc=frappe.InvalidStatusError)
 
 			_update_requested_qty(doc, mr_obj, mr_items)
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index a799c3b..7719dfd 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -24,7 +24,7 @@
 		mr.submit()
 		po = make_purchase_order(mr.name)
 
-		self.assertEquals(po["doctype"], "Purchase Order")
+		self.assertEquals(po.doctype, "Purchase Order")
 		self.assertEquals(len(po.get("po_details")), len(mr.get("indent_details")))
 
 	def test_make_supplier_quotation(self):
@@ -38,7 +38,7 @@
 		mr.submit()
 		sq = make_supplier_quotation(mr.name)
 
-		self.assertEquals(sq["doctype"], "Supplier Quotation")
+		self.assertEquals(sq.doctype, "Supplier Quotation")
 		self.assertEquals(len(sq.get("quotation_items")), len(mr.get("indent_details")))
 
 
@@ -55,14 +55,9 @@
 		mr.submit()
 		se = make_stock_entry(mr.name)
 
-		self.assertEquals(se["doctype"], "Stock Entry")
+		self.assertEquals(se.doctype, "Stock Entry")
 		self.assertEquals(len(se.get("mtn_details")), len(mr.get("indent_details")))
 
-	def _test_expected(self, doc, expected_values):
-		for i, expected in enumerate(expected_values):
-			for fieldname, val in expected.items():
-				self.assertEquals(val, doc.get(fieldname))
-
 	def _test_requested_qty(self, qty1, qty2):
 		self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
 			"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty1)
@@ -116,28 +111,34 @@
 		mr.submit()
 
 		# check if per complete is None
-		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self.assertEquals(mr.per_ordered, None)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
 
 		self._test_requested_qty(54.0, 3.0)
 
 		# map a purchase order
 		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
 		po_doc = make_purchase_order(mr.name)
-		po_doc["supplier"] = "_Test Supplier"
-		po_doc["transaction_date"] = "2013-07-07"
-		po_doc.get("po_details")[0]["qty"] = 27.0
-		po_doc.get("po_details")[1]["qty"] = 1.5
-		po_doc.get("po_details")[0]["schedule_date"] = "2013-07-09"
-		po_doc.get("po_details")[1]["schedule_date"] = "2013-07-09"
+		po_doc.supplier = "_Test Supplier"
+		po_doc.transaction_date = "2013-07-07"
+		po_doc.get("po_details")[0].qty = 27.0
+		po_doc.get("po_details")[1].qty = 1.5
+		po_doc.get("po_details")[0].schedule_date = "2013-07-09"
+		po_doc.get("po_details")[1].schedule_date = "2013-07-09"
 
 
 		# check for stopped status of Material Request
 		po = frappe.copy_doc(po_doc)
 		po.insert()
+		po.load_from_db()
 		mr.update_status('Stopped')
-		self.assertRaises(frappe.ValidationError, po.submit)
-		self.assertRaises(frappe.ValidationError, po.cancel)
+		self.assertRaises(frappe.InvalidStatusError, po.submit)
+		frappe.db.set(po, "docstatus", 1)
+		self.assertRaises(frappe.InvalidStatusError, po.cancel)
 
+		# resubmit and check for per complete
+		mr.load_from_db()
 		mr.update_status('Submitted')
 		po = frappe.copy_doc(po_doc)
 		po.insert()
@@ -145,13 +146,18 @@
 
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
+		self.assertEquals(mr.per_ordered, 50)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 27.0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 1.5)
 		self._test_requested_qty(27.0, 1.5)
 
 		po.cancel()
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self.assertEquals(mr.per_ordered, None)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, None)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, None)
+
 		self._test_requested_qty(54.0, 3.0)
 
 	def test_completed_qty_for_transfer(self):
@@ -165,7 +171,9 @@
 		mr.submit()
 
 		# check if per complete is None
-		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self.assertEquals(mr.per_ordered, None)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
 
 		self._test_requested_qty(54.0, 3.0)
 
@@ -198,8 +206,12 @@
 		se = frappe.copy_doc(se_doc)
 		se.insert()
 		mr.update_status('Stopped')
-		self.assertRaises(frappe.ValidationError, se.submit)
-		self.assertRaises(frappe.ValidationError, se.cancel)
+		self.assertRaises(frappe.InvalidStatusError, se.submit)
+
+		mr.update_status('Submitted')
+		se.submit()
+		mr.update_status('Stopped')
+		self.assertRaises(frappe.InvalidStatusError, se.cancel)
 
 		mr.update_status('Submitted')
 		se = frappe.copy_doc(se_doc)
@@ -208,13 +220,19 @@
 
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
+		self.assertEquals(mr.per_ordered, 50)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 27.0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 1.5)
+
 		self._test_requested_qty(27.0, 1.5)
 
 		# check if per complete is as expected for Stock Entry cancelled
 		se.cancel()
 		mr.load_from_db()
-		self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
+		self.assertEquals(mr.per_ordered, 0)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
+
 		self._test_requested_qty(54.0, 3.0)
 
 	def test_completed_qty_for_over_transfer(self):
@@ -228,7 +246,9 @@
 		mr.submit()
 
 		# check if per complete is None
-		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
+		self.assertEquals(mr.per_ordered, None)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
 
 		self._test_requested_qty(54.0, 3.0)
 
@@ -261,8 +281,8 @@
 		se = frappe.copy_doc(se_doc)
 		se.insert()
 		mr.update_status('Stopped')
-		self.assertRaises(frappe.ValidationError, se.submit)
-		self.assertRaises(frappe.ValidationError, se.cancel)
+		self.assertRaises(frappe.InvalidStatusError, se.submit)
+		self.assertRaises(frappe.InvalidStatusError, se.cancel)
 
 		mr.update_status('Submitted')
 		se = frappe.copy_doc(se_doc)
@@ -271,13 +291,19 @@
 
 		# check if per complete is as expected
 		mr.load_from_db()
-		self._test_expected(mr, [{"per_ordered": 100}, {"ordered_qty": 60.0}, {"ordered_qty": 3.0}])
+
+		self.assertEquals(mr.per_ordered, 100)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 3.0)
 		self._test_requested_qty(0.0, 0.0)
 
 		# check if per complete is as expected for Stock Entry cancelled
 		se.cancel()
 		mr.load_from_db()
-		self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
+		self.assertEquals(mr.per_ordered, 0)
+		self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0)
+		self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0)
+
 		self._test_requested_qty(54.0, 3.0)
 
 	def test_incorrect_mapping_of_stock_entry(self):
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 03250a6..7626112 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -14,19 +14,21 @@
 class PurchaseReceipt(BuyingController):
 	tname = 'Purchase Receipt Item'
 	fname = 'purchase_receipt_details'
-	count = 0
-	status_updater = [{
-		'source_dt': 'Purchase Receipt Item',
-		'target_dt': 'Purchase Order Item',
-		'join_field': 'prevdoc_detail_docname',
-		'target_field': 'received_qty',
-		'target_parent_dt': 'Purchase Order',
-		'target_parent_field': 'per_received',
-		'target_ref_field': 'qty',
-		'source_field': 'qty',
-		'percent_join_field': 'prevdoc_docname',
-	}]
-		
+
+	def __init__(self, arg1, arg2=None):
+		super(PurchaseReceipt, self).__init__(arg1, arg2)
+		self.status_updater = [{
+			'source_dt': 'Purchase Receipt Item',
+			'target_dt': 'Purchase Order Item',
+			'join_field': 'prevdoc_detail_docname',
+			'target_field': 'received_qty',
+			'target_parent_dt': 'Purchase Order',
+			'target_parent_field': 'per_received',
+			'target_ref_field': 'qty',
+			'source_field': 'qty',
+			'percent_join_field': 'prevdoc_docname',
+		}]
+
 	def onload(self):
 		billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabPurchase Invoice Item`
 			where purchase_receipt=%s""", self.name)
@@ -36,7 +38,7 @@
 
 	def validate(self):
 		super(PurchaseReceipt, self).validate()
-		
+
 		self.po_required()
 
 		if not self.status:
@@ -60,7 +62,7 @@
 		# sub-contracting
 		self.validate_for_subcontracting()
 		self.update_raw_materials_supplied("pr_raw_material_details")
-		
+
 		self.update_valuation_rate("purchase_receipt_details")
 
 	def validate_rejected_warehouse(self):
@@ -68,7 +70,7 @@
 			if flt(d.rejected_qty) and not d.rejected_warehouse:
 				d.rejected_warehouse = self.rejected_warehouse
 				if not d.rejected_warehouse:
-					frappe.throw(_("Rejected Warehouse is mandatory against regected item"))		
+					frappe.throw(_("Rejected Warehouse is mandatory against regected item"))
 
 	# validate accepted and rejected qty
 	def validate_accepted_rejected_qty(self):
@@ -99,7 +101,7 @@
 			if exists:
 				frappe.msgprint("Another Purchase Receipt using the same Challan No. already exists.\
 			Please enter a valid Challan No.", raise_exception=1)
-			
+
 	def validate_with_previous_doc(self):
 		super(PurchaseReceipt, self).validate_with_previous_doc(self.tname, {
 			"Purchase Order": {
@@ -112,7 +114,7 @@
 				"is_child_table": True
 			}
 		})
-		
+
 		if cint(frappe.defaults.get_global_default('maintain_same_rate')):
 			super(PurchaseReceipt, self).validate_with_previous_doc(self.tname, {
 				"Purchase Order Item": {
@@ -121,7 +123,7 @@
 					"is_child_table": True
 				}
 			})
-			
+
 
 	def po_required(self):
 		if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':
@@ -133,18 +135,18 @@
 	def update_stock(self):
 		sl_entries = []
 		stock_items = self.get_stock_items()
-		
+
 		for d in self.get('purchase_receipt_details'):
 			if d.item_code in stock_items and d.warehouse:
 				pr_qty = flt(d.qty) * flt(d.conversion_factor)
-				
+
 				if pr_qty:
 					sl_entries.append(self.get_sl_entries(d, {
 						"actual_qty": flt(pr_qty),
 						"serial_no": cstr(d.serial_no).strip(),
 						"incoming_rate": d.valuation_rate
 					}))
-				
+
 				if flt(d.rejected_qty) > 0:
 					sl_entries.append(self.get_sl_entries(d, {
 						"warehouse": d.rejected_warehouse,
@@ -152,28 +154,28 @@
 						"serial_no": cstr(d.rejected_serial_no).strip(),
 						"incoming_rate": d.valuation_rate
 					}))
-						
+
 		self.bk_flush_supp_wh(sl_entries)
 		self.make_sl_entries(sl_entries)
-				
+
 	def update_ordered_qty(self):
 		stock_items = self.get_stock_items()
 		for d in self.get("purchase_receipt_details"):
 			if d.item_code in stock_items and d.warehouse \
 					and cstr(d.prevdoc_doctype) == 'Purchase Order':
-									
-				already_received_qty = self.get_already_received_qty(d.prevdoc_docname, 
+
+				already_received_qty = self.get_already_received_qty(d.prevdoc_docname,
 					d.prevdoc_detail_docname)
 				po_qty, ordered_warehouse = self.get_po_qty_and_warehouse(d.prevdoc_detail_docname)
-				
+
 				if not ordered_warehouse:
 					frappe.throw(_("Warehouse is missing in Purchase Order"))
-				
+
 				if already_received_qty + d.qty > po_qty:
 					ordered_qty = - (po_qty - already_received_qty) * flt(d.conversion_factor)
 				else:
 					ordered_qty = - flt(d.qty) * flt(d.conversion_factor)
-				
+
 				update_bin({
 					"item_code": d.item_code,
 					"warehouse": ordered_warehouse,
@@ -182,20 +184,20 @@
 				})
 
 	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 
+		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.name))
 		return qty and flt(qty[0][0]) or 0.0
-		
+
 	def get_po_qty_and_warehouse(self, po_detail):
-		po_qty, po_warehouse = frappe.db.get_value("Purchase Order Item", po_detail, 
+		po_qty, po_warehouse = frappe.db.get_value("Purchase Order Item", po_detail,
 			["qty", "warehouse"])
 		return po_qty, po_warehouse
-	
+
 	def bk_flush_supp_wh(self, sl_entries):
 		for d in self.get('pr_raw_material_details'):
-			# negative quantity is passed as raw material qty has to be decreased 
+			# negative quantity is passed as raw material qty has to be decreased
 			# 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,
@@ -231,22 +233,22 @@
 		frappe.db.set(self, 'status', 'Submitted')
 
 		self.update_prevdoc_status()
-		
+
 		self.update_ordered_qty()
-		
+
 		self.update_stock()
 
 		from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
 		update_serial_nos_after_submit(self, "purchase_receipt_details")
 
 		purchase_controller.update_last_purchase_rate(self, 1)
-		
+
 		self.make_gl_entries()
 
 	def check_next_docstatus(self):
-		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""", 
+		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.name))
 		if submit_rv:
 			msgprint("Purchase Invoice : " + cstr(self.submit_rv[0][0]) + " has already been submitted !")
@@ -258,25 +260,25 @@
 
 		self.check_for_stopped_status(pc_obj)
 		# Check if Purchase Invoice has been submitted against current Purchase Order
-		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""", 
+		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.name)
 		if submitted:
-			frappe.throw("Purchase Invoice : " + cstr(submitted[0][0]) + 
+			frappe.throw("Purchase Invoice : " + cstr(submitted[0][0]) +
 				" has already been submitted !")
-		
+
 		frappe.db.set(self,'status','Cancelled')
 
 		self.update_ordered_qty()
-		
+
 		self.update_stock()
 
 		self.update_prevdoc_status()
 		pc_obj.update_last_purchase_rate(self, 0)
-		
+
 		self.make_cancel_gl_entries()
-			
+
 	def get_current_stock(self):
 		for d in self.get('pr_raw_material_details'):
 			if self.supplier_warehouse:
@@ -285,42 +287,42 @@
 
 	def get_rate(self,arg):
 		return frappe.get_doc('Purchase Common').get_rate(arg,self)
-		
+
 	def get_gl_entries(self, warehouse_account=None):
 		against_stock_account = self.get_company_default("stock_received_but_not_billed")
-		
+
 		gl_entries = super(PurchaseReceipt, self).get_gl_entries(warehouse_account, against_stock_account)
 		return gl_entries
-		
-	
+
+
 @frappe.whitelist()
 def make_purchase_invoice(source_name, target_doc=None):
 	from frappe.model.mapper import get_mapped_doc
-	
+
 	def set_missing_values(source, target):
 		doc = frappe.get_doc(target)
 		doc.run_method("set_missing_values")
 
 	doclist = get_mapped_doc("Purchase Receipt", source_name,	{
 		"Purchase Receipt": {
-			"doctype": "Purchase Invoice", 
+			"doctype": "Purchase Invoice",
 			"validation": {
 				"docstatus": ["=", 1],
 			}
-		}, 
+		},
 		"Purchase Receipt Item": {
-			"doctype": "Purchase Invoice Item", 
+			"doctype": "Purchase Invoice Item",
 			"field_map": {
-				"name": "pr_detail", 
-				"parent": "purchase_receipt", 
-				"prevdoc_detail_docname": "po_detail", 
-				"prevdoc_docname": "purchase_order", 
+				"name": "pr_detail",
+				"parent": "purchase_receipt",
+				"prevdoc_detail_docname": "po_detail",
+				"prevdoc_docname": "purchase_order",
 			},
-		}, 
+		},
 		"Purchase Taxes and Charges": {
-			"doctype": "Purchase Taxes and Charges", 
+			"doctype": "Purchase Taxes and Charges",
 			"add_if_empty": True
 		}
 	}, target_doc, set_missing_values)
 
-	return doclist
\ No newline at end of file
+	return doclist
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index f0de633..0aa3acc 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -15,88 +15,88 @@
 		from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
 
 		pr = frappe.copy_doc(test_records[0]).insert()
-		
-		self.assertRaises(frappe.ValidationError, make_purchase_invoice, 
+
+		self.assertRaises(frappe.ValidationError, make_purchase_invoice,
 			pr.name)
 
 		pr = frappe.get_doc("Purchase Receipt", pr.name)
 		pr.submit()
 		pi = make_purchase_invoice(pr.name)
-		
-		self.assertEquals(pi["doctype"], "Purchase Invoice")
+
+		self.assertEquals(pi.doctype, "Purchase Invoice")
 		self.assertEquals(len(pi.get("entries")), len(pr.get("purchase_receipt_details")))
-		
+
 		# modify rate
-		pi.get("entries")[0]["rate"] = 200
+		pi.get("entries")[0].rate = 200
 		self.assertRaises(frappe.ValidationError, frappe.get_doc(pi).submit)
-		
+
 	def test_purchase_receipt_no_gl_entry(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory(0)
 		pr = frappe.copy_doc(test_records[0])
 		pr.insert()
 		pr.submit()
-		
-		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
-			{"voucher_type": "Purchase Receipt", "voucher_no": pr.name, 
-				"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"}, 
+
+		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
+			{"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)
 		self.assertEqual(stock_value_difference, 375)
-		
-		bin_stock_value = frappe.db.get_value("Bin", {"item_code": "_Test Item", 
+
+		bin_stock_value = frappe.db.get_value("Bin", {"item_code": "_Test Item",
 			"warehouse": "_Test Warehouse - _TC"}, "stock_value")
 		self.assertEqual(bin_stock_value, 375)
-		
+
 		self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
-		
+
 	def test_purchase_receipt_gl_entry(self):
 		self._clear_stock_account_balance()
-		
+
 		set_perpetual_inventory()
 		self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
-		
+
 		pr = frappe.copy_doc(test_records[0])
 		pr.insert()
 		pr.submit()
-		
+
 		gl_entries = get_gl_entries("Purchase Receipt", pr.name)
-		
+
 		self.assertTrue(gl_entries)
-		
-		stock_in_hand_account = frappe.db.get_value("Account", 
-			{"master_name": pr.get("purchase_receipt_details")[0].warehouse})		
-		fixed_asset_account = frappe.db.get_value("Account", 
+
+		stock_in_hand_account = frappe.db.get_value("Account",
+			{"master_name": pr.get("purchase_receipt_details")[0].warehouse})
+		fixed_asset_account = frappe.db.get_value("Account",
 			{"master_name": pr.get("purchase_receipt_details")[1].warehouse})
-		
+
 		expected_values = {
 			stock_in_hand_account: [375.0, 0.0],
 			fixed_asset_account: [375.0, 0.0],
 			"Stock Received But Not Billed - _TC": [0.0, 750.0]
 		}
-		
+
 		for gle in gl_entries:
 			self.assertEquals(expected_values[gle.account][0], gle.debit)
 			self.assertEquals(expected_values[gle.account][1], gle.credit)
-			
+
 		pr.cancel()
 		self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
-		
+
 		set_perpetual_inventory(0)
-		
+
 	def _clear_stock_account_balance(self):
 		frappe.db.sql("delete from `tabStock Ledger Entry`")
 		frappe.db.sql("""delete from `tabBin`""")
 		frappe.db.sql("""delete from `tabGL Entry`""")
-		
+
 	def test_subcontracting(self):
 		pr = frappe.copy_doc(test_records[1])
 		pr.run_method("calculate_taxes_and_totals")
 		pr.insert()
-		
+
 		self.assertEquals(pr.get("purchase_receipt_details")[0].rm_supp_cost, 70000.0)
 		self.assertEquals(len(pr.get("pr_raw_material_details")), 2)
-		
+
 	def test_serial_no_supplier(self):
 		pr = frappe.copy_doc(test_records[0])
 		pr.get("purchase_receipt_details")[0].item_code = "_Test Serialized Item With Series"
@@ -104,30 +104,30 @@
 		pr.get("purchase_receipt_details")[0].received_qty = 1
 		pr.insert()
 		pr.submit()
-		
-		self.assertEquals(frappe.db.get_value("Serial No", pr.get("purchase_receipt_details")[0].serial_no, 
+
+		self.assertEquals(frappe.db.get_value("Serial No", pr.get("purchase_receipt_details")[0].serial_no,
 			"supplier"), pr.supplier)
-			
+
 		return pr
-	
+
 	def test_serial_no_cancel(self):
 		pr = self.test_serial_no_supplier()
 		pr.cancel()
-		
-		self.assertFalse(frappe.db.get_value("Serial No", pr.get("purchase_receipt_details")[0].serial_no, 
+
+		self.assertFalse(frappe.db.get_value("Serial No", pr.get("purchase_receipt_details")[0].serial_no,
 			"warehouse"))
-			
+
 def get_gl_entries(voucher_type, voucher_no):
 	return frappe.db.sql("""select account, debit, credit
 		from `tabGL Entry` where voucher_type=%s and voucher_no=%s
 		order by account desc""", (voucher_type, voucher_no), as_dict=1)
-		
+
 def set_perpetual_inventory(enable=1):
 	accounts_settings = frappe.get_doc("Accounts Settings")
 	accounts_settings.auto_accounting_for_stock = enable
 	accounts_settings.save()
-	
-		
+
+
 test_dependencies = ["BOM"]
 
-test_records = frappe.get_test_records('Purchase Receipt')
\ No newline at end of file
+test_records = frappe.get_test_records('Purchase Receipt')
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index f8cdeb7..f5fd08c 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -407,14 +407,14 @@
 		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice, make_delivery_note
 
 		actual_qty_0 = self._get_actual_qty()
+
 		so = frappe.copy_doc(sales_order_test_records[0])
 		so.get("sales_order_details")[0].item_code = item_code
 		so.get("sales_order_details")[0].qty = 5.0
 		so.insert()
 		so.submit()
-		dn_doc = make_delivery_note(so.name)
 
-		dn = frappe.get_doc(dn_doc)
+		dn = make_delivery_note(so.name)
 		dn.status = "Draft"
 		dn.posting_date = so.delivery_date
 		dn.insert()
@@ -423,9 +423,7 @@
 		actual_qty_1 = self._get_actual_qty()
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
 
-		si_doc = make_sales_invoice(so.name)
-
-		si = frappe.get_doc(si_doc)
+		si = make_sales_invoice(so.name)
 		si.posting_date = dn.posting_date
 		si.debit_to = "_Test Customer - _TC"
 		for d in si.get("entries"):
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index c1ffd02..37886ce 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -14,15 +14,15 @@
 class TestStockReconciliation(unittest.TestCase):
 	def test_reco_for_fifo(self):
 		frappe.defaults.set_global_default("auto_accounting_for_stock", 0)
-		# [[qty, valuation_rate, posting_date, 
+		# [[qty, valuation_rate, posting_date,
 		#		posting_time, expected_stock_value, bin_qty, bin_valuation]]
 		input_data = [
-			[50, 1000, "2012-12-26", "12:00", 50000, 45, 48000], 
-			[5, 1000, "2012-12-26", "12:00", 5000, 0, 0], 
-			[15, 1000, "2012-12-26", "12:00", 15000, 10, 12000], 
-			[25, 900, "2012-12-26", "12:00", 22500, 20, 22500], 
-			[20, 500, "2012-12-26", "12:00", 10000, 15, 18000], 
-			[50, 1000, "2013-01-01", "12:00", 50000, 65, 68000], 
+			[50, 1000, "2012-12-26", "12:00", 50000, 45, 48000],
+			[5, 1000, "2012-12-26", "12:00", 5000, 0, 0],
+			[15, 1000, "2012-12-26", "12:00", 15000, 10, 12000],
+			[25, 900, "2012-12-26", "12:00", 22500, 20, 22500],
+			[20, 500, "2012-12-26", "12:00", 10000, 15, 18000],
+			[50, 1000, "2013-01-01", "12:00", 50000, 65, 68000],
 			[5, 1000, "2013-01-01", "12:00", 5000, 20, 23000],
 			["", 1000, "2012-12-26", "12:05", 15000, 10, 12000],
 			[20, "", "2012-12-26", "12:05", 16000, 15, 18000],
@@ -30,142 +30,142 @@
 			[1, 1000, "2012-12-01", "00:00", 1000, 11, 13200],
 			[0, "", "2012-12-26", "12:10", 0, -5, 0]
 		]
-			
+
 		for d in input_data:
 			self.cleanup_data()
 			self.insert_existing_sle("FIFO")
 			stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
-		
+
 			# check stock value
 			res = frappe.db.sql("""select stock_value from `tabStock Ledger Entry`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'
-				and posting_date = %s and posting_time = %s order by name desc limit 1""", 
+				and posting_date = %s and posting_time = %s order by name desc limit 1""",
 				(d[2], d[3]))
 			self.assertEqual(res and flt(res[0][0]) or 0, d[4])
-			
+
 			# check bin qty and stock value
 			bin = frappe.db.sql("""select actual_qty, stock_value from `tabBin`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'""")
-			
+
 			self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1])] or [], [d[5], d[6]])
-			
+
 			# no gl entries
-			gl_entries = frappe.db.sql("""select name from `tabGL Entry` 
+			gl_entries = frappe.db.sql("""select name from `tabGL Entry`
 				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""",
 				 stock_reco.name)
 			self.assertFalse(gl_entries)
-			
-		
+
+
 	def test_reco_for_moving_average(self):
 		frappe.defaults.set_global_default("auto_accounting_for_stock", 0)
-		# [[qty, valuation_rate, posting_date, 
+		# [[qty, valuation_rate, posting_date,
 		#		posting_time, expected_stock_value, bin_qty, bin_valuation]]
 		input_data = [
-			[50, 1000, "2012-12-26", "12:00", 50000, 45, 48000], 
-			[5, 1000, "2012-12-26", "12:00", 5000, 0, 0], 
-			[15, 1000, "2012-12-26", "12:00", 15000, 10, 12000], 
-			[25, 900, "2012-12-26", "12:00", 22500, 20, 22500], 
-			[20, 500, "2012-12-26", "12:00", 10000, 15, 18000], 
-			[50, 1000, "2013-01-01", "12:00", 50000, 65, 68000], 
+			[50, 1000, "2012-12-26", "12:00", 50000, 45, 48000],
+			[5, 1000, "2012-12-26", "12:00", 5000, 0, 0],
+			[15, 1000, "2012-12-26", "12:00", 15000, 10, 12000],
+			[25, 900, "2012-12-26", "12:00", 22500, 20, 22500],
+			[20, 500, "2012-12-26", "12:00", 10000, 15, 18000],
+			[50, 1000, "2013-01-01", "12:00", 50000, 65, 68000],
 			[5, 1000, "2013-01-01", "12:00", 5000, 20, 23000],
 			["", 1000, "2012-12-26", "12:05", 15000, 10, 12000],
 			[20, "", "2012-12-26", "12:05", 18000, 15, 18000],
 			[10, 2000, "2012-12-26", "12:10", 20000, 5, 6000],
 			[1, 1000, "2012-12-01", "00:00", 1000, 11, 13200],
 			[0, "", "2012-12-26", "12:10", 0, -5, 0]
-			
+
 		]
-		
+
 		for d in input_data:
 			self.cleanup_data()
 			self.insert_existing_sle("Moving Average")
 			stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
-			
+
 			# check stock value in sle
 			res = frappe.db.sql("""select stock_value from `tabStock Ledger Entry`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'
-				and posting_date = %s and posting_time = %s order by name desc limit 1""", 
+				and posting_date = %s and posting_time = %s order by name desc limit 1""",
 				(d[2], d[3]))
-				
+
 			self.assertEqual(res and flt(res[0][0], 4) or 0, d[4])
-			
+
 			# bin qty and stock value
 			bin = frappe.db.sql("""select actual_qty, stock_value from `tabBin`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'""")
-			
-			self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1], 4)] or [], 
+
+			self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1], 4)] or [],
 				[flt(d[5]), flt(d[6])])
-				
+
 			# no gl entries
-			gl_entries = frappe.db.sql("""select name from `tabGL Entry` 
-				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""", 
+			gl_entries = frappe.db.sql("""select name from `tabGL Entry`
+				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""",
 				stock_reco.name)
 			self.assertFalse(gl_entries)
-			
+
 	def test_reco_fifo_gl_entries(self):
 		frappe.defaults.set_global_default("auto_accounting_for_stock", 1)
-		
+
 		# [[qty, valuation_rate, posting_date, posting_time, stock_in_hand_debit]]
 		input_data = [
-			[50, 1000, "2012-12-26", "12:00"], 
-			[5, 1000, "2012-12-26", "12:00"], 
-			[15, 1000, "2012-12-26", "12:00"], 
-			[25, 900, "2012-12-26", "12:00"], 
-			[20, 500, "2012-12-26", "12:00"], 
+			[50, 1000, "2012-12-26", "12:00"],
+			[5, 1000, "2012-12-26", "12:00"],
+			[15, 1000, "2012-12-26", "12:00"],
+			[25, 900, "2012-12-26", "12:00"],
+			[20, 500, "2012-12-26", "12:00"],
 			["", 1000, "2012-12-26", "12:05"],
 			[20, "", "2012-12-26", "12:05"],
 			[10, 2000, "2012-12-26", "12:10"],
 			[0, "", "2012-12-26", "12:10"],
-			[50, 1000, "2013-01-01", "12:00"], 
+			[50, 1000, "2013-01-01", "12:00"],
 			[5, 1000, "2013-01-01", "12:00"],
 			[1, 1000, "2012-12-01", "00:00"],
 		]
-			
+
 		for d in input_data:
 			self.cleanup_data()
 			self.insert_existing_sle("FIFO")
 			self.assertFalse(get_stock_and_account_difference(["_Test Account Stock In Hand - _TC"]))
 			stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
-			
-			
+
+
 			self.assertFalse(get_stock_and_account_difference(["_Test Account Stock In Hand - _TC"]))
 
 			stock_reco.cancel()
 			self.assertFalse(get_stock_and_account_difference(["_Test Account Stock In Hand - _TC"]))
-		
+
 		frappe.defaults.set_global_default("auto_accounting_for_stock", 0)
-			
+
 	def test_reco_moving_average_gl_entries(self):
 		frappe.defaults.set_global_default("auto_accounting_for_stock", 1)
-		
-		# [[qty, valuation_rate, posting_date, 
+
+		# [[qty, valuation_rate, posting_date,
 		#		posting_time, stock_in_hand_debit]]
 		input_data = [
-			[50, 1000, "2012-12-26", "12:00", 36500], 
-			[5, 1000, "2012-12-26", "12:00", -8500], 
-			[15, 1000, "2012-12-26", "12:00", 1500], 
-			[25, 900, "2012-12-26", "12:00", 9000], 
-			[20, 500, "2012-12-26", "12:00", -3500], 
+			[50, 1000, "2012-12-26", "12:00", 36500],
+			[5, 1000, "2012-12-26", "12:00", -8500],
+			[15, 1000, "2012-12-26", "12:00", 1500],
+			[25, 900, "2012-12-26", "12:00", 9000],
+			[20, 500, "2012-12-26", "12:00", -3500],
 			["", 1000, "2012-12-26", "12:05", 1500],
 			[20, "", "2012-12-26", "12:05", 4500],
 			[10, 2000, "2012-12-26", "12:10", 6500],
 			[0, "", "2012-12-26", "12:10", -13500],
-			[50, 1000, "2013-01-01", "12:00", 50000], 
+			[50, 1000, "2013-01-01", "12:00", 50000],
 			[5, 1000, "2013-01-01", "12:00", 5000],
 			[1, 1000, "2012-12-01", "00:00", 1000],
-			
+
 		]
-			
+
 		for d in input_data:
 			self.cleanup_data()
 			self.insert_existing_sle("Moving Average")
 			stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
 			self.assertFalse(get_stock_and_account_difference(["_Test Warehouse - _TC"]))
-			
+
 			# cancel
 			stock_reco.cancel()
 			self.assertFalse(get_stock_and_account_difference(["_Test Warehouse - _TC"]))
-		
+
 		frappe.defaults.set_global_default("auto_accounting_for_stock", 0)
 
 
@@ -173,7 +173,7 @@
 		frappe.db.sql("delete from `tabStock Ledger Entry`")
 		frappe.db.sql("delete from tabBin")
 		frappe.db.sql("delete from `tabGL Entry`")
-						
+
 	def submit_stock_reconciliation(self, qty, rate, posting_date, posting_time):
 		stock_reco = frappe.get_doc({
 			"doctype": "Stock Reconciliation",
@@ -191,40 +191,40 @@
 		stock_reco.insert()
 		stock_reco.submit()
 		return stock_reco
-		
+
 	def insert_existing_sle(self, valuation_method):
 		frappe.db.set_value("Item", "_Test Item", "valuation_method", valuation_method)
 		frappe.db.set_default("allow_negative_stock", 1)
-		
-		stock_entry = [
-			{
-				"company": "_Test Company", 
-				"doctype": "Stock Entry", 
-				"posting_date": "2012-12-12", 
-				"posting_time": "01:00", 
-				"purpose": "Material Receipt",
-				"fiscal_year": "_Test Fiscal Year 2012", 
-			}, 
-			{
-				"conversion_factor": 1.0, 
-				"doctype": "Stock Entry Detail", 
-				"item_code": "_Test Item", 
-				"parentfield": "mtn_details", 
-				"incoming_rate": 1000,
-				"qty": 20.0, 
-				"stock_uom": "_Test UOM", 
-				"transfer_qty": 20.0, 
-				"uom": "_Test UOM",
-				"t_warehouse": "_Test Warehouse - _TC",
-				"expense_account": "Stock Adjustment - _TC",
-				"cost_center": "_Test Cost Center - _TC"
-			}, 
-		]
-			
+
+		stock_entry = {
+			"company": "_Test Company",
+			"doctype": "Stock Entry",
+			"posting_date": "2012-12-12",
+			"posting_time": "01:00",
+			"purpose": "Material Receipt",
+			"fiscal_year": "_Test Fiscal Year 2012",
+			"mtn_details": [
+				{
+					"conversion_factor": 1.0,
+					"doctype": "Stock Entry Detail",
+					"item_code": "_Test Item",
+					"parentfield": "mtn_details",
+					"incoming_rate": 1000,
+					"qty": 20.0,
+					"stock_uom": "_Test UOM",
+					"transfer_qty": 20.0,
+					"uom": "_Test UOM",
+					"t_warehouse": "_Test Warehouse - _TC",
+					"expense_account": "Stock Adjustment - _TC",
+					"cost_center": "_Test Cost Center - _TC"
+				}
+			]
+		}
+
 		pr = frappe.copy_doc(stock_entry)
 		pr.insert()
 		pr.submit()
-		
+
 		pr1 = frappe.copy_doc(stock_entry)
 		pr1.posting_date = "2012-12-15"
 		pr1.posting_time = "02:00"
@@ -233,7 +233,7 @@
 		pr1.get("mtn_details")[0].incoming_rate = 700
 		pr1.insert()
 		pr1.submit()
-		
+
 		pr2 = frappe.copy_doc(stock_entry)
 		pr2.posting_date = "2012-12-25"
 		pr2.posting_time = "03:00"
@@ -245,7 +245,7 @@
 		pr2.get("mtn_details")[0].incoming_rate = 0
 		pr2.insert()
 		pr2.submit()
-		
+
 		pr3 = frappe.copy_doc(stock_entry)
 		pr3.posting_date = "2012-12-31"
 		pr3.posting_time = "08:00"
@@ -257,8 +257,8 @@
 		pr3.get("mtn_details")[0].incoming_rate = 0
 		pr3.insert()
 		pr3.submit()
-		
-		
+
+
 		pr4 = frappe.copy_doc(stock_entry)
 		pr4.posting_date = "2013-01-05"
 		pr4.fiscal_year = "_Test Fiscal Year 2013"
@@ -268,6 +268,6 @@
 		pr4.get("mtn_details")[0].incoming_rate = 1200
 		pr4.insert()
 		pr4.submit()
-		
-		
-test_dependencies = ["Item", "Warehouse"]
\ No newline at end of file
+
+
+test_dependencies = ["Item", "Warehouse"]
diff --git a/erpnext/support/doctype/newsletter/test_newsletter.py b/erpnext/support/doctype/newsletter/test_newsletter.py
index 3d89b9a..a8ff683 100644
--- a/erpnext/support/doctype/newsletter/test_newsletter.py
+++ b/erpnext/support/doctype/newsletter/test_newsletter.py
@@ -7,36 +7,36 @@
 	def test_get_recipients_lead(self):
 		w = frappe.get_doc(test_records[0])
 		w.insert()
-		self.assertTrue("test_lead@example.com" in w.controller.get_recipients())
+		self.assertTrue("test_lead@example.com" in w.get_recipients())
 		frappe.db.sql("""delete from `tabBulk Email`""")
-		w.controller.send_emails()
+		w.send_emails()
 		self.assertTrue(frappe.db.get_value("Bulk Email", {"recipient": "test_lead@example.com"}))
 
 	def test_get_recipients_lead_by_status(self):
 		w = frappe.get_doc(test_records[0])
 		w.lead_status="Converted"
 		w.insert()
-		self.assertTrue("test_lead3@example.com" in w.controller.get_recipients())
+		self.assertTrue("test_lead3@example.com" in w.get_recipients())
 
 	def test_get_recipients_contact_customer(self):
 		w = frappe.get_doc(test_records[1])
 		w.insert()
-		self.assertTrue("test_contact_customer@example.com" in w.controller.get_recipients())
+		self.assertTrue("test_contact_customer@example.com" in w.get_recipients())
 
 	def test_get_recipients_contact_supplier(self):
 		w = frappe.get_doc(test_records[1])
 		w.contact_type="Supplier"
 		w.insert()
-		self.assertTrue("test_contact_supplier@example.com" in w.controller.get_recipients())
+		self.assertTrue("test_contact_supplier@example.com" in w.get_recipients())
 
 	def test_get_recipients_custom(self):
 		w = frappe.get_doc(test_records[2])
 		w.insert()
-		self.assertTrue("test_custom2@example.com" in w.controller.get_recipients())
-		self.assertTrue(frappe.db.get("Lead", 
+		self.assertTrue("test_custom2@example.com" in w.get_recipients())
+		self.assertTrue(frappe.db.get("Lead",
 			{"email_id": "test_custom2@example.com"}))
 
 
 test_dependencies = ["Lead", "Contact"]
 
-test_records = frappe.get_test_records('Newsletter')
\ No newline at end of file
+test_records = frappe.get_test_records('Newsletter')
