diff --git a/accounts/page/trial_balance/trial_balance.js b/accounts/page/trial_balance/trial_balance.js
index dc87d58..c64075f 100644
--- a/accounts/page/trial_balance/trial_balance.js
+++ b/accounts/page/trial_balance/trial_balance.js
@@ -37,37 +37,6 @@
 			});
 		},
 		
-		export: function() {
-			var msgbox = msgprint('<p>Select To Download:</p>\
-				<p><input type="checkbox" name="with_groups" checked> Account Groups</p>\
-				<p><input type="checkbox" name="with_ledgers" checked> Account Ledgers</p>\
-				<p><button class="btn btn-info">Download</button>');
-
-			var me = this;
-
-			$(msgbox.body).find("button").click(function() {
-				var with_groups = $(msgbox.body).find("[name='with_groups']").is(":checked");
-				var with_ledgers = $(msgbox.body).find("[name='with_ledgers']").is(":checked");
-
-				var data = wn.slickgrid_tools.get_view_data(me.columns, me.dataView, 
-					function(row, item) {
-						if(with_groups) {
-							// pad row
-							for(var i=0; i<item.indent; i++) row[0] = "   " + row[0];
-						}
-						if(with_groups && item.group_or_ledger == "Group") return true;
-						if(with_ledgers && item.group_or_ledger == "Ledger") return true;
-					
-						return false;
-				});
-				
-				wn.tools.downloadify(data, ["Report Manager", "System Manager"], me);
-				return false;
-			})
-
-			return false;
-		},
-		
 		prepare_balances: function() {
 			// store value of with closing entry
 			this.with_period_closing_entry = this.wrapper
diff --git a/stock/page/stock_balance/stock_balance.js b/stock/page/stock_balance/stock_balance.js
index 90c7943..5a2af2a 100644
--- a/stock/page/stock_balance/stock_balance.js
+++ b/stock/page/stock_balance/stock_balance.js
@@ -42,14 +42,25 @@
 		this.columns = [
 			{id: "name", name: "Item", field: "name", width: 300,
 				formatter: this.tree_formatter},
-			{id: "opening", name: "Opening", field: "opening", width: 100, 
+				
+			{id: "opening_qty", name: "Opening Qty", field: "opening_qty", width: 100, 
 				formatter: this.currency_formatter},
-			{id: "inflow", name: "In", field: "inflow", width: 100, 
+			{id: "inflow_qty", name: "In Qty", field: "inflow_qty", width: 100, 
 				formatter: this.currency_formatter},
-			{id: "outflow", name: "Out", field: "outflow", width: 100, 
+			{id: "outflow_qty", name: "Out Qty", field: "outflow_qty", width: 100, 
 				formatter: this.currency_formatter},
-			{id: "closing", name: "Closing", field: "closing", width: 100, 
+			{id: "closing_qty", name: "Closing Qty", field: "closing_qty", width: 100, 
 				formatter: this.currency_formatter},
+				
+			{id: "opening_value", name: "Opening Value", field: "opening_value", width: 100, 
+				formatter: this.currency_formatter},
+			{id: "inflow_value", name: "In Value", field: "inflow_value", width: 100, 
+				formatter: this.currency_formatter},
+			{id: "outflow_value", name: "Out Value", field: "outflow_value", width: 100, 
+				formatter: this.currency_formatter},
+			{id: "closing_value", name: "Closing Value", field: "closing_value", width: 100, 
+				formatter: this.currency_formatter},
+				
 			{id: "brand", name: "Brand", field: "brand", width: 100},
 			{id: "item_name", name: "Item Name", field: "item_name", width: 100},
 			{id: "description", name: "Description", field: "description", width: 200, 
@@ -58,11 +69,6 @@
 	},
 	
 	filters: [
-		{fieldtype:"Select", label: "Value or Qty", options:["Value (Weighted Average)", 
-			"Value (FIFO)", "Quantity"],
-			filter: function(val, item, opts, me) {
-				return me.apply_zero_filter(val, item, opts, me);
-			}},
 		{fieldtype:"Select", label: "Brand", link:"Brand", 
 			default_value: "Select Brand...", filter: function(val, item, opts) {
 				return val == opts.default_value || item.brand == val || item._show;
@@ -100,31 +106,35 @@
 			
 			if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
 				var item = me.item_by_name[sl.item_code];
-				
-				if(me.value_or_qty!="Quantity") {
-					var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
-					var is_fifo = this.value_or_qty== "Value (FIFO)";
-					var diff = me.get_value_diff(wh, sl, is_fifo);
-				} else {
-					var diff = sl.qty;
-				}
+				var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
+				var is_fifo = item.valuation_method == "FIFO";
+
+				var qty_diff = sl.qty;
+				var value_diff = me.get_value_diff(wh, sl, is_fifo);
 
 				if(posting_datetime < from_date) {
-					item.opening += diff;
+					item.opening_qty += qty_diff;
+					item.opening_value += value_diff;
 				} else if(posting_datetime <= to_date) {
 					var ignore_inflow_outflow = this.is_default("warehouse")
 						&& sl.voucher_type=="Stock Entry" 
 						&& this.stock_entry_map[sl.voucher_no].purpose=="Material Transfer";
 					
 					if(!ignore_inflow_outflow) {
-						if(diff < 0) {
-							item.outflow += Math.abs(diff);
+						if(qty_diff < 0) {
+							item.outflow_qty += Math.abs(qty_diff);
 						} else {
-							item.inflow += diff;
+							item.inflow_qty += qty_diff;
+						}
+						if(value_diff < 0) {
+							item.outflow_value += Math.abs(value_diff);
+						} else {
+							item.inflow_value += value_diff;
 						}
 					}
 					
-					item.closing += diff;
+					item.closing_qty += qty_diff;
+					item.closing_value += value_diff;
 				} else {
 					break;
 				}
@@ -134,7 +144,8 @@
 		// opening + diff = closing
 		// adding opening, since diff already added to closing		
 		$.each(me.item_by_name, function(key, item) {
-			item.closing += item.opening;
+			item.closing_qty += item.opening_qty;
+			item.closing_value += item.opening_value;
 		});
 	},
 	
