diff --git a/stock/page/stock_ageing/README.md b/stock/page/stock_ageing/README.md
deleted file mode 100644
index e8597b2..0000000
--- a/stock/page/stock_ageing/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Average "age" of an Item in a particular Warehouse based on First-in-first-out (FIFO).
\ No newline at end of file
diff --git a/stock/page/stock_ageing/__init__.py b/stock/page/stock_ageing/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/stock/page/stock_ageing/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/stock/page/stock_ageing/stock_ageing.js b/stock/page/stock_ageing/stock_ageing.js
deleted file mode 100644
index 6c626e2..0000000
--- a/stock/page/stock_ageing/stock_ageing.js
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-
-wn.pages['stock-ageing'].onload = function(wrapper) { 
-	wn.ui.make_app_page({
-		parent: wrapper,
-		title: wn._('Stock Ageing'),
-		single_column: true
-	});
-
-	new erpnext.StockAgeing(wrapper);
-	
-
-	wrapper.appframe.add_module_icon("Stock")
-	
-}
-
-wn.require("app/js/stock_grid_report.js");
-
-erpnext.StockAgeing = erpnext.StockGridReport.extend({
-	init: function(wrapper) {
-		this._super({
-			title: wn._("Stock Ageing"),
-			page: wrapper,
-			parent: $(wrapper).find('.layout-main'),
-			appframe: wrapper.appframe,
-			doctypes: ["Item", "Warehouse", "Stock Ledger Entry", "Item Group", "Brand", "Serial No"],
-		})
-	},
-	setup_columns: function() {
-		this.columns = [
-			{id: "name", name: wn._("Item"), field: "name", width: 300,
-				link_formatter: {
-					open_btn: true,
-					doctype: '"Item"'
-				}},
-			{id: "item_name", name: wn._("Item Name"), field: "item_name", 
-				width: 100, formatter: this.text_formatter},
-			{id: "description", name: wn._("Description"), field: "description", 
-				width: 200, formatter: this.text_formatter},
-			{id: "brand", name: wn._("Brand"), field: "brand", width: 100},
-			{id: "average_age", name: wn._("Average Age"), field: "average_age",
-				formatter: this.currency_formatter},
-			{id: "earliest", name: wn._("Earliest"), field: "earliest",
-				formatter: this.currency_formatter},
-			{id: "latest", name: wn._("Latest"), field: "latest",
-				formatter: this.currency_formatter},
-			{id: "stock_uom", name: "UOM", field: "stock_uom", width: 100},
-		];
-	},
-	filters: [
-		{fieldtype:"Select", label: wn._("Warehouse"), link:"Warehouse", 
-			default_value: "Select Warehouse..."},
-		{fieldtype:"Select", label: wn._("Brand"), link:"Brand", 
-			default_value: "Select Brand...", filter: function(val, item, opts) {
-				return val == opts.default_value || item.brand == val;
-			}, link_formatter: {filter_input: "brand"}},
-		{fieldtype:"Select", label: wn._("Plot By"), 
-			options: ["Average Age", "Earliest", "Latest"]},
-		{fieldtype:"Date", label: wn._("To Date")},
-		{fieldtype:"Button", label: wn._("Refresh"), icon:"icon-refresh icon-white"},
-		{fieldtype:"Button", label: wn._("Reset Filters")}
-	],
-	setup_filters: function() {
-		var me = this;
-		this._super();
-		this.trigger_refresh_on_change(["warehouse", "plot_by", "brand"]);
-		this.show_zero_check();
-	},
-	init_filter_values: function() {
-		this._super();
-		this.filter_inputs.to_date.val(dateutil.obj_to_user(new Date()));
-	},
-	prepare_data: function() {
-		var me = this;
-				
-		if(!this.data) {
-			me._data = wn.report_dump.data["Item"];
-			me.item_by_name = me.make_name_map(me._data);
-		}
-		
-		this.data = [].concat(this._data);
-		
-		this.serialized_buying_rates = this.get_serialized_buying_rates();
-		
-		$.each(this.data, function(i, d) {
-			me.reset_item_values(d);
-		});
-		
-		this.prepare_balances();
-		
-		// filter out brand
-		this.data = $.map(this.data, function(d) {
-			return me.apply_filter(d, "brand") ? d : null;
-		});
-		
-		// filter out rows with zero values
-		this.data = $.map(this.data, function(d) {
-			return me.apply_zero_filter(null, d, null, me) ? d : null;
-		});
-	},
-	prepare_balances: function() {
-		var me = this;
-		var to_date = dateutil.str_to_obj(this.to_date);
-		var data = wn.report_dump.data["Stock Ledger Entry"];
-
-		this.item_warehouse = {};
-
-		for(var i=0, j=data.length; i<j; i++) {
-			var sl = data[i];
-			var posting_date = dateutil.str_to_obj(sl.posting_date);
-			
-			if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
-				var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
-				
-				// call diff to build fifo stack in item_warehouse
-				var diff = me.get_value_diff(wh, sl, true);
-
-				if(posting_date > to_date) 
-					break;
-			}
-		}
-		
-		$.each(me.data, function(i, item) {
-			var full_fifo_stack = [];
-			if(me.is_default("warehouse")) {
-				$.each(me.item_warehouse[item.name] || {}, function(i, wh) {
-					full_fifo_stack = full_fifo_stack.concat(wh.fifo_stack || [])
-				});
-			} else {
-				full_fifo_stack = me.get_item_warehouse(me.warehouse, item.name).fifo_stack || [];
-			}
-			
-			var age_qty = total_qty = 0.0;
-			var min_age = max_age = null;
-			
-			$.each(full_fifo_stack, function(i, batch) {
-				var batch_age = dateutil.get_diff(me.to_date, batch[2]);
-				age_qty += batch_age * batch[0];
-				total_qty += batch[0];
-				max_age = Math.max(max_age, batch_age);
-				if(min_age===null) min_age=batch_age;
-				else min_age = Math.min(min_age, batch_age);
-			});
-			
-			item.average_age = total_qty.toFixed(2)==0.0 ? 0 
-				: (age_qty / total_qty).toFixed(2);
-			item.earliest = max_age || 0.0;
-			item.latest = min_age || 0.0;
-		});
-		
-		this.data = this.data.sort(function(a, b) { 
-			var sort_by = me.plot_by.replace(" ", "_").toLowerCase();
-			return b[sort_by] - a[sort_by]; 
-		});
-	},
-	get_plot_data: function() {
-		var data = [];
-		var me = this;
-
-		data.push({
-			label: me.plot_by,
-			data: $.map(me.data, function(item, idx) {
-				return [[idx+1, item[me.plot_by.replace(" ", "_").toLowerCase() ]]]
-			}),
-			bars: {show: true},
-		});
-				
-		return data.length ? data : false;
-	},
-	get_plot_options: function() {
-		var me = this;
-		return {
-			grid: { hoverable: true, clickable: true },
-			xaxis: {  
-				ticks: $.map(me.data, function(item, idx) { return [[idx+1, item.name]] }),
-				max: 15
-			},
-			series: { downsample: { threshold: 1000 } }
-		}
-	}	
-});
\ No newline at end of file
diff --git a/stock/page/stock_ageing/stock_ageing.txt b/stock/page/stock_ageing/stock_ageing.txt
deleted file mode 100644
index cd1cfbd..0000000
--- a/stock/page/stock_ageing/stock_ageing.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-[
- {
-  "creation": "2012-09-21 20:15:14", 
-  "docstatus": 0, 
-  "modified": "2013-07-11 14:44:08", 
-  "modified_by": "Administrator", 
-  "owner": "Administrator"
- }, 
- {
-  "doctype": "Page", 
-  "icon": "icon-table", 
-  "module": "Stock", 
-  "name": "__common__", 
-  "page_name": "stock-ageing", 
-  "standard": "Yes", 
-  "title": "Stock Ageing"
- }, 
- {
-  "doctype": "Page Role", 
-  "name": "__common__", 
-  "parent": "stock-ageing", 
-  "parentfield": "roles", 
-  "parenttype": "Page"
- }, 
- {
-  "doctype": "Page", 
-  "name": "stock-ageing"
- }, 
- {
-  "doctype": "Page Role", 
-  "role": "Analytics"
- }, 
- {
-  "doctype": "Page Role", 
-  "role": "Material Manager"
- }
-]
\ No newline at end of file
diff --git a/stock/page/stock_home/stock_home.js b/stock/page/stock_home/stock_home.js
index 4be5a46..ec43242 100644
--- a/stock/page/stock_home/stock_home.js
+++ b/stock/page/stock_home/stock_home.js
@@ -150,8 +150,9 @@
 				"label": wn._("Stock Level")
 			},
 			{
-				"page":"stock-ageing",
-				"label": wn._("Stock Ageing")
+				"label":wn._("Stock Ageing"),
+				doctype: "Item",
+				route: "query-report/Stock Ageing"
 			},
 		]
 	},
