diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 304ded2..8c5bcac 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -19,7 +19,7 @@
 			warehouse_account = get_warehouse_account()
 
 			if self.docstatus==1:
-				gl_entries = self.get_gl_entries(warehouse_account, allow_negative_stock)
+				gl_entries = self.get_gl_entries(warehouse_account, allow_negative_stock=allow_negative_stock)
 				make_gl_entries(gl_entries)
 
 			if repost_future_gle:
@@ -30,7 +30,7 @@
 	def get_gl_entries(self, warehouse_account=None, default_expense_account=None,
 			default_cost_center=None, allow_negative_stock=False):
 
-		block_negative_stock(allow_negative_stock)
+		# block_negative_stock(allow_negative_stock)
 
 		if not warehouse_account:
 			warehouse_account = get_warehouse_account()
@@ -52,7 +52,7 @@
 						stock_value_difference = flt(sle.stock_value_difference, 2)
 						if not stock_value_difference:
 							valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, sle.posting_date)
-							stock_value_difference = flt(sle.qty)*flt(valuation_rate)
+							stock_value_difference = flt(sle.actual_qty)*flt(valuation_rate)
 
 						gl_list.append(self.get_gl_dict({
 							"account": warehouse_account[sle.warehouse],
@@ -126,7 +126,8 @@
 
 	def get_stock_ledger_details(self):
 		stock_ledger = {}
-		for sle in frappe.db.sql("""select warehouse, stock_value_difference, voucher_detail_no
+		for sle in frappe.db.sql("""select warehouse, stock_value_difference,
+			voucher_detail_no, item_code, posting_date, actual_qty
 			from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""",
 			(self.doctype, self.name), as_dict=True):
 				stock_ledger.setdefault(sle.voucher_detail_no, []).append(sle)
@@ -237,7 +238,7 @@
 	for voucher_type, voucher_no in future_stock_vouchers:
 		existing_gle = gle.get((voucher_type, voucher_no), [])
 		voucher_obj = frappe.get_doc(voucher_type, voucher_no)
-		expected_gle = voucher_obj.get_gl_entries(warehouse_account, allow_negative_stock)
+		expected_gle = voucher_obj.get_gl_entries(warehouse_account, allow_negative_stock=allow_negative_stock)
 		if expected_gle:
 			if not existing_gle or not compare_existing_and_expected_gle(existing_gle,
 				expected_gle):
@@ -310,6 +311,6 @@
 	valuation_rate = flt(last_valuation_rate[0][0]) if last_valuation_rate else 0
 
 	if not valuation_rate:
-		valuation_rate = frappe.db.get_value("Item Price", {"item_code": item_code, "buying": 1}, "price")
+		valuation_rate = frappe.db.get_value("Item Price", {"item_code": item_code, "buying": 1}, "price_list_rate")
 
 	return valuation_rate
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
index b4fa971..3046c5e 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -97,10 +97,10 @@
 
 			# update stock & gl entries for cancelled state of PR
 			pr.docstatus = 2
-			pr.update_stock()
+			pr.update_stock_ledger()
 			pr.make_gl_entries_on_cancel()
 
 			# update stock & gl entries for submit state of PR
 			pr.docstatus = 1
-			pr.update_stock()
+			pr.update_stock_ledger()
 			pr.make_gl_entries()
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index a7fa6bb..fc35222 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -130,7 +130,7 @@
 				 if not d.prevdoc_docname:
 					 frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code))
 
-	def update_stock(self):
+	def update_stock_ledger(self):
 		sl_entries = []
 		stock_items = self.get_stock_items()
 
@@ -234,7 +234,7 @@
 
 		self.update_ordered_qty()
 
-		self.update_stock()
+		self.update_stock_ledger()
 
 		from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
 		update_serial_nos_after_submit(self, "purchase_receipt_details")
@@ -267,7 +267,7 @@
 
 		self.update_ordered_qty()
 
-		self.update_stock()
+		self.update_stock_ledger()
 
 		self.update_prevdoc_status()
 		pc_obj.update_last_purchase_rate(self, 0)
@@ -283,8 +283,11 @@
 	def get_rate(self,arg):
 		return frappe.get_doc('Purchase Common').get_rate(arg,self)
 
-	def get_gl_entries(self, warehouse_account=None):
+	def get_gl_entries(self, warehouse_account=None, allow_negative_stock=False):
 		from erpnext.accounts.general_ledger import process_gl_map
+		from erpnext.controllers.stock_controller import block_negative_stock
+
+		block_negative_stock(allow_negative_stock)
 
 		stock_rbnb = self.get_company_default("stock_received_but_not_billed")
 		expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 4f3480c..4cc96bf 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -527,7 +527,7 @@
 					}
 				}, bom_no=self.bom_no)
 
-		self.get_stock_and_rate()
+		self.e()
 
 	def get_bom_raw_materials(self, qty):
 		from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 8e837e2..6c3c395 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -22,7 +22,7 @@
 		self.validate_expense_account()
 
 	def on_submit(self):
-		self.insert_stock_ledger_entries()
+		self.update_stock_ledger()
 		self.make_gl_entries()
 
 	def on_cancel(self):
@@ -126,7 +126,7 @@
 		except Exception, e:
 			self.validation_messages.append(_("Row # ") + ("%d: " % (row_num)) + cstr(e))
 
-	def insert_stock_ledger_entries(self):
+	def update_stock_ledger(self):
 		"""	find difference between current and expected entries
 			and create stock ledger entries based on the difference"""
 		from erpnext.stock.stock_ledger import get_previous_sle
@@ -155,8 +155,8 @@
 				if row.valuation_rate in ("", None):
 					row.valuation_rate = previous_sle.get("valuation_rate")
 
-			if row.qty and not row.valuation_rate:
-				frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code))
+			# if row.qty and not row.valuation_rate:
+			# 	frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code))
 
 			self.insert_entries(row)
 
diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js
index c2ffc37..7405227 100644
--- a/erpnext/stock/page/stock_balance/stock_balance.js
+++ b/erpnext/stock/page/stock_balance/stock_balance.js
@@ -105,12 +105,14 @@
 				var is_fifo = valuation_method == "FIFO";
 
 				if(sl.voucher_type=="Stock Reconciliation") {
-					var qty_diff = sl.qty_after_trasaction - item.closing_qty;
-					var value_diff = (sl.valuation_rate * sl.qty_after_trasaction) - item.closing_value;
+					var qty_diff = sl.qty_after_transaction - (item.temp_closing_qty || 0.0);
+					var value_diff = (sl.valuation_rate * sl.qty_after_transaction) - (item.temp_closing_value || 0.0);
 				} else {
 					var qty_diff = sl.qty;
 					var value_diff = me.get_value_diff(wh, sl, is_fifo);
 				}
+				item.temp_closing_qty += qty_diff;
+				item.temp_closing_value += value_diff;
 
 				if(sl_posting_date < from_date) {
 					item.opening_qty += qty_diff;
diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py
index 4c14548..9c3bf1d 100644
--- a/erpnext/utilities/repost_stock.py
+++ b/erpnext/utilities/repost_stock.py
@@ -209,3 +209,30 @@
 
 		frappe.db.sql("""update `tabSerial No` set warehouse='' where status in ('Delivered', 'Purchase Returned')""")
 
+def repost_all_stock_vouchers():
+	vouchers = frappe.db.sql("""select distinct voucher_type, voucher_no
+		from `tabStock Ledger Entry` order by posting_date, posting_time, name""")
+
+	rejected = []
+	i = 0
+	for voucher_type, voucher_no in vouchers:
+		i += 1
+		print voucher_type, voucher_no
+		try:
+			for dt in ["Stock Ledger Entry", "GL Entry"]:
+				frappe.db.sql("""delete from `tab%s` where voucher_type=%s and voucher_no=%s"""%
+					(dt, '%s', '%s'), (voucher_type, voucher_no))
+
+			doc = frappe.get_doc(voucher_type, voucher_no)
+			if voucher_type=="Stock Entry" and doc.purpose in ["Manufacture", "Repack"]:
+				doc.get_stock_and_rate(force=1)
+			doc.update_stock_ledger()
+			doc.make_gl_entries()
+			if i%100 == 0:
+				frappe.db.commit()
+		except:
+			rejected.append([voucher_type, voucher_no])
+			pass
+
+	print rejected
+
