diff --git a/erpnext/assets/report/fixed_asset_register/__init__.py b/erpnext/assets/report/fixed_asset_register/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/assets/report/fixed_asset_register/__init__.py
diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
new file mode 100644
index 0000000..5e994b5
--- /dev/null
+++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+/* eslint-disable */
+
+frappe.query_reports["Fixed Asset Register"] = {
+	"filters": [
+		{
+			fieldname:"company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1
+		},
+		{
+			fieldname:"status",
+			label: __("Status"),
+			fieldtype: "Select",
+			options: "In Store\nDisposed",
+			default: 'In Store',
+			reqd: 1
+		},
+		{
+			fieldname:"finance_book",
+			label: __("Finance Book"),
+			fieldtype: "Link",
+			options: "Finance Book"
+		},
+	]
+};
diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json
new file mode 100644
index 0000000..ae2aa54
--- /dev/null
+++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.json
@@ -0,0 +1,27 @@
+{
+ "add_total_row": 0,
+ "creation": "2019-09-23 16:35:02.836134",
+ "disable_prepared_report": 0,
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "idx": 0,
+ "is_standard": "Yes",
+ "modified": "2019-09-23 16:35:02.836134",
+ "modified_by": "Administrator",
+ "module": "Assets",
+ "name": "Fixed Asset Register",
+ "owner": "Administrator",
+ "prepared_report": 0,
+ "ref_doctype": "Asset",
+ "report_name": "Fixed Asset Register",
+ "report_type": "Script Report",
+ "roles": [
+  {
+   "role": "Accounts User"
+  },
+  {
+   "role": "Quality Manager"
+  }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py
new file mode 100644
index 0000000..eac0e2a
--- /dev/null
+++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py
@@ -0,0 +1,172 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+
+def execute(filters=None):
+	filters = frappe._dict(filters or {})
+	columns = get_columns(filters)
+	data = get_data(filters)
+	return columns, data
+
+def get_columns(filters):
+	return [
+		{
+			"label": _("Asset Id"),
+			"fieldtype": "Link",
+			"fieldname": "asset_id",
+			"options": "Asset",
+			"width": 100
+		},
+		{
+			"label": _("Asset Name"),
+			"fieldtype": "Data",
+			"fieldname": "asset_name",
+			"width": 140
+		},
+		{
+			"label": _("Asset Category"),
+			"fieldtype": "Link",
+			"fieldname": "asset_category",
+			"options": "Asset Category",
+			"width": 100
+		},
+		{
+			"label": _("Status"),
+			"fieldtype": "Data",
+			"fieldname": "status",
+			"width": 90
+		},
+		{
+			"label": _("Cost Center"),
+			"fieldtype": "Link",
+			"fieldname": "cost_center",
+			"options": "Cost Center",
+			"width": 100
+		},
+		{
+			"label": _("Department"),
+			"fieldtype": "Link",
+			"fieldname": "department",
+			"options": "Department",
+			"width": 100
+		},
+		{
+			"label": _("Location"),
+			"fieldtype": "Link",
+			"fieldname": "location",
+			"options": "Location",
+			"width": 100
+		},
+		{
+			"label": _("Purchase Date"),
+			"fieldtype": "Date",
+			"fieldname": "purchase_date",
+			"width": 90
+		},
+		{
+			"label": _("Gross Purchase Amount"),
+			"fieldname": "gross_purchase_amount",
+			"options": "Currency",
+			"width": 90
+		},
+		{
+			"label": _("Vendor Name"),
+			"fieldtype": "Data",
+			"fieldname": "vendor_name",
+			"width": 100
+		},
+		{
+			"label": _("Available For Use Date"),
+			"fieldtype": "Date",
+			"fieldname": "available_for_use_date",
+			"width": 90
+		},
+		{
+			"label": _("Current Value"),
+			"fieldname": "current_value",
+			"options": "Currency",
+			"width": 90
+		},
+	]
+
+def get_conditions(filters):
+	conditions = {'docstatus': 1}
+	status = filters.status
+
+	if filters.company:
+		conditions["company"] = filters.company
+
+	# In Store assets are those that are not sold or scrapped
+	operand = 'not in'
+	if status not in 'In Store':
+		operand = 'in'
+
+	conditions['status'] = (operand, ['Sold', 'Scrapped'])
+
+	return conditions
+
+def get_data(filters):
+
+	data = []
+
+	conditions = get_conditions(filters)
+	current_value_map = get_finance_book_value_map(filters.finance_book)
+	pr_supplier_map = get_purchase_receipt_supplier_map()
+	pi_supplier_map = get_purchase_invoice_supplier_map()
+
+	assets_record = frappe.db.get_all("Asset",
+		filters=conditions,
+		fields=["name", "asset_name", "department", "cost_center", "purchase_receipt",
+			"asset_category", "purchase_date", "gross_purchase_amount", "location",
+			"available_for_use_date", "status", "purchase_invoice"])
+
+	for asset in assets_record:
+		if current_value_map.get(asset.name) is not None:
+			row = {
+				"asset_id": asset.name,
+				"asset_name": asset.asset_name,
+				"status": asset.status,
+				"department": asset.department,
+				"cost_center": asset.cost_center,
+				"vendor_name": pr_supplier_map.get(asset.purchase_receipt) or pi_supplier_map.get(asset.purchase_invoice),
+				"gross_purchase_amount": asset.gross_purchase_amount,
+				"available_for_use_date": asset.available_for_use_date,
+				"location": asset.location,
+				"asset_category": asset.asset_category,
+				"purchase_date": asset.purchase_date,
+				"current_value": current_value_map.get(asset.name)
+			}
+			data.append(row)
+
+	return data
+
+def get_finance_book_value_map(finance_book=''):
+	return frappe._dict(frappe.db.sql(''' Select
+		parent, value_after_depreciation
+		FROM `tabAsset Finance Book`
+		WHERE
+			parentfield='finance_books'
+			AND finance_book=%s''', (finance_book)))
+
+def get_purchase_receipt_supplier_map():
+	return frappe._dict(frappe.db.sql(''' Select
+		pr.name, pr.supplier
+		FROM `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri 
+		WHERE
+			pri.parent = pr.name
+			AND pri.is_fixed_asset=1
+			AND pr.docstatus=1
+			AND pr.is_return=0'''))
+
+def get_purchase_invoice_supplier_map():
+	return frappe._dict(frappe.db.sql(''' Select
+		pi.name, pi.supplier
+		FROM `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pii 
+		WHERE
+			pii.parent = pi.name
+			AND pii.is_fixed_asset=1
+			AND pi.docstatus=1
+			AND pi.is_return=0'''))
