diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index 6946bcb..fb649e6 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -17,7 +17,7 @@
 				return {
 					filters:[
 						['Account', 'company', '=', me.frm.doc.company],
-						['Account', 'report_type', '=', 'Profit and Loss'],
+						['Account', 'root_type', '=', 'Expense'],
 						['Account', 'is_group', '=', '0'],
 					]
 				}
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.py b/erpnext/accounts/doctype/cost_center/cost_center.py
index f26c80b..0f51a00 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.py
+++ b/erpnext/accounts/doctype/cost_center/cost_center.py
@@ -3,9 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-
-from frappe import msgprint, _
-
+from frappe import _
 from frappe.utils.nestedset import NestedSet
 
 class CostCenter(NestedSet):
@@ -14,18 +12,46 @@
 	def autoname(self):
 		self.name = self.cost_center_name.strip() + ' - ' + \
 			frappe.db.get_value("Company", self.company, "abbr")
+			
+
+	def validate(self):
+		self.validate_mandatory()
+		self.validate_accounts()
 
 	def validate_mandatory(self):
 		if self.cost_center_name != self.company and not self.parent_cost_center:
-			msgprint(_("Please enter parent cost center"), raise_exception=1)
+			frappe.throw(_("Please enter parent cost center"))
 		elif self.cost_center_name == self.company and self.parent_cost_center:
-			msgprint(_("Root cannot have a parent cost center"), raise_exception=1)
+			frappe.throw(_("Root cannot have a parent cost center"))
+			
+	def validate_accounts(self):
+		if self.is_group==1 and self.get("budgets"):
+			frappe.throw(_("Budget cannot be set for Group Cost Center"))
+			
+		check_acc_list = []
+		for d in self.get('budgets'):
+			if d.account:
+				account_details = frappe.db.get_value("Account", d.account, 
+					["is_group", "company", "root_type"], as_dict=1)
+				if account_details.is_group:
+					frappe.throw(_("Budget cannot be assigned against Group Account {0}").format(d.account))
+				elif account_details.company != self.company:
+					frappe.throw(_("Account {0} does not belongs to company {1}").format(d.account, self.company))
+				elif account_details.root_type != "Expense":
+					frappe.throw(_("Budget cannot be assigned against {0}, as it's not an Expense account")
+						.format(d.account))
+
+				if [d.account, d.fiscal_year] in check_acc_list:
+					frappe.throw(_("Account {0} has been entered more than once for fiscal year {1}")
+						.format(d.account, d.fiscal_year))
+				else:
+					check_acc_list.append([d.account, d.fiscal_year])
 
 	def convert_group_to_ledger(self):
 		if self.check_if_child_exists():
-			msgprint(_("Cannot convert Cost Center to ledger as it has child nodes"), raise_exception=1)
+			frappe.throw(_("Cannot convert Cost Center to ledger as it has child nodes"))
 		elif self.check_gle_exists():
-			msgprint(_("Cost Center with existing transactions can not be converted to ledger"), raise_exception=1)
+			frappe.throw(_("Cost Center with existing transactions can not be converted to ledger"))
 		else:
 			self.is_group = 0
 			self.save()
@@ -33,7 +59,7 @@
 
 	def convert_ledger_to_group(self):
 		if self.check_gle_exists():
-			msgprint(_("Cost Center with existing transactions can not be converted to group"), raise_exception=1)
+			frappe.throw(_("Cost Center with existing transactions can not be converted to group"))
 		else:
 			self.is_group = 1
 			self.save()
@@ -46,21 +72,6 @@
 		return frappe.db.sql("select name from `tabCost Center` where \
 			parent_cost_center = %s and docstatus != 2", self.name)
 
-	def validate_budget_details(self):
-		check_acc_list = []
-		for d in self.get('budgets'):
-			if self.is_group==1:
-				msgprint(_("Budget cannot be set for Group Cost Centers"), raise_exception=1)
-
-			if [d.account, d.fiscal_year] in check_acc_list:
-				msgprint(_("Account {0} has been entered more than once for fiscal year {1}").format(d.account, d.fiscal_year), raise_exception=1)
-			else:
-				check_acc_list.append([d.account, d.fiscal_year])
-
-	def validate(self):
-		self.validate_mandatory()
-		self.validate_budget_details()
-
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
 		from erpnext.setup.doctype.company.company import get_name_with_abbr
