diff --git a/accounts/doctype/account/account.py b/accounts/doctype/account/account.py
index ff85666..ed49c2d 100644
--- a/accounts/doctype/account/account.py
+++ b/accounts/doctype/account/account.py
@@ -120,7 +120,7 @@
 	# check if child exists
 	# ==================================================================
 	def check_if_child_exists(self):
-		return sql("select name from `tabAccount` where parent_account = %s and docstatus<2", self.doc.name)
+		return sql("select name from `tabAccount` where parent_account = %s and docstatus != 2", self.doc.name, debug=0)
 	
 	# Update balance
 	# ==================================================================
@@ -234,24 +234,27 @@
 		if flt(self.get_curr_bal()) != 0:
 			msgprint("Account with existing balance can not be trashed", raise_exception=1)
 		if self.check_if_child_exists():
-			msgprint("Child account exists for this account. You can not make trash this account.", raise_exception=1)
+			msgprint("Child account exists for this account. You can not trash this account.", raise_exception=1)
 
 
 	# get current year balance
 	# ==================================================================
 	def get_curr_bal(self):
-		bal = sql("select balance from `tabAccount Balance` where period = '%s' and parent = '%s'" % (get_defaults()['fiscal_year'], self.doc.name))
+		bal = sql("select balance from `tabAccount Balance` where period = '%s' and parent = '%s'" % (get_defaults()['fiscal_year'], self.doc.name),debug=0)
 		return bal and flt(bal[0][0]) or 0
 
 	# On Trash
 	# ==================================================================
 	def on_trash(self): 
 		# Check balance before trash
-		self.check_balance_before_trash()
+		self.check_balance_before_trash()		
 		# rebuild tree
 		set(self.doc,'old_parent', '')
 		self.update_nsm_model()
 
+		#delete Account Balance
+		sql("delete from `tabAccount Balance` where account = %s", self.doc.name)
+
 	# On restore
 	# ==================================================================
 	def on_restore(self):
diff --git a/accounts/doctype/cost_center/cost_center.py b/accounts/doctype/cost_center/cost_center.py
index dea00ec..3b374c5 100644
--- a/accounts/doctype/cost_center/cost_center.py
+++ b/accounts/doctype/cost_center/cost_center.py
@@ -24,8 +24,7 @@
         
   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   
- 
+    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 ''
@@ -35,10 +34,8 @@
     return cstr(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
@@ -55,4 +52,17 @@
     import webnotes
     import webnotes.utils.nestedset
     # update Node Set Model
-    webnotes.utils.nestedset.update_nsm(self)
+    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=1)
+    
+  # 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/setup/doctype/company/company.py b/setup/doctype/company/company.py
index fe60a2b..ac5d0d6 100644
--- a/setup/doctype/company/company.py
+++ b/setup/doctype/company/company.py
@@ -202,17 +202,35 @@
 
   # Trash accounts and cost centers for this company
   # ---------------------------------------------------
-  def on_trash(self):
-    acc = sql("select name from tabAccount where company = '%s' and docstatus = 1" % self.doc.name)
-    for each in acc:
-      get_obj('Account', each[0]).on_trash()
+  #def on_trash1(self):
+  #  acc = sql("select name from tabAccount where company = '%s' and docstatus != 2 order by lft desc, rgt desc limit 2" % self.doc.name, debug=1)
+  #  for each in acc:
+  #    get_obj('Account', each[0]).on_trash()
       
-    cc = sql("select name from `tabCost Center` where company_name = '%s' and docstatus = 1" % self.doc.name)
-    for each in cc:
-      get_obj('Cost Center', each[0]).on_trash()
+  #  cc = sql("select name from `tabCost Center` where company_name = '%s' and docstatus != 2" % self.doc.name)
+  #  for each in cc:
+  #    get_obj('Cost Center', each[0]).on_trash()
     
-    msgprint("Company trashed. All the accounts and cost centers related to this company also trashed. You can restore it anytime from Setup -> Manage Trash")
-
+  #  msgprint("Company trashed. All the accounts and cost centers related to this company also trashed. You can restore it anytime from Setup -> Manage Trash")
+    
+  def on_trash(self):    
+    rec = sql("SELECT sum(ab.opening), sum(ab.balance), sum(ab.debit), sum(ab.credit) FROM `tabAccount Balance` ab, `tabAccount` a WHERE ab.account = a.name and a.company = %s", self.doc.name)
+    if rec[0][0] == 0 and rec[0][1] == 0 and rec[0][2] == 0 and rec[0][3] == 0:
+      #delete tabAccount Balance
+      sql("delete ab.* from `tabAccount Balance` ab, `tabAccount` a where ab.account = a.name and a.company = %s", self.doc.name)
+      #delete tabAccount
+      sql("delete from `tabAccount` where company = %s order by lft desc, rgt desc", self.doc.name)
+      
+      #delete cost center child table - budget detail
+      sql("delete bd.* from `tabBudget Detail` bd, `tabCost Center` cc where bd.parent = cc.name and cc.company_name = %s", self.doc.name)
+      #delete cost center
+      sql("delete from `tabCost Center` WHERE company_name = %s order by lft desc, rgt desc", self.doc.name)
+      
+      #update value as blank for tabDefaultValue defkey=company
+      sql("update `tabDefaultValue` set defvalue = '' where defkey='company' and defvalue = %s", self.doc.name)
+      
+      #update value as blank for tabSingles Manage Account
+      sql("update `tabSingles` set value = '' where doctype='Manage Account' and field = 'default_company' and value = %s", self.doc.name)
 
   # Restore accounts and cost centers for this company  
   # ---------------------------------------------------
