diff --git a/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index 224d70e..fb85f65 100644
--- a/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -36,7 +36,8 @@
 		webnotes.conn.rollback()
 		
 	def test_reco_for_fifo(self):
-		# [[qty, valuation_rate, posting_date, posting_time, expected_stock_value, bin_qty]]
+		# [[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], 
@@ -73,20 +74,21 @@
 			self.setUp()
 					
 		
-	def atest_reco_for_moving_average(self):
-		# [[qty, valuation_rate, posting_date, posting_time]]
+	def test_reco_for_moving_average(self):
+		# [[qty, valuation_rate, posting_date, 
+		#		posting_time, expected_stock_value, bin_qty, bin_valuation]]
 		input_data = [
-			[50, 1000, "2012-12-26", "12:00", 50000], 
-			[5, 1000, "2012-12-26", "12:00", 5000], 
-			[15, 1000, "2012-12-26", "12:00", 15000], 
-			[25, 900, "2012-12-26", "12:00", 22500], 
-			[20, 500, "2012-12-26", "12:00", 10000], 
-			[50, 1000, "2013-01-01", "12:00", 50000], 
-			[5, 1000, "2013-01-01", "12:00", 5000],
-			["", 1000, "2012-12-26", "12:05", 15000],
-			[20, "", "2012-12-26", "12:05", 18000],
-			[10, 2000, "2012-12-26", "12:10", 20000],
-			[1, 1000, "2012-12-01", "00:00", 1000],
+			[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],
 		]
 		
 		for d in input_data:
@@ -101,6 +103,12 @@
 				
 			self.assertEqual(res and flt(res[0][0], 4) or 0, d[4])
 			
+			bin = webnotes.conn.sql("""select actual_qty, stock_value from `tabBin`
+				where item_code = 'Android Jack D' and warehouse = 'Default Warehouse'""")
+			
+			self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1], 4)] or [], 
+				[flt(d[5]), flt(d[6])])
+						
 			self.tearDown()
 			self.setUp()
 			
diff --git a/stock/stock_ledger.py b/stock/stock_ledger.py
index 3cad355..7d19c9c 100644
--- a/stock/stock_ledger.py
+++ b/stock/stock_ledger.py
@@ -56,13 +56,13 @@
 				continue
 
 		if sle.serial_no:
-			valuation_rate, incoming_rate = get_serialized_values(qty_after_transaction, sle,
+			valuation_rate = get_serialized_values(qty_after_transaction, sle,
 				valuation_rate)
 		elif valuation_method == "Moving Average":
-			valuation_rate, incoming_rate = get_moving_average_values(qty_after_transaction, sle,
+			valuation_rate = get_moving_average_values(qty_after_transaction, sle,
 				valuation_rate)
 		else:
-			valuation_rate, incoming_rate = get_fifo_values(qty_after_transaction, sle,
+			valuation_rate = get_fifo_values(qty_after_transaction, sle,
 				stock_queue)
 				
 		qty_after_transaction += flt(sle.actual_qty)
@@ -75,15 +75,13 @@
 				(qty_after_transaction * valuation_rate) or 0
 		else:
 			stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in stock_queue))
-			
-		# print sle.posting_date, qty_after_transaction, incoming_rate, valuation_rate
-			
+						
 		# update current sle
 		webnotes.conn.sql("""update `tabStock Ledger Entry`
 			set qty_after_transaction=%s, valuation_rate=%s, stock_queue=%s,
-			stock_value=%s, incoming_rate = %s where name=%s""", 
+			stock_value=%s where name=%s""", 
 			(qty_after_transaction, valuation_rate,
-			json.dumps(stock_queue), stock_value, incoming_rate, sle.name))
+			json.dumps(stock_queue), stock_value, sle.name))
 	
 	if _exceptions:
 		_raise_exceptions(args, verbose)
@@ -188,11 +186,11 @@
 				# else it remains the same as that of previous entry
 				valuation_rate = new_stock_value / new_stock_qty
 				
-	return valuation_rate, incoming_rate
+	return valuation_rate
 	
 def get_moving_average_values(qty_after_transaction, sle, valuation_rate):
 	incoming_rate = flt(sle.incoming_rate)
-	actual_qty = flt(sle.actual_qty)
+	actual_qty = flt(sle.actual_qty)	
 	
 	if not incoming_rate:
 		# In case of delivery/stock issue in_rate = 0 or wrong incoming rate
@@ -212,7 +210,7 @@
 	
 	# NOTE: val_rate is same as previous entry if new stock value is negative
 	
-	return valuation_rate, incoming_rate
+	return valuation_rate
 	
 def get_fifo_values(qty_after_transaction, sle, stock_queue):
 	incoming_rate = flt(sle.incoming_rate)
@@ -255,7 +253,7 @@
 
 	valuation_rate = stock_qty and (stock_value / flt(stock_qty)) or 0
 
-	return valuation_rate, incoming_rate
+	return valuation_rate
 
 def _raise_exceptions(args, verbose=1):
 	deficiency = min(e["diff"] for e in _exceptions)