diff --git a/stock/page/stock_ledger/README.md b/stock/page/stock_ledger/README.md
deleted file mode 100644
index 774498b..0000000
--- a/stock/page/stock_ledger/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Stock movement report based on Stock Ledger Entry.
\ No newline at end of file
diff --git a/stock/page/stock_ledger/__init__.py b/stock/page/stock_ledger/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/stock/page/stock_ledger/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/stock/page/stock_ledger/stock_ledger.js b/stock/page/stock_ledger/stock_ledger.js
deleted file mode 100644
index 08a455e..0000000
--- a/stock/page/stock_ledger/stock_ledger.js
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-wn.pages['stock-ledger'].onload = function(wrapper) { 
-	wn.ui.make_app_page({
-		parent: wrapper,
-		title: wn._('Stock Ledger'),
-		single_column: true
-	});
-	
-	new erpnext.StockLedger(wrapper);
-	wrapper.appframe.add_module_icon("Stock")
-}
-
-wn.require("app/js/stock_grid_report.js");
-
-erpnext.StockLedger = erpnext.StockGridReport.extend({
-	init: function(wrapper) {
-		this._super({
-			title: wn._("Stock Ledger"),
-			page: wrapper,
-			parent: $(wrapper).find('.layout-main'),
-			appframe: wrapper.appframe,
-			doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand", "Serial No"],
-		})
-	},
-
-	setup_columns: function() {
-		this.hide_balance = (this.is_default("item_code") || this.voucher_no) ? true : false;
-		this.columns = [
-			{id: "posting_datetime", name: wn._("Posting Date"), field: "posting_datetime", width: 120,
-				formatter: this.date_formatter},
-			{id: "item_code", name: wn._("Item Code"), field: "item_code", width: 160, 	
-				link_formatter: {
-					filter_input: "item_code",
-					open_btn: true,
-					doctype: '"Item"',
-				}},
-			{id: "description", name: wn._("Description"), field: "description", width: 200,
-				formatter: this.text_formatter},
-			{id: "warehouse", name: wn._("Warehouse"), field: "warehouse", width: 100,
-				link_formatter: {filter_input: "warehouse"}},
-			{id: "brand", name: wn._("Brand"), field: "brand", width: 100},
-			{id: "stock_uom", name: wn._("UOM"), field: "stock_uom", width: 100},
-			{id: "qty", name: wn._("Qty"), field: "qty", width: 100,
-				formatter: this.currency_formatter},
-			{id: "balance", name: wn._("Balance Qty"), field: "balance", width: 100,
-				formatter: this.currency_formatter,
-				hidden: this.hide_balance},
-			{id: "balance_value", name: wn._("Balance Value"), field: "balance_value", width: 100,
-				formatter: this.currency_formatter, hidden: this.hide_balance},
-			{id: "voucher_type", name: wn._("Voucher Type"), field: "voucher_type", width: 120},
-			{id: "voucher_no", name: wn._("Voucher No"), field: "voucher_no", width: 160,
-				link_formatter: {
-					filter_input: "voucher_no",
-					open_btn: true,
-					doctype: "dataContext.voucher_type"
-				}},
-		];
-		
-	},
-	filters: [
-		{fieldtype:"Select", label: wn._("Warehouse"), link:"Warehouse", 
-			default_value: "Select Warehouse...", filter: function(val, item, opts) {
-				return item.warehouse == val || val == opts.default_value;
-			}},
-		{fieldtype:"Link", label: wn._("Item Code"), link:"Item", default_value: "Select Item...",
-			filter: function(val, item, opts) {
-				return item.item_code == val || !val;
-			}},
-		{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;
-			}, link_formatter: {filter_input: "brand"}},
-		{fieldtype:"Data", label: wn._("Voucher No"),
-			filter: function(val, item, opts) {
-				if(!val) return true;
-				return (item.voucher_no && item.voucher_no.indexOf(val)!=-1);
-			}},
-		{fieldtype:"Date", label: wn._("From Date"), filter: function(val, item) {
-			return dateutil.str_to_obj(val) <= dateutil.str_to_obj(item.posting_date);
-		}},
-		{fieldtype:"Label", label: wn._("To")},
-		{fieldtype:"Date", label: wn._("To Date"), filter: function(val, item) {
-			return dateutil.str_to_obj(val) >= dateutil.str_to_obj(item.posting_date);
-		}},
-		{fieldtype:"Button", label: wn._("Refresh"), icon:"icon-refresh icon-white"},
-		{fieldtype:"Button", label: wn._("Reset Filters")}
-	],
-	
-	setup_filters: function() {
-		var me = this;
-		this._super();
-		
-		this.wrapper.bind("apply_filters_from_route", function() { me.toggle_enable_brand(); });
-		this.filter_inputs.item_code.change(function() { me.toggle_enable_brand(); });
-		
-		this.trigger_refresh_on_change(["item_code", "warehouse", "brand"]);
-	},
-	
-	toggle_enable_brand: function() {
-		if(!this.filter_inputs.item_code.val()) {
-			this.filter_inputs.brand.prop("disabled", false);
-		} else {
-			this.filter_inputs.brand
-				.val(this.filter_inputs.brand.get(0).opts.default_value)
-				.prop("disabled", true);
-		}
-	},
-	
-	init_filter_values: function() {
-		this._super();
-		this.filter_inputs.warehouse.get(0).selectedIndex = 0;
-	},
-	prepare_data: function() {
-		var me = this;
-		if(!this.item_by_name)
-			this.item_by_name = this.make_name_map(wn.report_dump.data["Item"]);
-		var data = wn.report_dump.data["Stock Ledger Entry"];
-		var out = [];
-
-		var opening = {
-			item_code: "On " + dateutil.str_to_user(this.from_date), qty: 0.0, balance: 0.0,
-				id:"_opening", _show: true, _style: "font-weight: bold", balance_value: 0.0
-		}
-		var total_in = {
-			item_code: "Total In", qty: 0.0, balance: 0.0, balance_value: 0.0,
-				id:"_total_in", _show: true, _style: "font-weight: bold"
-		}
-		var total_out = {
-			item_code: "Total Out", qty: 0.0, balance: 0.0, balance_value: 0.0,
-				id:"_total_out", _show: true, _style: "font-weight: bold"
-		}
-		
-		// clear balance
-		$.each(wn.report_dump.data["Item"], function(i, item) {
-			item.balance = item.balance_value = 0.0; 
-		});
-		
-		// initialize warehouse-item map
-		this.item_warehouse = {};
-		this.serialized_buying_rates = this.get_serialized_buying_rates();
-		var from_datetime = dateutil.str_to_obj(me.from_date + " 00:00:00");
-		var to_datetime = dateutil.str_to_obj(me.to_date + " 23:59:59");
-		
-		// 
-		for(var i=0, j=data.length; i<j; i++) {
-			var sl = data[i];
-			var item = me.item_by_name[sl.item_code]
-			var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
-			sl.description = item.description;
-			sl.posting_datetime = sl.posting_date + " " + (sl.posting_time || "00:00:00");
-			sl.brand = item.brand;
-			var posting_datetime = dateutil.str_to_obj(sl.posting_datetime);
-			
-			var is_fifo = item.valuation_method ? item.valuation_method=="FIFO" 
-				: sys_defaults.valuation_method=="FIFO";
-			var value_diff = me.get_value_diff(wh, sl, is_fifo);
-
-			// opening, transactions, closing, total in, total out
-			var before_end = posting_datetime <= to_datetime;
-			if((!me.is_default("item_code") ? me.apply_filter(sl, "item_code") : true)
-				&& me.apply_filter(sl, "warehouse") && me.apply_filter(sl, "voucher_no")
-				&& me.apply_filter(sl, "brand")) {
-				if(posting_datetime < from_datetime) {
-					opening.balance += sl.qty;
-					opening.balance_value += value_diff;
-				} else if(before_end) {
-					if(sl.qty > 0) {
-						total_in.qty += sl.qty;
-						total_in.balance_value += value_diff;
-					} else {
-						total_out.qty += (-1 * sl.qty);
-						total_out.balance_value += value_diff;
-					}
-				}
-			}
-			
-			if(!before_end) break;
-
-			// apply filters
-			if(me.apply_filters(sl)) {
-				out.push(sl);
-			}
-			
-			// update balance
-			if((!me.is_default("warehouse") ? me.apply_filter(sl, "warehouse") : true)) {
-				sl.balance = me.item_by_name[sl.item_code].balance + sl.qty;
-				me.item_by_name[sl.item_code].balance = sl.balance;
-				
-				sl.balance_value = me.item_by_name[sl.item_code].balance_value + value_diff;
-				me.item_by_name[sl.item_code].balance_value = sl.balance_value;		
-			}
-		}
-					
-		if(me.item_code && !me.voucher_no) {
-			var closing = {
-				item_code: "On " + dateutil.str_to_user(this.to_date), 
-				balance: (out.length ? out[out.length-1].balance : 0), qty: 0,
-				balance_value: (out.length ? out[out.length-1].balance_value : 0),
-				id:"_closing", _show: true, _style: "font-weight: bold"
-			};
-			total_out.balance_value = -total_out.balance_value;
-			var out = [opening].concat(out).concat([total_in, total_out, closing]);
-		}
-		
-		this.data = out;
-	},
-	get_plot_data: function() {
-		var data = [];
-		var me = this;
-		if(me.hide_balance) return false;
-		data.push({
-			label: me.item_code,
-			data: [[dateutil.str_to_obj(me.from_date).getTime(), me.data[0].balance]]
-				.concat($.map(me.data, function(col, idx) {
-					if (col.posting_datetime) {
-						return [[dateutil.str_to_obj(col.posting_datetime).getTime(), col.balance - col.qty],
-								[dateutil.str_to_obj(col.posting_datetime).getTime(), col.balance]]
-					}
-					return null;
-				})).concat([
-					// closing
-					[dateutil.str_to_obj(me.to_date).getTime(), me.data[me.data.length - 1].balance]
-				]),
-			points: {show: true},
-			lines: {show: true, fill: true},
-		});
-		return data;
-	},
-	get_plot_options: function() {
-		return {
-			grid: { hoverable: true, clickable: true },
-			xaxis: { mode: "time", 
-				min: dateutil.str_to_obj(this.from_date).getTime(),
-				max: dateutil.str_to_obj(this.to_date).getTime(),
-			},
-			series: { downsample: { threshold: 1000 } }
-		}
-	},
-	get_tooltip_text: function(label, x, y) {
-		var d = new Date(x);
-		var date = dateutil.obj_to_user(d) + " " + d.getHours() + ":" + d.getMinutes();
-	 	var value = format_number(y);
-		return value.bold() + " on " + date;
-	}
-});
\ No newline at end of file
diff --git a/stock/page/stock_ledger/stock_ledger.txt b/stock/page/stock_ledger/stock_ledger.txt
deleted file mode 100644
index 9c2a4b7..0000000
--- a/stock/page/stock_ledger/stock_ledger.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-[
- {
-  "creation": "2012-09-21 20:15:14", 
-  "docstatus": 0, 
-  "modified": "2013-07-11 14:44:19", 
-  "modified_by": "Administrator", 
-  "owner": "Administrator"
- }, 
- {
-  "doctype": "Page", 
-  "icon": "icon-table", 
-  "module": "Stock", 
-  "name": "__common__", 
-  "page_name": "stock-ledger", 
-  "standard": "Yes", 
-  "title": "Stock Ledger"
- }, 
- {
-  "doctype": "Page Role", 
-  "name": "__common__", 
-  "parent": "stock-ledger", 
-  "parentfield": "roles", 
-  "parenttype": "Page"
- }, 
- {
-  "doctype": "Page", 
-  "name": "stock-ledger"
- }, 
- {
-  "doctype": "Page Role", 
-  "role": "Analytics"
- }, 
- {
-  "doctype": "Page Role", 
-  "role": "Material Manager"
- }, 
- {
-  "doctype": "Page Role", 
-  "role": "Material User"
- }
-]
\ No newline at end of file
