diff --git a/accounts/doctype/cost_center/cost_center.py b/accounts/doctype/cost_center/cost_center.py
index 521712b..66d22f0 100644
--- a/accounts/doctype/cost_center/cost_center.py
+++ b/accounts/doctype/cost_center/cost_center.py
@@ -18,51 +18,57 @@
 
 
 class DocType:
-  def __init__(self,d,dl):
-    self.doc, self.doclist = d,dl
-    self.nsm_parent_field = 'parent_cost_center'
-        
-  def autoname(self):
-    #company_abbr = sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
-    self.doc.name = self.doc.cost_center_name + ' - ' + self.doc.company_abbr    
-      
-  def get_abbr(self):
-    abbr = sql("select abbr from tabCompany where company_name='%s'"%(self.doc.company_name))[0][0] or ''
-    ret = {
-      'company_abbr'  : abbr
-    }
-    return ret
+	def __init__(self,d,dl):
+		self.doc, self.doclist = d,dl
+		self.nsm_parent_field = 'parent_cost_center'
+				
+	def autoname(self):
+		self.doc.name = self.doc.cost_center_name + ' - ' + self.doc.company_abbr		
+			
+	#-------------------------------------------------------------------------
+	def get_abbr(self):
+		abbr = sql("select abbr from tabCompany where company_name='%s'"%(self.doc.company_name))[0][0] or ''
+		ret = {
+			'company_abbr'	: abbr
+		}
+		return ret
 
-  def validate(self): 
-    # Cost Center name must be unique
-    # ---------------------------
-    if (self.doc.__islocal or (not self.doc.name)) and sql("select name from `tabCost Center` where cost_center_name = %s and company_name=%s", (self.doc.cost_center_name, self.doc.company_name)):
-      msgprint("Cost Center Name already exists, please rename")
-      raise Exception
-      
-    check_acc_list = []
-    for d in getlist(self.doclist, 'budget_details'):
-      if [d.account, d.fiscal_year] in check_acc_list:
-        msgprint("Account " + cstr(d.account) + "has been entered more than once for fiscal year " + cstr(d.fiscal_year))
-        raise Exception
-      if [d.account, d.fiscal_year] not in check_acc_list: check_acc_list.append([d.account, d.fiscal_year])
-      
-  def on_update(self):
-    # update Node Set Model
-    import webnotes
-    import webnotes.utils.nestedset
-    # update Node Set Model
-    webnotes.utils.nestedset.update_nsm(self)  
-    
-  def check_if_child_exists(self):
-    return sql("select name from `tabCost Center` where parent_cost_center = %s and docstatus != 2", self.doc.name, debug=0)
-    
-  # On Trash
-  # --------
-  def on_trash(self):
-    if self.check_if_child_exists():
-      msgprint("Child exists for this cost center. You can not trash this account.", raise_exception=1)      
-      
-    # rebuild tree
-    set(self.doc,'old_parent', '')
-    self.update_nsm_model()
+	#-------------------------------------------------------------------------
+	def validate(self): 
+		"""
+			Cost Center name must be unique
+		"""
+		if (self.doc.__islocal or not self.doc.name) and sql("select name from `tabCost Center` where cost_center_name = %s and company_name=%s", (self.doc.cost_center_name, self.doc.company_name)):
+			msgprint("Cost Center Name already exists, please rename", raise_exception=1)
+			
+		check_acc_list = []
+		for d in getlist(self.doclist, 'budget_details'):
+			if [d.account, d.fiscal_year] in check_acc_list:
+				msgprint("Account " + cstr(d.account) + "has been entered more than once for fiscal year " + cstr(d.fiscal_year), raise_exception=1)
+			else: 
+				check_acc_list.append([d.account, d.fiscal_year])
+			
+	#-------------------------------------------------------------------------
+	def update_nsm_model(self):
+		"""
+			update Nested Set Model
+		"""
+		import webnotes.utils.nestedset
+		webnotes.utils.nestedset.update_nsm(self)
+			
+	#-------------------------------------------------------------------------
+	def on_update(self):
+		self.update_nsm_model()
+		
+	def check_if_child_exists(self):
+		return sql("select name from `tabCost Center` where parent_cost_center = %s and docstatus != 2", self.doc.name)
+		
+	# On Trash
+	#-------------------------------------------------------------------------
+	def on_trash(self):
+		if self.check_if_child_exists():
+			msgprint("Child exists for this cost center. You can not trash this account.", raise_exception=1)			
+			
+		# rebuild tree
+		set(self.doc,'old_parent', '')
+		self.update_nsm_model()
diff --git a/patches/patch.py b/patches/patch.py
index 5db300a..3b2bb3e 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -360,3 +360,17 @@
 		reload_doc('hr', 'doctype', 'appraisal_detail')
 	elif patch_no == 370:
 		sql("update `tabDocField` set `hidden` = 0 where fieldname = 'group_or_ledger' and parent = 'Cost Center'")
+	elif patch_no == 371:
+		comp = sql("select name from tabCompany where docstatus!=2")
+		fy = sql("select name from `tabFiscal Year` order by year_start_date asc")
+		for c in comp:
+			prev_fy = ''
+			for f in fy:
+				fy_obj = get_obj('Fiscal Year', f[0])
+				fy_obj.doc.past_year = prev_fy
+				fy_obj.doc.company = c[0]
+				fy_obj.doc.save()
+				fy_obj.repost()
+				prev_fy = f[0]
+				sql("commit")
+				sql("start transaction")
