diff --git a/accounts/doctype/gl_control/gl_control.py b/accounts/doctype/gl_control/gl_control.py
index a458d03..e4896d3 100644
--- a/accounts/doctype/gl_control/gl_control.py
+++ b/accounts/doctype/gl_control/gl_control.py
@@ -136,47 +136,58 @@
 			else:
 				self.entries.append(le)
 
-
-	# Save GL Entries
-	# ----------------
-	def save_entries(self, cancel, adv_adj, update_outstanding):
+	def manage_debit_credit(self, cancel):
+		total_debit, total_credit = 0, 0
 		for le in self.entries:
 			# round off upto 2 decimal
-			le.debit, le.credit = round(flt(le.debit), 2), round(flt(le.credit), 2)
-			
+			le.debit = flt(le.debit, 2)
+			le.credit = flt(le.credit, 2)
+
 			#toggle debit, credit if negative entry
 			if flt(le.debit) < 0 or flt(le.credit) < 0:
 				tmp=le.debit
 				le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
 			
-			# toggled debit/credit in two separate condition because both should be executed at the 
-			# time of cancellation when there is negative amount (tax discount)
+			# toggled debit/credit in two separate condition because both
+			# should be executed at the time of cancellation when there is 
+			# negative amount (tax discount)
 			if cancel:
 				tmp=le.debit
 				le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
+		
+			# update total debit / credit
+			total_debit += flt(le.debit, 2)
+			total_credit += flt(le.credit, 2)
+			
+		diff = flt(total_debit - total_credit, 2)
+		if abs(diff)==0.01:
+			if self.entries[0].debit:
+				self.entries[0].debit = self.entries[0].debit - diff
+			elif self.entries[0].credit:
+				self.entries[0].credit = self.entries[0].credit + diff
+		elif abs(diff) > 0.01 and not cancel:
+			# Due to old wrong entries(total debit!=total credit) some voucher should be cancelled
+			msgprint("""Debit and Credit not equal for this voucher: Diff (Debit) is %s""" %
+			 	diff, raise_exception=1)
 
-
+	def save_entries(self, cancel, adv_adj, update_outstanding):
+		self.manage_debit_credit(cancel)
+		
+		for le in self.entries:
 			le_obj = get_obj(doc=le)
 			# validate except on_cancel
 			if not cancel:
 				le_obj.validate()
 
-			# save
 			le.save(1)
 			le_obj.on_update(adv_adj, cancel, update_outstanding)
-
-			# update total debit / credit
-			self.td += flt(le.debit)
-			self.tc += flt(le.credit)
 			
 			
 	# Make Multiple Entries
-	# ---------------------
 	def make_gl_entries(self, doc, doclist, cancel=0, adv_adj = 0, use_mapper='', merge_entries = 1, update_outstanding='Yes'):
 		self.entries = []
 		# get entries
 		le_map_list = webnotes.conn.sql("select * from `tabGL Mapper Detail` where parent = %s", use_mapper or doc.doctype, as_dict=1)
-		self.td, self.tc = 0.0, 0.0
 		for le_map in le_map_list:
 			if le_map['table_field']:
 				for d in getlist(doclist,le_map['table_field']):
@@ -189,11 +200,7 @@
 		# save entries
 		self.save_entries(cancel, adv_adj, update_outstanding)
 
-		# check total debit / credit
-		# Due to old wrong entries (total debit != total credit) some voucher could be cancelled
-		if abs(self.td - self.tc) > 0.004 and not cancel:
-			msgprint("Debit and Credit not equal for this voucher: Diff (Debit) is %s" % (self.td-self.tc))
-			raise Exception
+		
 
 		# set as cancelled
 		if cancel:
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index b29ccb7..4905006 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -21,7 +21,6 @@
 var tname = cur_frm.cscript.tname;
 var fname = cur_frm.cscript.fname;
 
-
 cur_frm.cscript.get_default_schedule_date = function(doc) {
 		var ch = getchildren( tname, doc.name, fname);
 		if (flt(ch.length) > 0){
