diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
index 93a25e7..e56492c 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
@@ -5,7 +5,6 @@
 from __future__ import unicode_literals
 import frappe
 from frappe.model.document import Document
-from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
 from frappe.custom.doctype.custom_field.custom_field import create_custom_field
 from frappe import scrub
 from frappe.utils import cstr
@@ -41,7 +40,25 @@
 		}
 
 		for doctype in doclist:
-			create_custom_field(doctype, df)
+
+			if doctype == "Budget":
+				df.update({
+					"depends_on": "eval:doc.budget_against == '{0}'".format(self.document_type)
+				})
+
+				create_custom_field(doctype, df)
+
+				property_setter = frappe.db.exists("Property Setter", "Budget-budget_against-options")
+
+				if property_setter:
+				else:
+					frappe.get_doc({
+						"doctype": "Property Setter",
+						"doc_type": "Budget",
+						"fieldname": "budget_against"
+					})
+			else:
+				create_custom_field(doctype, df)
 
 	def delete_accounting_dimension(self):
 		doclist = ["GL Entry", "Sales Invoice", "Purchase Invoice", "Payment Entry", "BOM", "Sales Order", "Purchase Order",
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
index cd9f9d9..b2072f0 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
@@ -62,3 +62,11 @@
 		},
 	]
 }
+
+let dimension_filters = erpnext.get_dimension_filters();
+
+dimension_filters.then((dimensions) => {
+	dimensions.forEach((dimension) => {
+		frappe.query_reports["Budget Variance Report"].filters[4].options.push(dimension["document_type"]);
+	});
+});
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
index fe8de36..fb4f5d0 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
@@ -19,9 +19,12 @@
 	else:
 		cost_centers = get_cost_centers(filters)
 
+	print(cost_centers)
+
 	period_month_ranges = get_period_month_ranges(filters["period"], filters["from_fiscal_year"])
 	cam_map = get_cost_center_account_month_map(filters)
 
+	print(cam_map)
 	data = []
 	for cost_center in cost_centers:
 		cost_center_items = cam_map.get(cost_center)
@@ -45,8 +48,8 @@
 
 						if(filters.get("show_cumulative")):
 							last_total = period_data[0] - period_data[1]
-						
-						period_data[2] = period_data[0] - period_data[1] 
+
+						period_data[2] = period_data[0] - period_data[1]
 						row += period_data
 				totals[2] = totals[0] - totals[1]
 				if filters["period"] != "Yearly" :
@@ -56,7 +59,7 @@
 	return columns, data
 
 def validate_filters(filters):
-	if filters.get("budget_against")=="Project" and filters.get("cost_center"):
+	if filters.get("budget_against") != "Cost Center" and filters.get("cost_center"):
 		frappe.throw(_("Filter based on Cost Center is only applicable if Budget Against is selected as Cost Center"))
 
 def get_columns(filters):
@@ -92,8 +95,11 @@
 	if filters.get("budget_against") == "Cost Center":
 		cond = "order by lft"
 
-	return frappe.db.sql_list("""select name from `tab{tab}` where company=%s
-		{cond}""".format(tab=filters.get("budget_against"), cond=cond), filters.get("company"))
+	if filters.get("budget_against") in ["Cost Center", "Project"]:
+		return frappe.db.sql_list("""select name from `tab{tab}` where company=%s
+			{cond}""".format(tab=filters.get("budget_against"), cond=cond), filters.get("company"))
+	else:
+		return frappe.db.sql_list("""select name from `tab{tab}`""".format(tab=filters.get("budget_against")))
 
 #Get cost center & target details
 def get_cost_center_target_details(filters):
@@ -109,7 +115,7 @@
 		""".format(budget_against=filters.get("budget_against").replace(" ", "_").lower(), cond=cond),
 		(filters.from_fiscal_year,filters.to_fiscal_year,filters.budget_against, filters.company), as_dict=True)
 
-	
+
 
 #Get target distribution details of accounts of cost center
 def get_target_distribution_details(filters):
@@ -118,7 +124,7 @@
 		from `tabMonthly Distribution Percentage` mdp, `tabMonthly Distribution` md
 		where mdp.parent=md.name and md.fiscal_year between %s and %s order by md.fiscal_year""",(filters.from_fiscal_year, filters.to_fiscal_year), as_dict=1):
 			target_details.setdefault(d.name, {}).setdefault(d.month, flt(d.percentage_allocation))
-	
+
 	return target_details
 
 #Get actual details from gl entry
@@ -129,7 +135,7 @@
 	if filters.get("budget_against") == "Cost Center":
 		cc_lft, cc_rgt = frappe.db.get_value("Cost Center", name, ["lft", "rgt"])
 		cond = "lft>='{lft}' and rgt<='{rgt}'".format(lft = cc_lft, rgt=cc_rgt)
-	
+
 	ac_details = frappe.db.sql("""select gl.account, gl.debit, gl.credit,gl.fiscal_year,
 		MONTHNAME(gl.posting_date) as month_name, b.{budget_against} as budget_against
 		from `tabGL Entry` gl, `tabBudget Account` ba, `tabBudget` b
@@ -153,6 +159,7 @@
 def get_cost_center_account_month_map(filters):
 	import datetime
 	cost_center_target_details = get_cost_center_target_details(filters)
+	print(cost_center_target_details)
 	tdd = get_target_distribution_details(filters)
 
 	cam_map = {}
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js
index 7db8786..481107e 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.js
+++ b/erpnext/accounts/report/general_ledger/general_ledger.js
@@ -215,7 +215,7 @@
 	]
 }
 
-let dimension_filters = get_dimension_filters();
+let dimension_filters = erpnext.get_dimension_filters();
 
 dimension_filters.then((dimensions) => {
 	dimensions.forEach((dimension) => {
@@ -228,10 +228,3 @@
 	});
 });
 
-async function get_dimension_filters() {
-	let dimensions = await frappe.db.get_list('Accounting Dimension', {
-		fields: ['label', 'fieldname', 'document_type'],
-	});
-
-	return dimensions;
-}
diff --git a/erpnext/public/js/financial_statements.js b/erpnext/public/js/financial_statements.js
index 77e67c4..2e4b8f2 100644
--- a/erpnext/public/js/financial_statements.js
+++ b/erpnext/public/js/financial_statements.js
@@ -150,7 +150,7 @@
 		}
 	]
 
-	let dimension_filters = get_dimension_filters()
+	let dimension_filters = erpnext.get_dimension_filters()
 
 	dimension_filters.then((dimensions) => {
 		dimensions.forEach((dimension) => {
@@ -166,10 +166,4 @@
 	return filters;
 }
 
-async function get_dimension_filters() {
-	let dimensions = await frappe.db.get_list('Accounting Dimension', {
-		fields: ['label', 'fieldname', 'document_type'],
-	});
 
-	return dimensions;
-}
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 6860d6a..540b5ea 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -62,6 +62,14 @@
 		$btn.on("click", function() {
 			me.show_serial_batch_selector(grid_row.frm, grid_row.doc);
 		});
+	},
+
+	get_dimension_filters: async function() {
+		let dimensions = await frappe.db.get_list('Accounting Dimension', {
+			fields: ['label', 'fieldname', 'document_type'],
+		});
+
+		return dimensions;
 	}
 });
 
