Changed frappe.conn to frappe.db
diff --git a/erpnext/accounts/Print Format/SalesInvoice/SalesInvoice.html b/erpnext/accounts/Print Format/SalesInvoice/SalesInvoice.html
index 874d84c..d4a49ef 100644
--- a/erpnext/accounts/Print Format/SalesInvoice/SalesInvoice.html
+++ b/erpnext/accounts/Print Format/SalesInvoice/SalesInvoice.html
@@ -1,5 +1,5 @@
 {%- if doc.letter_head -%}
-	{{ frappe.conn.get_value("Letter Head", doc.letter_head, "content") }}
+	{{ frappe.db.get_value("Letter Head", doc.letter_head, "content") }}
 {%- endif -%}
 <!-- Page Layout Settings -->
 <div class='common page-header'>
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index dcb12c1..2b7a0b1 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -7,7 +7,7 @@
 from frappe.utils import flt, fmt_money, cstr, cint
 from frappe import msgprint, throw, _
 
-get_value = frappe.conn.get_value
+get_value = frappe.db.get_value
 
 class DocType:
 	def __init__(self,d,dl):
@@ -16,11 +16,11 @@
 
 	def autoname(self):
 		self.doc.name = self.doc.account_name.strip() + ' - ' + \
-			frappe.conn.get_value("Company", self.doc.company, "abbr")
+			frappe.db.get_value("Company", self.doc.company, "abbr")
 
 	def get_address(self):
 		return {
-			'address': frappe.conn.get_value(self.doc.master_type, 
+			'address': frappe.db.get_value(self.doc.master_type, 
 				self.doc.master_name, "address")
 		}
 		
@@ -41,14 +41,14 @@
 		if self.doc.master_type in ('Customer', 'Supplier') or self.doc.account_type == "Warehouse":
 			if not self.doc.master_name:
 				msgprint(_("Please enter Master Name once the account is created."))
-			elif not frappe.conn.exists(self.doc.master_type or self.doc.account_type, 
+			elif not frappe.db.exists(self.doc.master_type or self.doc.account_type, 
 					self.doc.master_name):
 				throw(_("Invalid Master Name"))
 			
 	def validate_parent(self):
 		"""Fetch Parent Details and validation for account not to be created under ledger"""
 		if self.doc.parent_account:
-			par = frappe.conn.sql("""select name, group_or_ledger, is_pl_account, debit_or_credit 
+			par = frappe.db.sql("""select name, group_or_ledger, is_pl_account, debit_or_credit 
 				from tabAccount where name =%s""", self.doc.parent_account)
 			if not par:
 				throw(_("Parent account does not exists"))
@@ -72,15 +72,15 @@
 
 	def validate_max_root_accounts(self):
 		"""Raise exception if there are more than 4 root accounts"""
-		if frappe.conn.sql("""select count(*) from tabAccount where
+		if frappe.db.sql("""select count(*) from tabAccount where
 			company=%s and ifnull(parent_account,'')='' and docstatus != 2""",
 			self.doc.company)[0][0] > 4:
 			throw(_("One company cannot have more than 4 root Accounts"))
 	
 	def validate_duplicate_account(self):
 		if self.doc.fields.get('__islocal') or not self.doc.name:
-			company_abbr = frappe.conn.get_value("Company", self.doc.company, "abbr")
-			if frappe.conn.sql("""select name from tabAccount where name=%s""", 
+			company_abbr = frappe.db.get_value("Company", self.doc.company, "abbr")
+			if frappe.db.sql("""select name from tabAccount where name=%s""", 
 				(self.doc.account_name + " - " + company_abbr)):
 					throw("{name}: {acc_name} {exist}, {rename}".format(**{
 						"name": _("Account Name"),
@@ -91,14 +91,14 @@
 				
 	def validate_root_details(self):
 		#does not exists parent
-		if frappe.conn.exists("Account", self.doc.name):
-			if not frappe.conn.get_value("Account", self.doc.name, "parent_account"):
+		if frappe.db.exists("Account", self.doc.name):
+			if not frappe.db.get_value("Account", self.doc.name, "parent_account"):
 				throw(_("Root cannot be edited."))
 				
 	def validate_frozen_accounts_modifier(self):
-		old_value = frappe.conn.get_value("Account", self.doc.name, "freeze_account")
+		old_value = frappe.db.get_value("Account", self.doc.name, "freeze_account")
 		if old_value and old_value != self.doc.freeze_account:
-			frozen_accounts_modifier = frappe.conn.get_value( 'Accounts Settings', None, 
+			frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None, 
 				'frozen_accounts_modifier')
 			if not frozen_accounts_modifier or \
 				frozen_accounts_modifier not in frappe.user.get_roles():
@@ -131,10 +131,10 @@
 
 	# Check if any previous balance exists
 	def check_gle_exists(self):
-		return frappe.conn.get_value("GL Entry", {"account": self.doc.name})
+		return frappe.db.get_value("GL Entry", {"account": self.doc.name})
 
 	def check_if_child_exists(self):
-		return frappe.conn.sql("""select name from `tabAccount` where parent_account = %s 
+		return frappe.db.sql("""select name from `tabAccount` where parent_account = %s 
 			and docstatus != 2""", self.doc.name)
 	
 	def validate_mandatory(self):
@@ -148,7 +148,7 @@
 			return
 			
 		if self.doc.account_type == "Warehouse":
-			old_warehouse = cstr(frappe.conn.get_value("Account", self.doc.name, "master_name"))
+			old_warehouse = cstr(frappe.db.get_value("Account", self.doc.name, "master_name"))
 			if old_warehouse != cstr(self.doc.master_name):
 				if old_warehouse:
 					self.validate_warehouse(old_warehouse)
@@ -158,7 +158,7 @@
 					throw(_("Master Name is mandatory if account type is Warehouse"))
 		
 	def validate_warehouse(self, warehouse):
-		if frappe.conn.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
+		if frappe.db.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
 			throw(_("Stock transactions exist against warehouse ") + warehouse + 
 				_(" .You can not assign / modify / remove Master Name"))
 
@@ -174,7 +174,7 @@
 
 	def get_authorized_user(self):
 		# Check logged-in user is authorized
-		if frappe.conn.get_value('Accounts Settings', None, 'credit_controller') \
+		if frappe.db.get_value('Accounts Settings', None, 'credit_controller') \
 				in frappe.user.get_roles():
 			return 1
 			
@@ -182,11 +182,11 @@
 		# Get credit limit
 		credit_limit_from = 'Customer'
 
-		cr_limit = frappe.conn.sql("""select t1.credit_limit from tabCustomer t1, `tabAccount` t2 
+		cr_limit = frappe.db.sql("""select t1.credit_limit from tabCustomer t1, `tabAccount` t2 
 			where t2.name=%s and t1.name = t2.master_name""", self.doc.name)
 		credit_limit = cr_limit and flt(cr_limit[0][0]) or 0
 		if not credit_limit:
-			credit_limit = frappe.conn.get_value('Company', self.doc.company, 'credit_limit')
+			credit_limit = frappe.db.get_value('Company', self.doc.company, 'credit_limit')
 			credit_limit_from = 'Company'
 		
 		# If outstanding greater than credit limit and not authorized person raise exception
@@ -219,10 +219,10 @@
 		
 		# Validate properties before merging
 		if merge:
-			if not frappe.conn.exists("Account", new):
+			if not frappe.db.exists("Account", new):
 				throw(_("Account ") + new +_(" does not exists"))
 				
-			val = list(frappe.conn.get_value("Account", new_account, 
+			val = list(frappe.db.get_value("Account", new_account, 
 				["group_or_ledger", "debit_or_credit", "is_pl_account", "company"]))
 			
 			if val != [self.doc.group_or_ledger, self.doc.debit_or_credit, self.doc.is_pl_account, self.doc.company]:
@@ -234,7 +234,7 @@
 
 	def after_rename(self, old, new, merge=False):
 		if not merge:
-			frappe.conn.set_value("Account", new, "account_name", 
+			frappe.db.set_value("Account", new, "account_name", 
 				" - ".join(new.split(" - ")[:-1]))
 		else:
 			from frappe.utils.nestedset import rebuild_tree
@@ -243,13 +243,13 @@
 def get_master_name(doctype, txt, searchfield, start, page_len, filters):
 	conditions = (" and company='%s'"% filters["company"]) if doctype == "Warehouse" else ""
 		
-	return frappe.conn.sql("""select name from `tab%s` where %s like %s %s
+	return frappe.db.sql("""select name from `tab%s` where %s like %s %s
 		order by name limit %s, %s""" %
 		(filters["master_type"], searchfield, "%s", conditions, "%s", "%s"), 
 		("%%%s%%" % txt, start, page_len), as_list=1)
 		
 def get_parent_account(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select name from tabAccount 
+	return frappe.db.sql("""select name from tabAccount 
 		where group_or_ledger = 'Group' and docstatus != 2 and company = %s
 		and %s like %s order by name limit %s, %s""" % 
 		("%s", searchfield, "%s", "%s", "%s"), 
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py
index ae4aa55..3e01eea 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py
@@ -13,15 +13,15 @@
 		self.doc, self.doclist = d, dl
 
 	def on_update(self):
-		frappe.conn.set_default("auto_accounting_for_stock", self.doc.auto_accounting_for_stock)
+		frappe.db.set_default("auto_accounting_for_stock", self.doc.auto_accounting_for_stock)
 		
 		if cint(self.doc.auto_accounting_for_stock):
 			# set default perpetual account in company
-			for company in frappe.conn.sql("select name from tabCompany"):
+			for company in frappe.db.sql("select name from tabCompany"):
 				frappe.bean("Company", company[0]).save()
 			
 			# Create account head for warehouses
-			warehouse_list = frappe.conn.sql("select name, company from tabWarehouse", as_dict=1)
+			warehouse_list = frappe.db.sql("select name, company from tabWarehouse", as_dict=1)
 			warehouse_with_no_company = [d.name for d in warehouse_list if not d.company]
 			if warehouse_with_no_company:
 				frappe.throw(_("Company is missing in following warehouses") + ": \n" + 
diff --git a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py
index aa91e5c..859c9d0 100644
--- a/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py
+++ b/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py
@@ -22,7 +22,7 @@
 			msgprint("Bank Account, From Date and To Date are Mandatory")
 			return
 	
-		dl = frappe.conn.sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
+		dl = frappe.db.sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
 		
 		self.doclist = self.doc.clear_table(self.doclist, 'entries')
 		self.doc.total_amount = 0.0
@@ -46,7 +46,7 @@
 					msgprint("Clearance Date can not be before Cheque Date (Row #%s)" % 
 						d.idx, raise_exception=1)
 					
-				frappe.conn.sql("""update `tabJournal Voucher` 
+				frappe.db.sql("""update `tabJournal Voucher` 
 					set clearance_date = %s, modified = %s where name=%s""",
 					(d.clearance_date, nowdate(), d.voucher_id))
 				vouchers.append(d.voucher_id)
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index b60f303..fdf8b30 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -16,7 +16,7 @@
 
 		for d in getlist(self.doclist, 'invoice_details'):
 			if d.invoice_no:
-				inv = frappe.conn.sql("""select c_form_applicable, c_form_no from
+				inv = frappe.db.sql("""select c_form_applicable, c_form_no from
 					`tabSales Invoice` where name = %s and docstatus = 1""", d.invoice_no)
 				
 				if not inv:
@@ -42,17 +42,17 @@
 		
 	def before_cancel(self):
 		# remove cform reference
-		frappe.conn.sql("""update `tabSales Invoice` set c_form_no=null
+		frappe.db.sql("""update `tabSales Invoice` set c_form_no=null
 			where c_form_no=%s""", self.doc.name)
 		
 	def set_cform_in_sales_invoices(self):
 		inv = [d.invoice_no for d in getlist(self.doclist, 'invoice_details')]
 		if inv:
-			frappe.conn.sql("""update `tabSales Invoice` set c_form_no=%s, modified=%s 
+			frappe.db.sql("""update `tabSales Invoice` set c_form_no=%s, modified=%s 
 				where name in (%s)""" % ('%s', '%s', ', '.join(['%s'] * len(inv))), 
 				tuple([self.doc.name, self.doc.modified] + inv))
 				
-			frappe.conn.sql("""update `tabSales Invoice` set c_form_no = null, modified = %s 
+			frappe.db.sql("""update `tabSales Invoice` set c_form_no = null, modified = %s 
 				where name not in (%s) and ifnull(c_form_no, '') = %s""" % 
 				('%s', ', '.join(['%s']*len(inv)), '%s'),
 				tuple([self.doc.modified] + inv + [self.doc.name]))
@@ -61,12 +61,12 @@
 
 	def set_total_invoiced_amount(self):
 		total = sum([flt(d.grand_total) for d in getlist(self.doclist, 'invoice_details')])
-		frappe.conn.set(self.doc, 'total_invoiced_amount', total)
+		frappe.db.set(self.doc, 'total_invoiced_amount', total)
 
 	def get_invoice_details(self, invoice_no):
 		"""	Pull details from invoices for referrence """
 
-		inv = frappe.conn.sql("""select posting_date, territory, net_total, grand_total 
+		inv = frappe.db.sql("""select posting_date, territory, net_total, grand_total 
 			from `tabSales Invoice` where name = %s""", invoice_no)	
 		return {
 			'invoice_date' : inv and getdate(inv[0][0]).strftime('%Y-%m-%d') or '',
@@ -79,7 +79,7 @@
 	from erpnext.utilities import build_filter_conditions
 	conditions, filter_values = build_filter_conditions(filters)
 	
-	return frappe.conn.sql("""select name from `tabSales Invoice` where docstatus = 1 
+	return frappe.db.sql("""select name from `tabSales Invoice` where docstatus = 1 
 		and c_form_applicable = 'Yes' and ifnull(c_form_no, '') = '' %s 
 		and %s like %s order by name limit %s, %s""" % 
 		(conditions, searchfield, "%s", "%s", "%s"), 
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.py b/erpnext/accounts/doctype/cost_center/cost_center.py
index 6665039..e02496f 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.py
+++ b/erpnext/accounts/doctype/cost_center/cost_center.py
@@ -14,7 +14,7 @@
 		self.nsm_parent_field = 'parent_cost_center'
 				
 	def autoname(self):
-		company_abbr = frappe.conn.sql("select abbr from tabCompany where name=%s", 
+		company_abbr = frappe.db.sql("select abbr from tabCompany where name=%s", 
 			self.doc.company)[0][0]
 		self.doc.name = self.doc.cost_center_name.strip() + ' - ' + company_abbr
 		
@@ -46,10 +46,10 @@
 			return 1
 
 	def check_gle_exists(self):
-		return frappe.conn.get_value("GL Entry", {"cost_center": self.doc.name})
+		return frappe.db.get_value("GL Entry", {"cost_center": self.doc.name})
 		
 	def check_if_child_exists(self):
-		return frappe.conn.sql("select name from `tabCost Center` where \
+		return frappe.db.sql("select name from `tabCost Center` where \
 			parent_cost_center = %s and docstatus != 2", self.doc.name)
 
 	def validate_budget_details(self):
@@ -67,7 +67,7 @@
 		"""
 			Cost Center name must be unique
 		"""
-		if (self.doc.fields.get("__islocal") or not self.doc.name) and frappe.conn.sql("select name from `tabCost Center` where cost_center_name = %s and company=%s", (self.doc.cost_center_name, self.doc.company)):
+		if (self.doc.fields.get("__islocal") or not self.doc.name) and frappe.db.sql("select name from `tabCost Center` where cost_center_name = %s and company=%s", (self.doc.cost_center_name, self.doc.company)):
 			msgprint("Cost Center Name already exists, please rename", raise_exception=1)
 			
 		self.validate_mandatory()
@@ -85,7 +85,7 @@
 		
 	def after_rename(self, olddn, newdn, merge=False):
 		if not merge:
-			frappe.conn.set_value("Cost Center", newdn, "cost_center_name", 
+			frappe.db.set_value("Cost Center", newdn, "cost_center_name", 
 				" - ".join(newdn.split(" - ")[:-1]))
 		else:
 			super(DocType, self).after_rename(olddn, newdn, merge)
diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py
index 381acf3..3918751 100644
--- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py
+++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py
@@ -11,7 +11,7 @@
 		self.doc, self.doclist = d, dl
 		
 	def set_as_default(self):
-		frappe.conn.set_value("Global Defaults", None, "current_fiscal_year", self.doc.name)
+		frappe.db.set_value("Global Defaults", None, "current_fiscal_year", self.doc.name)
 		frappe.get_obj("Global Defaults").on_update()
 		
 		# clear cache
@@ -21,7 +21,7 @@
 			Please refresh your browser for the change to take effect."""))
 
 	def validate(self):
-		year_start_end_dates = frappe.conn.sql("""select year_start_date, year_end_date 
+		year_start_end_dates = frappe.db.sql("""select year_start_date, year_end_date 
 			from `tabFiscal Year` where name=%s""", (self.doc.name))
 
 		if year_start_end_dates:
@@ -36,7 +36,7 @@
 		if (getdate(self.doc.year_end_date) - getdate(self.doc.year_start_date)).days > 366:
 			frappe.throw(_("Year Start Date and Year End Date are not within Fiscal Year."))
 
-		year_start_end_dates = frappe.conn.sql("""select name, year_start_date, year_end_date 
+		year_start_end_dates = frappe.db.sql("""select name, year_start_date, year_end_date 
 			from `tabFiscal Year` where name!=%s""", (self.doc.name))
 
 		for fiscal_year, ysd, yed in year_start_end_dates:
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index e3eff9b..cbe94fd 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -42,7 +42,7 @@
 				self.doc.account)
 			
 	def pl_must_have_cost_center(self):
-		if frappe.conn.get_value("Account", self.doc.account, "is_pl_account") == "Yes":
+		if frappe.db.get_value("Account", self.doc.account, "is_pl_account") == "Yes":
 			if not self.doc.cost_center and self.doc.voucher_type != 'Period Closing Voucher':
 				frappe.throw(_("Cost Center must be specified for PL Account: ") + 
 					self.doc.account)
@@ -55,13 +55,13 @@
 
 	def check_pl_account(self):
 		if self.doc.is_opening=='Yes' and \
-				frappe.conn.get_value("Account", self.doc.account, "is_pl_account") == "Yes":
+				frappe.db.get_value("Account", self.doc.account, "is_pl_account") == "Yes":
 			frappe.throw(_("For opening balance entry account can not be a PL account"))			
 
 	def validate_account_details(self, adv_adj):
 		"""Account must be ledger, active and not freezed"""
 		
-		ret = frappe.conn.sql("""select group_or_ledger, docstatus, company 
+		ret = frappe.db.sql("""select group_or_ledger, docstatus, company 
 			from tabAccount where name=%s""", self.doc.account, as_dict=1)[0]
 		
 		if ret.group_or_ledger=='Group':
@@ -80,7 +80,7 @@
 		
 		def _get_cost_center_company():
 			if not self.cost_center_company.get(self.doc.cost_center):
-				self.cost_center_company[self.doc.cost_center] = frappe.conn.get_value(
+				self.cost_center_company[self.doc.cost_center] = frappe.db.get_value(
 					"Cost Center", self.doc.cost_center, "company")
 			
 			return self.cost_center_company[self.doc.cost_center]
@@ -91,10 +91,10 @@
 						
 def check_negative_balance(account, adv_adj=False):
 	if not adv_adj and account:
-		account_details = frappe.conn.get_value("Account", account, 
+		account_details = frappe.db.get_value("Account", account, 
 				["allow_negative_balance", "debit_or_credit"], as_dict=True)
 		if not account_details["allow_negative_balance"]:
-			balance = frappe.conn.sql("""select sum(debit) - sum(credit) from `tabGL Entry` 
+			balance = frappe.db.sql("""select sum(debit) - sum(credit) from `tabGL Entry` 
 				where account = %s""", account)
 			balance = account_details["debit_or_credit"] == "Debit" and \
 				flt(balance[0][0]) or -1*flt(balance[0][0])
@@ -108,9 +108,9 @@
 		except authorized person
 	"""
 	if not adv_adj:
-		acc_frozen_upto = frappe.conn.get_value('Accounts Settings', None, 'acc_frozen_upto')
+		acc_frozen_upto = frappe.db.get_value('Accounts Settings', None, 'acc_frozen_upto')
 		if acc_frozen_upto:
-			bde_auth_role = frappe.conn.get_value( 'Accounts Settings', None,'bde_auth_role')
+			bde_auth_role = frappe.db.get_value( 'Accounts Settings', None,'bde_auth_role')
 			if getdate(posting_date) <= getdate(acc_frozen_upto) \
 					and not bde_auth_role in frappe.user.get_roles():
 				frappe.throw(_("You are not authorized to do/modify back dated entries before ")
@@ -118,7 +118,7 @@
 
 def update_outstanding_amt(account, against_voucher_type, against_voucher, on_cancel=False):
 	# get final outstanding amt
-	bal = flt(frappe.conn.sql("""select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
+	bal = flt(frappe.db.sql("""select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
 		from `tabGL Entry` 
 		where against_voucher_type=%s and against_voucher=%s and account = %s""", 
 		(against_voucher_type, against_voucher, account))[0][0] or 0.0)
@@ -126,7 +126,7 @@
 	if against_voucher_type == 'Purchase Invoice':
 		bal = -bal
 	elif against_voucher_type == "Journal Voucher":
-		against_voucher_amount = flt(frappe.conn.sql("""
+		against_voucher_amount = flt(frappe.db.sql("""
 			select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
 			from `tabGL Entry` where voucher_type = 'Journal Voucher' and voucher_no = %s
 			and account = %s and ifnull(against_voucher, '') = ''""", 
@@ -143,13 +143,13 @@
 		
 	# Update outstanding amt on against voucher
 	if against_voucher_type in ["Sales Invoice", "Purchase Invoice"]:
-		frappe.conn.sql("update `tab%s` set outstanding_amount=%s where name='%s'" %
+		frappe.db.sql("update `tab%s` set outstanding_amount=%s where name='%s'" %
 		 	(against_voucher_type, bal, against_voucher))
 			
 def validate_frozen_account(account, adv_adj=None):
-	frozen_account = frappe.conn.get_value("Account", account, "freeze_account")
+	frozen_account = frappe.db.get_value("Account", account, "freeze_account")
 	if frozen_account == 'Yes' and not adv_adj:
-		frozen_accounts_modifier = frappe.conn.get_value( 'Accounts Settings', None, 
+		frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None, 
 			'frozen_accounts_modifier')
 		
 		if not frozen_accounts_modifier:
diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
index f02188b..c1635bd 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
@@ -75,7 +75,7 @@
 		for d in getlist(self.doclist,'entries'):
 			if not d.is_advance and not d.against_voucher and \
 					not d.against_invoice and not d.against_jv:
-				master_type = frappe.conn.get_value("Account", d.account, "master_type")
+				master_type = frappe.db.get_value("Account", d.account, "master_type")
 				if (master_type == 'Customer' and flt(d.credit) > 0) or \
 						(master_type == 'Supplier' and flt(d.debit) > 0):
 					msgprint("Message: Please check Is Advance as 'Yes' against \
@@ -87,7 +87,7 @@
 				if d.against_jv == self.doc.name:
 					msgprint("You can not enter current voucher in 'Against JV' column",
 						raise_exception=1)
-				elif not frappe.conn.sql("""select name from `tabJournal Voucher Detail` 
+				elif not frappe.db.sql("""select name from `tabJournal Voucher Detail` 
 						where account = '%s' and docstatus = 1 and parent = '%s'""" % 
 						(d.account, d.against_jv)):
 					msgprint("Against JV: %s is not valid." % d.against_jv, raise_exception=1)
@@ -125,12 +125,12 @@
 		
 		for d in getlist(self.doclist, 'entries'):
 			if d.against_invoice and d.credit:
-				currency = frappe.conn.get_value("Sales Invoice", d.against_invoice, "currency")
+				currency = frappe.db.get_value("Sales Invoice", d.against_invoice, "currency")
 				r.append('%s %s against Invoice: %s' % 
 					(cstr(currency), fmt_money(flt(d.credit)), d.against_invoice))
 					
 			if d.against_voucher and d.debit:
-				bill_no = frappe.conn.sql("""select bill_no, bill_date, currency 
+				bill_no = frappe.db.sql("""select bill_no, bill_date, currency 
 					from `tabPurchase Invoice` where name=%s""", d.against_voucher)
 				if bill_no and bill_no[0][0] and bill_no[0][0].lower().strip() \
 						not in ['na', 'not applicable', 'none']:
@@ -153,7 +153,7 @@
 			# check account type whether supplier or customer
 			exists = False
 			for d in getlist(self.doclist, 'entries'):
-				account_type = frappe.conn.get_value("Account", d.account, "account_type")
+				account_type = frappe.db.get_value("Account", d.account, "account_type")
 				if account_type in ["Supplier", "Customer"]:
 					exists = True
 					break
@@ -166,12 +166,12 @@
 
 	def set_print_format_fields(self):
 		for d in getlist(self.doclist, 'entries'):
-			account_type, master_type = frappe.conn.get_value("Account", d.account, 
+			account_type, master_type = frappe.db.get_value("Account", d.account, 
 				["account_type", "master_type"])
 				
 			if master_type in ['Supplier', 'Customer']:
 				if not self.doc.pay_to_recd_from:
-					self.doc.pay_to_recd_from = frappe.conn.get_value(master_type, 
+					self.doc.pay_to_recd_from = frappe.db.get_value(master_type, 
 						' - '.join(d.account.split(' - ')[:-1]), 
 						master_type == 'Customer' and 'customer_name' or 'supplier_name')
 			
@@ -190,7 +190,7 @@
 		if date_diff <= 0: return
 		
 		# Get List of Customer Account
-		acc_list = filter(lambda d: frappe.conn.get_value("Account", d.account, 
+		acc_list = filter(lambda d: frappe.db.get_value("Account", d.account, 
 		 	"master_type")=='Customer', getlist(self.doclist,'entries'))
 		
 		for d in acc_list:
@@ -202,11 +202,11 @@
 					
 	def get_credit_days_for(self, ac):
 		if not self.credit_days_for.has_key(ac):
-			self.credit_days_for[ac] = cint(frappe.conn.get_value("Account", ac, "credit_days"))
+			self.credit_days_for[ac] = cint(frappe.db.get_value("Account", ac, "credit_days"))
 
 		if not self.credit_days_for[ac]:
 			if self.credit_days_global==-1:
-				self.credit_days_global = cint(frappe.conn.get_value("Company", 
+				self.credit_days_global = cint(frappe.db.get_value("Company", 
 					self.doc.company, "credit_days"))
 					
 			return self.credit_days_global
@@ -218,7 +218,7 @@
 			self.is_approving_authority = 0
 
 			# Fetch credit controller role
-			approving_authority = frappe.conn.get_value("Global Defaults", None, 
+			approving_authority = frappe.db.get_value("Global Defaults", None, 
 				"credit_controller")
 			
 			# Check logged-in user is authorized
@@ -229,12 +229,12 @@
 
 	def check_account_against_entries(self):
 		for d in self.doclist.get({"parentfield": "entries"}):
-			if d.against_invoice and frappe.conn.get_value("Sales Invoice", 
+			if d.against_invoice and frappe.db.get_value("Sales Invoice", 
 					d.against_invoice, "debit_to") != d.account:
 				frappe.throw(_("Row #") + cstr(d.idx) +  ": " +
 					_("Account is not matching with Debit To account of Sales Invoice"))
 			
-			if d.against_voucher and frappe.conn.get_value("Purchase Invoice", 
+			if d.against_voucher and frappe.db.get_value("Purchase Invoice", 
 					d.against_voucher, "credit_to") != d.account:
 				frappe.throw(_("Row #") + cstr(d.idx) + ": " +
 					_("Account is not matching with Credit To account of Purchase Invoice"))
@@ -267,7 +267,7 @@
 			
 	def check_credit_limit(self):
 		for d in self.doclist.get({"parentfield": "entries"}):
-			master_type, master_name = frappe.conn.get_value("Account", d.account, 
+			master_type, master_name = frappe.db.get_value("Account", d.account, 
 				["master_type", "master_name"])
 			if master_type == "Customer" and master_name:
 				super(DocType, self).check_credit_limit(d.account)
@@ -328,18 +328,18 @@
 		cond = (flt(self.doc.write_off_amount) > 0) and \
 			' and outstanding_amount <= '+ self.doc.write_off_amount or ''
 		if self.doc.write_off_based_on == 'Accounts Receivable':
-			return frappe.conn.sql("""select name, debit_to, outstanding_amount 
+			return frappe.db.sql("""select name, debit_to, outstanding_amount 
 				from `tabSales Invoice` where docstatus = 1 and company = %s 
 				and outstanding_amount > 0 %s""" % ('%s', cond), self.doc.company)
 		elif self.doc.write_off_based_on == 'Accounts Payable':
-			return frappe.conn.sql("""select name, credit_to, outstanding_amount 
+			return frappe.db.sql("""select name, credit_to, outstanding_amount 
 				from `tabPurchase Invoice` where docstatus = 1 and company = %s 
 				and outstanding_amount > 0 %s""" % ('%s', cond), self.doc.company)
 
 @frappe.whitelist()
 def get_default_bank_cash_account(company, voucher_type):
 	from erpnext.accounts.utils import get_balance_on
-	account = frappe.conn.get_value("Company", company,
+	account = frappe.db.get_value("Company", company,
 		voucher_type=="Bank Voucher" and "default_bank_account" or "default_cash_account")
 	if account:
 		return {
@@ -412,27 +412,27 @@
 def get_opening_accounts(company):
 	"""get all balance sheet accounts for opening entry"""
 	from erpnext.accounts.utils import get_balance_on
-	accounts = frappe.conn.sql_list("""select name from tabAccount 
+	accounts = frappe.db.sql_list("""select name from tabAccount 
 		where group_or_ledger='Ledger' and is_pl_account='No' and company=%s""", company)
 	
 	return [{"account": a, "balance": get_balance_on(a)} for a in accounts]
 	
 def get_against_purchase_invoice(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select name, credit_to, outstanding_amount, bill_no, bill_date 
+	return frappe.db.sql("""select name, credit_to, outstanding_amount, bill_no, bill_date 
 		from `tabPurchase Invoice` where credit_to = %s and docstatus = 1 
 		and outstanding_amount > 0 and %s like %s order by name desc limit %s, %s""" %
 		("%s", searchfield, "%s", "%s", "%s"), 
 		(filters["account"], "%%%s%%" % txt, start, page_len))
 		
 def get_against_sales_invoice(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select name, debit_to, outstanding_amount 
+	return frappe.db.sql("""select name, debit_to, outstanding_amount 
 		from `tabSales Invoice` where debit_to = %s and docstatus = 1 
 		and outstanding_amount > 0 and `%s` like %s order by name desc limit %s, %s""" %
 		("%s", searchfield, "%s", "%s", "%s"), 
 		(filters["account"], "%%%s%%" % txt, start, page_len))
 		
 def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select jv.name, jv.posting_date, jv.user_remark 
+	return frappe.db.sql("""select jv.name, jv.posting_date, jv.user_remark 
 		from `tabJournal Voucher` jv, `tabJournal Voucher Detail` jv_detail 
 		where jv_detail.parent = jv.name and jv_detail.account = %s and jv.docstatus = 1 
 		and jv.%s like %s order by jv.name desc limit %s, %s""" % 
@@ -443,7 +443,7 @@
 def get_outstanding(args):
 	args = eval(args)
 	if args.get("doctype") == "Journal Voucher" and args.get("account"):
-		against_jv_amount = frappe.conn.sql("""
+		against_jv_amount = frappe.db.sql("""
 			select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
 			from `tabJournal Voucher Detail` where parent=%s and account=%s 
 			and ifnull(against_invoice, '')='' and ifnull(against_voucher, '')=''
@@ -457,11 +457,11 @@
 		
 	elif args.get("doctype") == "Sales Invoice":
 		return {
-			"credit": flt(frappe.conn.get_value("Sales Invoice", args["docname"], 
+			"credit": flt(frappe.db.get_value("Sales Invoice", args["docname"], 
 				"outstanding_amount"))
 		}
 	elif args.get("doctype") == "Purchase Invoice":
 		return {
-			"debit": flt(frappe.conn.get_value("Purchase Invoice", args["docname"], 
+			"debit": flt(frappe.db.get_value("Purchase Invoice", args["docname"], 
 				"outstanding_amount"))
 		}
diff --git a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
index 4497726..35e2155 100644
--- a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
@@ -13,7 +13,7 @@
 		jv_invoice.insert()
 		jv_invoice.submit()
 		
-		self.assertTrue(not frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(not frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_jv=%s""", jv_invoice.doc.name))
 		
 		jv_payment = frappe.bean(copy=test_records[0])
@@ -21,16 +21,16 @@
 		jv_payment.insert()
 		jv_payment.submit()
 		
-		self.assertTrue(frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_jv=%s""", jv_invoice.doc.name))
 			
-		self.assertTrue(frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_jv=%s and credit=400""", jv_invoice.doc.name))
 		
 		# cancel jv_invoice
 		jv_invoice.cancel()
 		
-		self.assertTrue(not frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(not frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_jv=%s""", jv_invoice.doc.name))
 	
 	def test_jv_against_stock_account(self):
@@ -47,7 +47,7 @@
 		set_perpetual_inventory(0)
 			
 	def test_monthly_budget_crossed_ignore(self):
-		frappe.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
+		frappe.db.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
 		self.clear_account_balance()
 		
 		jv = frappe.bean(copy=test_records[0])
@@ -57,12 +57,12 @@
 		jv.doclist[1].credit = 20000.0
 		jv.insert()
 		jv.submit()
-		self.assertTrue(frappe.conn.get_value("GL Entry", 
+		self.assertTrue(frappe.db.get_value("GL Entry", 
 			{"voucher_type": "Journal Voucher", "voucher_no": jv.doc.name}))
 			
 	def test_monthly_budget_crossed_stop(self):
 		from erpnext.accounts.utils import BudgetError
-		frappe.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
+		frappe.db.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
 		self.clear_account_balance()
 		
 		jv = frappe.bean(copy=test_records[0])
@@ -74,14 +74,14 @@
 		
 		self.assertRaises(BudgetError, jv.submit)
 		
-		frappe.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
+		frappe.db.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
 		
 	def test_yearly_budget_crossed_stop(self):
 		from erpnext.accounts.utils import BudgetError
 		self.clear_account_balance()
 		self.test_monthly_budget_crossed_ignore()
 		
-		frappe.conn.set_value("Company", "_Test Company", "yearly_bgt_flag", "Stop")
+		frappe.db.set_value("Company", "_Test Company", "yearly_bgt_flag", "Stop")
 		
 		jv = frappe.bean(copy=test_records[0])
 		jv.doc.posting_date = "2013-08-12"
@@ -93,11 +93,11 @@
 		
 		self.assertRaises(BudgetError, jv.submit)
 		
-		frappe.conn.set_value("Company", "_Test Company", "yearly_bgt_flag", "Ignore")
+		frappe.db.set_value("Company", "_Test Company", "yearly_bgt_flag", "Ignore")
 		
 	def test_monthly_budget_on_cancellation(self):
 		from erpnext.accounts.utils import BudgetError
-		frappe.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
+		frappe.db.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
 		self.clear_account_balance()
 		
 		jv = frappe.bean(copy=test_records[0])
@@ -107,7 +107,7 @@
 		jv.doclist[2].debit = 30000.0
 		jv.submit()
 		
-		self.assertTrue(frappe.conn.get_value("GL Entry", 
+		self.assertTrue(frappe.db.get_value("GL Entry", 
 			{"voucher_type": "Journal Voucher", "voucher_no": jv.doc.name}))
 		
 		jv1 = frappe.bean(copy=test_records[0])
@@ -117,15 +117,15 @@
 		jv1.doclist[1].credit = 40000.0
 		jv1.submit()
 		
-		self.assertTrue(frappe.conn.get_value("GL Entry", 
+		self.assertTrue(frappe.db.get_value("GL Entry", 
 			{"voucher_type": "Journal Voucher", "voucher_no": jv1.doc.name}))
 		
 		self.assertRaises(BudgetError, jv.cancel)
 		
-		frappe.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
+		frappe.db.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
 		
 	def clear_account_balance(self):
-		frappe.conn.sql("""delete from `tabGL Entry`""")
+		frappe.db.sql("""delete from `tabGL Entry`""")
 		
 
 test_records = [
diff --git a/erpnext/accounts/doctype/mis_control/mis_control.py b/erpnext/accounts/doctype/mis_control/mis_control.py
index 102fb01..b398716 100644
--- a/erpnext/accounts/doctype/mis_control/mis_control.py
+++ b/erpnext/accounts/doctype/mis_control/mis_control.py
@@ -33,7 +33,7 @@
 		ret['company'] = get_companies()
 
 		#--- to get fiscal year and start_date of that fiscal year -----
-		res = frappe.conn.sql("select name, year_start_date from `tabFiscal Year`")
+		res = frappe.db.sql("select name, year_start_date from `tabFiscal Year`")
 		ret['fiscal_year'] = [r[0] for r in res]
 		ret['start_dates'] = {}
 		for r in res:
@@ -41,7 +41,7 @@
 			
 		#--- from month and to month (for MIS - Comparison Report) -------
 		month_list = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
-		fiscal_start_month = frappe.conn.sql("select MONTH(year_start_date) from `tabFiscal Year` where name = %s",(frappe.defaults.get_global_default("fiscal_year")))
+		fiscal_start_month = frappe.db.sql("select MONTH(year_start_date) from `tabFiscal Year` where name = %s",(frappe.defaults.get_global_default("fiscal_year")))
 		fiscal_start_month = fiscal_start_month and fiscal_start_month[0][0] or 1
 		mon = ['']
 		for i in range(fiscal_start_month,13): mon.append(month_list[i-1])
@@ -76,7 +76,7 @@
 		return self.return_data
 
 	def get_children(self, parent_account, level, pl, company, fy):
-		cl = frappe.conn.sql("select distinct account_name, name, debit_or_credit, lft, rgt from `tabAccount` where ifnull(parent_account, '') = %s and ifnull(is_pl_account, 'No')=%s and company=%s and docstatus != 2 order by name asc", (parent_account, pl, company))
+		cl = frappe.db.sql("select distinct account_name, name, debit_or_credit, lft, rgt from `tabAccount` where ifnull(parent_account, '') = %s and ifnull(is_pl_account, 'No')=%s and company=%s and docstatus != 2 order by name asc", (parent_account, pl, company))
 		level0_diff = [0 for p in self.period_list]
 		if pl=='Yes' and level==0: # switch for income & expenses
 			cl = [c for c in cl]
@@ -123,7 +123,7 @@
 							self.return_data.append([4, 'Total '+c[0]] + totals)
 
 	def define_periods(self, year, period):	
-		ysd = frappe.conn.sql("select year_start_date from `tabFiscal Year` where name=%s", year)
+		ysd = frappe.db.sql("select year_start_date from `tabFiscal Year` where name=%s", year)
 		ysd = ysd and ysd[0][0] or ''
 
 		self.ysd = ysd
diff --git a/erpnext/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py b/erpnext/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py
index ceea672..f6a31a0 100644
--- a/erpnext/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py
+++ b/erpnext/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py
@@ -16,17 +16,17 @@
 	
 	def set_account_type(self):
 		self.doc.account_type = self.doc.account and \
-			frappe.conn.get_value("Account", self.doc.account, "debit_or_credit").lower() or ""
+			frappe.db.get_value("Account", self.doc.account, "debit_or_credit").lower() or ""
 		
 	def get_voucher_details(self):
-		total_amount = frappe.conn.sql("""select sum(%s) from `tabGL Entry` 
+		total_amount = frappe.db.sql("""select sum(%s) from `tabGL Entry` 
 			where voucher_type = %s and voucher_no = %s 
 			and account = %s""" % 
 			(self.doc.account_type, '%s', '%s', '%s'), 
 			(self.doc.voucher_type, self.doc.voucher_no, self.doc.account))
 			
 		total_amount = total_amount and flt(total_amount[0][0]) or 0
-		reconciled_payment = frappe.conn.sql("""
+		reconciled_payment = frappe.db.sql("""
 			select sum(ifnull(%s, 0)) - sum(ifnull(%s, 0)) from `tabGL Entry` where 
 			against_voucher = %s and voucher_no != %s
 			and account = %s""" % 
@@ -63,7 +63,7 @@
 		cond += self.doc.amt_less_than and \
 			' and t2.' + dc+' <= ' + self.doc.amt_less_than or ''
 
-		gle = frappe.conn.sql("""
+		gle = frappe.db.sql("""
 			select t1.name as voucher_no, t1.posting_date, t1.total_debit as total_amt, 
 			 	sum(ifnull(t2.credit, 0)) - sum(ifnull(t2.debit, 0)) as amt_due, t1.remark,
 			 	t2.against_account, t2.name as voucher_detail_no
@@ -99,7 +99,7 @@
 			2. split into multiple rows if partially adjusted, assign against voucher
 			3. submit payment voucher
 		"""
-		if not self.doc.voucher_no or not frappe.conn.sql("""select name from `tab%s` 
+		if not self.doc.voucher_no or not frappe.db.sql("""select name from `tab%s` 
 				where name = %s""" % (self.doc.voucher_type, '%s'), self.doc.voucher_no):
 			msgprint("Please select valid Voucher No to proceed", raise_exception=1)
 		
@@ -130,7 +130,7 @@
 def gl_entry_details(doctype, txt, searchfield, start, page_len, filters):
 	from erpnext.controllers.queries import get_match_cond
 	
-	return frappe.conn.sql("""select gle.voucher_no, gle.posting_date, 
+	return frappe.db.sql("""select gle.voucher_no, gle.posting_date, 
 		gle.%(account_type)s from `tabGL Entry` gle
 	    where gle.account = '%(acc)s' 
 	    	and gle.voucher_type = '%(dt)s'
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
index 753b7db..98befa0 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
@@ -21,11 +21,11 @@
 		self.make_gl_entries()
 
 	def on_cancel(self):
-		frappe.conn.sql("""delete from `tabGL Entry` 
+		frappe.db.sql("""delete from `tabGL Entry` 
 			where voucher_type = 'Period Closing Voucher' and voucher_no=%s""", self.doc.name)
 
 	def validate_account_head(self):
-		debit_or_credit, is_pl_account = frappe.conn.get_value("Account", 
+		debit_or_credit, is_pl_account = frappe.db.get_value("Account", 
 			self.doc.closing_account_head, ["debit_or_credit", "is_pl_account"])
 			
 		if debit_or_credit != 'Credit' or is_pl_account != 'No':
@@ -36,7 +36,7 @@
 		from erpnext.accounts.utils import get_fiscal_year
 		self.year_start_date = get_fiscal_year(self.doc.posting_date, self.doc.fiscal_year)[1]
 
-		pce = frappe.conn.sql("""select name from `tabPeriod Closing Voucher`
+		pce = frappe.db.sql("""select name from `tabPeriod Closing Voucher`
 			where posting_date > %s and fiscal_year = %s and docstatus = 1""", 
 			(self.doc.posting_date, self.doc.fiscal_year))
 		if pce and pce[0][0]:
@@ -44,7 +44,7 @@
 				  _("has been made after posting date") + ": " + self.doc.posting_date)
 		 
 	def validate_pl_balances(self):
-		income_bal = frappe.conn.sql("""
+		income_bal = frappe.db.sql("""
 			select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) 
 			from `tabGL Entry` t1, tabAccount t2 
 			where t1.account = t2.name and t1.posting_date between %s and %s 
@@ -52,7 +52,7 @@
 			and t2.docstatus < 2 and t2.company = %s""", 
 			(self.year_start_date, self.doc.posting_date, self.doc.company))
 			
-		expense_bal = frappe.conn.sql("""
+		expense_bal = frappe.db.sql("""
 			select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0))
 			from `tabGL Entry` t1, tabAccount t2 
 			where t1.account = t2.name and t1.posting_date between %s and %s
@@ -68,7 +68,7 @@
 		
 	def get_pl_balances(self):
 		"""Get balance for pl accounts"""
-		return frappe.conn.sql("""
+		return frappe.db.sql("""
 			select t1.account, sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) as balance
 			from `tabGL Entry` t1, `tabAccount` t2 
 			where t1.account = t2.name and ifnull(t2.is_pl_account, 'No') = 'Yes'
diff --git a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
index 5039e88..9b62af1 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py
@@ -9,7 +9,7 @@
 class TestPeriodClosingVoucher(unittest.TestCase):
 	def test_closing_entry(self):
 		# clear GL Entries
-		frappe.conn.sql("""delete from `tabGL Entry`""")
+		frappe.db.sql("""delete from `tabGL Entry`""")
 		
 		from erpnext.accounts.doctype.journal_voucher.test_journal_voucher import test_records as jv_records
 		jv = frappe.bean(copy=jv_records[2])
@@ -27,7 +27,7 @@
 		pcv.insert()
 		pcv.submit()
 		
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Period Closing Voucher' and voucher_no=%s
 			order by account asc, debit asc""", pcv.doc.name, as_dict=1)
 
diff --git a/erpnext/accounts/doctype/pos_setting/pos_setting.py b/erpnext/accounts/doctype/pos_setting/pos_setting.py
index e743fb3..69228fd 100755
--- a/erpnext/accounts/doctype/pos_setting/pos_setting.py
+++ b/erpnext/accounts/doctype/pos_setting/pos_setting.py
@@ -23,7 +23,7 @@
 		self.validate_all_link_fields()
 		
 	def check_for_duplicate(self):
-		res = frappe.conn.sql("""select name, user from `tabPOS Setting` 
+		res = frappe.db.sql("""select name, user from `tabPOS Setting` 
 			where ifnull(user, '') = %s and name != %s and company = %s""", 
 			(self.doc.user, self.doc.name, self.doc.company))
 		if res:
@@ -46,14 +46,14 @@
 		
 		for link_dt, dn_list in accounts.items():
 			for link_dn in dn_list:
-				if link_dn and not frappe.conn.exists({"doctype": link_dt, 
+				if link_dn and not frappe.db.exists({"doctype": link_dt, 
 						"company": self.doc.company, "name": link_dn}):
 					frappe.throw(link_dn +_(" does not belong to ") + self.doc.company)
 
 	def on_update(self):
 		frappe.defaults.clear_default("is_pos")
 
-		pos_view_users = frappe.conn.sql_list("""select user from `tabPOS Setting`""")
+		pos_view_users = frappe.db.sql_list("""select user from `tabPOS Setting`""")
 		for user in pos_view_users:
 			if user:
 				frappe.defaults.set_user_default("is_pos", 1, user)
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 450fdc3..5717dfb 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -73,7 +73,7 @@
 	def check_active_purchase_items(self):
 		for d in getlist(self.doclist, 'entries'):
 			if d.item_code:		# extra condn coz item_code is not mandatory in PV
-				valid_item = frappe.conn.sql("select docstatus,is_purchase_item from tabItem where name = %s",d.item_code)
+				valid_item = frappe.db.sql("select docstatus,is_purchase_item from tabItem where name = %s",d.item_code)
 				if valid_item[0][0] == 2:
 					msgprint("Item : '%s' is Inactive, you can restore it from Trash" %(d.item_code))
 					raise Exception
@@ -93,7 +93,7 @@
 	def validate_bill_no(self):
 		if self.doc.bill_no and self.doc.bill_no.lower().strip() \
 				not in ['na', 'not applicable', 'none']:
-			b_no = frappe.conn.sql("""select bill_no, name, ifnull(is_opening,'') from `tabPurchase Invoice` 
+			b_no = frappe.db.sql("""select bill_no, name, ifnull(is_opening,'') from `tabPurchase Invoice` 
 				where bill_no = %s and credit_to = %s and docstatus = 1 and name != %s""", 
 				(self.doc.bill_no, self.doc.credit_to, self.doc.name))
 			if b_no and cstr(b_no[0][2]) == cstr(self.doc.is_opening):
@@ -109,7 +109,7 @@
 			self.doc.remarks = "No Remarks"
 
 	def validate_credit_acc(self):
-		acc = frappe.conn.sql("select debit_or_credit, is_pl_account from tabAccount where name = %s", 
+		acc = frappe.db.sql("select debit_or_credit, is_pl_account from tabAccount where name = %s", 
 			self.doc.credit_to)
 		if not acc:
 			msgprint("Account: "+ self.doc.credit_to + "does not exist")
@@ -125,7 +125,7 @@
 	# ------------------------------------------------------------
 	def check_for_acc_head_of_supplier(self): 
 		if self.doc.supplier and self.doc.credit_to:
-			acc_head = frappe.conn.sql("select master_name from `tabAccount` where name = %s", self.doc.credit_to)
+			acc_head = frappe.db.sql("select master_name from `tabAccount` where name = %s", self.doc.credit_to)
 			
 			if (acc_head and cstr(acc_head[0][0]) != cstr(self.doc.supplier)) or (not acc_head and (self.doc.credit_to != cstr(self.doc.supplier) + " - " + self.company_abbr)):
 				msgprint("Credit To: %s do not match with Supplier: %s for Company: %s.\n If both correctly entered, please select Master Type and Master Name in account master." %(self.doc.credit_to,self.doc.supplier,self.doc.company), raise_exception=1)
@@ -137,7 +137,7 @@
 		for d in getlist(self.doclist,'entries'):
 			if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
 				check_list.append(d.purhcase_order)
-				stopped = frappe.conn.sql("select name from `tabPurchase Order` where status = 'Stopped' and name = '%s'" % d.purchase_order)
+				stopped = frappe.db.sql("select name from `tabPurchase Order` where status = 'Stopped' and name = '%s'" % d.purchase_order)
 				if stopped:
 					msgprint("One cannot do any transaction against 'Purchase Order' : %s, it's status is 'Stopped'" % (d.purhcase_order))
 					raise Exception
@@ -218,14 +218,14 @@
 		self.doc.against_expense_account = ",".join(against_accounts)
 
 	def po_required(self):
-		if frappe.conn.get_value("Buying Settings", None, "po_required") == 'Yes':
+		if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':
 			 for d in getlist(self.doclist,'entries'):
 				 if not d.purchase_order:
 					 msgprint("Purchse Order No. required against item %s"%d.item_code)
 					 raise Exception
 
 	def pr_required(self):
-		if frappe.conn.get_value("Buying Settings", None, "pr_required") == 'Yes':
+		if frappe.db.get_value("Buying Settings", None, "pr_required") == 'Yes':
 			 for d in getlist(self.doclist,'entries'):
 				 if not d.purchase_receipt:
 					 msgprint("Purchase Receipt No. required against item %s"%d.item_code)
@@ -238,11 +238,11 @@
 	def check_prev_docstatus(self):
 		for d in getlist(self.doclist,'entries'):
 			if d.purchase_order:
-				submitted = frappe.conn.sql("select name from `tabPurchase Order` where docstatus = 1 and name = '%s'" % d.purchase_order)
+				submitted = frappe.db.sql("select name from `tabPurchase Order` where docstatus = 1 and name = '%s'" % d.purchase_order)
 				if not submitted:
 					frappe.throw("Purchase Order : "+ cstr(d.purchase_order) +" is not submitted")
 			if d.purchase_receipt:
-				submitted = frappe.conn.sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = '%s'" % d.purchase_receipt)
+				submitted = frappe.db.sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = '%s'" % d.purchase_receipt)
 				if not submitted:
 					frappe.throw("Purchase Receipt : "+ cstr(d.purchase_receipt) +" is not submitted")
 					
@@ -414,12 +414,12 @@
 	def update_raw_material_cost(self):
 		if self.sub_contracted_items:
 			for d in self.doclist.get({"parentfield": "entries"}):
-				rm_cost = frappe.conn.sql("""select raw_material_cost / quantity 
+				rm_cost = frappe.db.sql("""select raw_material_cost / quantity 
 					from `tabBOM` where item = %s and is_default = 1 and docstatus = 1 
 					and is_active = 1 """, (d.item_code,))
 				rm_cost = rm_cost and flt(rm_cost[0][0]) or 0
 				
-				d.conversion_factor = d.conversion_factor or flt(frappe.conn.get_value(
+				d.conversion_factor = d.conversion_factor or flt(frappe.db.get_value(
 					"UOM Conversion Detail", {"parent": d.item_code, "uom": d.uom}, 
 					"conversion_factor")) or 1
 		
@@ -432,7 +432,7 @@
 	# expense account can be any Debit account, 
 	# but can also be a Liability account with account_type='Expense Account' in special circumstances. 
 	# Hence the first condition is an "OR"
-	return frappe.conn.sql("""select tabAccount.name from `tabAccount` 
+	return frappe.db.sql("""select tabAccount.name from `tabAccount` 
 			where (tabAccount.debit_or_credit="Debit" 
 					or tabAccount.account_type = "Expense Account")
 				and tabAccount.group_or_ledger="Ledger" 
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 85a9f41..b5942e3 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -36,7 +36,7 @@
 			"_Test Account VAT - _TC": [156.25, 0],
 			"_Test Account Discount - _TC": [0, 168.03],
 		}
-		gl_entries = frappe.conn.sql("""select account, debit, credit from `tabGL Entry`
+		gl_entries = frappe.db.sql("""select account, debit, credit from `tabGL Entry`
 			where voucher_type = 'Purchase Invoice' and voucher_no = %s""", dl[0].name, as_dict=1)
 		for d in gl_entries:
 			self.assertEqual([d.debit, d.credit], expected_gl_entries.get(d.account))
@@ -49,7 +49,7 @@
 		pi.insert()
 		pi.submit()
 		
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
 			order by account asc""", pi.doc.name, as_dict=1)
 		self.assertTrue(gl_entries)
@@ -81,7 +81,7 @@
 		pi.insert()
 		pi.submit()
 		
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
 			order by account asc""", pi.doc.name, as_dict=1)
 		self.assertTrue(gl_entries)
@@ -187,17 +187,17 @@
 		pi.submit()
 		pi.load_from_db()
 		
-		self.assertTrue(frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_voucher=%s""", pi.doc.name))
 		
-		self.assertTrue(frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_voucher=%s and debit=300""", pi.doc.name))
 			
 		self.assertEqual(pi.doc.outstanding_amount, 1212.30)
 		
 		pi.cancel()
 		
-		self.assertTrue(not frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(not frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_voucher=%s""", pi.doc.name))
 	
 test_records = [
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 593996b..2286ed6 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -21,7 +21,7 @@
 		condition += " and CONCAT(i.name, i.item_name) like %(name)s"
 		args["name"] = "%%%s%%" % item
 
-	return frappe.conn.sql("""select i.name, i.item_name, i.image, 
+	return frappe.db.sql("""select i.name, i.item_name, i.image, 
 		item_det.price_list_rate, item_det.currency 
 		from `tabItem` i LEFT JOIN 
 			(select item_code, price_list_rate, currency from 
@@ -34,12 +34,12 @@
 @frappe.whitelist()
 def get_item_code(barcode_serial_no):
 	input_via = "serial_no"
-	item_code = frappe.conn.sql("""select name, item_code from `tabSerial No` where 
+	item_code = frappe.db.sql("""select name, item_code from `tabSerial No` where 
 		name=%s""", (barcode_serial_no), as_dict=1)
 
 	if not item_code:
 		input_via = "barcode"
-		item_code = frappe.conn.sql("""select name from `tabItem` where barcode=%s""",
+		item_code = frappe.db.sql("""select name from `tabItem` where barcode=%s""",
 			(barcode_serial_no), as_dict=1)
 
 	if item_code:
@@ -49,4 +49,4 @@
 
 @frappe.whitelist()
 def get_mode_of_payment():
-	return frappe.conn.sql("""select name from `tabMode of Payment`""", as_dict=1)
\ No newline at end of file
+	return frappe.db.sql("""select name from `tabMode of Payment`""", as_dict=1)
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index bd82a3c..6bccd03 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -167,7 +167,7 @@
 	def validate_time_logs_are_submitted(self):
 		for d in self.doclist.get({"doctype":"Sales Invoice Item"}):
 			if d.time_log_batch:
-				status = frappe.conn.get_value("Time Log Batch", d.time_log_batch, "status")
+				status = frappe.db.get_value("Time Log Batch", d.time_log_batch, "status")
 				if status!="Submitted":
 					frappe.msgprint(_("Time Log Batch status must be 'Submitted'") + ":" + d.time_log_batch,
 						raise_exception=True)
@@ -202,7 +202,7 @@
 
 			# fetch terms	
 			if self.doc.tc_name and not self.doc.terms:
-				self.doc.terms = frappe.conn.get_value("Terms and Conditions", self.doc.tc_name, "terms")
+				self.doc.terms = frappe.db.get_value("Terms and Conditions", self.doc.tc_name, "terms")
 			
 			# fetch charges
 			if self.doc.charge and not len(self.doclist.get({"parentfield": "other_charges"})):
@@ -213,7 +213,7 @@
 			"Sales Invoice Advance", "advance_adjustment_details", "credit")
 		
 	def get_company_abbr(self):
-		return frappe.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
+		return frappe.db.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
 
 	def update_against_document_in_jv(self):
 		"""
@@ -246,7 +246,7 @@
 	def validate_customer_account(self):
 		"""Validates Debit To Account and Customer Matches"""
 		if self.doc.customer and self.doc.debit_to and not cint(self.doc.is_pos):
-			acc_head = frappe.conn.sql("select master_name from `tabAccount` where name = %s and docstatus != 2", self.doc.debit_to)
+			acc_head = frappe.db.sql("select master_name from `tabAccount` where name = %s and docstatus != 2", self.doc.debit_to)
 			
 			if (acc_head and cstr(acc_head[0][0]) != cstr(self.doc.customer)) or \
 				(not acc_head and (self.doc.debit_to != cstr(self.doc.customer) + " - " + self.get_company_abbr())):
@@ -255,7 +255,7 @@
 
 
 	def validate_debit_acc(self):
-		acc = frappe.conn.sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s' and docstatus != 2" % self.doc.debit_to)
+		acc = frappe.db.sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s' and docstatus != 2" % self.doc.debit_to)
 		if not acc:
 			msgprint("Account: "+ self.doc.debit_to + " does not exist")
 			raise Exception
@@ -270,8 +270,8 @@
 	def validate_fixed_asset_account(self):
 		"""Validate Fixed Asset Account and whether Income Account Entered Exists"""
 		for d in getlist(self.doclist,'entries'):
-			item = frappe.conn.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life >	now())"% d.item_code)
-			acc =	frappe.conn.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account)
+			item = frappe.db.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life >	now())"% d.item_code)
+			acc =	frappe.db.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account)
 			if not acc:
 				msgprint("Account: "+d.income_account+" does not exist in the system", raise_exception=True)
 			elif item and item[0][1] == 'Yes' and not acc[0][0] == 'Fixed Asset Account':
@@ -332,9 +332,9 @@
 		"""check in manage account if sales order / delivery note required or not."""
 		dic = {'Sales Order':'so_required','Delivery Note':'dn_required'}
 		for i in dic:
-			if frappe.conn.get_value('Selling Settings', None, dic[i]) == 'Yes':
+			if frappe.db.get_value('Selling Settings', None, dic[i]) == 'Yes':
 				for d in getlist(self.doclist,'entries'):
-					if frappe.conn.get_value('Item', d.item_code, 'is_stock_item') == 'Yes' \
+					if frappe.db.get_value('Item', d.item_code, 'is_stock_item') == 'Yes' \
 						and not d.fields[i.lower().replace(' ','_')]:
 						msgprint("%s is mandatory for stock item which is not mentioed against item: %s"%(i,d.item_code), raise_exception=1)
 
@@ -342,7 +342,7 @@
 	def validate_proj_cust(self):
 		"""check for does customer belong to same project as entered.."""
 		if self.doc.project_name and self.doc.customer:
-			res = frappe.conn.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			res = frappe.db.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
 			if not res:
 				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in that project."%(self.doc.customer,self.doc.project_name))
 				raise Exception
@@ -377,28 +377,28 @@
 	def validate_c_form(self):
 		""" Blank C-form no if C-form applicable marked as 'No'"""
 		if self.doc.amended_from and self.doc.c_form_applicable == 'No' and self.doc.c_form_no:
-			frappe.conn.sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s
+			frappe.db.sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s
 					and parent = %s""", (self.doc.amended_from,	self.doc.c_form_no))
 
-			frappe.conn.set(self.doc, 'c_form_no', '')
+			frappe.db.set(self.doc, 'c_form_no', '')
 			
 	def update_current_stock(self):
 		for d in getlist(self.doclist, 'entries'):
 			if d.item_code and d.warehouse:
-				bin = frappe.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+				bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
 				d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
 
 		for d in getlist(self.doclist, 'packing_details'):
-			bin = frappe.conn.sql("select actual_qty, projected_qty from `tabBin` where item_code =	%s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+			bin = frappe.db.sql("select actual_qty, projected_qty from `tabBin` where item_code =	%s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
 			d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
 			d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
 	 
 	
 	def get_warehouse(self):
-		w = frappe.conn.sql("select warehouse from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (frappe.session['user'], self.doc.company))
+		w = frappe.db.sql("select warehouse from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (frappe.session['user'], self.doc.company))
 		w = w and w[0][0] or ''
 		if not w:
-			ps = frappe.conn.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company)
+			ps = frappe.db.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company)
 			if not ps:
 				msgprint("To make POS entry, please create POS Setting from Accounts --> POS Setting page and refresh the system.", raise_exception=True)
 			elif not ps[0][1]:
@@ -425,25 +425,25 @@
 		if cint(self.doc.is_pos) == 1:
 			if flt(self.doc.paid_amount) == 0:
 				if self.doc.cash_bank_account: 
-					frappe.conn.set(self.doc, 'paid_amount', 
+					frappe.db.set(self.doc, 'paid_amount', 
 						(flt(self.doc.grand_total) - flt(self.doc.write_off_amount)))
 				else:
 					# show message that the amount is not paid
-					frappe.conn.set(self.doc,'paid_amount',0)
+					frappe.db.set(self.doc,'paid_amount',0)
 					frappe.msgprint("Note: Payment Entry will not be created since 'Cash/Bank Account' was not specified.")
 		else:
-			frappe.conn.set(self.doc,'paid_amount',0)
+			frappe.db.set(self.doc,'paid_amount',0)
 		
 	def check_prev_docstatus(self):
 		for d in getlist(self.doclist,'entries'):
 			if d.sales_order:
-				submitted = frappe.conn.sql("select name from `tabSales Order` where docstatus = 1 and name = '%s'" % d.sales_order)
+				submitted = frappe.db.sql("select name from `tabSales Order` where docstatus = 1 and name = '%s'" % d.sales_order)
 				if not submitted:
 					msgprint("Sales Order : "+ cstr(d.sales_order) +" is not submitted")
 					raise Exception , "Validation Error."
 
 			if d.delivery_note:
-				submitted = frappe.conn.sql("select name from `tabDelivery Note` where docstatus = 1 and name = '%s'" % d.delivery_note)
+				submitted = frappe.db.sql("select name from `tabDelivery Note` where docstatus = 1 and name = '%s'" % d.delivery_note)
 				if not submitted:
 					msgprint("Delivery Note : "+ cstr(d.delivery_note) +" is not submitted")
 					raise Exception , "Validation Error."
@@ -451,11 +451,11 @@
 	def update_stock_ledger(self):
 		sl_entries = []
 		for d in self.get_item_list():
-			if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
+			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
 					and d.warehouse:
 				sl_entries.append(self.get_sl_entries(d, {
 					"actual_qty": -1*flt(d.qty),
-					"stock_uom": frappe.conn.get_value("Item", d.item_code, "stock_uom")
+					"stock_uom": frappe.db.get_value("Item", d.item_code, "stock_uom")
 				}))
 		
 		self.make_sl_entries(sl_entries)
@@ -584,7 +584,7 @@
 	def update_c_form(self):
 		"""Update amended id in C-form"""
 		if self.doc.c_form_no and self.doc.amended_from:
-			frappe.conn.sql("""update `tabC-Form Invoice Detail` set invoice_no = %s,
+			frappe.db.sql("""update `tabC-Form Invoice Detail` set invoice_no = %s,
 				invoice_date = %s, territory = %s, net_total = %s,
 				grand_total = %s where invoice_no = %s and parent = %s""", 
 				(self.doc.name, self.doc.amended_from, self.doc.c_form_no))
@@ -613,13 +613,13 @@
 	def convert_to_recurring(self):
 		if self.doc.convert_into_recurring_invoice:
 			if not self.doc.recurring_id:
-				frappe.conn.set(self.doc, "recurring_id",
+				frappe.db.set(self.doc, "recurring_id",
 					make_autoname("RECINV/.#####"))
 			
 			self.set_next_date()
 
 		elif self.doc.recurring_id:
-			frappe.conn.sql("""update `tabSales Invoice`
+			frappe.db.sql("""update `tabSales Invoice`
 				set convert_into_recurring_invoice = 0
 				where recurring_id = %s""", (self.doc.recurring_id,))
 			
@@ -649,7 +649,7 @@
 		next_date = get_next_date(self.doc.posting_date,
 			month_map[self.doc.recurring_type], cint(self.doc.repeat_on_day_of_month))
 		
-		frappe.conn.set(self.doc, 'next_date', next_date)
+		frappe.db.set(self.doc, 'next_date', next_date)
 	
 def get_next_date(dt, mcount, day=None):
 	dt = getdate(dt)
@@ -665,14 +665,14 @@
 		and notify the concerned people
 	"""
 	next_date = next_date or nowdate()
-	recurring_invoices = frappe.conn.sql("""select name, recurring_id
+	recurring_invoices = frappe.db.sql("""select name, recurring_id
 		from `tabSales Invoice` where ifnull(convert_into_recurring_invoice, 0)=1
 		and docstatus=1 and next_date=%s
 		and next_date <= ifnull(end_date, '2199-12-31')""", next_date)
 	
 	exception_list = []
 	for ref_invoice, recurring_id in recurring_invoices:
-		if not frappe.conn.sql("""select name from `tabSales Invoice`
+		if not frappe.db.sql("""select name from `tabSales Invoice`
 				where posting_date=%s and recurring_id=%s and docstatus=1""",
 				(next_date, recurring_id)):
 			try:
@@ -680,21 +680,21 @@
 				new_invoice_wrapper = make_new_invoice(ref_wrapper, next_date)
 				send_notification(new_invoice_wrapper)
 				if commit:
-					frappe.conn.commit()
+					frappe.db.commit()
 			except:
 				if commit:
-					frappe.conn.rollback()
+					frappe.db.rollback()
 
-					frappe.conn.begin()
-					frappe.conn.sql("update `tabSales Invoice` set \
+					frappe.db.begin()
+					frappe.db.sql("update `tabSales Invoice` set \
 						convert_into_recurring_invoice = 0 where name = %s", ref_invoice)
 					notify_errors(ref_invoice, ref_wrapper.doc.customer, ref_wrapper.doc.owner)
-					frappe.conn.commit()
+					frappe.db.commit()
 
 				exception_list.append(frappe.get_traceback())
 			finally:
 				if commit:
-					frappe.conn.begin()
+					frappe.db.begin()
 			
 	if exception_list:
 		exception_message = "\n\n".join([cstr(d) for d in exception_list])
@@ -746,7 +746,7 @@
 def notify_errors(inv, customer, owner):
 	from frappe.profile import get_system_managers
 	
-	frappe.sendmail(recipients=get_system_managers() + [frappe.conn.get_value("Profile", owner, "email")],
+	frappe.sendmail(recipients=get_system_managers() + [frappe.db.get_value("Profile", owner, "email")],
 		subject="[Urgent] Error while creating recurring invoice for %s" % inv,
 		message = frappe.get_template("template/emails/recurring_invoice_failed.html").render({
 			"name": inv,
@@ -769,7 +769,7 @@
 
 @frappe.whitelist()
 def get_bank_cash_account(mode_of_payment):
-	val = frappe.conn.get_value("Mode of Payment", mode_of_payment, "default_account")
+	val = frappe.db.get_value("Mode of Payment", mode_of_payment, "default_account")
 	if not val:
 		frappe.msgprint("Default Bank / Cash Account not set in Mode of Payment: %s. Please add a Default Account in Mode of Payment master." % mode_of_payment)
 	return {
@@ -783,7 +783,7 @@
 	# income account can be any Credit account, 
 	# but can also be a Asset account with account_type='Income Account' in special circumstances. 
 	# Hence the first condition is an "OR"
-	return frappe.conn.sql("""select tabAccount.name from `tabAccount` 
+	return frappe.db.sql("""select tabAccount.name from `tabAccount` 
 			where (tabAccount.debit_or_credit="Credit" 
 					or tabAccount.account_type = "Income Account") 
 				and tabAccount.group_or_ledger="Ledger" 
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index f6a67f9..81d5572 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -210,7 +210,7 @@
 		si.insert()
 		si.submit()
 
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
 			order by account asc""", si.doc.name, as_dict=1)
 
@@ -238,7 +238,7 @@
 		# cancel
 		si.cancel()
 
-		gle = frappe.conn.sql("""select * from `tabGL Entry` 
+		gle = frappe.db.sql("""select * from `tabGL Entry` 
 			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
 
 		self.assertFalse(gle)
@@ -363,7 +363,7 @@
 		self.assertEquals(w.doc.outstanding_amount, w.doc.grand_total)
 		
 	def test_payment(self):
-		frappe.conn.sql("""delete from `tabGL Entry`""")
+		frappe.db.sql("""delete from `tabGL Entry`""")
 		w = self.make()
 		
 		from erpnext.accounts.doctype.journal_voucher.test_journal_voucher \
@@ -374,11 +374,11 @@
 		jv.insert()
 		jv.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Sales Invoice", w.doc.name, "outstanding_amount"),
+		self.assertEquals(frappe.db.get_value("Sales Invoice", w.doc.name, "outstanding_amount"),
 			161.8)
 	
 		jv.cancel()
-		self.assertEquals(frappe.conn.get_value("Sales Invoice", w.doc.name, "outstanding_amount"),
+		self.assertEquals(frappe.db.get_value("Sales Invoice", w.doc.name, "outstanding_amount"),
 			561.8)
 			
 	def test_time_log_batch(self):
@@ -390,18 +390,18 @@
 		si.insert()
 		si.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Time Log Batch", "_T-Time Log Batch-00001",
+		self.assertEquals(frappe.db.get_value("Time Log Batch", "_T-Time Log Batch-00001",
 		 	"status"), "Billed")
 
-		self.assertEquals(frappe.conn.get_value("Time Log", "_T-Time Log-00001", "status"), 
+		self.assertEquals(frappe.db.get_value("Time Log", "_T-Time Log-00001", "status"), 
 			"Billed")
 
 		si.cancel()
 
-		self.assertEquals(frappe.conn.get_value("Time Log Batch", "_T-Time Log Batch-00001", 
+		self.assertEquals(frappe.db.get_value("Time Log Batch", "_T-Time Log Batch-00001", 
 			"status"), "Submitted")
 
-		self.assertEquals(frappe.conn.get_value("Time Log", "_T-Time Log-00001", "status"), 
+		self.assertEquals(frappe.db.get_value("Time Log", "_T-Time Log-00001", "status"), 
 			"Batched for Billing")
 			
 	def test_sales_invoice_gl_entry_without_aii(self):
@@ -411,7 +411,7 @@
 		si.insert()
 		si.submit()
 		
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
 			order by account asc""", si.doc.name, as_dict=1)
 		
@@ -432,7 +432,7 @@
 		# cancel
 		si.cancel()
 		
-		gle = frappe.conn.sql("""select * from `tabGL Entry` 
+		gle = frappe.db.sql("""select * from `tabGL Entry` 
 			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
 		
 		self.assertFalse(gle)
@@ -456,7 +456,7 @@
 		si.submit()
 		
 		# check stock ledger entries
-		sle = frappe.conn.sql("""select * from `tabStock Ledger Entry` 
+		sle = frappe.db.sql("""select * from `tabStock Ledger Entry` 
 			where voucher_type = 'Sales Invoice' and voucher_no = %s""", 
 			si.doc.name, as_dict=1)[0]
 		self.assertTrue(sle)
@@ -464,12 +464,12 @@
 			["_Test Item", "_Test Warehouse - _TC", -1.0])
 		
 		# check gl entries
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
 			order by account asc, debit asc""", si.doc.name, as_dict=1)
 		self.assertTrue(gl_entries)
 		
-		stock_in_hand = frappe.conn.get_value("Account", {"master_name": "_Test Warehouse - _TC"})
+		stock_in_hand = frappe.db.get_value("Account", {"master_name": "_Test Warehouse - _TC"})
 				
 		expected_gl_entries = sorted([
 			[si.doc.debit_to, 630.0, 0.0],
@@ -487,7 +487,7 @@
 			self.assertEquals(expected_gl_entries[i][2], gle.credit)
 		
 		si.cancel()
-		gle = frappe.conn.sql("""select * from `tabGL Entry` 
+		gle = frappe.db.sql("""select * from `tabGL Entry` 
 			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
 		
 		self.assertFalse(gle)
@@ -520,7 +520,7 @@
 		si.submit()
 		
 		# check stock ledger entries
-		sle = frappe.conn.sql("""select * from `tabStock Ledger Entry` 
+		sle = frappe.db.sql("""select * from `tabStock Ledger Entry` 
 			where voucher_type = 'Sales Invoice' and voucher_no = %s""", 
 			si.doc.name, as_dict=1)[0]
 		self.assertTrue(sle)
@@ -528,7 +528,7 @@
 			["_Test Item", "_Test Warehouse No Account - _TC", -1.0])
 		
 		# check gl entries
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
 			order by account asc, debit asc""", si.doc.name, as_dict=1)
 		self.assertTrue(gl_entries)
@@ -545,7 +545,7 @@
 			self.assertEquals(expected_gl_entries[i][2], gle.credit)
 				
 		si.cancel()
-		gle = frappe.conn.sql("""select * from `tabGL Entry` 
+		gle = frappe.db.sql("""select * from `tabGL Entry` 
 			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
 		
 		self.assertFalse(gle)
@@ -561,7 +561,7 @@
 		si.insert()
 		si.submit()
 		
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
 			order by account asc""", si.doc.name, as_dict=1)
 		self.assertTrue(gl_entries)
@@ -588,7 +588,7 @@
 		si.insert()
 		si.submit()
 		
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
 			order by account asc""", si.doc.name, as_dict=1)
 		self.assertTrue(gl_entries)
@@ -626,7 +626,7 @@
 	def _insert_pos_settings(self):
 		from erpnext.accounts.doctype.pos_setting.test_pos_setting \
 			import test_records as pos_setting_test_records
-		frappe.conn.sql("""delete from `tabPOS Setting`""")
+		frappe.db.sql("""delete from `tabPOS Setting`""")
 		
 		ps = frappe.bean(copy=pos_setting_test_records[0])
 		ps.insert()
@@ -653,17 +653,17 @@
 		si.submit()
 		si.load_from_db()
 		
-		self.assertTrue(frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_invoice=%s""", si.doc.name))
 		
-		self.assertTrue(frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_invoice=%s and credit=300""", si.doc.name))
 			
 		self.assertEqual(si.doc.outstanding_amount, 261.8)
 		
 		si.cancel()
 		
-		self.assertTrue(not frappe.conn.sql("""select name from `tabJournal Voucher Detail`
+		self.assertTrue(not frappe.db.sql("""select name from `tabJournal Voucher Detail`
 			where against_invoice=%s""", si.doc.name))
 			
 	def test_recurring_invoice(self):
@@ -762,7 +762,7 @@
 		no_of_months = ({"Monthly": 1, "Quarterly": 3, "Yearly": 12})[base_si.doc.recurring_type]
 		
 		def _test(i):
-			self.assertEquals(i+1, frappe.conn.sql("""select count(*) from `tabSales Invoice`
+			self.assertEquals(i+1, frappe.db.sql("""select count(*) from `tabSales Invoice`
 				where recurring_id=%s and docstatus=1""", base_si.doc.recurring_id)[0][0])
 			
 			next_date = get_next_date(base_si.doc.posting_date, no_of_months, 
@@ -770,7 +770,7 @@
 
 			manage_recurring_invoices(next_date=next_date, commit=False)
 			
-			recurred_invoices = frappe.conn.sql("""select name from `tabSales Invoice`
+			recurred_invoices = frappe.db.sql("""select name from `tabSales Invoice`
 				where recurring_id=%s and docstatus=1 order by name desc""",
 				base_si.doc.recurring_id)
 			
@@ -805,9 +805,9 @@
 			base_si = _test(i)
 			
 	def clear_stock_account_balance(self):
-		frappe.conn.sql("delete from `tabStock Ledger Entry`")
-		frappe.conn.sql("delete from tabBin")
-		frappe.conn.sql("delete from `tabGL Entry`")
+		frappe.db.sql("delete from `tabStock Ledger Entry`")
+		frappe.db.sql("delete from tabBin")
+		frappe.db.sql("delete from `tabGL Entry`")
 
 	def test_serialized(self):
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
@@ -824,9 +824,9 @@
 		si.insert()
 		si.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "status"), "Delivered")
-		self.assertFalse(frappe.conn.get_value("Serial No", serial_nos[0], "warehouse"))
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], 
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Delivered")
+		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], 
 			"delivery_document_no"), si.doc.name)
 			
 		return si
@@ -838,9 +838,9 @@
 
 		serial_nos = get_serial_nos(si.doclist[1].serial_no)
 
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "status"), "Available")
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
-		self.assertFalse(frappe.conn.get_value("Serial No", serial_nos[0], 
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Available")
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
+		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], 
 			"delivery_document_no"))
 
 	def test_serialize_status(self):
diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.py b/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.py
index 6c1a877..047bbd4 100644
--- a/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.py
+++ b/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.py
@@ -9,7 +9,7 @@
 class DocType(DocListController):		
 	def validate(self):
 		if self.doc.is_default == 1:
-			frappe.conn.sql("""update `tabSales Taxes and Charges Master` set is_default = 0 
+			frappe.db.sql("""update `tabSales Taxes and Charges Master` set is_default = 0 
 				where ifnull(is_default,0) = 1 and name != %s and company = %s""", 
 				(self.doc.name, self.doc.company))
 				
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index d0c8aaf..bfc2d2d 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -90,7 +90,7 @@
 			
 def validate_account_for_auto_accounting_for_stock(gl_map):
 	if gl_map[0].voucher_type=="Journal Voucher":
-		aii_accounts = [d[0] for d in frappe.conn.sql("""select name from tabAccount 
+		aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount 
 			where account_type = 'Warehouse' and ifnull(master_name, '')!=''""")]
 		
 		for entry in gl_map:
@@ -107,12 +107,12 @@
 		check_freezing_date, update_outstanding_amt, validate_frozen_account
 		
 	if not gl_entries:
-		gl_entries = frappe.conn.sql("""select * from `tabGL Entry` 
+		gl_entries = frappe.db.sql("""select * from `tabGL Entry` 
 			where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no), as_dict=True)
 	if gl_entries:
 		check_freezing_date(gl_entries[0]["posting_date"], adv_adj)
 	
-	frappe.conn.sql("""delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s""", 
+	frappe.db.sql("""delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s""", 
 		(voucher_type or gl_entries[0]["voucher_type"], voucher_no or gl_entries[0]["voucher_no"]))
 	
 	for entry in gl_entries:
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py
index 594150c..15cfdd2 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.py
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.py
@@ -20,7 +20,7 @@
 	
 	# root
 	if args['parent'] in ("Accounts", "Cost Centers"):
-		acc = frappe.conn.sql(""" select 
+		acc = frappe.db.sql(""" select 
 			name as value, if(group_or_ledger='Group', 1, 0) as expandable
 			from `tab%s`
 			where ifnull(parent_%s,'') = ''
@@ -29,7 +29,7 @@
 				company, as_dict=1)
 	else:	
 		# other
-		acc = frappe.conn.sql("""select 
+		acc = frappe.db.sql("""select 
 			name as value, if(group_or_ledger='Group', 1, 0) as expandable
 	 		from `tab%s` 
 			where ifnull(parent_%s,'') = %s
@@ -38,7 +38,7 @@
 				args['parent'], as_dict=1)
 				
 	if ctype == 'Account':
-		currency = frappe.conn.sql("select default_currency from `tabCompany` where name = %s", company)[0][0]
+		currency = frappe.db.sql("select default_currency from `tabCompany` where name = %s", company)[0][0]
 		for each in acc:
 			bal = get_balance_on(each.get("value"))
 			each["currency"] = currency
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 840b111..0e6851a 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -48,7 +48,7 @@
 def set_address_details(out, party, party_type):
 	billing_address_field = "customer_address" if party_type == "Lead" \
 		else party_type.lower() + "_address"
-	out[billing_address_field] = frappe.conn.get_value("Address", 
+	out[billing_address_field] = frappe.db.get_value("Address", 
 		{party_type.lower(): party.name, "is_primary_address":1}, "name")
 	
 	# address display
@@ -56,12 +56,12 @@
 	
 	# shipping address
 	if party_type in ["Customer", "Lead"]:
-		out.shipping_address_name = frappe.conn.get_value("Address", 
+		out.shipping_address_name = frappe.db.get_value("Address", 
 			{party_type.lower(): party.name, "is_shipping_address":1}, "name")
 		out.shipping_address = get_address_display(out["shipping_address_name"])
 	
 def set_contact_details(out, party, party_type):
-	out.contact_person = frappe.conn.get_value("Contact", 
+	out.contact_person = frappe.db.get_value("Contact", 
 		{party_type.lower(): party.name, "is_primary_contact":1}, "name")
 	
 	out.update(get_contact_details(out.contact_person))
@@ -91,14 +91,14 @@
 		price_list = party.default_price_list
 		
 	if not price_list and party.party_type=="Customer":
-		price_list =  frappe.conn.get_value("Customer Group", 
+		price_list =  frappe.db.get_value("Customer Group", 
 			party.customer_group, "default_price_list")
 
 	if not price_list:
 		price_list = given_price_list
 
 	if price_list:
-		out.price_list_currency = frappe.conn.get_value("Price List", price_list, "currency")
+		out.price_list_currency = frappe.db.get_value("Price List", price_list, "currency")
 		
 	out["selling_price_list" if party.doctype=="Customer" else "buying_price_list"] = price_list
 	
@@ -113,7 +113,7 @@
 	if party:
 		account = get_party_account(company, party, party_type)
 	elif account:
-		party = frappe.conn.get_value('Account', account, 'master_name')
+		party = frappe.db.get_value('Account', account, 'master_name')
 
 	account_fieldname = "debit_to" if party_type=="Customer" else "credit_to" 
 
@@ -129,7 +129,7 @@
 		frappe.throw(_("Please select company first."))
 
 	if party:
-		acc_head = frappe.conn.get_value("Account", {"master_name":party,
+		acc_head = frappe.db.get_value("Account", {"master_name":party,
 			"master_type": party_type, "company": company})
 
 		if not acc_head:
@@ -143,11 +143,11 @@
 	if posting_date:
 		credit_days = 0
 		if account:
-			credit_days = frappe.conn.get_value("Account", account, "credit_days")
+			credit_days = frappe.db.get_value("Account", account, "credit_days")
 		if party and not credit_days:
-			credit_days = frappe.conn.get_value(party_type, party, "credit_days")
+			credit_days = frappe.db.get_value(party_type, party, "credit_days")
 		if company and not credit_days:
-			credit_days = frappe.conn.get_value("Company", company, "credit_days")
+			credit_days = frappe.db.get_value("Company", company, "credit_days")
 			
 		due_date = add_days(posting_date, credit_days) if credit_days else posting_date
 
@@ -157,9 +157,9 @@
 	if not company:
 		frappe.throw(_("Company is required"))
 		
-	company_details = frappe.conn.get_value("Company", company, 
+	company_details = frappe.db.get_value("Company", company, 
 		["abbr", "receivables_group", "payables_group"], as_dict=True)
-	if not frappe.conn.exists("Account", (party + " - " + company_details.abbr)):
+	if not frappe.db.exists("Account", (party + " - " + company_details.abbr)):
 		parent_account = company_details.receivables_group \
 			if party_type=="Customer" else company_details.payables_group
 
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.py b/erpnext/accounts/report/accounts_payable/accounts_payable.py
index 57bdf9f..fffc948 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.py
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.py
@@ -9,10 +9,10 @@
 
 def execute(filters=None):
 	if not filters: filters = {}
-	supplier_naming_by = frappe.conn.get_value("Buying Settings", None, "supp_master_name")
+	supplier_naming_by = frappe.db.get_value("Buying Settings", None, "supp_master_name")
 	columns = get_columns(supplier_naming_by)
 	entries = get_gl_entries(filters)
-	account_map = dict(((r.name, r) for r in frappe.conn.sql("""select acc.name, 
+	account_map = dict(((r.name, r) for r in frappe.db.sql("""select acc.name, 
 		supp.supplier_name, supp.name as supplier 
 		from `tabAccount` acc, `tabSupplier` supp 
 		where acc.master_type="Supplier" and supp.name=acc.master_name""", as_dict=1)))
@@ -85,7 +85,7 @@
 def get_gl_entries(filters, before_report_date=True):
 	conditions, supplier_accounts = get_conditions(filters, before_report_date)
 	gl_entries = []
-	gl_entries = frappe.conn.sql("""select * from `tabGL Entry` 
+	gl_entries = frappe.db.sql("""select * from `tabGL Entry` 
 		where docstatus < 2 %s order by posting_date, account""" % 
 		(conditions), tuple(supplier_accounts), as_dict=1)
 	return gl_entries
@@ -99,7 +99,7 @@
 	if filters.get("account"):
 		supplier_accounts = [filters["account"]]
 	else:
-		supplier_accounts = frappe.conn.sql_list("""select name from `tabAccount` 
+		supplier_accounts = frappe.db.sql_list("""select name from `tabAccount` 
 			where ifnull(master_type, '') = 'Supplier' and docstatus < 2 %s""" % 
 			conditions, filters)
 	
@@ -118,7 +118,7 @@
 	
 def get_account_supplier_type_map():
 	account_supplier_type_map = {}
-	for each in frappe.conn.sql("""select acc.name, supp.supplier_type from `tabSupplier` supp, 
+	for each in frappe.db.sql("""select acc.name, supp.supplier_type from `tabSupplier` supp, 
 			`tabAccount` acc where supp.name = acc.master_name group by acc.name"""):
 		account_supplier_type_map[each[0]] = each[1]
 
@@ -128,14 +128,14 @@
 	voucher_details = {}
 	for dt in ["Purchase Invoice", "Journal Voucher"]:
 		voucher_details.setdefault(dt, frappe._dict())
-		for t in frappe.conn.sql("""select name, due_date, bill_no, bill_date 
+		for t in frappe.db.sql("""select name, due_date, bill_no, bill_date 
 				from `tab%s`""" % dt, as_dict=1):
 			voucher_details[dt].setdefault(t.name, t)
 		
 	return voucher_details
 
 def get_outstanding_amount(gle, report_date):
-	payment_amount = frappe.conn.sql("""
+	payment_amount = frappe.db.sql("""
 		select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
 		from `tabGL Entry` 
 		where account = %s and posting_date <= %s and against_voucher_type = %s 
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 9b2caf0..427669f 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -15,7 +15,7 @@
 			else self.filters.report_date
 			
 	def run(self):
-		customer_naming_by = frappe.conn.get_value("Selling Settings", None, "cust_master_name")
+		customer_naming_by = frappe.db.get_value("Selling Settings", None, "cust_master_name")
 		return self.get_columns(customer_naming_by), self.get_data(customer_naming_by)
 		
 	def get_columns(self, customer_naming_by):
@@ -111,7 +111,7 @@
 		
 	def get_account_map(self):
 		if not hasattr(self, "account_map"):
-			self.account_map = dict(((r.name, r) for r in frappe.conn.sql("""select 
+			self.account_map = dict(((r.name, r) for r in frappe.db.sql("""select 
 				acc.name, cust.name as customer, cust.customer_name, cust.territory
 				from `tabAccount` acc left join `tabCustomer` cust 
 				on cust.name=acc.master_name where acc.master_type="Customer" """, as_dict=True)))
@@ -121,7 +121,7 @@
 	def get_due_date(self, gle):
 		if not hasattr(self, "invoice_due_date_map"):
 			# TODO can be restricted to posting date
-			self.invoice_due_date_map = dict(frappe.conn.sql("""select name, due_date
+			self.invoice_due_date_map = dict(frappe.db.sql("""select name, due_date
 				from `tabSales Invoice` where docstatus=1"""))
 				
 		return gle.voucher_type == "Sales Invoice" \
@@ -130,7 +130,7 @@
 	def get_gl_entries(self):
 		if not hasattr(self, "gl_entries"):
 			conditions, values = self.prepare_conditions()
-			self.gl_entries = frappe.conn.sql("""select * from `tabGL Entry`
+			self.gl_entries = frappe.db.sql("""select * from `tabGL Entry`
 				where docstatus < 2 {0} order by posting_date, account""".format(conditions),
 				values, as_dict=True)
 		return self.gl_entries
diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
index 1ed3d73..f86c932 100644
--- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
+++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
@@ -33,7 +33,7 @@
 	
 def get_entries(filters):
 	conditions = get_conditions(filters)
-	entries =  frappe.conn.sql("""select jv.name, jvd.account, jv.posting_date, 
+	entries =  frappe.db.sql("""select jv.name, jvd.account, jv.posting_date, 
 		jv.clearance_date, jvd.against_account, jvd.debit, jvd.credit
 		from `tabJournal Voucher Detail` jvd, `tabJournal Voucher` jv 
 		where jvd.parent = jv.name and jv.docstatus=1 %s
diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
index fed9170..4cb14db 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
+++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
@@ -8,7 +8,7 @@
 def execute(filters=None):
 	if not filters: filters = {}
 	
-	debit_or_credit = frappe.conn.get_value("Account", filters["account"], "debit_or_credit")
+	debit_or_credit = frappe.db.get_value("Account", filters["account"], "debit_or_credit")
 	
 	columns = get_columns()
 	data = get_entries(filters)
@@ -41,7 +41,7 @@
 	]
 	
 def get_entries(filters):
-	entries = frappe.conn.sql("""select 
+	entries = frappe.db.sql("""select 
 			jv.name, jv.posting_date, jv.clearance_date, jvd.against_account, jvd.debit, jvd.credit
 		from 
 			`tabJournal Voucher Detail` jvd, `tabJournal Voucher` jv 
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 0a7abef..c98d205 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
@@ -62,7 +62,7 @@
 
 #Get cost center & target details
 def get_costcenter_target_details(filters):
-	return frappe.conn.sql("""select cc.name, cc.distribution_id, 
+	return frappe.db.sql("""select cc.name, cc.distribution_id, 
 		cc.parent_cost_center, bd.account, bd.budget_allocated 
 		from `tabCost Center` cc, `tabBudget Detail` bd 
 		where bd.parent=cc.name and bd.fiscal_year=%s and 
@@ -73,7 +73,7 @@
 def get_target_distribution_details(filters):
 	target_details = {}
 
-	for d in frappe.conn.sql("""select bd.name, bdd.month, bdd.percentage_allocation  
+	for d in frappe.db.sql("""select bd.name, bdd.month, bdd.percentage_allocation  
 		from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd
 		where bdd.parent=bd.name and bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1):
 			target_details.setdefault(d.name, {}).setdefault(d.month, flt(d.percentage_allocation))
@@ -82,7 +82,7 @@
 
 #Get actual details from gl entry
 def get_actual_details(filters):
-	ac_details = frappe.conn.sql("""select gl.account, gl.debit, gl.credit, 
+	ac_details = frappe.db.sql("""select gl.account, gl.debit, gl.credit, 
 		gl.cost_center, MONTHNAME(gl.posting_date) as month_name 
 		from `tabGL Entry` gl, `tabBudget Detail` bd 
 		where gl.fiscal_year=%s and company=%s
diff --git a/erpnext/accounts/report/customer_account_head/customer_account_head.py b/erpnext/accounts/report/customer_account_head/customer_account_head.py
index 34303e5..291d6aa 100644
--- a/erpnext/accounts/report/customer_account_head/customer_account_head.py
+++ b/erpnext/accounts/report/customer_account_head/customer_account_head.py
@@ -8,7 +8,7 @@
 	account_map = get_account_map()
 	columns = get_columns(account_map)
 	data = []
-	customers = frappe.conn.sql("select name from tabCustomer where docstatus < 2")
+	customers = frappe.db.sql("select name from tabCustomer where docstatus < 2")
 	for cust in customers:
 		row = [cust[0]]
 		for company in sorted(account_map):
@@ -18,7 +18,7 @@
 	return columns, data
 
 def get_account_map():
-	accounts = frappe.conn.sql("""select name, company, master_name 
+	accounts = frappe.db.sql("""select name, company, master_name 
 		from `tabAccount` where master_type = 'Customer' 
 		and ifnull(master_name, '') != '' and docstatus < 2""", as_dict=1)
 
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index 4cfda3a..e130e29 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -8,7 +8,7 @@
 
 def execute(filters=None):
 	account_details = {}
-	for acc in frappe.conn.sql("""select name, debit_or_credit, group_or_ledger 
+	for acc in frappe.db.sql("""select name, debit_or_credit, group_or_ledger 
 		from tabAccount""", as_dict=1):
 			account_details.setdefault(acc.name, acc)
 	
@@ -49,7 +49,7 @@
 	group_by_condition = "group by voucher_type, voucher_no, account" \
 		if filters.get("group_by_voucher") else "group by name"
 		
-	gl_entries = frappe.conn.sql("""select posting_date, account, 
+	gl_entries = frappe.db.sql("""select posting_date, account, 
 			sum(ifnull(debit, 0)) as debit, sum(ifnull(credit, 0)) as credit, 
 			voucher_type, voucher_no, cost_center, remarks, is_opening, against 
 		from `tabGL Entry`
@@ -64,7 +64,7 @@
 def get_conditions(filters):
 	conditions = []
 	if filters.get("account"):
-		lft, rgt = frappe.conn.get_value("Account", filters["account"], ["lft", "rgt"])
+		lft, rgt = frappe.db.get_value("Account", filters["account"], ["lft", "rgt"])
 		conditions.append("""account in (select name from tabAccount 
 			where lft>=%s and rgt<=%s and docstatus<2)""" % (lft, rgt))
 	else:
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 6b915d1..1bbf2d1 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -59,7 +59,7 @@
 	
 	query += " order by item_code desc, warehouse desc, posting_date desc, posting_time desc, name desc"
 	
-	res = frappe.conn.sql(query, filters, as_dict=True)
+	res = frappe.db.sql(query, filters, as_dict=True)
 	
 	out = {}
 	for r in res:
@@ -73,7 +73,7 @@
 def get_item_sales_bom():
 	item_sales_bom = {}
 	
-	for d in frappe.conn.sql("""select parenttype, parent, parent_item,
+	for d in frappe.db.sql("""select parenttype, parent, parent_item,
 		item_code, warehouse, -1*qty as total_qty, parent_detail_docname
 		from `tabPacked Item` where docstatus=1""", as_dict=True):
 		item_sales_bom.setdefault(d.parenttype, frappe._dict()).setdefault(d.parent,
@@ -90,7 +90,7 @@
 	if filters.get("to_date"):
 		conditions += " and posting_date<=%(to_date)s"
 	
-	delivery_note_items = frappe.conn.sql("""select item.parenttype, dn.name, 
+	delivery_note_items = frappe.db.sql("""select item.parenttype, dn.name, 
 		dn.posting_date, dn.posting_time, dn.project_name, 
 		item.item_code, item.item_name, item.description, item.warehouse,
 		item.qty, item.base_rate, item.base_amount, item.name as "item_row",
@@ -99,7 +99,7 @@
 		where item.parent = dn.name and dn.docstatus = 1 %s
 		order by dn.posting_date desc, dn.posting_time desc""" % (conditions,), filters, as_dict=1)
 
-	sales_invoice_items = frappe.conn.sql("""select item.parenttype, si.name, 
+	sales_invoice_items = frappe.db.sql("""select item.parenttype, si.name, 
 		si.posting_date, si.posting_time, si.project_name,
 		item.item_code, item.item_name, item.description, item.warehouse,
 		item.qty, item.base_rate, item.base_amount, item.name as "item_row",
diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
index a9bcbba..8e74873 100644
--- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
+++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
@@ -57,7 +57,7 @@
 	conditions = get_conditions(filters)
 	match_conditions = frappe.build_match_conditions("Purchase Invoice")
 	
-	return frappe.conn.sql("""select pi_item.parent, pi.posting_date, pi.credit_to, pi.company, 
+	return frappe.db.sql("""select pi_item.parent, pi.posting_date, pi.credit_to, pi.company, 
 		pi.supplier, pi.remarks, pi_item.item_code, pi_item.item_name, pi_item.item_group, 
 		pi_item.project_name, pi_item.purchase_order, pi_item.purchase_receipt, 
 		pi_item.expense_account, pi_item.qty, pi_item.base_rate, pi_item.base_amount, pi.supplier_name
@@ -66,14 +66,14 @@
 		order by pi.posting_date desc, pi_item.item_code desc""" % (conditions, match_conditions), filters, as_dict=1)
 		
 def get_aii_accounts():
-	return dict(frappe.conn.sql("select name, stock_received_but_not_billed from tabCompany"))
+	return dict(frappe.db.sql("select name, stock_received_but_not_billed from tabCompany"))
 	
 def get_tax_accounts(item_list, columns):
 	import json
 	item_tax = {}
 	tax_accounts = []
 	
-	tax_details = frappe.conn.sql("""select parent, account_head, item_wise_tax_detail
+	tax_details = frappe.db.sql("""select parent, account_head, item_wise_tax_detail
 		from `tabPurchase Taxes and Charges` where parenttype = 'Purchase Invoice' 
 		and docstatus = 1 and ifnull(account_head, '') != '' and category in ('Total', 'Valuation and Total') 
 		and parent in (%s)""" % ', '.join(['%s']*len(item_list)), tuple([item.parent for item in item_list]))
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
index 421a517..6a0d051 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
@@ -55,7 +55,7 @@
 		
 def get_items(filters):
 	conditions = get_conditions(filters)
-	return frappe.conn.sql("""select si_item.parent, si.posting_date, si.debit_to, si.project_name, 
+	return frappe.db.sql("""select si_item.parent, si.posting_date, si.debit_to, si.project_name, 
 		si.customer, si.remarks, si.territory, si.company, si_item.item_code, si_item.item_name, 
 		si_item.item_group, si_item.sales_order, si_item.delivery_note, si_item.income_account, 
 		si_item.qty, si_item.base_rate, si_item.base_amount, si.customer_name
@@ -68,7 +68,7 @@
 	item_tax = {}
 	tax_accounts = []
 	
-	tax_details = frappe.conn.sql("""select parent, account_head, item_wise_tax_detail
+	tax_details = frappe.db.sql("""select parent, account_head, item_wise_tax_detail
 		from `tabSales Taxes and Charges` where parenttype = 'Sales Invoice' 
 		and docstatus = 1 and ifnull(account_head, '') != ''
 		and parent in (%s)""" % ', '.join(['%s']*len(item_list)), 
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
index 5754dd1..36d02e0 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
@@ -58,7 +58,7 @@
 		else:
 			cond += " and master_type = 'Supplier'"
 
-		party_accounts = frappe.conn.sql_list("""select name from `tabAccount` 
+		party_accounts = frappe.db.sql_list("""select name from `tabAccount` 
 			where ifnull(master_name, '')!='' and docstatus < 2 %s""" % cond)
 	
 	if party_accounts:
@@ -74,7 +74,7 @@
 	
 def get_entries(filters):
 	conditions, party_accounts = get_conditions(filters)
-	entries =  frappe.conn.sql("""select jv.name, jvd.account, jv.posting_date, 
+	entries =  frappe.db.sql("""select jv.name, jvd.account, jv.posting_date, 
 		jvd.against_voucher, jvd.against_invoice, jvd.debit, jvd.credit, 
 		jv.cheque_no, jv.cheque_date, jv.remark 
 		from `tabJournal Voucher Detail` jvd, `tabJournal Voucher` jv 
@@ -86,10 +86,10 @@
 def get_invoice_posting_date_map(filters):
 	invoice_posting_date_map = {}
 	if filters.get("payment_type") == "Incoming":
-		for t in frappe.conn.sql("""select name, posting_date from `tabSales Invoice`"""):
+		for t in frappe.db.sql("""select name, posting_date from `tabSales Invoice`"""):
 			invoice_posting_date_map[t[0]] = t[1]
 	else:
-		for t in frappe.conn.sql("""select name, posting_date from `tabPurchase Invoice`"""):
+		for t in frappe.db.sql("""select name, posting_date from `tabPurchase Invoice`"""):
 			invoice_posting_date_map[t[0]] = t[1]
 
 	return invoice_posting_date_map
\ No newline at end of file
diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py
index b60b70d..a82ec29 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.py
+++ b/erpnext/accounts/report/purchase_register/purchase_register.py
@@ -72,12 +72,12 @@
 	expense_accounts = tax_accounts = expense_columns = tax_columns = []
 	
 	if invoice_list:	
-		expense_accounts = frappe.conn.sql_list("""select distinct expense_account 
+		expense_accounts = frappe.db.sql_list("""select distinct expense_account 
 			from `tabPurchase Invoice Item` where docstatus = 1 and ifnull(expense_account, '') != '' 
 			and parent in (%s) order by expense_account""" % 
 			', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]))
 		
-		tax_accounts = 	frappe.conn.sql_list("""select distinct account_head 
+		tax_accounts = 	frappe.db.sql_list("""select distinct account_head 
 			from `tabPurchase Taxes and Charges` where parenttype = 'Purchase Invoice' 
 			and docstatus = 1 and ifnull(account_head, '') != '' and category in ('Total', 'Valuation and Total') 
 			and parent in (%s) order by account_head""" % 
@@ -109,14 +109,14 @@
 	
 def get_invoices(filters):
 	conditions = get_conditions(filters)
-	return frappe.conn.sql("""select name, posting_date, credit_to, supplier, supplier_name, 
+	return frappe.db.sql("""select name, posting_date, credit_to, supplier, supplier_name, 
 		bill_no, bill_date, remarks, net_total, grand_total, outstanding_amount 
 		from `tabPurchase Invoice` where docstatus = 1 %s 
 		order by posting_date desc, name desc""" % conditions, filters, as_dict=1)
 	
 	
 def get_invoice_expense_map(invoice_list):
-	expense_details = frappe.conn.sql("""select parent, expense_account, sum(base_amount) as amount
+	expense_details = frappe.db.sql("""select parent, expense_account, sum(base_amount) as amount
 		from `tabPurchase Invoice Item` where parent in (%s) group by parent, expense_account""" % 
 		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
 	
@@ -128,7 +128,7 @@
 	return invoice_expense_map
 	
 def get_invoice_tax_map(invoice_list, invoice_expense_map, expense_accounts):
-	tax_details = frappe.conn.sql("""select parent, account_head, sum(tax_amount) as tax_amount
+	tax_details = frappe.db.sql("""select parent, account_head, sum(tax_amount) as tax_amount
 		from `tabPurchase Taxes and Charges` where parent in (%s) group by parent, account_head""" % 
 		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
 	
@@ -146,7 +146,7 @@
 	return invoice_expense_map, invoice_tax_map
 	
 def get_invoice_po_pr_map(invoice_list):
-	pi_items = frappe.conn.sql("""select parent, purchase_order, purchase_receipt, 
+	pi_items = frappe.db.sql("""select parent, purchase_order, purchase_receipt, 
 		project_name from `tabPurchase Invoice Item` where parent in (%s) 
 		and (ifnull(purchase_order, '') != '' or ifnull(purchase_receipt, '') != '')""" % 
 		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
@@ -168,7 +168,7 @@
 def get_account_details(invoice_list):
 	account_map = {}
 	accounts = list(set([inv.credit_to for inv in invoice_list]))
-	for acc in frappe.conn.sql("""select name, parent_account from tabAccount 
+	for acc in frappe.db.sql("""select name, parent_account from tabAccount 
 		where name in (%s)""" % ", ".join(["%s"]*len(accounts)), tuple(accounts), as_dict=1):
 			account_map[acc.name] = acc.parent_account
 						
diff --git a/erpnext/accounts/report/sales_register/sales_register.py b/erpnext/accounts/report/sales_register/sales_register.py
index 23e491d..4131ee2 100644
--- a/erpnext/accounts/report/sales_register/sales_register.py
+++ b/erpnext/accounts/report/sales_register/sales_register.py
@@ -72,12 +72,12 @@
 	income_accounts = tax_accounts = income_columns = tax_columns = []
 	
 	if invoice_list:
-		income_accounts = frappe.conn.sql_list("""select distinct income_account 
+		income_accounts = frappe.db.sql_list("""select distinct income_account 
 			from `tabSales Invoice Item` where docstatus = 1 and parent in (%s) 
 			order by income_account""" % 
 			', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]))
 	
-		tax_accounts = 	frappe.conn.sql_list("""select distinct account_head 
+		tax_accounts = 	frappe.db.sql_list("""select distinct account_head 
 			from `tabSales Taxes and Charges` where parenttype = 'Sales Invoice' 
 			and docstatus = 1 and ifnull(tax_amount_after_discount_amount, 0) != 0 
 			and parent in (%s) order by account_head""" % 
@@ -107,14 +107,14 @@
 	
 def get_invoices(filters):
 	conditions = get_conditions(filters)
-	return frappe.conn.sql("""select name, posting_date, debit_to, project_name, customer, 
+	return frappe.db.sql("""select name, posting_date, debit_to, project_name, customer, 
 		customer_name, remarks, net_total, grand_total, rounded_total, outstanding_amount 
 		from `tabSales Invoice` 
 		where docstatus = 1 %s order by posting_date desc, name desc""" % 
 		conditions, filters, as_dict=1)
 	
 def get_invoice_income_map(invoice_list):
-	income_details = frappe.conn.sql("""select parent, income_account, sum(base_amount) as amount
+	income_details = frappe.db.sql("""select parent, income_account, sum(base_amount) as amount
 		from `tabSales Invoice Item` where parent in (%s) group by parent, income_account""" % 
 		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
 	
@@ -126,7 +126,7 @@
 	return invoice_income_map
 	
 def get_invoice_tax_map(invoice_list, invoice_income_map, income_accounts):
-	tax_details = frappe.conn.sql("""select parent, account_head, 
+	tax_details = frappe.db.sql("""select parent, account_head, 
 		sum(tax_amount_after_discount_amount) as tax_amount 
 		from `tabSales Taxes and Charges` where parent in (%s) group by parent, account_head""" % 
 		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
@@ -145,7 +145,7 @@
 	return invoice_income_map, invoice_tax_map
 	
 def get_invoice_so_dn_map(invoice_list):
-	si_items = frappe.conn.sql("""select parent, sales_order, delivery_note
+	si_items = frappe.db.sql("""select parent, sales_order, delivery_note
 		from `tabSales Invoice Item` where parent in (%s) 
 		and (ifnull(sales_order, '') != '' or ifnull(delivery_note, '') != '')""" % 
 		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
@@ -164,7 +164,7 @@
 def get_customer_deatils(invoice_list):
 	customer_map = {}
 	customers = list(set([inv.customer for inv in invoice_list]))
-	for cust in frappe.conn.sql("""select name, territory from `tabCustomer` 
+	for cust in frappe.db.sql("""select name, territory from `tabCustomer` 
 		where name in (%s)""" % ", ".join(["%s"]*len(customers)), tuple(customers), as_dict=1):
 			customer_map[cust.name] = cust.territory
 	
@@ -173,7 +173,7 @@
 def get_account_details(invoice_list):
 	account_map = {}
 	accounts = list(set([inv.debit_to for inv in invoice_list]))
-	for acc in frappe.conn.sql("""select name, parent_account from tabAccount 
+	for acc in frappe.db.sql("""select name, parent_account from tabAccount 
 		where name in (%s)""" % ", ".join(["%s"]*len(accounts)), tuple(accounts), as_dict=1):
 			account_map[acc.name] = acc.parent_account
 						
diff --git a/erpnext/accounts/report/supplier_account_head/supplier_account_head.py b/erpnext/accounts/report/supplier_account_head/supplier_account_head.py
index c015462..11e1a0d 100644
--- a/erpnext/accounts/report/supplier_account_head/supplier_account_head.py
+++ b/erpnext/accounts/report/supplier_account_head/supplier_account_head.py
@@ -8,7 +8,7 @@
 	account_map = get_account_map()
 	columns = get_columns(account_map)
 	data = []
-	suppliers = frappe.conn.sql("select name from tabSupplier where docstatus < 2")
+	suppliers = frappe.db.sql("select name from tabSupplier where docstatus < 2")
 	for supplier in suppliers:
 		row = [supplier[0]]
 		for company in sorted(account_map):
@@ -18,7 +18,7 @@
 	return columns, data
 
 def get_account_map():
-	accounts = frappe.conn.sql("""select name, company, master_name 
+	accounts = frappe.db.sql("""select name, company, master_name 
 		from `tabAccount` where master_type = 'Supplier' 
 		and ifnull(master_name, '') != '' and docstatus < 2""", as_dict=1)
 
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 1a5af8e..4edf774 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -26,7 +26,7 @@
 	else:
 		cond = "'%s' >= year_start_date and '%s' <= year_end_date" % \
 			(date, date)
-	fy = frappe.conn.sql("""select name, year_start_date, year_end_date
+	fy = frappe.db.sql("""select name, year_start_date, year_end_date
 		from `tabFiscal Year` where %s order by year_start_date desc""" % cond)
 	
 	if not fy:
@@ -73,7 +73,7 @@
 			# hence, assuming balance as 0.0
 			return 0.0
 		
-	acc = frappe.conn.get_value('Account', account, \
+	acc = frappe.db.get_value('Account', account, \
 		['lft', 'rgt', 'debit_or_credit', 'is_pl_account', 'group_or_ledger'], as_dict=1)
 	
 	# for pl accounts, get balance within a fiscal year
@@ -90,7 +90,7 @@
 	else:
 		cond.append("""gle.account = "%s" """ % (account, ))
 	
-	bal = frappe.conn.sql("""
+	bal = frappe.db.sql("""
 		SELECT sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
 		FROM `tabGL Entry` gle
 		WHERE %s""" % " and ".join(cond))[0][0]
@@ -160,7 +160,7 @@
 		check if amount is same
 		check if jv is submitted
 	"""
-	ret = frappe.conn.sql("""
+	ret = frappe.db.sql("""
 		select t2.%(dr_or_cr)s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 
 		where t1.name = t2.parent and t2.account = '%(account)s' 
 		and ifnull(t2.against_voucher, '')='' 
@@ -176,14 +176,14 @@
 		Updates against document, if partial amount splits into rows
 	"""
 
-	frappe.conn.sql("""
+	frappe.db.sql("""
 		update `tabJournal Voucher Detail` t1, `tabJournal Voucher` t2	
 		set t1.%(dr_or_cr)s = '%(allocated_amt)s', 
 		t1.%(against_fld)s = '%(against_voucher)s', t2.modified = now() 
 		where t1.name = '%(voucher_detail_no)s' and t1.parent = t2.name""" % d)
 	
 	if d['allocated_amt'] < d['unadjusted_amt']:
-		jvd = frappe.conn.sql("""select cost_center, balance, against_account, is_advance 
+		jvd = frappe.db.sql("""select cost_center, balance, against_account, is_advance 
 			from `tabJournal Voucher Detail` where name = %s""", d['voucher_detail_no'])
 		# new entry with balance amount
 		ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail')
@@ -203,7 +203,7 @@
 
 	conditions, filter_values = build_filter_conditions(filters)
 		
-	return frappe.conn.sql("""select name, parent_account from `tabAccount` 
+	return frappe.db.sql("""select name, parent_account from `tabAccount` 
 		where docstatus < 2 %s and %s like %s order by name limit %s, %s""" % 
 		(conditions, searchfield, "%s", "%s", "%s"), 
 		tuple(filter_values + ["%%%s%%" % txt, start, page_len]))
@@ -214,22 +214,22 @@
 
 	conditions, filter_values = build_filter_conditions(filters)
 	
-	return frappe.conn.sql("""select name, parent_cost_center from `tabCost Center` 
+	return frappe.db.sql("""select name, parent_cost_center from `tabCost Center` 
 		where docstatus < 2 %s and %s like %s order by name limit %s, %s""" % 
 		(conditions, searchfield, "%s", "%s", "%s"), 
 		tuple(filter_values + ["%%%s%%" % txt, start, page_len]))
 		
 def remove_against_link_from_jv(ref_type, ref_no, against_field):
-	linked_jv = frappe.conn.sql_list("""select parent from `tabJournal Voucher Detail` 
+	linked_jv = frappe.db.sql_list("""select parent from `tabJournal Voucher Detail` 
 		where `%s`=%s and docstatus < 2""" % (against_field, "%s"), (ref_no))
 		
 	if linked_jv:	
-		frappe.conn.sql("""update `tabJournal Voucher Detail` set `%s`=null,
+		frappe.db.sql("""update `tabJournal Voucher Detail` set `%s`=null,
 			modified=%s, modified_by=%s
 			where `%s`=%s and docstatus < 2""" % (against_field, "%s", "%s", against_field, "%s"), 
 			(now(), frappe.session.user, ref_no))
 	
-		frappe.conn.sql("""update `tabGL Entry`
+		frappe.db.sql("""update `tabGL Entry`
 			set against_voucher_type=null, against_voucher=null,
 			modified=%s, modified_by=%s
 			where against_voucher_type=%s and against_voucher=%s
@@ -243,7 +243,7 @@
 
 @frappe.whitelist()
 def get_company_default(company, fieldname):
-	value = frappe.conn.get_value("Company", company, fieldname)
+	value = frappe.db.get_value("Company", company, fieldname)
 	
 	if not value:
 		throw(_("Please mention default value for '") + 
@@ -253,7 +253,7 @@
 	return value
 
 def fix_total_debit_credit():
-	vouchers = frappe.conn.sql("""select voucher_type, voucher_no, 
+	vouchers = frappe.db.sql("""select voucher_type, voucher_no, 
 		sum(debit) - sum(credit) as diff 
 		from `tabGL Entry` 
 		group by voucher_type, voucher_no
@@ -263,7 +263,7 @@
 		if abs(d.diff) > 0:
 			dr_or_cr = d.voucher_type == "Sales Invoice" and "credit" or "debit"
 			
-			frappe.conn.sql("""update `tabGL Entry` set %s = %s + %s
+			frappe.db.sql("""update `tabGL Entry` set %s = %s + %s
 				where voucher_type = %s and voucher_no = %s and %s > 0 limit 1""" %
 				(dr_or_cr, dr_or_cr, '%s', '%s', '%s', dr_or_cr), 
 				(d.diff, d.voucher_type, d.voucher_no))
@@ -275,7 +275,7 @@
 	
 	difference = {}
 	
-	account_warehouse = dict(frappe.conn.sql("""select name, master_name from tabAccount 
+	account_warehouse = dict(frappe.db.sql("""select name, master_name from tabAccount 
 		where account_type = 'Warehouse' and ifnull(master_name, '') != '' 
 		and name in (%s)""" % ', '.join(['%s']*len(account_list)), account_list))
 			
@@ -289,16 +289,16 @@
 
 def validate_expense_against_budget(args):
 	args = frappe._dict(args)
-	if frappe.conn.get_value("Account", {"name": args.account, "is_pl_account": "Yes", 
+	if frappe.db.get_value("Account", {"name": args.account, "is_pl_account": "Yes", 
 		"debit_or_credit": "Debit"}):
-			budget = frappe.conn.sql("""
+			budget = frappe.db.sql("""
 				select bd.budget_allocated, cc.distribution_id 
 				from `tabCost Center` cc, `tabBudget Detail` bd
 				where cc.name=bd.parent and cc.name=%s and account=%s and bd.fiscal_year=%s
 			""", (args.cost_center, args.account, args.fiscal_year), as_dict=True)
 			
 			if budget and budget[0].budget_allocated:
-				yearly_action, monthly_action = frappe.conn.get_value("Company", args.company, 
+				yearly_action, monthly_action = frappe.db.get_value("Company", args.company, 
 					["yearly_bgt_flag", "monthly_bgt_flag"])
 				action_for = action = ""
 
@@ -306,7 +306,7 @@
 					budget_amount = get_allocated_budget(budget[0].distribution_id, 
 						args.posting_date, args.fiscal_year, budget[0].budget_allocated)
 					
-					args["month_end_date"] = frappe.conn.sql("select LAST_DAY(%s)", 
+					args["month_end_date"] = frappe.db.sql("select LAST_DAY(%s)", 
 						args.posting_date)[0][0]
 					action_for, action = "Monthly", monthly_action
 					
@@ -326,12 +326,12 @@
 def get_allocated_budget(distribution_id, posting_date, fiscal_year, yearly_budget):
 	if distribution_id:
 		distribution = {}
-		for d in frappe.conn.sql("""select bdd.month, bdd.percentage_allocation 
+		for d in frappe.db.sql("""select bdd.month, bdd.percentage_allocation 
 			from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd
 			where bdd.parent=bd.name and bd.fiscal_year=%s""", fiscal_year, as_dict=1):
 				distribution.setdefault(d.month, d.percentage_allocation)
 
-	dt = frappe.conn.get_value("Fiscal Year", fiscal_year, "year_start_date")
+	dt = frappe.db.get_value("Fiscal Year", fiscal_year, "year_start_date")
 	budget_percentage = 0.0
 	
 	while(dt <= getdate(posting_date)):
@@ -348,7 +348,7 @@
 	args["condition"] = " and posting_date<='%s'" % args.month_end_date \
 		if args.get("month_end_date") else ""
 		
-	return frappe.conn.sql("""
+	return frappe.db.sql("""
 		select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
 		from `tabGL Entry`
 		where account='%(account)s' and cost_center='%(cost_center)s' 
@@ -367,7 +367,7 @@
 			new_account = frappe.rename_doc("Account", old_account, 
 				existing_new_account or newdn, merge=True if existing_new_account else False)
 
-		frappe.conn.set_value("Account", new_account or old_account, "master_name", newdn)
+		frappe.db.set_value("Account", new_account or old_account, "master_name", newdn)
 		
 def add_abbr_if_missing(dn, company):
 	from erpnext.setup.doctype.company.company import get_name_with_abbr
@@ -379,14 +379,14 @@
 	elif account_for_doctype == "Warehouse":
 		account_for_field = "account_type"
 		
-	return frappe.conn.get_value("Account", {account_for_field: account_for_doctype, 
+	return frappe.db.get_value("Account", {account_for_field: account_for_doctype, 
 		"master_name": account_for})
 		
 def get_currency_precision(currency=None):
 	if not currency:
-		currency = frappe.conn.get_value("Company", 
-			frappe.conn.get_default("company"), "default_currency")
-	currency_format = frappe.conn.get_value("Currency", currency, "number_format")
+		currency = frappe.db.get_value("Company", 
+			frappe.db.get_default("company"), "default_currency")
+	currency_format = frappe.db.get_value("Currency", currency, "number_format")
 	
 	from frappe.utils import get_number_format_info
 	return get_number_format_info(currency_format)[2]
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.py b/erpnext/buying/doctype/buying_settings/buying_settings.py
index e53e195..9776fda 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.py
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.py
@@ -12,7 +12,7 @@
 		
 	def validate(self):
 		for key in ["supplier_type", "supp_master_name", "maintain_same_rate", "buying_price_list"]:
-			frappe.conn.set_default(key, self.doc.fields.get(key, ""))
+			frappe.db.set_default(key, self.doc.fields.get(key, ""))
 
 		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Supplier", "supplier_name", 
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 356ef39..3fefeba 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -42,7 +42,7 @@
 
 			# update last purchsae rate
 			if last_purchase_rate:
-				frappe.conn.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""",
+				frappe.db.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""",
 					(flt(last_purchase_rate), d.item_code))
 	
 	def get_last_purchase_rate(self, obj):
@@ -64,7 +64,7 @@
 					# if no last purchase found, reset all values to 0
 					d.base_price_list_rate = d.base_rate = d.price_list_rate = d.rate = d.discount_percentage = 0
 					
-					item_last_purchase_rate = frappe.conn.get_value("Item",
+					item_last_purchase_rate = frappe.db.get_value("Item",
 						d.item_code, "last_purchase_rate")
 					if item_last_purchase_rate:
 						d.base_price_list_rate = d.base_rate = d.price_list_rate \
@@ -78,7 +78,7 @@
 				frappe.throw("Please enter valid qty for item %s" % cstr(d.item_code))
 			
 			# udpate with latest quantities
-			bin = frappe.conn.sql("""select projected_qty from `tabBin` where 
+			bin = frappe.db.sql("""select projected_qty from `tabBin` where 
 				item_code = %s and warehouse = %s""", (d.item_code, d.warehouse), as_dict=1)
 			
 			f_lst ={'projected_qty': bin and flt(bin[0]['projected_qty']) or 0, 'ordered_qty': 0, 'received_qty' : 0}
@@ -88,7 +88,7 @@
 				if d.fields.has_key(x):
 					d.fields[x] = f_lst[x]
 			
-			item = frappe.conn.sql("""select is_stock_item, is_purchase_item, 
+			item = frappe.db.sql("""select is_stock_item, is_purchase_item, 
 				is_sub_contracted_item, end_of_life from `tabItem` where name=%s""", d.item_code)
 			if not item:
 				frappe.throw("Item %s does not exist in Item Master." % cstr(d.item_code))
@@ -113,7 +113,7 @@
 			# if is not stock item
 			f = [d.schedule_date, d.item_code, d.description]
 			
-			ch = frappe.conn.sql("""select is_stock_item from `tabItem` where name = %s""", d.item_code)
+			ch = frappe.db.sql("""select is_stock_item from `tabItem` where name = %s""", d.item_code)
 			
 			if ch and ch[0][0] == 'Yes':	
 				# check for same items
@@ -139,21 +139,21 @@
 		# but if in Material Request uom KG it can change in PO
 		
 		get_qty = (transaction == 'Material Request - Purchase Order') and 'qty * conversion_factor' or 'qty'
-		qty = frappe.conn.sql("""select sum(%s) from `tab%s` where %s = %s and 
+		qty = frappe.db.sql("""select sum(%s) from `tab%s` where %s = %s and 
 			docstatus = 1 and parent != %s""" % (get_qty, curr_doctype, ref_tab_fname, '%s', '%s'), 
 			(ref_tab_dn, curr_parent_name))
 		qty = qty and flt(qty[0][0]) or 0 
 		
 		# get total qty of ref doctype
 		#--------------------
-		max_qty = frappe.conn.sql("""select qty from `tab%s` where name = %s 
+		max_qty = frappe.db.sql("""select qty from `tab%s` where name = %s 
 			and docstatus = 1""" % (ref_doc_tname, '%s'), ref_tab_dn)
 		max_qty = max_qty and flt(max_qty[0][0]) or 0
 		
 		return cstr(qty)+'~~~'+cstr(max_qty)
 
 	def check_for_stopped_status(self, doctype, docname):
-		stopped = frappe.conn.sql("""select name from `tab%s` where name = %s and 
+		stopped = frappe.db.sql("""select name from `tab%s` where name = %s and 
 			status = 'Stopped'""" % (doctype, '%s'), docname)
 		if stopped:
 			frappe.throw("One cannot do any transaction against %s : %s, it's status is 'Stopped'" % 
@@ -161,7 +161,7 @@
 	
 	def check_docstatus(self, check, doctype, docname, detail_doctype = ''):
 		if check == 'Next':
-			submitted = frappe.conn.sql("""select t1.name from `tab%s` t1,`tab%s` t2 
+			submitted = frappe.db.sql("""select t1.name from `tab%s` t1,`tab%s` t2 
 				where t1.name = t2.parent and t2.prevdoc_docname = %s and t1.docstatus = 1""" 
 				% (doctype, detail_doctype, '%s'), docname)
 			if submitted:
@@ -169,7 +169,7 @@
 					+ _("has already been submitted."))
 
 		if check == 'Previous':
-			submitted = frappe.conn.sql("""select name from `tab%s` 
+			submitted = frappe.db.sql("""select name from `tab%s` 
 				where docstatus = 1 and name = %s""" % (doctype, '%s'), docname)
 			if not submitted:
 				frappe.throw(cstr(doctype) + ": " + cstr(submitted[0][0]) + _("not submitted"))
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 1f5583f..1210ee9 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -67,7 +67,7 @@
 	def get_schedule_dates(self):
 		for d in getlist(self.doclist, 'po_details'):
 			if d.prevdoc_detail_docname and not d.schedule_date:
-				d.schedule_date = frappe.conn.get_value("Material Request Item",
+				d.schedule_date = frappe.db.get_value("Material Request Item",
 						d.prevdoc_detail_docname, "schedule_date")
 	
 	def get_last_purchase_rate(self):
@@ -87,7 +87,7 @@
 		pc_obj = get_obj('Purchase Common')
 		for d in getlist(self.doclist, 'po_details'):
 			#1. Check if is_stock_item == 'Yes'
-			if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes":
+			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
 				# this happens when item is changed from non-stock to stock item
 				if not d.warehouse:
 					continue
@@ -127,8 +127,8 @@
 				update_bin(args)
 				
 	def check_modified_date(self):
-		mod_db = frappe.conn.sql("select modified from `tabPurchase Order` where name = '%s'" % self.doc.name)
-		date_diff = frappe.conn.sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
+		mod_db = frappe.db.sql("select modified from `tabPurchase Order` where name = '%s'" % self.doc.name)
+		date_diff = frappe.db.sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
 		
 		if date_diff and date_diff[0][0]:
 			msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ")
@@ -137,7 +137,7 @@
 	def update_status(self, status):
 		self.check_modified_date()
 		# step 1:=> Set Status
-		frappe.conn.set(self.doc,'status',cstr(status))
+		frappe.db.set(self.doc,'status',cstr(status))
 
 		# step 2:=> Update Bin
 		self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
@@ -156,7 +156,7 @@
 		
 		purchase_controller.update_last_purchase_rate(self, is_submit = 1)
 		
-		frappe.conn.set(self.doc,'status','Submitted')
+		frappe.db.set(self.doc,'status','Submitted')
 	 
 	def on_cancel(self):
 		pc_obj = get_obj(dt = 'Purchase Common')		
@@ -166,12 +166,12 @@
 		pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Receipt', docname = self.doc.name, detail_doctype = 'Purchase Receipt Item')
 
 		# Check if Purchase Invoice has been submitted against current Purchase Order
-		submitted = frappe.conn.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_order = '%s' and t1.docstatus = 1" % self.doc.name)
+		submitted = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_order = '%s' and t1.docstatus = 1" % self.doc.name)
 		if submitted:
 			msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
 			raise Exception
 
-		frappe.conn.set(self.doc,'status','Cancelled')
+		frappe.db.set(self.doc,'status','Cancelled')
 		self.update_prevdoc_status()
 		self.update_bin( is_submit = 0, is_stopped = 0)
 		pc_obj.update_last_purchase_rate(self, is_submit = 0)
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index 5d49500..88a3234 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -30,7 +30,7 @@
 		pr_bean.insert()
 			
 	def test_ordered_qty(self):
-		frappe.conn.sql("delete from tabBin")
+		frappe.db.sql("delete from tabBin")
 		
 		from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
 
@@ -44,7 +44,7 @@
 		po.doclist[1].item_code = "_Test Item"
 		po.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Bin", {"item_code": "_Test Item", 
+		self.assertEquals(frappe.db.get_value("Bin", {"item_code": "_Test Item", 
 			"warehouse": "_Test Warehouse - _TC"}, "ordered_qty"), 10)
 		
 		pr = make_purchase_receipt(po.doc.name)
@@ -58,10 +58,10 @@
 		pr_bean.insert()
 		pr_bean.submit()
 		
-		self.assertEquals(flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item", 
+		self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item", 
 			"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 6.0)
 			
-		frappe.conn.set_value('Item', '_Test Item', 'tolerance', 50)
+		frappe.db.set_value('Item', '_Test Item', 'tolerance', 50)
 			
 		pr1 = make_purchase_receipt(po.doc.name)
 		pr1[0].naming_series = "_T-Purchase Receipt-"
@@ -71,7 +71,7 @@
 		pr1_bean.insert()
 		pr1_bean.submit()
 		
-		self.assertEquals(flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item", 
+		self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item", 
 			"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 0.0)
 		
 	def test_make_purchase_invoice(self):
diff --git a/erpnext/buying/doctype/quality_inspection/quality_inspection.py b/erpnext/buying/doctype/quality_inspection/quality_inspection.py
index b6d4790..0acb8ee 100644
--- a/erpnext/buying/doctype/quality_inspection/quality_inspection.py
+++ b/erpnext/buying/doctype/quality_inspection/quality_inspection.py
@@ -13,7 +13,7 @@
 
 	def get_item_specification_details(self):
 		self.doclist = self.doc.clear_table(self.doclist, 'qa_specification_details')
-		specification = frappe.conn.sql("select specification, value from `tabItem Quality Inspection Parameter` \
+		specification = frappe.db.sql("select specification, value from `tabItem Quality Inspection Parameter` \
 			where parent = '%s' order by idx" % (self.doc.item_code))
 		for d in specification:
 			child = addchild(self.doc, 'qa_specification_details', 'Quality Inspection Reading', self.doclist)
@@ -23,14 +23,14 @@
 
 	def on_submit(self):
 		if self.doc.purchase_receipt_no:
-			frappe.conn.sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '%s', t2.modified = '%s' \
+			frappe.db.sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '%s', t2.modified = '%s' \
 				where t1.parent = '%s' and t1.item_code = '%s' and t1.parent = t2.name" \
 				% (self.doc.name, self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))
 		
 
 	def on_cancel(self):
 		if self.doc.purchase_receipt_no:
-			frappe.conn.sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '', t2.modified = '%s' \
+			frappe.db.sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '', t2.modified = '%s' \
 				where t1.parent = '%s' and t1.item_code = '%s' and t1.parent = t2.name" \
 				% (self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))
 
@@ -44,6 +44,6 @@
 			"start": start,
 			"page_len": page_len
 		})
-		return frappe.conn.sql("""select item_code from `tab%(from)s` 
+		return frappe.db.sql("""select item_code from `tab%(from)s` 
 			where parent='%(parent)s' and docstatus < 2 and item_code like '%%%(txt)s%%' %(mcond)s
 			order by item_code limit %(start)s, %(page_len)s""" % filters)
\ No newline at end of file
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index a22dd1c..878dda5 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -21,22 +21,22 @@
 		supp_master_name = frappe.defaults.get_global_default('supp_master_name')
 		
 		if supp_master_name == 'Supplier Name':
-			if frappe.conn.exists("Customer", self.doc.supplier_name):
+			if frappe.db.exists("Customer", self.doc.supplier_name):
 				frappe.msgprint(_("A Customer exists with same name"), raise_exception=1)
 			self.doc.name = self.doc.supplier_name
 		else:
 			self.doc.name = make_autoname(self.doc.naming_series + '.#####')
 
 	def update_address(self):
-		frappe.conn.sql("""update `tabAddress` set supplier_name=%s, modified=NOW() 
+		frappe.db.sql("""update `tabAddress` set supplier_name=%s, modified=NOW() 
 			where supplier=%s""", (self.doc.supplier_name, self.doc.name))
 
 	def update_contact(self):
-		frappe.conn.sql("""update `tabContact` set supplier_name=%s, modified=NOW() 
+		frappe.db.sql("""update `tabContact` set supplier_name=%s, modified=NOW() 
 			where supplier=%s""", (self.doc.supplier_name, self.doc.name))
 
 	def update_credit_days_limit(self):
-		frappe.conn.sql("""update tabAccount set credit_days = %s where name = %s""", 
+		frappe.db.sql("""update tabAccount set credit_days = %s where name = %s""", 
 			(cint(self.doc.credit_days), self.doc.name + " - " + self.get_company_abbr()))
 
 	def on_update(self):
@@ -53,7 +53,7 @@
 		self.update_credit_days_limit()
 		
 	def get_company_abbr(self):
-		return frappe.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
+		return frappe.db.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
 	
 	def validate(self):
 		#validation for Naming Series mandatory field...
@@ -63,24 +63,24 @@
 			
 	def get_contacts(self,nm):
 		if nm:
-			contact_details =frappe.conn.convert_to_lists(frappe.conn.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = '%s'"%nm))
+			contact_details =frappe.db.convert_to_lists(frappe.db.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = '%s'"%nm))
 	 
 			return contact_details
 		else:
 			return ''
 			
 	def delete_supplier_address(self):
-		for rec in frappe.conn.sql("select * from `tabAddress` where supplier=%s", (self.doc.name,), as_dict=1):
-			frappe.conn.sql("delete from `tabAddress` where name=%s",(rec['name']))
+		for rec in frappe.db.sql("select * from `tabAddress` where supplier=%s", (self.doc.name,), as_dict=1):
+			frappe.db.sql("delete from `tabAddress` where name=%s",(rec['name']))
 	
 	def delete_supplier_contact(self):
-		for contact in frappe.conn.sql_list("""select name from `tabContact` 
+		for contact in frappe.db.sql_list("""select name from `tabContact` 
 			where supplier=%s""", self.doc.name):
 				frappe.delete_doc("Contact", contact)
 	
 	def delete_supplier_account(self):
 		"""delete supplier's ledger if exist and check balance before deletion"""
-		acc = frappe.conn.sql("select name from `tabAccount` where master_type = 'Supplier' \
+		acc = frappe.db.sql("select name from `tabAccount` where master_type = 'Supplier' \
 			and master_name = %s and docstatus < 2", self.doc.name)
 		if acc:
 			frappe.delete_doc('Account', acc[0][0])
@@ -97,13 +97,13 @@
 	def after_rename(self, olddn, newdn, merge=False):
 		set_field = ''
 		if frappe.defaults.get_global_default('supp_master_name') == 'Supplier Name':
-			frappe.conn.set(self.doc, "supplier_name", newdn)
+			frappe.db.set(self.doc, "supplier_name", newdn)
 			self.update_contact()
 			set_field = ", supplier_name=%(newdn)s"
 		self.update_supplier_address(newdn, set_field)
 
 	def update_supplier_address(self, newdn, set_field):
-		frappe.conn.sql("""update `tabAddress` set address_title=%(newdn)s 
+		frappe.db.sql("""update `tabAddress` set address_title=%(newdn)s 
 			{set_field} where supplier=%(newdn)s"""\
 			.format(set_field=set_field), ({"newdn": newdn}))
 
@@ -114,14 +114,14 @@
 	
 	out = {}
 	for doctype in ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]:
-		out[doctype] = frappe.conn.get_value(doctype, 
+		out[doctype] = frappe.db.get_value(doctype, 
 			{"supplier": supplier, "docstatus": ["!=", 2] }, "count(*)")
 	
-	billing = frappe.conn.sql("""select sum(grand_total), sum(outstanding_amount) 
+	billing = frappe.db.sql("""select sum(grand_total), sum(outstanding_amount) 
 		from `tabPurchase Invoice` 
 		where supplier=%s 
 			and docstatus = 1
-			and fiscal_year = %s""", (supplier, frappe.conn.get_default("fiscal_year")))
+			and fiscal_year = %s""", (supplier, frappe.db.get_default("fiscal_year")))
 	
 	out["total_billing"] = billing[0][0]
 	out["total_unpaid"] = billing[0][1]
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index 32a5010..f6a3ffc 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -26,10 +26,10 @@
 		self.validate_uom_is_integer("uom", "qty")
 
 	def on_submit(self):
-		frappe.conn.set(self.doc, "status", "Submitted")
+		frappe.db.set(self.doc, "status", "Submitted")
 
 	def on_cancel(self):
-		frappe.conn.set(self.doc, "status", "Cancelled")
+		frappe.db.set(self.doc, "status", "Cancelled")
 		
 	def on_trash(self):
 		pass
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index ecc8cf7..9e75135 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -44,7 +44,7 @@
 	def validate_for_freezed_account(self):
 		for fieldname in ["customer", "supplier"]:
 			if self.meta.get_field(fieldname) and self.doc.fields.get(fieldname):
-				accounts = frappe.conn.get_values("Account", 
+				accounts = frappe.db.get_values("Account", 
 					{"master_type": fieldname.title(), "master_name": self.doc.fields[fieldname], 
 					"company": self.doc.company}, "name")
 				if accounts:
@@ -60,7 +60,7 @@
 			fieldname = "selling_price_list" if buying_or_selling.lower() == "selling" \
 				else "buying_price_list"
 			if self.meta.get_field(fieldname) and self.doc.fields.get(fieldname):
-				self.doc.price_list_currency = frappe.conn.get_value("Price List",
+				self.doc.price_list_currency = frappe.db.get_value("Price List",
 					self.doc.fields.get(fieldname), "currency")
 				
 				if self.doc.price_list_currency == company_currency:
@@ -82,7 +82,7 @@
 
 	def get_exchange_rate(self, from_currency, to_currency):
 		exchange = "%s-%s" % (from_currency, to_currency)
-		return flt(frappe.conn.get_value("Currency Exchange", exchange, "exchange_rate"))
+		return flt(frappe.db.get_value("Currency Exchange", exchange, "exchange_rate"))
 
 	def set_missing_item_details(self):
 		"""set missing item values"""
@@ -106,7 +106,7 @@
 			if not self.doc.fields.get(tax_master_field):
 				# get the default tax master
 				self.doc.fields[tax_master_field] = \
-					frappe.conn.get_value(tax_master_doctype, {"is_default": 1})
+					frappe.db.get_value(tax_master_doctype, {"is_default": 1})
 					
 			self.append_taxes_from_master(tax_parentfield, tax_master_field, tax_master_doctype)
 				
@@ -393,11 +393,11 @@
 	def clear_unallocated_advances(self, childtype, parentfield):
 		self.doclist.remove_items({"parentfield": parentfield, "allocated_amount": ["in", [0, None, ""]]})
 			
-		frappe.conn.sql("""delete from `tab%s` where parentfield=%s and parent = %s 
+		frappe.db.sql("""delete from `tab%s` where parentfield=%s and parent = %s 
 			and ifnull(allocated_amount, 0) = 0""" % (childtype, '%s', '%s'), (parentfield, self.doc.name))
 		
 	def get_advances(self, account_head, child_doctype, parentfield, dr_or_cr):
-		res = frappe.conn.sql("""select t1.name as jv_no, t1.remark, 
+		res = frappe.db.sql("""select t1.name as jv_no, t1.remark, 
 			t2.%s as amount, t2.name as jv_detail_no
 			from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 
 			where t1.name = t2.parent and t2.account = %s and t2.is_advance = 'Yes' 
@@ -426,13 +426,13 @@
 		
 		for item in self.doclist.get({"parentfield": "entries"}):
 			if item.fields.get(item_ref_dn):
-				ref_amt = flt(frappe.conn.get_value(ref_dt + " Item", 
+				ref_amt = flt(frappe.db.get_value(ref_dt + " Item", 
 					item.fields[item_ref_dn], based_on), self.precision(based_on, item))
 				if not ref_amt:
 					frappe.msgprint(_("As amount for item") + ": " + item.item_code + _(" in ") + 
 						ref_dt + _(" is zero, system will not check for over-billed"))
 				else:
-					already_billed = frappe.conn.sql("""select sum(%s) from `tab%s` 
+					already_billed = frappe.db.sql("""select sum(%s) from `tab%s` 
 						where %s=%s and docstatus=1 and parent != %s""" % 
 						(based_on, self.tname, item_ref_dn, '%s', '%s'), 
 						(item.fields[item_ref_dn], self.doc.name))[0][0]
@@ -468,7 +468,7 @@
 		item_codes = list(set(item.item_code for item in 
 			self.doclist.get({"parentfield": self.fname})))
 		if item_codes:
-			stock_items = [r[0] for r in frappe.conn.sql("""select name
+			stock_items = [r[0] for r in frappe.db.sql("""select name
 				from `tabItem` where name in (%s) and is_stock_item='Yes'""" % \
 				(", ".join((["%s"]*len(item_codes))),), item_codes)]
 				
@@ -477,12 +477,12 @@
 	@property
 	def company_abbr(self):
 		if not hasattr(self, "_abbr"):
-			self._abbr = frappe.conn.get_value("Company", self.doc.company, "abbr")
+			self._abbr = frappe.db.get_value("Company", self.doc.company, "abbr")
 			
 		return self._abbr
 
 	def check_credit_limit(self, account):
-		total_outstanding = frappe.conn.sql("""
+		total_outstanding = frappe.db.sql("""
 			select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
 			from `tabGL Entry` where account = %s""", account)
 		
@@ -493,4 +493,4 @@
 
 @frappe.whitelist()
 def get_tax_rate(account_head):
-	return frappe.conn.get_value("Account", account_head, "tax_rate")
\ No newline at end of file
+	return frappe.db.get_value("Account", account_head, "tax_rate")
\ No newline at end of file
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index af05a7e..4ca6c19 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -18,7 +18,7 @@
 	def validate(self):
 		super(BuyingController, self).validate()
 		if self.doc.supplier and not self.doc.supplier_name:
-			self.doc.supplier_name = frappe.conn.get_value("Supplier", 
+			self.doc.supplier_name = frappe.db.get_value("Supplier", 
 				self.doc.supplier, "supplier_name")
 		self.is_item_table_empty()
 		self.validate_stock_or_nonstock_items()
@@ -41,7 +41,7 @@
 	def set_supplier_from_item_default(self):
 		if self.meta.get_field("supplier") and not self.doc.supplier:
 			for d in self.doclist.get({"doctype": self.tname}):
-				supplier = frappe.conn.get_value("Item", d.item_code, "default_supplier")
+				supplier = frappe.db.get_value("Item", d.item_code, "default_supplier")
 				if supplier:
 					self.doc.supplier = supplier
 					break
@@ -198,7 +198,7 @@
 
 				self.round_floats_in(item)
 				
-				item.conversion_factor = item.conversion_factor or flt(frappe.conn.get_value(
+				item.conversion_factor = item.conversion_factor or flt(frappe.db.get_value(
 					"UOM Conversion Detail", {"parent": item.item_code, "uom": item.uom}, 
 					"conversion_factor")) or 1
 				qty_in_stock_uom = flt(item.qty * item.conversion_factor)
@@ -256,7 +256,7 @@
 			d.rm_supp_cost = raw_materials_cost
 
 	def get_items_from_default_bom(self, item_code):
-		bom_items = frappe.conn.sql("""select t2.item_code, t2.qty_consumed_per_unit, 
+		bom_items = frappe.db.sql("""select t2.item_code, t2.qty_consumed_per_unit, 
 			t2.rate, t2.stock_uom, t2.name, t2.description 
 			from `tabBOM` t1, `tabBOM Item` t2 
 			where t2.parent = t1.name and t1.item = %s and t1.is_default = 1 
@@ -273,7 +273,7 @@
 			item_codes = list(set(item.item_code for item in 
 				self.doclist.get({"parentfield": self.fname})))
 			if item_codes:
-				self._sub_contracted_items = [r[0] for r in frappe.conn.sql("""select name
+				self._sub_contracted_items = [r[0] for r in frappe.db.sql("""select name
 					from `tabItem` where name in (%s) and is_sub_contracted_item='Yes'""" % \
 					(", ".join((["%s"]*len(item_codes))),), item_codes)]
 
@@ -286,7 +286,7 @@
 			item_codes = list(set(item.item_code for item in 
 				self.doclist.get({"parentfield": self.fname})))
 			if item_codes:
-				self._purchase_items = [r[0] for r in frappe.conn.sql("""select name
+				self._purchase_items = [r[0] for r in frappe.db.sql("""select name
 					from `tabItem` where name in (%s) and is_purchase_item='Yes'""" % \
 					(", ".join((["%s"]*len(item_codes))),), item_codes)]
 
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index 93efd43..d5ea232 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -25,7 +25,7 @@
 
  # searches for active employees
 def employee_query(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select name, employee_name from `tabEmployee` 
+	return frappe.db.sql("""select name, employee_name from `tabEmployee` 
 		where status = 'Active' 
 			and docstatus < 2 
 			and (%(key)s like "%(txt)s" 
@@ -40,7 +40,7 @@
 
  # searches for leads which are not converted
 def lead_query(doctype, txt, searchfield, start, page_len, filters): 
-	return frappe.conn.sql("""select name, lead_name, company_name from `tabLead`
+	return frappe.db.sql("""select name, lead_name, company_name from `tabLead`
 		where docstatus < 2 
 			and ifnull(status, '') != 'Converted' 
 			and (%(key)s like "%(txt)s" 
@@ -66,7 +66,7 @@
 
 	fields = ", ".join(fields) 
 
-	return frappe.conn.sql("""select %(field)s from `tabCustomer` 
+	return frappe.db.sql("""select %(field)s from `tabCustomer` 
 		where docstatus < 2 
 			and (%(key)s like "%(txt)s" 
 				or customer_name like "%(txt)s") 
@@ -88,7 +88,7 @@
 		fields = ["name", "supplier_name", "supplier_type"]
 	fields = ", ".join(fields) 
 
-	return frappe.conn.sql("""select %(field)s from `tabSupplier` 
+	return frappe.db.sql("""select %(field)s from `tabSupplier` 
 		where docstatus < 2 
 			and (%(key)s like "%(txt)s" 
 				or supplier_name like "%(txt)s") 
@@ -102,7 +102,7 @@
 		'page_len': page_len})
 		
 def tax_account_query(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select name, parent_account, debit_or_credit 
+	return frappe.db.sql("""select name, parent_account, debit_or_credit 
 		from tabAccount 
 		where tabAccount.docstatus!=2 
 			and (account_type in (%s) or 
@@ -121,7 +121,7 @@
 	
 	conditions = []
 
-	return frappe.conn.sql("""select tabItem.name, 
+	return frappe.db.sql("""select tabItem.name, 
 		if(length(tabItem.item_name) > 40, 
 			concat(substr(tabItem.item_name, 1, 40), "..."), item_name) as item_name, 
 		if(length(tabItem.description) > 40, \
@@ -145,7 +145,7 @@
 def bom(doctype, txt, searchfield, start, page_len, filters):
 	conditions = []	
 
-	return frappe.conn.sql("""select tabBOM.name, tabBOM.item 
+	return frappe.db.sql("""select tabBOM.name, tabBOM.item 
 		from tabBOM 
 		where tabBOM.docstatus=1 
 			and tabBOM.is_active=1 
@@ -160,7 +160,7 @@
 	if filters['customer']:
 		cond = '(`tabProject`.customer = "' + filters['customer'] + '" or ifnull(`tabProject`.customer,"")="") and'
 	
-	return frappe.conn.sql("""select `tabProject`.name from `tabProject` 
+	return frappe.db.sql("""select `tabProject`.name from `tabProject` 
 		where `tabProject`.status not in ("Completed", "Cancelled") 
 			and %(cond)s `tabProject`.name like "%(txt)s" %(mcond)s 
 		order by `tabProject`.name asc 
@@ -168,7 +168,7 @@
 		'mcond':get_match_cond(doctype, searchfield),'start': start, 'page_len': page_len})
 			
 def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select `tabDelivery Note`.name, `tabDelivery Note`.customer_name
+	return frappe.db.sql("""select `tabDelivery Note`.name, `tabDelivery Note`.customer_name
 		from `tabDelivery Note` 
 		where `tabDelivery Note`.`%(key)s` like %(txt)s and 
 			`tabDelivery Note`.docstatus = 1 %(fcond)s and
@@ -189,7 +189,7 @@
 	from erpnext.controllers.queries import get_match_cond
 
 	if filters.has_key('warehouse'):
-		return frappe.conn.sql("""select batch_no from `tabStock Ledger Entry` sle 
+		return frappe.db.sql("""select batch_no from `tabStock Ledger Entry` sle 
 				where item_code = '%(item_code)s' 
 					and warehouse = '%(warehouse)s' 
 					and batch_no like '%(txt)s' 
@@ -205,7 +205,7 @@
 					'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield), 
 					'start': start, 'page_len': page_len})
 	else:
-		return frappe.conn.sql("""select name from tabBatch 
+		return frappe.db.sql("""select name from tabBatch 
 				where docstatus != 2 
 					and item = '%(item_code)s' 
 					and (ifnull(expiry_date, '')='' or expiry_date >= '%(posting_date)s')
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 8e664ca..f583668 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -20,7 +20,7 @@
 		check_active_sales_items(self)
 	
 	def get_sender(self, comm):
-		return frappe.conn.get_value('Sales Email Settings', None, 'email_id')
+		return frappe.db.get_value('Sales Email Settings', None, 'email_id')
 	
 	def set_missing_values(self, for_validate=False):
 		super(SellingController, self).set_missing_values(for_validate)
@@ -73,7 +73,7 @@
 		from frappe.utils import money_in_words
 		company_currency = get_company_currency(self.doc.company)
 		
-		disable_rounded_total = cint(frappe.conn.get_value("Global Defaults", None, 
+		disable_rounded_total = cint(frappe.db.get_value("Global Defaults", None, 
 			"disable_rounded_total"))
 			
 		if self.meta.get_field("in_words"):
@@ -266,10 +266,10 @@
 				_("must be one of") + ": " + comma_or(valid_types), raise_exception=True)
 				
 	def check_credit(self, grand_total):
-		customer_account = frappe.conn.get_value("Account", {"company": self.doc.company, 
+		customer_account = frappe.db.get_value("Account", {"company": self.doc.company, 
 			"master_name": self.doc.customer}, "name")
 		if customer_account:
-			total_outstanding = frappe.conn.sql("""select 
+			total_outstanding = frappe.db.sql("""select 
 				sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
 				from `tabGL Entry` where account = %s""", customer_account)
 			total_outstanding = total_outstanding[0][0] if total_outstanding else 0
@@ -280,7 +280,7 @@
 				
 	def validate_max_discount(self):
 		for d in self.doclist.get({"parentfield": self.fname}):
-			discount = flt(frappe.conn.get_value("Item", d.item_code, "max_discount"))
+			discount = flt(frappe.db.get_value("Item", d.item_code, "max_discount"))
 			
 			if discount and flt(d.discount_percentage) > discount:
 				frappe.throw(_("You cannot give more than ") + cstr(discount) + "% " + 
@@ -293,7 +293,7 @@
 			reserved_qty_for_main_item = 0
 			
 			if self.doc.doctype == "Sales Order":
-				if (frappe.conn.get_value("Item", d.item_code, "is_stock_item") == 'Yes' or 
+				if (frappe.db.get_value("Item", d.item_code, "is_stock_item") == 'Yes' or 
 					self.has_sales_bom(d.item_code)) and not d.warehouse:
 						frappe.throw(_("Please enter Reserved Warehouse for item ") + 
 							d.item_code + _(" as it is stock Item or packing item"))
@@ -344,18 +344,18 @@
 		return il
 		
 	def has_sales_bom(self, item_code):
-		return frappe.conn.sql("""select name from `tabSales BOM` 
+		return frappe.db.sql("""select name from `tabSales BOM` 
 			where new_item_code=%s and docstatus != 2""", item_code)
 			
 	def get_already_delivered_qty(self, dn, so, so_detail):
-		qty = frappe.conn.sql("""select sum(qty) from `tabDelivery Note Item` 
+		qty = frappe.db.sql("""select sum(qty) from `tabDelivery Note Item` 
 			where prevdoc_detail_docname = %s and docstatus = 1 
 			and against_sales_order = %s 
 			and parent != %s""", (so_detail, so, dn))
 		return qty and flt(qty[0][0]) or 0.0
 
 	def get_so_qty_and_warehouse(self, so_detail):
-		so_item = frappe.conn.sql("""select qty, warehouse from `tabSales Order Item`
+		so_item = frappe.db.sql("""select qty, warehouse from `tabSales Order Item`
 			where name = %s and docstatus = 1""", so_detail, as_dict=1)
 		so_qty = so_item and flt(so_item[0]["qty"]) or 0.0
 		so_warehouse = so_item and so_item[0]["warehouse"] or ""
@@ -364,7 +364,7 @@
 	def check_stop_sales_order(self, ref_fieldname):
 		for d in self.doclist.get({"parentfield": self.fname}):
 			if d.fields.get(ref_fieldname):
-				status = frappe.conn.get_value("Sales Order", d.fields[ref_fieldname], "status")
+				status = frappe.db.get_value("Sales Order", d.fields[ref_fieldname], "status")
 				if status == "Stopped":
 					frappe.throw(self.doc.doctype + 
 						_(" can not be created/modified against stopped Sales Order ") + 
@@ -373,11 +373,11 @@
 def check_active_sales_items(obj):
 	for d in obj.doclist.get({"parentfield": obj.fname}):
 		if d.item_code:
-			item = frappe.conn.sql("""select docstatus, is_sales_item, 
+			item = frappe.db.sql("""select docstatus, is_sales_item, 
 				is_service_item, income_account from tabItem where name = %s""", 
 				d.item_code, as_dict=True)[0]
 			if item.is_sales_item == 'No' and item.is_service_item == 'No':
 				frappe.throw(_("Item is neither Sales nor Service Item") + ": " + d.item_code)
 			if d.income_account and not item.income_account:
-				frappe.conn.set_value("Item", d.item_code, "income_account", 
+				frappe.db.set_value("Item", d.item_code, "income_account", 
 					d.income_account)
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 29cd490..40be699 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -85,7 +85,7 @@
 					break
 		
 			if update:
-				frappe.conn.set_value(self.doc.doctype, self.doc.name, "status", self.doc.status)
+				frappe.db.set_value(self.doc.doctype, self.doc.name, "status", self.doc.status)
 	
 	def on_communication(self):
 		self.communication_set = True
@@ -118,7 +118,7 @@
 					args['name'] = d.fields[args['join_field']]
 
 					# get all qty where qty > target_field
-					item = frappe.conn.sql("""select item_code, `%(target_ref_field)s`, 
+					item = frappe.db.sql("""select item_code, `%(target_ref_field)s`, 
 						`%(target_field)s`, parenttype, parent from `tab%(target_dt)s` 
 						where `%(target_ref_field)s` < `%(target_field)s` 
 						and name="%(name)s" and docstatus=1""" % args, as_dict=1)
@@ -204,7 +204,7 @@
 							and (docstatus=1))""" % args
 			
 					if args['detail_id']:
-						frappe.conn.sql("""update `tab%(target_dt)s` 
+						frappe.db.sql("""update `tab%(target_dt)s` 
 							set %(target_field)s = (select sum(%(source_field)s) 
 								from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" 
 								and (docstatus=1 %(cond)s)) %(second_source_condition)s
@@ -217,7 +217,7 @@
 					args['name'] = name
 				
 					# update percent complete in the parent table
-					frappe.conn.sql("""update `tab%(target_parent_dt)s` 
+					frappe.db.sql("""update `tab%(target_parent_dt)s` 
 						set %(target_parent_field)s = (select sum(if(%(target_ref_field)s > 
 							ifnull(%(target_field)s, 0), %(target_field)s, 
 							%(target_ref_field)s))/sum(%(target_ref_field)s)*100 
@@ -226,7 +226,7 @@
 
 					# update field
 					if args.get('status_field'):
-						frappe.conn.sql("""update `tab%(target_parent_dt)s` 
+						frappe.db.sql("""update `tab%(target_parent_dt)s` 
 							set %(status_field)s = if(ifnull(%(target_parent_field)s,0)<0.001, 
 								'Not %(keyword)s', if(%(target_parent_field)s>=99.99, 
 								'Fully %(keyword)s', 'Partly %(keyword)s'))
@@ -236,7 +236,7 @@
 	def update_billing_status_for_zero_amount_refdoc(self, ref_dt):
 		ref_fieldname = ref_dt.lower().replace(" ", "_")
 		zero_amount_refdoc = []
-		all_zero_amount_refdoc = frappe.conn.sql_list("""select name from `tab%s` 
+		all_zero_amount_refdoc = frappe.db.sql_list("""select name from `tab%s` 
 			where docstatus=1 and net_total = 0""" % ref_dt)
 	
 		for item in self.doclist.get({"parentfield": "entries"}):
@@ -250,16 +250,16 @@
 	
 	def update_biling_status(self, zero_amount_refdoc, ref_dt, ref_fieldname):
 		for ref_dn in zero_amount_refdoc:
-			ref_doc_qty = flt(frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tab%s Item` 
+			ref_doc_qty = flt(frappe.db.sql("""select sum(ifnull(qty, 0)) from `tab%s Item` 
 				where parent=%s""" % (ref_dt, '%s'), (ref_dn))[0][0])
 			
-			billed_qty = flt(frappe.conn.sql("""select sum(ifnull(qty, 0)) 
+			billed_qty = flt(frappe.db.sql("""select sum(ifnull(qty, 0)) 
 				from `tab%s Item` where %s=%s and docstatus=1""" % 
 				(self.doc.doctype, ref_fieldname, '%s'), (ref_dn))[0][0])
 			
 			per_billed = ((ref_doc_qty if billed_qty > ref_doc_qty else billed_qty)\
 				/ ref_doc_qty)*100
-			frappe.conn.set_value(ref_dt, ref_dn, "per_billed", per_billed)
+			frappe.db.set_value(ref_dt, ref_dn, "per_billed", per_billed)
 			
 			from frappe.model.meta import has_field
 			if has_field(ref_dt, "billing_status"):
@@ -267,7 +267,7 @@
 				elif per_billed >= 99.99: billing_status = "Fully Billed"
 				else: billing_status = "Partly Billed"
 			
-				frappe.conn.set_value(ref_dt, ref_dn, "billing_status", billing_status)
+				frappe.db.set_value(ref_dt, ref_dn, "billing_status", billing_status)
 							
 def get_tolerance_for(item_code, item_tolerance={}, global_tolerance=None):
 	"""
@@ -276,11 +276,11 @@
 	if item_tolerance.get(item_code):
 		return item_tolerance[item_code], item_tolerance, global_tolerance
 	
-	tolerance = flt(frappe.conn.get_value('Item',item_code,'tolerance') or 0)
+	tolerance = flt(frappe.db.get_value('Item',item_code,'tolerance') or 0)
 
 	if not tolerance:
 		if global_tolerance == None:
-			global_tolerance = flt(frappe.conn.get_value('Global Defaults', None, 
+			global_tolerance = flt(frappe.db.get_value('Global Defaults', None, 
 				'tolerance'))
 		tolerance = global_tolerance
 	
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 5b542bd..2481868 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -84,14 +84,14 @@
 		
 	def get_stock_ledger_details(self):
 		stock_ledger = {}
-		for sle in frappe.conn.sql("""select warehouse, stock_value_difference, voucher_detail_no
+		for sle in frappe.db.sql("""select warehouse, stock_value_difference, voucher_detail_no
 			from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""",
 			(self.doc.doctype, self.doc.name), as_dict=True):
 				stock_ledger.setdefault(sle.voucher_detail_no, []).append(sle)
 		return stock_ledger
 		
 	def get_warehouse_account(self):
-		warehouse_account = dict(frappe.conn.sql("""select master_name, name from tabAccount 
+		warehouse_account = dict(frappe.db.sql("""select master_name, name from tabAccount 
 			where account_type = 'Warehouse' and ifnull(master_name, '') != ''"""))
 		return warehouse_account
 		
@@ -134,7 +134,7 @@
 		else:
 			condition = ""
 		
-		for d in frappe.conn.sql("""select distinct sle.voucher_type, sle.voucher_no 
+		for d in frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no 
 			from `tabStock Ledger Entry` sle
 			where timestamp(sle.posting_date, sle.posting_time) >= timestamp(%s, %s) %s
 			order by timestamp(sle.posting_date, sle.posting_time) asc, name asc""" % 
@@ -147,7 +147,7 @@
 	def get_voucherwise_gl_entries(self, future_stock_vouchers):
 		gl_entries = {}
 		if future_stock_vouchers:
-			for d in frappe.conn.sql("""select * from `tabGL Entry` 
+			for d in frappe.db.sql("""select * from `tabGL Entry` 
 				where posting_date >= %s and voucher_no in (%s)""" % 
 				('%s', ', '.join(['%s']*len(future_stock_vouchers))), 
 				tuple([self.doc.posting_date] + [d[1] for d in future_stock_vouchers]), as_dict=1):
@@ -156,7 +156,7 @@
 		return gl_entries
 		
 	def delete_gl_entries(self, voucher_type, voucher_no):
-		frappe.conn.sql("""delete from `tabGL Entry` 
+		frappe.db.sql("""delete from `tabGL Entry` 
 			where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
 					
 	def make_adjustment_entry(self, expected_gle, voucher_obj):
@@ -236,7 +236,7 @@
 			item_list, warehouse_list = self.get_distinct_item_warehouse()
 			
 		if item_list and warehouse_list:
-			res = frappe.conn.sql("""select item_code, voucher_type, voucher_no,
+			res = frappe.db.sql("""select item_code, voucher_type, voucher_no,
 				voucher_detail_no, posting_date, posting_time, stock_value,
 				warehouse, actual_qty as qty from `tabStock Ledger Entry` 
 				where company = %s and item_code in (%s) and warehouse in (%s)
@@ -264,6 +264,6 @@
 		return list(set(item_list)), list(set(warehouse_list))
 		
 	def make_cancel_gl_entries(self):
-		if frappe.conn.sql("""select name from `tabGL Entry` where voucher_type=%s 
+		if frappe.db.sql("""select name from `tabGL Entry` where voucher_type=%s 
 			and voucher_no=%s""", (self.doc.doctype, self.doc.name)):
 				self.make_gl_entries()
\ No newline at end of file
diff --git a/erpnext/controllers/trends.py b/erpnext/controllers/trends.py
index 9bc259c..fa2e2ae 100644
--- a/erpnext/controllers/trends.py
+++ b/erpnext/controllers/trends.py
@@ -58,7 +58,7 @@
 			inc = 2
 		else :
 			inc = 1
-		data1 = frappe.conn.sql(""" select %s from `tab%s` t1, `tab%s Item` t2 %s
+		data1 = frappe.db.sql(""" select %s from `tab%s` t1, `tab%s Item` t2 %s
 					where t2.parent = t1.name and t1.company = %s and t1.fiscal_year = %s and 
 					t1.docstatus = 1 %s 
 					group by %s 
@@ -73,7 +73,7 @@
 			data.append(dt)
 
 			#to get distinct value of col specified by group_by in filter
-			row = frappe.conn.sql("""select DISTINCT(%s) from `tab%s` t1, `tab%s Item` t2 %s
+			row = frappe.db.sql("""select DISTINCT(%s) from `tab%s` t1, `tab%s Item` t2 %s
 						where t2.parent = t1.name and t1.company = %s and t1.fiscal_year = %s 
 						and t1.docstatus = 1 and %s = %s 
 					""" % 
@@ -85,7 +85,7 @@
 				des = ['' for q in range(len(conditions["columns"]))]
 				
 				#get data for group_by filter 
-				row1 = frappe.conn.sql(""" select %s , %s from `tab%s` t1, `tab%s Item` t2 %s
+				row1 = frappe.db.sql(""" select %s , %s from `tab%s` t1, `tab%s Item` t2 %s
 							where t2.parent = t1.name and t1.company = %s and t1.fiscal_year = %s 
 							and t1.docstatus = 1 and %s = %s and %s = %s 
 						""" % 
@@ -101,7 +101,7 @@
 					
 				data.append(des)
 	else:
-		data = frappe.conn.sql(""" select %s from `tab%s` t1, `tab%s Item` t2 %s
+		data = frappe.db.sql(""" select %s from `tab%s` t1, `tab%s Item` t2 %s
 					where t2.parent = t1.name and t1.company = %s and t1.fiscal_year = %s and 
 					t1.docstatus = 1 %s 
 					group by %s	
@@ -156,7 +156,7 @@
 	from dateutil.relativedelta import relativedelta
 
 	if not year_start_date:
-		year_start_date, year_end_date = frappe.conn.get_value("Fiscal Year", 
+		year_start_date, year_end_date = frappe.db.get_value("Fiscal Year", 
 			fiscal_year, ["year_start_date", "year_end_date"])
 
 	increment = {
diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py
index 198bf6d..2aae0b0 100644
--- a/erpnext/home/__init__.py
+++ b/erpnext/home/__init__.py
@@ -64,11 +64,11 @@
 
 	if feedtype in ('Login', 'Comment', 'Assignment'):
 		# delete old login, comment feed
-		frappe.conn.sql("""delete from tabFeed where 
+		frappe.db.sql("""delete from tabFeed where 
 			datediff(curdate(), creation) > 7 and doc_type in ('Comment', 'Login', 'Assignment')""")
 	else:
 		# one feed per item
-		frappe.conn.sql("""delete from tabFeed
+		frappe.db.sql("""delete from tabFeed
 			where doc_type=%s and doc_name=%s 
 			and ifnull(feed_type,'') != 'Comment'""", (doctype, name))
 
diff --git a/erpnext/home/doctype/feed/feed.py b/erpnext/home/doctype/feed/feed.py
index cdea27d..0a12d26 100644
--- a/erpnext/home/doctype/feed/feed.py
+++ b/erpnext/home/doctype/feed/feed.py
@@ -15,8 +15,8 @@
     self.doc, self.doclist = d, dl
 	
 def on_doctype_update():
-	if not frappe.conn.sql("""show index from `tabFeed` 
+	if not frappe.db.sql("""show index from `tabFeed` 
 		where Key_name="feed_doctype_docname_index" """):
-		frappe.conn.commit()
-		frappe.conn.sql("""alter table `tabFeed` 
+		frappe.db.commit()
+		frappe.db.sql("""alter table `tabFeed` 
 			add index feed_doctype_docname_index(doc_type, doc_name)""")
\ No newline at end of file
diff --git a/erpnext/home/page/activity/activity.py b/erpnext/home/page/activity/activity.py
index 1e02968..0d088bb 100644
--- a/erpnext/home/page/activity/activity.py
+++ b/erpnext/home/page/activity/activity.py
@@ -7,7 +7,7 @@
 @frappe.whitelist()
 def get_feed(arg=None):
 	"""get feed"""	
-	return frappe.conn.sql("""select
+	return frappe.db.sql("""select
 		distinct t1.name, t1.feed_type, t1.doc_type, t1.doc_name, t1.subject, t1.owner,
 		t1.modified
 		from tabFeed t1, tabDocPerm t2
diff --git a/erpnext/hr/doctype/appraisal/appraisal.py b/erpnext/hr/doctype/appraisal/appraisal.py
index 7c042c5..8abeab8 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.py
+++ b/erpnext/hr/doctype/appraisal/appraisal.py
@@ -22,7 +22,7 @@
 		self.calculate_total()
 
 	def get_employee_name(self):
-		emp_nm = frappe.conn.sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
+		emp_nm = frappe.db.sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
 		emp_nm= emp_nm and emp_nm[0][0] or ''
 		self.doc.employee_name = emp_nm
 		return emp_nm
@@ -33,7 +33,7 @@
 			raise Exception
 	
 	def validate_existing_appraisal(self):
-		chk = frappe.conn.sql("""select name from `tabAppraisal` where employee=%s 
+		chk = frappe.db.sql("""select name from `tabAppraisal` where employee=%s 
 			and (status='Submitted' or status='Completed') 
 			and ((start_date>=%s and start_date<=%s) 
 			or (end_date>=%s and end_date<=%s))""",(self.doc.employee,self.doc.start_date,self.doc.end_date,self.doc.start_date,self.doc.end_date))
@@ -55,17 +55,17 @@
 			msgprint("Total weightage assigned should be 100%. It is :" + str(total_w) + "%", 
 				raise_exception=1)
 
-		if frappe.conn.get_value("Employee", self.doc.employee, "user_id") != \
+		if frappe.db.get_value("Employee", self.doc.employee, "user_id") != \
 				frappe.session.user and total == 0:
 			msgprint("Total can't be zero. You must atleast give some points!", raise_exception=1)
 
 		self.doc.total_score = total
 			
 	def on_submit(self):
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 	
 	def on_cancel(self): 
-		frappe.conn.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self.doc, 'status', 'Cancelled')
 
 @frappe.whitelist()
 def fetch_appraisal_template(source_name, target_doclist=None):
diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py
index 385170f..9abef76 100644
--- a/erpnext/hr/doctype/attendance/attendance.py
+++ b/erpnext/hr/doctype/attendance/attendance.py
@@ -14,7 +14,7 @@
 		self.doclist = doclist
 	
 	def validate_duplicate_record(self):	 
-		res = frappe.conn.sql("""select name from `tabAttendance` where employee = %s and att_date = %s 
+		res = frappe.db.sql("""select name from `tabAttendance` where employee = %s and att_date = %s 
 			and name != %s and docstatus = 1""", 
 			(self.doc.employee, self.doc.att_date, self.doc.name))
 		if res:
@@ -23,7 +23,7 @@
 			
 	def check_leave_record(self):
 		if self.doc.status == 'Present':
-			leave = frappe.conn.sql("""select name from `tabLeave Application` 
+			leave = frappe.db.sql("""select name from `tabLeave Application` 
 				where employee = %s and %s between from_date and to_date and status = 'Approved' 
 				and docstatus = 1""", (self.doc.employee, self.doc.att_date))
 			
@@ -41,7 +41,7 @@
 			msgprint(_("Attendance can not be marked for future dates"), raise_exception=1)
 
 	def validate_employee(self):
-		emp = frappe.conn.sql("select name from `tabEmployee` where name = %s and status = 'Active'",
+		emp = frappe.db.sql("select name from `tabEmployee` where name = %s and status = 'Active'",
 		 	self.doc.employee)
 		if not emp:
 			msgprint(_("Employee: ") + self.doc.employee + 
@@ -58,5 +58,5 @@
 	def on_update(self):
 		# this is done because sometimes user entered wrong employee name 
 		# while uploading employee attendance
-		employee_name = frappe.conn.get_value("Employee", self.doc.employee, "employee_name")
-		frappe.conn.set(self.doc, 'employee_name', employee_name)
\ No newline at end of file
+		employee_name = frappe.db.get_value("Employee", self.doc.employee, "employee_name")
+		frappe.db.set(self.doc, 'employee_name', employee_name)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index bfbbfbd..5838116 100644
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -13,7 +13,7 @@
 
 class DocType(DocListController):
 	def autoname(self):
-		naming_method = frappe.conn.get_value("HR Settings", None, "emp_created_by")
+		naming_method = frappe.db.get_value("HR Settings", None, "emp_created_by")
 		if not naming_method:
 			throw(_("Please setup Employee Naming System in Human Resource > HR Settings"))
 		else:
@@ -52,14 +52,14 @@
 		self.add_restriction_if_required("Employee", self.doc.user_id)
 
 	def update_user_default(self):
-		frappe.conn.set_default("employee_name", self.doc.employee_name, self.doc.user_id)
-		frappe.conn.set_default("company", self.doc.company, self.doc.user_id)
+		frappe.db.set_default("employee_name", self.doc.employee_name, self.doc.user_id)
+		frappe.db.set_default("company", self.doc.company, self.doc.user_id)
 	
 	def restrict_leave_approver(self):
 		"""restrict to this employee for leave approver"""
 		employee_leave_approvers = [d.leave_approver for d in self.doclist.get({"parentfield": "employee_leave_approvers"})]
 		if self.doc.reports_to and self.doc.reports_to not in employee_leave_approvers:
-			employee_leave_approvers.append(frappe.conn.get_value("Employee", self.doc.reports_to, "user_id"))
+			employee_leave_approvers.append(frappe.db.get_value("Employee", self.doc.reports_to, "user_id"))
 			
 		for user in employee_leave_approvers:
 			self.add_restriction_if_required("Employee", user)
@@ -73,7 +73,7 @@
 	
 	def update_profile(self):
 		# add employee role if missing
-		if not "Employee" in frappe.conn.sql_list("""select role from tabUserRole
+		if not "Employee" in frappe.db.sql_list("""select role from tabUserRole
 				where parent=%s""", self.doc.user_id):
 			from frappe.profile import add_role
 			add_role(self.doc.user_id, "Employee")
@@ -143,7 +143,7 @@
 			throw(_("Please enter relieving date."))
 
 	def validate_for_enabled_user_id(self):
-		enabled = frappe.conn.sql("""select name from `tabProfile` where 
+		enabled = frappe.db.sql("""select name from `tabProfile` where 
 			name=%s and enabled=1""", self.doc.user_id)
 		if not enabled:
 			throw("{id}: {user_id} {msg}".format(**{
@@ -153,7 +153,7 @@
 			}))
 
 	def validate_duplicate_user_id(self):
-		employee = frappe.conn.sql_list("""select name from `tabEmployee` where 
+		employee = frappe.db.sql_list("""select name from `tabEmployee` where 
 			user_id=%s and status='Active' and name!=%s""", (self.doc.user_id, self.doc.name))
 		if employee:
 			throw("{id}: {user_id} {msg}: {employee}".format(**{
@@ -174,8 +174,8 @@
 
 	def update_dob_event(self):
 		if self.doc.status == "Active" and self.doc.date_of_birth \
-			and not cint(frappe.conn.get_value("HR Settings", None, "stop_birthday_reminders")):
-			birthday_event = frappe.conn.sql("""select name from `tabEvent` where repeat_on='Every Year' 
+			and not cint(frappe.db.get_value("HR Settings", None, "stop_birthday_reminders")):
+			birthday_event = frappe.db.sql("""select name from `tabEvent` where repeat_on='Every Year' 
 				and ref_type='Employee' and ref_name=%s""", self.doc.name)
 			
 			starts_on = self.doc.date_of_birth + " 00:00:00"
@@ -202,7 +202,7 @@
 					"ref_name": self.doc.name
 				}).insert()
 		else:
-			frappe.conn.sql("""delete from `tabEvent` where repeat_on='Every Year' and
+			frappe.db.sql("""delete from `tabEvent` where repeat_on='Every Year' and
 				ref_type='Employee' and ref_name=%s""", self.doc.name)
 
 @frappe.whitelist()
diff --git a/erpnext/hr/doctype/holiday_list/holiday_list.py b/erpnext/hr/doctype/holiday_list/holiday_list.py
index 6d5181d..8fdfccc 100644
--- a/erpnext/hr/doctype/holiday_list/holiday_list.py
+++ b/erpnext/hr/doctype/holiday_list/holiday_list.py
@@ -41,7 +41,7 @@
 			throw(_("Please select weekly off day"))
 
 	def get_fy_start_end_dates(self):
-		return frappe.conn.sql("""select year_start_date, year_end_date
+		return frappe.db.sql("""select year_start_date, year_end_date
 			from `tabFiscal Year` where name=%s""", (self.doc.fiscal_year,))[0]
 
 	def get_weekly_off_date_list(self, year_start_date, year_end_date):
@@ -66,5 +66,5 @@
 		self.doclist = self.doc.clear_table(self.doclist, 'holiday_list_details')
 
 	def update_default_holiday_list(self):
-		frappe.conn.sql("""update `tabHoliday List` set is_default = 0 
+		frappe.db.sql("""update `tabHoliday List` set is_default = 0 
 			where ifnull(is_default, 0) = 1 and fiscal_year = %s""", (self.doc.fiscal_year,))
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.py b/erpnext/hr/doctype/hr_settings/hr_settings.py
index 1102dd6..e9e44d4 100644
--- a/erpnext/hr/doctype/hr_settings/hr_settings.py
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.py
@@ -20,15 +20,15 @@
 			self.doc.get("emp_created_by")=="Naming Series", hide_name_field=True)
 			
 	def update_birthday_reminders(self):
-		original_stop_birthday_reminders = cint(frappe.conn.get_value("HR Settings", 
+		original_stop_birthday_reminders = cint(frappe.db.get_value("HR Settings", 
 			None, "stop_birthday_reminders"))
 
 		# reset birthday reminders
 		if cint(self.doc.stop_birthday_reminders) != original_stop_birthday_reminders:
-			frappe.conn.sql("""delete from `tabEvent` where repeat_on='Every Year' and ref_type='Employee'""")
+			frappe.db.sql("""delete from `tabEvent` where repeat_on='Every Year' and ref_type='Employee'""")
 		
 			if not self.doc.stop_birthday_reminders:
-				for employee in frappe.conn.sql_list("""select name from `tabEmployee` where status='Active' and 
+				for employee in frappe.db.sql_list("""select name from `tabEmployee` where status='Active' and 
 					ifnull(date_of_birth, '')!=''"""):
 					frappe.get_obj("Employee", employee).update_dob_event()
 					
diff --git a/erpnext/hr/doctype/job_applicant/get_job_applications.py b/erpnext/hr/doctype/job_applicant/get_job_applications.py
index 3b7a1c1..91d3fad 100644
--- a/erpnext/hr/doctype/job_applicant/get_job_applications.py
+++ b/erpnext/hr/doctype/job_applicant/get_job_applications.py
@@ -15,7 +15,7 @@
 		if mail.from_email == self.settings.email_id:
 			return
 			
-		name = frappe.conn.get_value("Job Applicant", {"email_id": mail.from_email}, 
+		name = frappe.db.get_value("Job Applicant", {"email_id": mail.from_email}, 
 			"name")
 		if name:
 			applicant = frappe.bean("Job Applicant", name)
@@ -40,5 +40,5 @@
 			doctype="Job Applicant", name=applicant.doc.name, sent_or_received="Received")
 
 def get_job_applications():
-	if cint(frappe.conn.get_value('Jobs Email Settings', None, 'extract_emails')):
+	if cint(frappe.db.get_value('Jobs Email Settings', None, 'extract_emails')):
 		JobsMailbox()
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
index f503240..41fc5f3 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.py
@@ -13,7 +13,7 @@
 		self.doc, self.doclist = d, dl
 	
 	def get_sender(self, comm):
-		return frappe.conn.get_value('Jobs Email Settings',None,'email_id')	
+		return frappe.db.get_value('Jobs Email Settings',None,'email_id')	
 	
 	def validate(self):
 		self.set_status()	
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index ccea37b..7648ba5 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -36,7 +36,7 @@
 		
 	def check_existing_leave_allocation(self):
 		"""check whether leave for same type is already allocated or not"""
-		leave_allocation = frappe.conn.sql("""select name from `tabLeave Allocation`
+		leave_allocation = frappe.db.sql("""select name from `tabLeave Allocation`
 			where employee=%s and leave_type=%s and fiscal_year=%s and docstatus=1""",
 			(self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
 		if leave_allocation:
@@ -63,14 +63,14 @@
 		return self.get_leaves_allocated(prev_fyear) - self.get_leaves_applied(prev_fyear)
 		
 	def get_leaves_applied(self, fiscal_year):
-		leaves_applied = frappe.conn.sql("""select SUM(ifnull(total_leave_days, 0))
+		leaves_applied = frappe.db.sql("""select SUM(ifnull(total_leave_days, 0))
 			from `tabLeave Application` where employee=%s and leave_type=%s
 			and fiscal_year=%s and docstatus=1""", 
 			(self.doc.employee, self.doc.leave_type, fiscal_year))
 		return leaves_applied and flt(leaves_applied[0][0]) or 0
 
 	def get_leaves_allocated(self, fiscal_year):
-		leaves_allocated = frappe.conn.sql("""select SUM(ifnull(total_leaves_allocated, 0))
+		leaves_allocated = frappe.db.sql("""select SUM(ifnull(total_leaves_allocated, 0))
 			from `tabLeave Allocation` where employee=%s and leave_type=%s
 			and fiscal_year=%s and docstatus=1 and name!=%s""",
 			(self.doc.employee, self.doc.leave_type, fiscal_year, self.doc.name))
@@ -78,18 +78,18 @@
 	
 	def allow_carry_forward(self):
 		"""check whether carry forward is allowed or not for this leave type"""
-		cf = frappe.conn.sql("""select is_carry_forward from `tabLeave Type` where name = %s""",
+		cf = frappe.db.sql("""select is_carry_forward from `tabLeave Type` where name = %s""",
 			self.doc.leave_type)
 		cf = cf and cint(cf[0][0]) or 0
 		if not cf:
-			frappe.conn.set(self.doc,'carry_forward',0)
+			frappe.db.set(self.doc,'carry_forward',0)
 			msgprint("Sorry! You cannot carry forward %s" % (self.doc.leave_type),
 				raise_exception=1)
 
 	def get_carry_forwarded_leaves(self):
 		if self.doc.carry_forward:
 			self.allow_carry_forward()
-		prev_fiscal_year = frappe.conn.sql("""select name from `tabFiscal Year` 
+		prev_fiscal_year = frappe.db.sql("""select name from `tabFiscal Year` 
 			where year_start_date = (select date_add(year_start_date, interval -1 year) 
 				from `tabFiscal Year` where name=%s) 
 			order by name desc limit 1""", self.doc.fiscal_year)
@@ -105,11 +105,11 @@
 
 	def get_total_allocated_leaves(self):
 		leave_det = self.get_carry_forwarded_leaves()
-		frappe.conn.set(self.doc,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
-		frappe.conn.set(self.doc,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
+		frappe.db.set(self.doc,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
+		frappe.db.set(self.doc,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
 
 	def check_for_leave_application(self):
-		exists = frappe.conn.sql("""select name from `tabLeave Application`
+		exists = frappe.db.sql("""select name from `tabLeave Application`
 			where employee=%s and leave_type=%s and fiscal_year=%s and docstatus=1""",
 			(self.doc.employee, self.doc.leave_type, self.doc.fiscal_year))
 		if exists:
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index f04952d..cdc5979 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -17,7 +17,7 @@
 from frappe.model.controller import DocListController
 class DocType(DocListController):
 	def setup(self):
-		if frappe.conn.exists(self.doc.doctype, self.doc.name):
+		if frappe.db.exists(self.doc.doctype, self.doc.name):
 			self.previous_doc = frappe.doc(self.doc.doctype, self.doc.name)
 		else:
 			self.previous_doc = None
@@ -76,11 +76,11 @@
 				raise LeaveDayBlockedError
 			
 	def get_holidays(self):
-		tot_hol = frappe.conn.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1 
+		tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1 
 			where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name 
 			and h1.holiday_date between %s and %s""", (self.doc.employee, self.doc.from_date, self.doc.to_date))
 		if not tot_hol:
-			tot_hol = frappe.conn.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2 
+			tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2 
 				where h1.parent = h2.name and h1.holiday_date between %s and %s
 				and ifnull(h2.is_default,0) = 1 and h2.fiscal_year = %s""",
 				(self.doc.from_date, self.doc.to_date, self.doc.fiscal_year))
@@ -120,13 +120,13 @@
 					#check if this leave type allow the remaining balance to be in negative. If yes then warn the user and continue to save else warn the user and don't save.
 					msgprint("There is not enough leave balance for Leave Type: %s" % \
 						(self.doc.leave_type,), 
-						raise_exception=not(frappe.conn.get_value("Leave Type", self.doc.leave_type,"allow_negative") or None))
+						raise_exception=not(frappe.db.get_value("Leave Type", self.doc.leave_type,"allow_negative") or None))
 					
 	def validate_leave_overlap(self):
 		if not self.doc.name:
 			self.doc.name = "New Leave Application"
 			
-		for d in frappe.conn.sql("""select name, leave_type, posting_date, 
+		for d in frappe.db.sql("""select name, leave_type, posting_date, 
 			from_date, to_date 
 			from `tabLeave Application` 
 			where 
@@ -141,7 +141,7 @@
 			msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : <a href=\"#Form/Leave Application/%s\">%s</a>" % (self.doc.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name'], d['name']), raise_exception = OverlapError)
 
 	def validate_max_days(self):
-		max_days = frappe.conn.sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
+		max_days = frappe.db.sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
 		max_days = max_days and flt(max_days[0][0]) or 0
 		if max_days and self.doc.total_leave_days > max_days:
 			msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
@@ -157,7 +157,7 @@
 				+ _("Leave Approver can be one of") + ": "
 				+ comma_or(leave_approvers)), raise_exception=InvalidLeaveApproverError)
 		
-		elif self.doc.leave_approver and not frappe.conn.sql("""select name from `tabUserRole` 
+		elif self.doc.leave_approver and not frappe.db.sql("""select name from `tabUserRole` 
 			where parent=%s and role='Leave Approver'""", self.doc.leave_approver):
 				msgprint(get_fullname(self.doc.leave_approver) + ": " \
 					+ _("does not have role 'Leave Approver'"), raise_exception=InvalidLeaveApproverError)
@@ -215,14 +215,14 @@
 
 @frappe.whitelist()
 def get_leave_balance(employee, leave_type, fiscal_year):	
-	leave_all = frappe.conn.sql("""select total_leaves_allocated 
+	leave_all = frappe.db.sql("""select total_leaves_allocated 
 		from `tabLeave Allocation` where employee = %s and leave_type = %s
 		and fiscal_year = %s and docstatus = 1""", (employee, 
 			leave_type, fiscal_year))
 	
 	leave_all = leave_all and flt(leave_all[0][0]) or 0
 	
-	leave_app = frappe.conn.sql("""select SUM(total_leave_days) 
+	leave_app = frappe.db.sql("""select SUM(total_leave_days) 
 		from `tabLeave Application` 
 		where employee = %s and leave_type = %s and fiscal_year = %s
 		and status="Approved" and docstatus = 1""", (employee, leave_type, fiscal_year))
@@ -232,14 +232,14 @@
 	return ret
 
 def is_lwp(leave_type):
-	lwp = frappe.conn.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type)
+	lwp = frappe.db.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type)
 	return lwp and cint(lwp[0][0]) or 0
 	
 @frappe.whitelist()
 def get_events(start, end):
 	events = []
-	employee = frappe.conn.get_default("employee", frappe.session.user)
-	company = frappe.conn.get_default("company", frappe.session.user)
+	employee = frappe.db.get_default("employee", frappe.session.user)
+	company = frappe.db.get_default("company", frappe.session.user)
 	
 	from frappe.widgets.reportview import build_match_conditions
 	match_conditions = build_match_conditions("Leave Application")
@@ -256,13 +256,13 @@
 	return events
 	
 def add_department_leaves(events, start, end, employee, company):
-	department = frappe.conn.get_value("Employee", employee, "department")
+	department = frappe.db.get_value("Employee", employee, "department")
 	
 	if not department:
 		return
 	
 	# department leaves
-	department_employees = frappe.conn.sql_list("""select name from tabEmployee where department=%s
+	department_employees = frappe.db.sql_list("""select name from tabEmployee where department=%s
 		and company=%s""", (department, company))
 	
 	match_conditions = "employee in (\"%s\")" % '", "'.join(department_employees)
@@ -278,7 +278,7 @@
 	if match_conditions:
 		query += " and " + match_conditions
 	
-	for d in frappe.conn.sql(query, (start, end, start, end), as_dict=True):
+	for d in frappe.db.sql(query, (start, end, start, end), as_dict=True):
 		e = {
 			"name": d.name,
 			"doctype": "Leave Application",
@@ -309,11 +309,11 @@
 		cnt+=1
 
 def add_holidays(events, start, end, employee, company):
-	applicable_holiday_list = frappe.conn.get_value("Employee", employee, "holiday_list")
+	applicable_holiday_list = frappe.db.get_value("Employee", employee, "holiday_list")
 	if not applicable_holiday_list:
 		return
 	
-	for holiday in frappe.conn.sql("""select name, holiday_date, description
+	for holiday in frappe.db.sql("""select name, holiday_date, description
 		from `tabHoliday` where parent=%s and holiday_date between %s and %s""", 
 		(applicable_holiday_list, start, end), as_dict=True):
 			events.append({
@@ -338,7 +338,7 @@
 		condition = build_match_conditions("Employee")
 		condition = ("and " + condition) if condition else ""
 	
-	return frappe.conn.sql("""select name, employee_name from `tabEmployee`
+	return frappe.db.sql("""select name, employee_name from `tabEmployee`
 		where status = 'Active' and docstatus < 2 and
 		(`%s` like %s or employee_name like %s) %s
 		order by
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index 30dc804..56381fc 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -11,14 +11,14 @@
 		frappe.set_user("Administrator")
 		
 		# so that this test doesn't affect other tests
-		frappe.conn.sql("""delete from `tabEmployee Leave Approver`""")
+		frappe.db.sql("""delete from `tabEmployee Leave Approver`""")
 		
 	def _clear_roles(self):
-		frappe.conn.sql("""delete from `tabUserRole` where parent in 
+		frappe.db.sql("""delete from `tabUserRole` where parent in 
 			("test@example.com", "test1@example.com", "test2@example.com")""")
 			
 	def _clear_applications(self):
-		frappe.conn.sql("""delete from `tabLeave Application`""")
+		frappe.db.sql("""delete from `tabLeave Application`""")
 		
 	def _add_employee_leave_approver(self, employee, leave_approver):
 		temp_session_user = frappe.session.user
@@ -44,7 +44,7 @@
 		from frappe.profile import add_role
 		add_role("test1@example.com", "HR User")
 			
-		frappe.conn.set_value("Department", "_Test Department", 
+		frappe.db.set_value("Department", "_Test Department", 
 			"leave_block_list", "_Test Leave Block List")
 		
 		application = self.get_application(test_records[1])
@@ -55,7 +55,7 @@
 		frappe.set_user("test1@example.com")
 
 		# clear other applications
-		frappe.conn.sql("delete from `tabLeave Application`")
+		frappe.db.sql("delete from `tabLeave Application`")
 		
 		application = self.get_application(test_records[1])
 		self.assertTrue(application.insert())
@@ -87,9 +87,9 @@
 		application = self.get_application(test_records[3])
 		application.doc.leave_approver = "test@example.com"
 		
-		frappe.conn.set_value("Leave Block List", "_Test Leave Block List", 
+		frappe.db.set_value("Leave Block List", "_Test Leave Block List", 
 			"applies_to_all_departments", 1)
-		frappe.conn.set_value("Employee", "_T-Employee-0002", "department", 
+		frappe.db.set_value("Employee", "_T-Employee-0002", "department", 
 			"_Test Department")
 		
 		frappe.set_user("test1@example.com")
@@ -99,7 +99,7 @@
 		application.doc.status = "Approved"
 		self.assertRaises(LeaveDayBlockedError, application.submit)
 		
-		frappe.conn.set_value("Leave Block List", "_Test Leave Block List", 
+		frappe.db.set_value("Leave Block List", "_Test Leave Block List", 
 			"applies_to_all_departments", 0)
 		
 	def test_leave_approval(self):
@@ -128,7 +128,7 @@
 		frappe.set_user("test1@example.com")
 		application.doc.status = "Approved"
 		application.submit()
-		self.assertEqual(frappe.conn.get_value("Leave Application", application.doc.name,
+		self.assertEqual(frappe.db.get_value("Leave Application", application.doc.name,
 			"docstatus"), 1)
 		
 	def _test_leave_approval_invalid_leave_approver_insert(self):
@@ -147,7 +147,7 @@
 		application.doc.leave_approver = "test1@example.com"
 		self.assertRaises(InvalidLeaveApproverError, application.insert)
 		
-		frappe.conn.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
+		frappe.db.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
 		
 	def _test_leave_approval_invalid_leave_approver_submit(self):
@@ -166,15 +166,15 @@
 		from erpnext.hr.doctype.leave_application.leave_application import LeaveApproverIdentityError
 		self.assertRaises(LeaveApproverIdentityError, application.submit)
 
-		frappe.conn.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
+		frappe.db.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
 			
 	def _test_leave_approval_valid_leave_approver_insert(self):
 		self._clear_applications()
 		self._add_employee_leave_approver("_T-Employee-0001", "test2@example.com")
 		
-		original_department = frappe.conn.get_value("Employee", "_T-Employee-0001", "department")
-		frappe.conn.set_value("Employee", "_T-Employee-0001", "department", None)
+		original_department = frappe.db.get_value("Employee", "_T-Employee-0001", "department")
+		frappe.db.set_value("Employee", "_T-Employee-0001", "department", None)
 		
 		frappe.set_user("test@example.com")
 		application = self.get_application(test_records[1])
@@ -185,13 +185,13 @@
 		frappe.set_user("test2@example.com")
 		application.doc.status = "Approved"
 		application.submit()
-		self.assertEqual(frappe.conn.get_value("Leave Application", application.doc.name,
+		self.assertEqual(frappe.db.get_value("Leave Application", application.doc.name,
 			"docstatus"), 1)
 			
-		frappe.conn.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
+		frappe.db.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
 		
-		frappe.conn.set_value("Employee", "_T-Employee-0001", "department", original_department)
+		frappe.db.set_value("Employee", "_T-Employee-0001", "department", original_department)
 		
 test_dependencies = ["Leave Block List"]		
 
diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.py b/erpnext/hr/doctype/leave_block_list/leave_block_list.py
index ccc8478..cdbb2d0 100644
--- a/erpnext/hr/doctype/leave_block_list/leave_block_list.py
+++ b/erpnext/hr/doctype/leave_block_list/leave_block_list.py
@@ -28,7 +28,7 @@
 	company=None, all_lists=False):
 	block_dates = []
 	for block_list in get_applicable_block_lists(employee, company, all_lists):
-		block_dates.extend(frappe.conn.sql("""select block_date, reason 
+		block_dates.extend(frappe.db.sql("""select block_date, reason 
 			from `tabLeave Block List Date` where parent=%s 
 			and block_date between %s and %s""", (block_list, from_date, to_date), 
 			as_dict=1))
@@ -39,12 +39,12 @@
 	block_lists = []
 	
 	if not employee:
-		employee = frappe.conn.get_value("Employee", {"user_id":frappe.session.user})
+		employee = frappe.db.get_value("Employee", {"user_id":frappe.session.user})
 		if not employee:
 			return []
 	
 	if not company:
-		company = frappe.conn.get_value("Employee", employee, "company")
+		company = frappe.db.get_value("Employee", employee, "company")
 		
 	def add_block_list(block_list):
 		if block_list:
@@ -52,18 +52,18 @@
 				block_lists.append(block_list)
 
 	# per department
-	department = frappe.conn.get_value("Employee",employee, "department")
+	department = frappe.db.get_value("Employee",employee, "department")
 	if department:
-		block_list = frappe.conn.get_value("Department", department, "leave_block_list")
+		block_list = frappe.db.get_value("Department", department, "leave_block_list")
 		add_block_list(block_list)
 
 	# global
-	for block_list in frappe.conn.sql_list("""select name from `tabLeave Block List`
+	for block_list in frappe.db.sql_list("""select name from `tabLeave Block List`
 		where ifnull(applies_to_all_departments,0)=1 and company=%s""", company):
 		add_block_list(block_list)
 		
 	return list(set(block_lists))
 	
 def is_user_in_allow_list(block_list):
-	return frappe.session.user in frappe.conn.sql_list("""select allow_user
+	return frappe.session.user in frappe.db.sql_list("""select allow_user
 		from `tabLeave Block List Allow` where parent=%s""", block_list)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py
index 578658e..811d897 100644
--- a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py
+++ b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py
@@ -12,20 +12,20 @@
 		
 	def test_get_applicable_block_dates(self):
 		frappe.set_user("test@example.com")
-		frappe.conn.set_value("Department", "_Test Department", "leave_block_list", 
+		frappe.db.set_value("Department", "_Test Department", "leave_block_list", 
 			"_Test Leave Block List")
 		self.assertTrue("2013-01-02" in 
 			[d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")])
 			
 	def test_get_applicable_block_dates_for_allowed_user(self):
 		frappe.set_user("test1@example.com")
-		frappe.conn.set_value("Department", "_Test Department 1", "leave_block_list", 
+		frappe.db.set_value("Department", "_Test Department 1", "leave_block_list", 
 			"_Test Leave Block List")
 		self.assertEquals([], [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")])
 	
 	def test_get_applicable_block_dates_all_lists(self):
 		frappe.set_user("test1@example.com")
-		frappe.conn.set_value("Department", "_Test Department 1", "leave_block_list", 
+		frappe.db.set_value("Department", "_Test Department 1", "leave_block_list", 
 			"_Test Leave Block List")
 		self.assertTrue("2013-01-02" in 
 			[d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03", all_lists=True)])
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
index 4845a69..53436cc 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
@@ -33,7 +33,7 @@
     emp_query = "select name from `tabEmployee` "
     if flag == 1:
       emp_query += condition 
-    e = frappe.conn.sql(emp_query)
+    e = frappe.db.sql(emp_query)
     return e
 
   # ----------------
@@ -54,7 +54,7 @@
     for d in self.get_employees():
       la = Document('Leave Allocation')
       la.employee = cstr(d[0])
-      la.employee_name = frappe.conn.get_value('Employee',cstr(d[0]),'employee_name')
+      la.employee_name = frappe.db.get_value('Employee',cstr(d[0]),'employee_name')
       la.leave_type = self.doc.leave_type
       la.fiscal_year = self.doc.fiscal_year
       la.posting_date = nowdate()
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.py b/erpnext/hr/doctype/salary_manager/salary_manager.py
index 0b037bc..622b89b 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.py
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.py
@@ -21,7 +21,7 @@
 		cond = self.get_filter_condition()
 		cond += self.get_joining_releiving_condition()
 		
-		emp_list = frappe.conn.sql("""
+		emp_list = frappe.db.sql("""
 			select t1.name
 			from `tabEmployee` t1, `tabSalary Structure` t2 
 			where t1.docstatus!=2 and t2.docstatus != 2 
@@ -58,7 +58,7 @@
 		
 	
 	def get_month_details(self, year, month):
-		ysd = frappe.conn.sql("select year_start_date from `tabFiscal Year` where name ='%s'"%year)[0][0]
+		ysd = frappe.db.sql("select year_start_date from `tabFiscal Year` where name ='%s'"%year)[0][0]
 		if ysd:
 			from dateutil.relativedelta import relativedelta
 			import calendar, datetime
@@ -84,7 +84,7 @@
 		emp_list = self.get_emp_list()
 		ss_list = []
 		for emp in emp_list:
-			if not frappe.conn.sql("""select name from `tabSalary Slip` 
+			if not frappe.db.sql("""select name from `tabSalary Slip` 
 					where docstatus!= 2 and employee = %s and month = %s and fiscal_year = %s and company = %s
 					""", (emp[0], self.doc.month, self.doc.fiscal_year, self.doc.company)):
 				ss = frappe.bean({
@@ -115,7 +115,7 @@
 			which are not submitted
 		"""
 		cond = self.get_filter_condition()
-		ss_list = frappe.conn.sql("""
+		ss_list = frappe.db.sql("""
 			select t1.name from `tabSalary Slip` t1 
 			where t1.docstatus = 0 and month = '%s' and fiscal_year = '%s' %s
 		""" % (self.doc.month, self.doc.fiscal_year, cond))
@@ -131,11 +131,11 @@
 		for ss in ss_list:
 			ss_obj = get_obj("Salary Slip",ss[0],with_children=1)
 			try:
-				frappe.conn.set(ss_obj.doc, 'email_check', cint(self.doc.send_mail))
+				frappe.db.set(ss_obj.doc, 'email_check', cint(self.doc.send_mail))
 				if cint(self.doc.send_email) == 1:
 					ss_obj.send_mail_funct()
 					
-				frappe.conn.set(ss_obj.doc, 'docstatus', 1)
+				frappe.db.set(ss_obj.doc, 'docstatus', 1)
 			except Exception,e:
 				not_submitted_ss.append(ss[0])
 				msgprint(e)
@@ -177,7 +177,7 @@
 			Get total salary amount from submitted salary slip based on selected criteria
 		"""
 		cond = self.get_filter_condition()
-		tot = frappe.conn.sql("""
+		tot = frappe.db.sql("""
 			select sum(rounded_total) from `tabSalary Slip` t1 
 			where t1.docstatus = 1 and month = '%s' and fiscal_year = '%s' %s
 		""" % (self.doc.month, self.doc.fiscal_year, cond))
@@ -190,7 +190,7 @@
 			get default bank account,default salary acount from company
 		"""
 		amt = self.get_total_salary()
-		default_bank_account = frappe.conn.get_value("Company", self.doc.company, 
+		default_bank_account = frappe.db.get_value("Company", self.doc.company, 
 			"default_bank_account")
 		if not default_bank_account:
 			msgprint("You can set Default Bank Account in Company master.")
diff --git a/erpnext/hr/doctype/salary_manager/test_salary_manager.py b/erpnext/hr/doctype/salary_manager/test_salary_manager.py
index 7a4c6d1..071d9d4 100644
--- a/erpnext/hr/doctype/salary_manager/test_salary_manager.py
+++ b/erpnext/hr/doctype/salary_manager/test_salary_manager.py
@@ -9,26 +9,26 @@
 
 # from frappe.model.doc import Document
 # from frappe.model.code import get_obj
-# frappe.conn.sql = frappe.conn.sql
+# frappe.db.sql = frappe.db.sql
 # 
 # class TestSalaryManager(unittest.TestCase):
 # 	def setUp(self):
-# 		frappe.conn.begin()
+# 		frappe.db.begin()
 # 		for rec in [des1, dep1, branch1, grade1, comp1, emp1, emp2]:
 # 			rec.save(1)
 # 					
 # 		ss1[0].employee = emp1.name
 # 		for s in ss1: s.save(1)
 # 		for s in ss1[1:]:
-# 			frappe.conn.sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
-# 			frappe.conn.sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
+# 			frappe.db.sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
+# 			frappe.db.sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
 # 			
 # 		
 # 		ss2[0].employee = emp2.name
 # 		for s in ss2: s.save(1)		
 # 		for s in ss2[1:]:
-# 			frappe.conn.sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
-# 			frappe.conn.sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
+# 			frappe.db.sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
+# 			frappe.db.sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
 # 			
 # 		sman.save()
 # 		self.sm = get_obj('Salary Manager')	
@@ -36,7 +36,7 @@
 # 		self.sm.create_sal_slip()
 # 		
 # 	def test_creation(self):
-# 		ssid = frappe.conn.sql("""
+# 		ssid = frappe.db.sql("""
 # 			select name, department 
 # 			from `tabSalary Slip` 
 # 			where month = '08' and fiscal_year='2011-2012'""")
@@ -46,7 +46,7 @@
 # 		
 # 		
 # 	def test_lwp_calc(self):
-# 		ss = frappe.conn.sql("""
+# 		ss = frappe.db.sql("""
 # 			select payment_days
 # 			from `tabSalary Slip` 
 # 			where month = '08' and fiscal_year='2011-2012' and employee = '%s'
@@ -55,7 +55,7 @@
 # 		self.assertTrue(ss[0][0]==27)
 # 		
 # 	def test_net_pay(self):
-# 		ss = frappe.conn.sql("""
+# 		ss = frappe.db.sql("""
 # 			select rounded_total 
 # 			from `tabSalary Slip` 
 # 			where month = '08'
@@ -64,7 +64,7 @@
 # 
 # 	def test_submit(self):
 # 		self.sm.submit_salary_slip()
-# 		ss = frappe.conn.sql("""
+# 		ss = frappe.db.sql("""
 # 			select docstatus 
 # 			from `tabSalary Slip` 
 # 			where month = '08'
@@ -72,7 +72,7 @@
 # 		self.assertTrue(ss[0][0]==1)
 # 		
 # 	def tearDown(self):
-# 		frappe.conn.rollback()
+# 		frappe.db.rollback()
 # 		
 # #--------------------------------------------
 # # test data
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 76e6800..a264c1c 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -30,7 +30,7 @@
 				self.pull_sal_struct(struct)
 
 	def check_sal_struct(self):
-		struct = frappe.conn.sql("""select name from `tabSalary Structure` 
+		struct = frappe.db.sql("""select name from `tabSalary Structure` 
 			where employee=%s and is_active = 'Yes'""", self.doc.employee)
 		if not struct:
 			msgprint("Please create Salary Structure for employee '%s'" % self.doc.employee)
@@ -42,7 +42,7 @@
 		self.doclist = get_mapped_doclist(struct, self.doclist)
 		
 	def pull_emp_details(self):
-		emp = frappe.conn.get_value("Employee", self.doc.employee, 
+		emp = frappe.db.get_value("Employee", self.doc.employee, 
 			["bank_name", "bank_ac_no", "esic_card_no", "pf_number"], as_dict=1)
 		if emp:
 			self.doc.bank_name = emp.bank_name
@@ -59,7 +59,7 @@
 		m = get_obj('Salary Manager').get_month_details(self.doc.fiscal_year, self.doc.month)
 		holidays = self.get_holidays_for_employee(m)
 		
-		if not cint(frappe.conn.get_value("HR Settings", "HR Settings",
+		if not cint(frappe.db.get_value("HR Settings", "HR Settings",
 			"include_holidays_in_total_working_days")):
 				m["month_days"] -= len(holidays)
 				if m["month_days"] < 0:
@@ -76,7 +76,7 @@
 
 	def get_payment_days(self, m):
 		payment_days = m['month_days']
-		emp = frappe.conn.sql("select date_of_joining, relieving_date from `tabEmployee` \
+		emp = frappe.db.sql("select date_of_joining, relieving_date from `tabEmployee` \
 			where name = %s", self.doc.employee, as_dict=1)[0]
 			
 		if emp['relieving_date']:
@@ -98,13 +98,13 @@
 		return payment_days
 		
 	def get_holidays_for_employee(self, m):
-		holidays = frappe.conn.sql("""select t1.holiday_date 
+		holidays = frappe.db.sql("""select t1.holiday_date 
 			from `tabHoliday` t1, tabEmployee t2 
 			where t1.parent = t2.holiday_list and t2.name = %s 
 			and t1.holiday_date between %s and %s""", 
 			(self.doc.employee, m['month_start_date'], m['month_end_date']))
 		if not holidays:
-			holidays = frappe.conn.sql("""select t1.holiday_date 
+			holidays = frappe.db.sql("""select t1.holiday_date 
 				from `tabHoliday` t1, `tabHoliday List` t2 
 				where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 
 				and t2.fiscal_year = %s
@@ -118,7 +118,7 @@
 		for d in range(m['month_days']):
 			dt = add_days(cstr(m['month_start_date']), d)
 			if dt not in holidays:
-				leave = frappe.conn.sql("""
+				leave = frappe.db.sql("""
 					select t1.name, t1.half_day
 					from `tabLeave Application` t1, `tabLeave Type` t2 
 					where t2.name = t1.leave_type 
@@ -132,7 +132,7 @@
 		return lwp
 
 	def check_existing(self):
-		ret_exist = frappe.conn.sql("""select name from `tabSalary Slip` 
+		ret_exist = frappe.db.sql("""select name from `tabSalary Slip` 
 			where month = %s and fiscal_year = %s and docstatus != 2 
 			and employee = %s and name != %s""", 
 			(self.doc.month, self.doc.fiscal_year, self.doc.employee, self.doc.name))
@@ -196,12 +196,12 @@
 
 	def send_mail_funct(self):	 
 		from frappe.utils.email_lib import sendmail
-		receiver = frappe.conn.get_value("Employee", self.doc.employee, "company_email")
+		receiver = frappe.db.get_value("Employee", self.doc.employee, "company_email")
 		if receiver:
 			subj = 'Salary Slip - ' + cstr(self.doc.month) +'/'+cstr(self.doc.fiscal_year)
-			earn_ret=frappe.conn.sql("""select e_type, e_modified_amount from `tabSalary Slip Earning` 
+			earn_ret=frappe.db.sql("""select e_type, e_modified_amount from `tabSalary Slip Earning` 
 				where parent = %s""", self.doc.name)
-			ded_ret=frappe.conn.sql("""select d_type, d_modified_amount from `tabSalary Slip Deduction` 
+			ded_ret=frappe.db.sql("""select d_type, d_modified_amount from `tabSalary Slip Deduction` 
 				where parent = %s""", self.doc.name)
 		 
 			earn_table = ''
@@ -229,7 +229,7 @@
 							% (cstr(d[0]), cstr(d[1]))
 				ded_table += '</table>'
 			
-			letter_head = frappe.conn.get_value("Letter Head", {"is_default": 1, "disabled": 0}, 
+			letter_head = frappe.db.get_value("Letter Head", {"is_default": 1, "disabled": 0}, 
 				"content")
 			
 			msg = '''<div> %s <br>
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index a4728cd..b667f9c 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -6,8 +6,8 @@
 
 class TestSalarySlip(unittest.TestCase):
 	def setUp(self):
-		frappe.conn.sql("""delete from `tabLeave Application`""")
-		frappe.conn.sql("""delete from `tabSalary Slip`""")
+		frappe.db.sql("""delete from `tabLeave Application`""")
+		frappe.db.sql("""delete from `tabSalary Slip`""")
 		from erpnext.hr.doctype.leave_application.test_leave_application import test_records as leave_applications
 		la = frappe.bean(copy=leave_applications[4])
 		la.insert()
@@ -15,10 +15,10 @@
 		la.submit()
 		
 	def tearDown(self):
-		frappe.conn.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 0)
+		frappe.db.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 0)
 		
 	def test_salary_slip_with_holidays_included(self):
-		frappe.conn.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 1)
+		frappe.db.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 1)
 		ss = frappe.bean(copy=test_records[0])
 		ss.insert()
 		self.assertEquals(ss.doc.total_days_in_month, 31)
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index 6b080fb..8d59f2b 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -19,7 +19,7 @@
 
 	def get_employee_details(self):
 		ret = {}
-		det = frappe.conn.sql("""select employee_name, branch, designation, department, grade 
+		det = frappe.db.sql("""select employee_name, branch, designation, department, grade 
 			from `tabEmployee` where name = %s""", self.doc.employee)
 		if det:
 			ret = {
@@ -33,7 +33,7 @@
 		return ret
 
 	def get_ss_values(self,employee):
-		basic_info = frappe.conn.sql("""select bank_name, bank_ac_no, esic_card_no, pf_number 
+		basic_info = frappe.db.sql("""select bank_name, bank_ac_no, esic_card_no, pf_number 
 			from `tabEmployee` where name =%s""", employee)
 		ret = {'bank_name': basic_info and basic_info[0][0] or '',
 			'bank_ac_no': basic_info and basic_info[0][1] or '',
@@ -42,7 +42,7 @@
 		return ret
 
 	def make_table(self, doct_name, tab_fname, tab_name):
-		list1 = frappe.conn.sql("select name from `tab%s` where docstatus != 2" % doct_name)
+		list1 = frappe.db.sql("select name from `tab%s` where docstatus != 2" % doct_name)
 		for li in list1:
 			child = addchild(self.doc, tab_fname, tab_name, self.doclist)
 			if(tab_fname == 'earning_details'):
@@ -57,7 +57,7 @@
 		self.make_table('Deduction Type','deduction_details', 'Salary Structure Deduction')
 
 	def check_existing(self):
-		ret = frappe.conn.sql("""select name from `tabSalary Structure` where is_active = 'Yes' 
+		ret = frappe.db.sql("""select name from `tabSalary Structure` where is_active = 'Yes' 
 			and employee = %s and name!=%s""", (self.doc.employee,self.doc.name))
 		if ret and self.doc.is_active=='Yes':
 			msgprint(_("""Another Salary Structure '%s' is active for employee '%s'. Please make its status 'Inactive' to proceed.""") % 
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.py b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
index 4ac0f14..3da1078 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.py
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
@@ -79,12 +79,12 @@
 	return dates
 	
 def get_active_employees():
-	employees = frappe.conn.sql("""select name, employee_name, company 
+	employees = frappe.db.sql("""select name, employee_name, company 
 		from tabEmployee where docstatus < 2 and status = 'Active'""", as_dict=1)
 	return employees
 	
 def get_existing_attendance_records(args):
-	attendance = frappe.conn.sql("""select name, att_date, employee, status, naming_series 
+	attendance = frappe.db.sql("""select name, att_date, employee, status, naming_series 
 		from `tabAttendance` where att_date between %s and %s and docstatus < 2""", 
 		(args["from_date"], args["to_date"]), as_dict=1)
 		
@@ -129,7 +129,7 @@
 		d = frappe._dict(zip(columns, row))
 		d["doctype"] = "Attendance"
 		if d.name:
-			d["docstatus"] = frappe.conn.get_value("Attendance", d.name, "docstatus")
+			d["docstatus"] = frappe.db.get_value("Attendance", d.name, "docstatus")
 			
 		try:
 			check_record(d, doctype_dl=doctype_dl)
@@ -141,7 +141,7 @@
 			frappe.errprint(frappe.get_traceback())
 
 	if error:
-		frappe.conn.rollback()		
+		frappe.db.rollback()		
 	else:
-		frappe.conn.commit()
+		frappe.db.commit()
 	return {"messages": ret, "error": error}
diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.py b/erpnext/hr/report/employee_birthday/employee_birthday.py
index 444ecfc..f1f4be9 100644
--- a/erpnext/hr/report/employee_birthday/employee_birthday.py
+++ b/erpnext/hr/report/employee_birthday/employee_birthday.py
@@ -22,7 +22,7 @@
 	
 def get_employees(filters):
 	conditions = get_conditions(filters)
-	return frappe.conn.sql("""select name, date_of_birth, branch, department, designation, 
+	return frappe.db.sql("""select name, date_of_birth, branch, department, designation, 
 	gender, company from tabEmployee where status = 'Active' %s""" % conditions, as_list=1)
 	
 def get_conditions(filters):
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
index 3b6243c..24ab7e7 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
@@ -12,19 +12,19 @@
 		[["Employee", "company", "=", filters.get("company")]] or None
 	employees = runreport(doctype="Employee", fields=["name", "employee_name", "department"],
 		filters=employee_filters)
-	leave_types = frappe.conn.sql_list("select name from `tabLeave Type`")
+	leave_types = frappe.db.sql_list("select name from `tabLeave Type`")
 	
 	if filters.get("fiscal_year"):
 		fiscal_years = [filters["fiscal_year"]]
 	else:
-		fiscal_years = frappe.conn.sql_list("select name from `tabFiscal Year` order by name desc")
+		fiscal_years = frappe.db.sql_list("select name from `tabFiscal Year` order by name desc")
 		
 	employee_in = '", "'.join([e.name for e in employees])
 	
-	allocations = frappe.conn.sql("""select employee, fiscal_year, leave_type, total_leaves_allocated
+	allocations = frappe.db.sql("""select employee, fiscal_year, leave_type, total_leaves_allocated
 	 	from `tabLeave Allocation` 
 		where docstatus=1 and employee in ("%s")""" % employee_in, as_dict=True)
-	applications = frappe.conn.sql("""select employee, fiscal_year, leave_type, SUM(total_leave_days) as leaves
+	applications = frappe.db.sql("""select employee, fiscal_year, leave_type, SUM(total_leave_days) as leaves
 			from `tabLeave Application` 
 			where status="Approved" and docstatus = 1 and employee in ("%s")
 			group by employee, fiscal_year, leave_type""" % employee_in, as_dict=True)
diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
index 4b651bb..ca91f15 100644
--- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
+++ b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
@@ -54,7 +54,7 @@
 	return columns
 	
 def get_attendance_list(conditions, filters):
-	attendance_list = frappe.conn.sql("""select employee, day(att_date) as day_of_month, 
+	attendance_list = frappe.db.sql("""select employee, day(att_date) as day_of_month, 
 		status from tabAttendance where docstatus = 1 %s order by employee, att_date""" % 
 		conditions, filters, as_dict=1)
 		
@@ -84,7 +84,7 @@
 	return conditions, filters
 	
 def get_employee_details():
-	employee = frappe.conn.sql("""select name, employee_name, designation, department, 
+	employee = frappe.db.sql("""select name, employee_name, designation, department, 
 		branch, company from tabEmployee where docstatus < 2 and status = 'Active'""", as_dict=1)
 	
 	emp_map = {}
diff --git a/erpnext/hr/report/monthly_salary_register/monthly_salary_register.py b/erpnext/hr/report/monthly_salary_register/monthly_salary_register.py
index ff4d700..4fc28e5 100644
--- a/erpnext/hr/report/monthly_salary_register/monthly_salary_register.py
+++ b/erpnext/hr/report/monthly_salary_register/monthly_salary_register.py
@@ -42,11 +42,11 @@
 		"Payment Days:Float:120"
 	]
 	
-	earning_types = frappe.conn.sql_list("""select distinct e_type from `tabSalary Slip Earning`
+	earning_types = frappe.db.sql_list("""select distinct e_type from `tabSalary Slip Earning`
 		where ifnull(e_modified_amount, 0) != 0 and parent in (%s)""" % 
 		(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]))
 		
-	ded_types = frappe.conn.sql_list("""select distinct d_type from `tabSalary Slip Deduction`
+	ded_types = frappe.db.sql_list("""select distinct d_type from `tabSalary Slip Deduction`
 		where ifnull(d_modified_amount, 0) != 0 and parent in (%s)""" % 
 		(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]))
 		
@@ -59,7 +59,7 @@
 	
 def get_salary_slips(filters):
 	conditions, filters = get_conditions(filters)
-	salary_slips = frappe.conn.sql("""select * from `tabSalary Slip` where docstatus = 1 %s
+	salary_slips = frappe.db.sql("""select * from `tabSalary Slip` where docstatus = 1 %s
 		order by employee, month""" % conditions, filters, as_dict=1)
 	
 	if not salary_slips:
@@ -83,7 +83,7 @@
 	return conditions, filters
 	
 def get_ss_earning_map(salary_slips):
-	ss_earnings = frappe.conn.sql("""select parent, e_type, e_modified_amount 
+	ss_earnings = frappe.db.sql("""select parent, e_type, e_modified_amount 
 		from `tabSalary Slip Earning` where parent in (%s)""" %
 		(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]), as_dict=1)
 	
@@ -95,7 +95,7 @@
 	return ss_earning_map
 
 def get_ss_ded_map(salary_slips):
-	ss_deductions = frappe.conn.sql("""select parent, d_type, d_modified_amount 
+	ss_deductions = frappe.db.sql("""select parent, d_type, d_modified_amount 
 		from `tabSalary Slip Deduction` where parent in (%s)""" %
 		(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]), as_dict=1)
 	
diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py
index 99000ea..fc9e7a2 100644
--- a/erpnext/hr/utils.py
+++ b/erpnext/hr/utils.py
@@ -7,7 +7,7 @@
 
 @frappe.whitelist()
 def get_leave_approver_list():
-	roles = [r[0] for r in frappe.conn.sql("""select distinct parent from `tabUserRole`
+	roles = [r[0] for r in frappe.db.sql("""select distinct parent from `tabUserRole`
 		where role='Leave Approver'""")]
 	if not roles:
 		frappe.msgprint(_("No Leave Approvers. Please assign 'Leave Approver' Role to atleast one user."))
@@ -17,7 +17,7 @@
 
 @frappe.whitelist()
 def get_expense_approver_list():
-	roles = [r[0] for r in frappe.conn.sql("""select distinct parent from `tabUserRole`
+	roles = [r[0] for r in frappe.db.sql("""select distinct parent from `tabUserRole`
 		where role='Expense Approver'""")]
 	if not roles:
 		frappe.msgprint("No Expense Approvers. Please assign 'Expense Approver' \
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index d151136..5d1a5d8 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -17,7 +17,7 @@
 		self.doclist = doclist
 
 	def autoname(self):
-		last_name = frappe.conn.sql("""select max(name) from `tabBOM` 
+		last_name = frappe.db.sql("""select max(name) from `tabBOM` 
 			where name like "BOM/%s/%%" """ % cstr(self.doc.item).replace('"', '\\"'))
 		if last_name:
 			idx = cint(cstr(last_name[0][0]).split('/')[-1].split('-')[0]) + 1
@@ -47,8 +47,8 @@
 		self.manage_default_bom()
 
 	def on_cancel(self):
-		frappe.conn.set(self.doc, "is_active", 0)
-		frappe.conn.set(self.doc, "is_default", 0)
+		frappe.db.set(self.doc, "is_active", 0)
+		frappe.db.set(self.doc, "is_default", 0)
 
 		# check if used in any other bom
 		self.validate_bom_links()
@@ -59,7 +59,7 @@
 		self.manage_default_bom()
 
 	def get_item_det(self, item_code):
-		item = frappe.conn.sql("""select name, is_asset_item, is_purchase_item, 
+		item = frappe.db.sql("""select name, is_asset_item, is_purchase_item, 
 			docstatus, description, is_sub_contracted_item, stock_uom, default_bom, 
 			last_purchase_rate, standard_rate, is_manufactured_item 
 			from `tabItem` where name=%s""", item_code, as_dict = 1)
@@ -120,7 +120,7 @@
 			elif self.doc.rm_cost_as_per == "Price List":
 				if not self.doc.buying_price_list:
 					frappe.throw(_("Please select Price List"))
-				rate = frappe.conn.get_value("Item Price", {"price_list": self.doc.buying_price_list, 
+				rate = frappe.db.get_value("Item Price", {"price_list": self.doc.buying_price_list, 
 					"item_code": arg["item_code"]}, "price_list_rate") or 0
 			elif self.doc.rm_cost_as_per == 'Standard Rate':
 				rate = arg['standard_rate']
@@ -143,7 +143,7 @@
 			frappe.bean(self.doclist).update_after_submit()
 
 	def get_bom_unitcost(self, bom_no):
-		bom = frappe.conn.sql("""select name, total_cost/quantity as unit_cost from `tabBOM`
+		bom = frappe.db.sql("""select name, total_cost/quantity as unit_cost from `tabBOM`
 			where is_active = 1 and name = %s""", bom_no, as_dict=1)
 		return bom and bom[0]['unit_cost'] or 0
 
@@ -155,7 +155,7 @@
 		from erpnext.stock.utils import get_incoming_rate
 		dt = self.doc.costing_date or nowdate()
 		time = self.doc.costing_date == nowdate() and now().split()[1] or '23:59'
-		warehouse = frappe.conn.sql("select warehouse from `tabBin` where item_code = %s", args['item_code'])
+		warehouse = frappe.db.sql("select warehouse from `tabBin` where item_code = %s", args['item_code'])
 		rate = []
 		for wh in warehouse:
 			r = get_incoming_rate({
@@ -177,13 +177,13 @@
 		if self.doc.is_default and self.doc.is_active:
 			from frappe.model.utils import set_default
 			set_default(self.doc, "item")
-			frappe.conn.set_value("Item", self.doc.item, "default_bom", self.doc.name)
+			frappe.db.set_value("Item", self.doc.item, "default_bom", self.doc.name)
 		
 		else:
 			if not self.doc.is_active:
-				frappe.conn.set(self.doc, "is_default", 0)
+				frappe.db.set(self.doc, "is_default", 0)
 			
-			frappe.conn.sql("update `tabItem` set default_bom = null where name = %s and default_bom = %s", 
+			frappe.db.sql("update `tabItem` set default_bom = null where name = %s and default_bom = %s", 
 				 (self.doc.item, self.doc.name))
 
 	def clear_operations(self):
@@ -203,7 +203,7 @@
 			msgprint("""As Item: %s is not a manufactured / sub-contracted item, \
 				you can not make BOM for it""" % self.doc.item, raise_exception = 1)
 		else:
-			ret = frappe.conn.get_value("Item", self.doc.item, ["description", "stock_uom"])
+			ret = frappe.db.get_value("Item", self.doc.item, ["description", "stock_uom"])
 			self.doc.description = ret[0]
 			self.doc.uom = ret[1]
 
@@ -249,7 +249,7 @@
 
 	def validate_bom_no(self, item, bom_no, idx):
 		"""Validate BOM No of sub-contracted items"""
-		bom = frappe.conn.sql("""select name from `tabBOM` where name = %s and item = %s 
+		bom = frappe.db.sql("""select name from `tabBOM` where name = %s and item = %s 
 			and is_active=1 and docstatus=1""", 
 			(bom_no, item), as_dict =1)
 		if not bom:
@@ -271,7 +271,7 @@
 		for d in check_list:
 			bom_list, count = [self.doc.name], 0
 			while (len(bom_list) > count ):
-				boms = frappe.conn.sql(" select %s from `tabBOM Item` where %s = '%s' " % 
+				boms = frappe.db.sql(" select %s from `tabBOM Item` where %s = '%s' " % 
 					(d[0], d[1], cstr(bom_list[count])))
 				count = count + 1
 				for b in boms:
@@ -291,7 +291,7 @@
 			
 	def traverse_tree(self, bom_list=[]):
 		def _get_children(bom_no):
-			return [cstr(d[0]) for d in frappe.conn.sql("""select bom_no from `tabBOM Item` 
+			return [cstr(d[0]) for d in frappe.db.sql("""select bom_no from `tabBOM Item` 
 				where parent = %s and ifnull(bom_no, '') != ''""", bom_no)]
 				
 		count = 0
@@ -317,7 +317,7 @@
 		total_op_cost = 0
 		for d in getlist(self.doclist, 'bom_operations'):
 			if d.workstation and not d.hour_rate:
-				d.hour_rate = frappe.conn.get_value("Workstation", d.workstation, "hour_rate")
+				d.hour_rate = frappe.db.get_value("Workstation", d.workstation, "hour_rate")
 			if d.hour_rate and d.time_in_mins:
 				d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0
 			total_op_cost += flt(d.operating_cost)
@@ -364,7 +364,7 @@
 	def get_child_exploded_items(self, bom_no, qty):
 		""" Add all items from Flat BOM of child BOM"""
 		
-		child_fb_items = frappe.conn.sql("""select item_code, description, stock_uom, qty, rate, 
+		child_fb_items = frappe.db.sql("""select item_code, description, stock_uom, qty, rate, 
 			qty_consumed_per_unit from `tabBOM Explosion Item` 
 			where parent = %s and docstatus = 1""", bom_no, as_dict = 1)
 			
@@ -390,12 +390,12 @@
 			ch.save(1)
 
 	def get_parent_bom_list(self, bom_no):
-		p_bom = frappe.conn.sql("select parent from `tabBOM Item` where bom_no = '%s'" % bom_no)
+		p_bom = frappe.db.sql("select parent from `tabBOM Item` where bom_no = '%s'" % bom_no)
 		return p_bom and [i[0] for i in p_bom] or []
 
 	def validate_bom_links(self):
 		if not self.doc.is_active:
-			act_pbom = frappe.conn.sql("""select distinct bom_item.parent from `tabBOM Item` bom_item
+			act_pbom = frappe.db.sql("""select distinct bom_item.parent from `tabBOM Item` bom_item
 				where bom_item.bom_no = %s and bom_item.docstatus = 1
 				and exists (select * from `tabBOM` where name = bom_item.parent
 					and docstatus = 1 and is_active = 1)""", self.doc.name)
@@ -427,7 +427,7 @@
 				group by item_code, stock_uom"""
 	
 	if fetch_exploded:
-		items = frappe.conn.sql(query % {
+		items = frappe.db.sql(query % {
 			"qty": qty,
 			"table": "BOM Explosion Item",
 			"bom": bom,
@@ -435,7 +435,7 @@
 					and ifnull(item.is_sub_contracted_item, 'No') = 'No' """
 		}, as_dict=True)
 	else:
-		items = frappe.conn.sql(query % {
+		items = frappe.db.sql(query % {
 			"qty": qty,
 			"table": "BOM Item",
 			"bom": bom,
diff --git a/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py b/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
index 39e4623..598d822 100644
--- a/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
+++ b/erpnext/manufacturing/doctype/bom_replace_tool/bom_replace_tool.py
@@ -28,14 +28,14 @@
 			msgprint("Current BOM and New BOM can not be same", raise_exception=1)
 	
 	def update_new_bom(self):
-		current_bom_unitcost = frappe.conn.sql("""select total_cost/quantity 
+		current_bom_unitcost = frappe.db.sql("""select total_cost/quantity 
 			from `tabBOM` where name = %s""", self.doc.current_bom)
 		current_bom_unitcost = current_bom_unitcost and flt(current_bom_unitcost[0][0]) or 0
-		frappe.conn.sql("""update `tabBOM Item` set bom_no=%s, 
+		frappe.db.sql("""update `tabBOM Item` set bom_no=%s, 
 			rate=%s, amount=qty*%s where bom_no = %s and docstatus < 2""", 
 			(self.doc.new_bom, current_bom_unitcost, current_bom_unitcost, self.doc.current_bom))
 				
 	def get_parent_boms(self):
-		return [d[0] for d in frappe.conn.sql("""select distinct parent 
+		return [d[0] for d in frappe.db.sql("""select distinct parent 
 			from `tabBOM Item` where ifnull(bom_no, '') = %s and docstatus < 2""",
 			self.doc.new_bom)]
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index 75289a0..abc6cfd 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -32,7 +32,7 @@
 		
 	def validate_bom_no(self):
 		if self.doc.bom_no:
-			bom = frappe.conn.sql("""select name from `tabBOM` where name=%s and docstatus=1 
+			bom = frappe.db.sql("""select name from `tabBOM` where name=%s and docstatus=1 
 				and is_active=1 and item=%s"""
 				, (self.doc.bom_no, self.doc.production_item), as_dict =1)
 			if not bom:
@@ -42,7 +42,7 @@
 					
 	def validate_sales_order(self):
 		if self.doc.sales_order:
-			so = frappe.conn.sql("""select name, delivery_date from `tabSales Order` 
+			so = frappe.db.sql("""select name, delivery_date from `tabSales Order` 
 				where name=%s and docstatus = 1""", self.doc.sales_order, as_dict=1)[0]
 
 			if not so.name:
@@ -61,18 +61,18 @@
 	
 	def validate_production_order_against_so(self):
 		# already ordered qty
-		ordered_qty_against_so = frappe.conn.sql("""select sum(qty) from `tabProduction Order`
+		ordered_qty_against_so = frappe.db.sql("""select sum(qty) from `tabProduction Order`
 			where production_item = %s and sales_order = %s and docstatus < 2 and name != %s""", 
 			(self.doc.production_item, self.doc.sales_order, self.doc.name))[0][0]
 
 		total_qty = flt(ordered_qty_against_so) + flt(self.doc.qty)
 		
 		# get qty from Sales Order Item table
-		so_item_qty = frappe.conn.sql("""select sum(qty) from `tabSales Order Item` 
+		so_item_qty = frappe.db.sql("""select sum(qty) from `tabSales Order Item` 
 			where parent = %s and item_code = %s""", 
 			(self.doc.sales_order, self.doc.production_item))[0][0]
 		# get qty from Packing Item table
-		dnpi_qty = frappe.conn.sql("""select sum(qty) from `tabPacked Item` 
+		dnpi_qty = frappe.db.sql("""select sum(qty) from `tabPacked Item` 
 			where parent = %s and parenttype = 'Sales Order' and item_code = %s""", 
 			(self.doc.sales_order, self.doc.production_item))[0][0]
 		# total qty in SO
@@ -95,32 +95,32 @@
 
 	def update_status(self, status):
 		if status == 'Stopped':
-			frappe.conn.set(self.doc, 'status', cstr(status))
+			frappe.db.set(self.doc, 'status', cstr(status))
 		else:
 			if flt(self.doc.qty) == flt(self.doc.produced_qty):
-				frappe.conn.set(self.doc, 'status', 'Completed')
+				frappe.db.set(self.doc, 'status', 'Completed')
 			if flt(self.doc.qty) > flt(self.doc.produced_qty):
-				frappe.conn.set(self.doc, 'status', 'In Process')
+				frappe.db.set(self.doc, 'status', 'In Process')
 			if flt(self.doc.produced_qty) == 0:
-				frappe.conn.set(self.doc, 'status', 'Submitted')
+				frappe.db.set(self.doc, 'status', 'Submitted')
 
 
 	def on_submit(self):
 		if not self.doc.wip_warehouse:
 			frappe.throw(_("WIP Warehouse required before Submit"))
-		frappe.conn.set(self.doc,'status', 'Submitted')
+		frappe.db.set(self.doc,'status', 'Submitted')
 		self.update_planned_qty(self.doc.qty)
 		
 
 	def on_cancel(self):
 		# Check whether any stock entry exists against this Production Order
-		stock_entry = frappe.conn.sql("""select name from `tabStock Entry` 
+		stock_entry = frappe.db.sql("""select name from `tabStock Entry` 
 			where production_order = %s and docstatus = 1""", self.doc.name)
 		if stock_entry:
 			frappe.throw("""Submitted Stock Entry %s exists against this production order. 
 				Hence can not be cancelled.""" % stock_entry[0][0])
 
-		frappe.conn.set(self.doc,'status', 'Cancelled')
+		frappe.db.set(self.doc,'status', 'Cancelled')
 		self.update_planned_qty(-self.doc.qty)
 
 	def update_planned_qty(self, qty):
@@ -136,7 +136,7 @@
 
 @frappe.whitelist()	
 def get_item_details(item):
-	res = frappe.conn.sql("""select stock_uom, description
+	res = frappe.db.sql("""select stock_uom, description
 		from `tabItem` where (ifnull(end_of_life, "")="" or end_of_life > now())
 		and name=%s""", item, as_dict=1)
 	
@@ -144,7 +144,7 @@
 		return {}
 		
 	res = res[0]
-	bom = frappe.conn.sql("""select name from `tabBOM` where item=%s 
+	bom = frappe.db.sql("""select name from `tabBOM` where item=%s 
 		and ifnull(is_default, 0)=1""", item)
 	if bom:
 		res.bom_no = bom[0][0]
diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.py b/erpnext/manufacturing/doctype/production_order/test_production_order.py
index 0733959..928abae 100644
--- a/erpnext/manufacturing/doctype/production_order/test_production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/test_production_order.py
@@ -13,9 +13,9 @@
 class TestProductionOrder(unittest.TestCase):
 	def test_planned_qty(self):
 		set_perpetual_inventory(0)
-		frappe.conn.sql("delete from `tabStock Ledger Entry`")
-		frappe.conn.sql("""delete from `tabBin`""")
-		frappe.conn.sql("""delete from `tabGL Entry`""")
+		frappe.db.sql("delete from `tabStock Ledger Entry`")
+		frappe.db.sql("""delete from `tabBin`""")
+		frappe.db.sql("""delete from `tabGL Entry`""")
 		
 		pro_bean = frappe.bean(copy = test_records[0])
 		pro_bean.insert()
@@ -40,9 +40,9 @@
 		stock_entry.run_method("get_items")
 		stock_entry.submit()
 		
-		self.assertEqual(frappe.conn.get_value("Production Order", pro_bean.doc.name, 
+		self.assertEqual(frappe.db.get_value("Production Order", pro_bean.doc.name, 
 			"produced_qty"), 4)
-		self.assertEqual(frappe.conn.get_value("Bin", {"item_code": "_Test FG Item", 
+		self.assertEqual(frappe.db.get_value("Bin", {"item_code": "_Test FG Item", 
 			"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty"), 6)
 			
 		return pro_bean.doc.name
diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index 5cef523..60007cd 100644
--- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -17,7 +17,7 @@
 
 	def get_so_details(self, so):
 		"""Pull other details from so"""
-		so = frappe.conn.sql("""select transaction_date, customer, grand_total 
+		so = frappe.db.sql("""select transaction_date, customer, grand_total 
 			from `tabSales Order` where name = %s""", so, as_dict = 1)
 		ret = {
 			'sales_order_date': so and so[0]['transaction_date'] or '',
@@ -29,7 +29,7 @@
 	def get_item_details(self, item_code):
 		""" Pull other item details from item master"""
 
-		item = frappe.conn.sql("""select description, stock_uom, default_bom 
+		item = frappe.db.sql("""select description, stock_uom, default_bom 
 			from `tabItem` where name = %s""", item_code, as_dict =1)
 		ret = {
 			'description'	: item and item[0]['description'],
@@ -61,7 +61,7 @@
 		if self.doc.fg_item:
 			item_filter += ' and item.name = "' + self.doc.fg_item + '"'
 		
-		open_so = frappe.conn.sql("""
+		open_so = frappe.db.sql("""
 			select distinct so.name, so.transaction_date, so.customer, so.grand_total
 			from `tabSales Order` so, `tabSales Order Item` so_item
 			where so_item.parent = so.name
@@ -108,7 +108,7 @@
 			msgprint(_("Please enter sales order in the above table"))
 			return []
 			
-		items = frappe.conn.sql("""select distinct parent, item_code, warehouse,
+		items = frappe.db.sql("""select distinct parent, item_code, warehouse,
 			(qty - ifnull(delivered_qty, 0)) as pending_qty
 			from `tabSales Order Item` so_item
 			where parent in (%s) and docstatus = 1 and ifnull(qty, 0) > ifnull(delivered_qty, 0)
@@ -117,7 +117,7 @@
 					or ifnull(item.is_sub_contracted_item, 'No') = 'Yes'))""" % \
 			(", ".join(["%s"] * len(so_list))), tuple(so_list), as_dict=1)
 		
-		packed_items = frappe.conn.sql("""select distinct pi.parent, pi.item_code, pi.warehouse as reserved_warhouse,
+		packed_items = frappe.db.sql("""select distinct pi.parent, pi.item_code, pi.warehouse as reserved_warhouse,
 			(((so_item.qty - ifnull(so_item.delivered_qty, 0)) * pi.qty) / so_item.qty) 
 				as pending_qty
 			from `tabSales Order Item` so_item, `tabPacked Item` pi
@@ -136,7 +136,7 @@
 		self.clear_item_table()
 
 		for p in items:
-			item_details = frappe.conn.sql("""select description, stock_uom, default_bom 
+			item_details = frappe.db.sql("""select description, stock_uom, default_bom 
 				from tabItem where name=%s""", p['item_code'])
 			pi = addchild(self.doc, 'pp_details', 'Production Plan Item', self.doclist)
 			pi.sales_order				= p['parent']
@@ -162,7 +162,7 @@
 			frappe.throw("Please enter bom no for item: %s at row no: %s" % 
 				(d.item_code, d.idx))
 		else:
-			bom = frappe.conn.sql("""select name from `tabBOM` where name = %s and item = %s 
+			bom = frappe.db.sql("""select name from `tabBOM` where name = %s and item = %s 
 				and docstatus = 1 and is_active = 1""", 
 				(d.bom_no, d.item_code), as_dict = 1)
 			if not bom:
@@ -249,7 +249,7 @@
 			bom_wise_item_details = {}
 			if self.doc.use_multi_level_bom:
 				# get all raw materials with sub assembly childs					
-				for d in frappe.conn.sql("""select fb.item_code, 
+				for d in frappe.db.sql("""select fb.item_code, 
 					ifnull(sum(fb.qty_consumed_per_unit), 0) as qty, 
 					fb.description, fb.stock_uom, it.min_order_qty 
 					from `tabBOM Explosion Item` fb,`tabItem` it 
@@ -261,7 +261,7 @@
 			else:
 				# Get all raw materials considering SA items as raw materials, 
 				# so no childs of SA items
-				for d in frappe.conn.sql("""select bom_item.item_code, 
+				for d in frappe.db.sql("""select bom_item.item_code, 
 					ifnull(sum(bom_item.qty_consumed_per_unit), 0) as qty, 
 					bom_item.description, bom_item.stock_uom, item.min_order_qty 
 					from `tabBOM Item` bom_item, tabItem item 
@@ -288,7 +288,7 @@
 			total_qty = sum([flt(d[0]) for d in self.item_dict[item]])
 			for item_details in self.item_dict[item]:
 				item_list.append([item, item_details[1], item_details[2], item_details[0]])
-				item_qty = frappe.conn.sql("""select warehouse, indented_qty, ordered_qty, actual_qty 
+				item_qty = frappe.db.sql("""select warehouse, indented_qty, ordered_qty, actual_qty 
 					from `tabBin` where item_code = %s""", item, as_dict=1)
 				i_qty, o_qty, a_qty = 0, 0, 0
 				for w in item_qty:
@@ -353,7 +353,7 @@
 			
 	def get_projected_qty(self):
 		items = self.item_dict.keys()
-		item_projected_qty = frappe.conn.sql("""select item_code, sum(projected_qty) 
+		item_projected_qty = frappe.db.sql("""select item_code, sum(projected_qty) 
 			from `tabBin` where item_code in (%s) group by item_code""" % 
 			(", ".join(["%s"]*len(items)),), tuple(items))
 
diff --git a/erpnext/manufacturing/doctype/workstation/workstation.py b/erpnext/manufacturing/doctype/workstation/workstation.py
index db4cd98..3dd2fc9 100644
--- a/erpnext/manufacturing/doctype/workstation/workstation.py
+++ b/erpnext/manufacturing/doctype/workstation/workstation.py
@@ -17,11 +17,11 @@
     self.doclist = doclist
 
   def update_bom_operation(self):
-      bom_list = frappe.conn.sql(" select DISTINCT parent from `tabBOM Operation` where workstation = '%s'" % self.doc.name)
+      bom_list = frappe.db.sql(" select DISTINCT parent from `tabBOM Operation` where workstation = '%s'" % self.doc.name)
       for bom_no in bom_list:
-        frappe.conn.sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no[0], self.doc.name))
+        frappe.db.sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no[0], self.doc.name))
   
   def on_update(self):
-    frappe.conn.set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent))
-    frappe.conn.set(self.doc, 'hour_rate', flt(self.doc.hour_rate_labour) + flt(self.doc.overhead))
+    frappe.db.set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent))
+    frappe.db.set(self.doc, 'hour_rate', flt(self.doc.hour_rate_labour) + flt(self.doc.overhead))
     self.update_bom_operation()
\ No newline at end of file
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 175cd7d..a6efd5a 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -18,6 +18,6 @@
 erpnext.patches.4_0.map_charge_to_taxes_and_charges
 execute:frappe.reload_doc('support', 'doctype', 'newsletter') # 2014-01-31
 execute:frappe.reload_doc('hr', 'doctype', 'employee') # 2014-02-03
-execute:frappe.conn.sql("update tabPage set module='Core' where name='Setup'")
+execute:frappe.db.sql("update tabPage set module='Core' where name='Setup'")
 erpnext.patches.4_0.fields_to_be_renamed
 erpnext.patches.4_0.rename_sitemap_to_route
diff --git a/erpnext/patches/4_0/fields_to_be_renamed.py b/erpnext/patches/4_0/fields_to_be_renamed.py
index 105aa15..0c0a235 100644
--- a/erpnext/patches/4_0/fields_to_be_renamed.py
+++ b/erpnext/patches/4_0/fields_to_be_renamed.py
@@ -112,7 +112,7 @@
 		frappe.reload_doc(get_module(dn),	"doctype", dn.lower().replace(" ", "_"))
 	
 	# reload all standard print formats
-	for pf in frappe.conn.sql("""select name, module from `tabPrint Format` 
+	for pf in frappe.db.sql("""select name, module from `tabPrint Format` 
 			where ifnull(standard, 'No') = 'Yes'""", as_dict=1):
 		try:
 			frappe.reload_doc(pf.module, "Print Format", pf.name)
@@ -121,10 +121,10 @@
 			pass
 		
 	# reload all standard reports
-	for r in frappe.conn.sql("""select name, ref_doctype from `tabReport` 
+	for r in frappe.db.sql("""select name, ref_doctype from `tabReport` 
 		where ifnull(is_standard, 'No') = 'Yes'
 		and report_type in ('Report Builder', 'Query Report')""", as_dict=1):
 			frappe.reload_doc(get_module(r.ref_doctype), "Report", r.name)
 			
 def get_module(dn):
-	return frappe.conn.get_value("DocType", dn, "module").lower().replace(" ", "_")
\ No newline at end of file
+	return frappe.db.get_value("DocType", dn, "module").lower().replace(" ", "_")
\ No newline at end of file
diff --git a/erpnext/patches/4_0/map_charge_to_taxes_and_charges.py b/erpnext/patches/4_0/map_charge_to_taxes_and_charges.py
index b0cf61b..a814245 100644
--- a/erpnext/patches/4_0/map_charge_to_taxes_and_charges.py
+++ b/erpnext/patches/4_0/map_charge_to_taxes_and_charges.py
@@ -7,10 +7,10 @@
 def execute():
 	# udpate sales cycle
 	for d in ['Sales Invoice', 'Sales Order', 'Quotation', 'Delivery Note']:
-		frappe.conn.sql("""update `tab%s` set taxes_and_charges=charge""" % d)
+		frappe.db.sql("""update `tab%s` set taxes_and_charges=charge""" % d)
 
 	# udpate purchase cycle
 	for d in ['Purchase Invoice', 'Purchase Order', 'Supplier Quotation', 'Purchase Receipt']:
-		frappe.conn.sql("""update `tab%s` set taxes_and_charges=purchase_other_charges""" % d)
+		frappe.db.sql("""update `tab%s` set taxes_and_charges=purchase_other_charges""" % d)
 	
-	frappe.conn.sql("""update `tabPurchase Taxes and Charges` set parentfield='other_charges'""")
+	frappe.db.sql("""update `tabPurchase Taxes and Charges` set parentfield='other_charges'""")
diff --git a/erpnext/patches/4_0/move_warehouse_user_to_restrictions.py b/erpnext/patches/4_0/move_warehouse_user_to_restrictions.py
index 6125cdd..d199a42 100644
--- a/erpnext/patches/4_0/move_warehouse_user_to_restrictions.py
+++ b/erpnext/patches/4_0/move_warehouse_user_to_restrictions.py
@@ -6,7 +6,7 @@
 
 def execute():
 	from frappe.core.page.user_properties import user_properties
-	for warehouse, profile in frappe.conn.sql("""select parent, user from `tabWarehouse User`"""):
+	for warehouse, profile in frappe.db.sql("""select parent, user from `tabWarehouse User`"""):
 		user_properties.add(profile, "Warehouse", warehouse)
 	
 	frappe.delete_doc("DocType", "Warehouse User")
diff --git a/erpnext/patches/4_0/new_permissions.py b/erpnext/patches/4_0/new_permissions.py
index 14f9f15..2b87437 100644
--- a/erpnext/patches/4_0/new_permissions.py
+++ b/erpnext/patches/4_0/new_permissions.py
@@ -11,14 +11,14 @@
 	reset("Report")
 	
 	# patch to move print, email into DocPerm
-	for doctype, hide_print, hide_email in frappe.conn.sql("""select name, ifnull(allow_print, 0), ifnull(allow_email, 0)
+	for doctype, hide_print, hide_email in frappe.db.sql("""select name, ifnull(allow_print, 0), ifnull(allow_email, 0)
 		from `tabDocType` where ifnull(issingle, 0)=0 and ifnull(istable, 0)=0 and
 		(ifnull(allow_print, 0)=0 or ifnull(allow_email, 0)=0)"""):
 		
 		if not hide_print:
-			frappe.conn.sql("""update `tabDocPerm` set `print`=1
+			frappe.db.sql("""update `tabDocPerm` set `print`=1
 				where permlevel=0 and `read`=1 and parent=%s""", doctype)
 		
 		if not hide_email:
-			frappe.conn.sql("""update `tabDocPerm` set `email`=1
+			frappe.db.sql("""update `tabDocPerm` set `email`=1
 				where permlevel=0 and `read`=1 and parent=%s""", doctype)
diff --git a/erpnext/patches/4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py b/erpnext/patches/4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
index cd5d954..11f0090 100644
--- a/erpnext/patches/4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
+++ b/erpnext/patches/4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
@@ -8,5 +8,5 @@
 	frappe.reload_doc("support", "doctype", "maintenance_schedule_detail")
 	frappe.reload_doc("support", "doctype", "maintenance_schedule_item")
 	
-	frappe.conn.sql("""update `tabMaintenance Schedule Detail` set sales_person=incharge_name""")
-	frappe.conn.sql("""update `tabMaintenance Schedule Item` set sales_person=incharge_name""")
\ No newline at end of file
+	frappe.db.sql("""update `tabMaintenance Schedule Detail` set sales_person=incharge_name""")
+	frappe.db.sql("""update `tabMaintenance Schedule Item` set sales_person=incharge_name""")
\ No newline at end of file
diff --git a/erpnext/patches/4_0/update_user_properties.py b/erpnext/patches/4_0/update_user_properties.py
index cb71bf1..c07713e 100644
--- a/erpnext/patches/4_0/update_user_properties.py
+++ b/erpnext/patches/4_0/update_user_properties.py
@@ -20,13 +20,13 @@
 def update_user_properties():
 	frappe.reload_doc("core", "doctype", "docfield")
 	
-	for d in frappe.conn.sql("""select parent, defkey, defvalue from tabDefaultValue
+	for d in frappe.db.sql("""select parent, defkey, defvalue from tabDefaultValue
 		where parent not in ('__global', 'Control Panel')""", as_dict=True):
-		df = frappe.conn.sql("""select options from tabDocField
+		df = frappe.db.sql("""select options from tabDocField
 			where fieldname=%s and fieldtype='Link'""", d.defkey, as_dict=True)
 		
 		if df:
-			frappe.conn.sql("""update tabDefaultValue
+			frappe.db.sql("""update tabDefaultValue
 				set defkey=%s, parenttype='Restriction'
 				where defkey=%s and
 				parent not in ('__global', 'Control Panel')""", (df[0].options, d.defkey))
@@ -34,7 +34,7 @@
 def update_user_match():
 	import frappe.defaults
 	doctype_matches = {}
-	for doctype, match in frappe.conn.sql("""select parent, `match` from `tabDocPerm`
+	for doctype, match in frappe.db.sql("""select parent, `match` from `tabDocPerm`
 		where `match` like %s and ifnull(`match`, '')!="leave_approver:user" """, "%:user"):
 		doctype_matches.setdefault(doctype, []).append(match)
 	
@@ -42,7 +42,7 @@
 		meta = frappe.get_doctype(doctype)
 		
 		# for each user with roles of this doctype, check if match condition applies
-		for profile in frappe.conn.sql_list("""select name from `tabProfile`
+		for profile in frappe.db.sql_list("""select name from `tabProfile`
 			where enabled=1 and user_type='System User'"""):
 			
 			user_roles = frappe.get_roles(profile)
@@ -68,7 +68,7 @@
 			# if match condition applies, restrict that user
 			# add that doc's restriction to that user
 			for match in user_matches:
-				for name in frappe.conn.sql_list("""select name from `tab{doctype}`
+				for name in frappe.db.sql_list("""select name from `tab{doctype}`
 					where `{field}`=%s""".format(doctype=doctype, field=match.split(":")[0]), profile):
 					
 					frappe.defaults.add_default(doctype, name, profile, "Restriction")
@@ -77,12 +77,12 @@
 	from frappe.core.page.user_properties import user_properties
 	
 	# add restrict rights to HR User and HR Manager
-	frappe.conn.sql("""update `tabDocPerm` set `restrict`=1 where parent in ('Employee', 'Leave Application')
+	frappe.db.sql("""update `tabDocPerm` set `restrict`=1 where parent in ('Employee', 'Leave Application')
 		and role in ('HR User', 'HR Manager') and permlevel=0 and `read`=1""")
 	frappe.model.doctype.clear_cache()
 	
 	# add Employee restrictions (in on_update method)
-	for employee in frappe.conn.sql_list("""select name from `tabEmployee`
+	for employee in frappe.db.sql_list("""select name from `tabEmployee`
 		where exists(select leave_approver from `tabEmployee Leave Approver`
 			where `tabEmployee Leave Approver`.parent=`tabEmployee`.name)
 		or ifnull(`reports_to`, '')!=''"""):
@@ -91,16 +91,16 @@
 
 def update_permissions():
 	# clear match conditions other than owner
-	frappe.conn.sql("""update tabDocPerm set `match`=''
+	frappe.db.sql("""update tabDocPerm set `match`=''
 		where ifnull(`match`,'') not in ('', 'owner')""")
 
 def remove_duplicate_restrictions():
 	# remove duplicate restrictions (if they exist)
-	for d in frappe.conn.sql("""select parent, defkey, defvalue,
+	for d in frappe.db.sql("""select parent, defkey, defvalue,
 		count(*) as cnt from tabDefaultValue
 		where parent not in ('__global', 'Control Panel')
 		group by parent, defkey, defvalue""", as_dict=1):
 		if d.cnt > 1:
 			# order by parenttype so that restriction does not get removed!
-			frappe.conn.sql("""delete from tabDefaultValue where parent=%s, defkey=%s,
+			frappe.db.sql("""delete from tabDefaultValue where parent=%s, defkey=%s,
 				defvalue=%s order by parenttype limit %s""", (d.parent, d.defkey, d.defvalue, d.cnt-1))
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 13d98e9..deac722 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -32,12 +32,12 @@
 		self.add_calendar_event()
 		
 	def update_percent_complete(self):
-		total = frappe.conn.sql("""select count(*) from tabTask where project=%s""", 
+		total = frappe.db.sql("""select count(*) from tabTask where project=%s""", 
 			self.doc.name)[0][0]
 		if total:
-			completed = frappe.conn.sql("""select count(*) from tabTask where
+			completed = frappe.db.sql("""select count(*) from tabTask where
 				project=%s and status in ('Closed', 'Cancelled')""", self.doc.name)[0][0]
-			frappe.conn.set_value("Project", self.doc.name, "percent_complete",
+			frappe.db.set_value("Project", self.doc.name, "percent_complete",
 			 	int(float(completed) / total * 100))
 
 	def add_calendar_event(self):
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index d423d16..6f0ff92 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -21,7 +21,7 @@
 		}
 		
 	def get_customer_details(self):
-		cust = frappe.conn.sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer)
+		cust = frappe.db.sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer)
 		if cust:
 			ret = {'customer_name': cust and cust[0][0] or ''}
 			return ret
@@ -38,7 +38,7 @@
 		self.update_status()
 
 	def update_status(self):
-		status = frappe.conn.get_value("Task", self.doc.name, "status")
+		status = frappe.db.get_value("Task", self.doc.name, "status")
 		if self.doc.status=="Working" and status !="Working" and not self.doc.act_start_date:
 			self.doc.act_start_date = today()
 			
@@ -66,7 +66,7 @@
 			if filters[key]:
 				conditions += " and " + key + ' = "' + filters[key].replace('"', '\"') + '"'
 	
-	data = frappe.conn.sql("""select name, exp_start_date, exp_end_date, 
+	data = frappe.db.sql("""select name, exp_start_date, exp_end_date, 
 		subject, status, project from `tabTask`
 		where ((exp_start_date between '%(start)s' and '%(end)s') \
 			or (exp_end_date between '%(start)s' and '%(end)s'))
@@ -80,7 +80,7 @@
 
 def get_project(doctype, txt, searchfield, start, page_len, filters):
 	from erpnext.controllers.queries import get_match_cond
-	return frappe.conn.sql(""" select name from `tabProject`
+	return frappe.db.sql(""" select name from `tabProject`
 			where %(key)s like "%(txt)s"
 				%(mcond)s
 			order by name 
diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py
index 6f385ef..690eb92 100644
--- a/erpnext/projects/doctype/time_log/time_log.py
+++ b/erpnext/projects/doctype/time_log/time_log.py
@@ -38,7 +38,7 @@
 			self.doc.status="Billed"
 			
 	def validate_overlap(self):		
-		existing = frappe.conn.sql_list("""select name from `tabTime Log` where owner=%s and
+		existing = frappe.db.sql_list("""select name from `tabTime Log` where owner=%s and
 			(
 				(from_time between %s and %s) or 
 				(to_time between %s and %s) or 
@@ -67,7 +67,7 @@
 		frappe.msgprint(_("No Permission"), raise_exception=1)
 
 	match = build_match_conditions("Time Log")
-	data = frappe.conn.sql("""select name, from_time, to_time, 
+	data = frappe.db.sql("""select name, from_time, to_time, 
 		activity_type, task, project from `tabTime Log`
 		where from_time between '%(start)s' and '%(end)s' or to_time between '%(start)s' and '%(end)s'
 		%(match)s""" % {
diff --git a/erpnext/projects/doctype/time_log_batch/test_time_log_batch.py b/erpnext/projects/doctype/time_log_batch/test_time_log_batch.py
index 979cffd..4771001 100644
--- a/erpnext/projects/doctype/time_log_batch/test_time_log_batch.py
+++ b/erpnext/projects/doctype/time_log_batch/test_time_log_batch.py
@@ -15,15 +15,15 @@
 		time_log.insert()
 		time_log.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Time Log", time_log.doc.name, "status"), "Submitted")
+		self.assertEquals(frappe.db.get_value("Time Log", time_log.doc.name, "status"), "Submitted")
 		tlb = frappe.bean(copy=test_records[0])
 		tlb.doclist[1].time_log = time_log.doc.name
 		tlb.insert()
 		tlb.submit()
 
-		self.assertEquals(frappe.conn.get_value("Time Log", time_log.doc.name, "status"), "Batched for Billing")
+		self.assertEquals(frappe.db.get_value("Time Log", time_log.doc.name, "status"), "Batched for Billing")
 		tlb.cancel()
-		self.assertEquals(frappe.conn.get_value("Time Log", time_log.doc.name, "status"), "Submitted")
+		self.assertEquals(frappe.db.get_value("Time Log", time_log.doc.name, "status"), "Submitted")
 
 test_records = [[
 	{
diff --git a/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py b/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py
index cab2b53..be3d6ce 100644
--- a/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py
+++ b/erpnext/projects/report/daily_time_log_summary/daily_time_log_summary.py
@@ -19,7 +19,7 @@
 	task_map = get_task_map()
 		
 	conditions = build_conditions(filters)
-	time_logs = frappe.conn.sql("""select * from `tabTime Log` 
+	time_logs = frappe.db.sql("""select * from `tabTime Log` 
 		where docstatus < 2 %s order by owner asc""" % (conditions, ), filters, as_dict=1)
 
 	if time_logs:
@@ -49,7 +49,7 @@
 	return columns, data
 	
 def get_profile_map():
-	profiles = frappe.conn.sql("""select name, 
+	profiles = frappe.db.sql("""select name, 
 		concat(first_name, if(last_name, (' ' + last_name), '')) as fullname 
 		from tabProfile""", as_dict=1)
 	profile_map = {}
@@ -59,7 +59,7 @@
 	return profile_map
 	
 def get_task_map():
-	tasks = frappe.conn.sql("""select name, subject from tabTask""", as_dict=1)
+	tasks = frappe.db.sql("""select name, subject from tabTask""", as_dict=1)
 	task_map = {}
 	for t in tasks:
 		task_map.setdefault(t.name, []).append(t.subject)
diff --git a/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py b/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py
index 2cd4d4d..daed4ab 100644
--- a/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py
+++ b/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py
@@ -28,11 +28,11 @@
 		"Project Start Date:Date:120", "Completion Date:Date:120"]
 
 def get_project_details():
-	return frappe.conn.sql(""" select name, project_name, status, company, customer, project_value,
+	return frappe.db.sql(""" select name, project_name, status, company, customer, project_value,
 		project_start_date, completion_date from tabProject where docstatus < 2""", as_dict=1)
 
 def get_purchased_items_cost():
-	pr_items = frappe.conn.sql("""select project_name, sum(base_amount) as amount
+	pr_items = frappe.db.sql("""select project_name, sum(base_amount) as amount
 		from `tabPurchase Receipt Item` where ifnull(project_name, '') != '' 
 		and docstatus = 1 group by project_name""", as_dict=1)
 
@@ -43,7 +43,7 @@
 	return pr_item_map
 
 def get_issued_items_cost():
-	se_items = frappe.conn.sql("""select se.project_name, sum(se_item.amount) as amount
+	se_items = frappe.db.sql("""select se.project_name, sum(se_item.amount) as amount
 		from `tabStock Entry` se, `tabStock Entry Detail` se_item
 		where se.name = se_item.parent and se.docstatus = 1 and ifnull(se_item.t_warehouse, '') = '' 
 		and ifnull(se.project_name, '') != '' group by se.project_name""", as_dict=1)
@@ -55,12 +55,12 @@
 	return se_item_map
 
 def get_delivered_items_cost():
-	dn_items = frappe.conn.sql("""select dn.project_name, sum(dn_item.base_amount) as amount
+	dn_items = frappe.db.sql("""select dn.project_name, sum(dn_item.base_amount) as amount
 		from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
 		where dn.name = dn_item.parent and dn.docstatus = 1 and ifnull(dn.project_name, '') != ''
 		group by dn.project_name""", as_dict=1)
 
-	si_items = frappe.conn.sql("""select si.project_name, sum(si_item.base_amount) as amount
+	si_items = frappe.db.sql("""select si.project_name, sum(si_item.base_amount) as amount
 		from `tabSales Invoice` si, `tabSales Invoice Item` si_item
 		where si.name = si_item.parent and si.docstatus = 1 and ifnull(si.update_stock, 0) = 1 
 		and ifnull(si.is_pos, 0) = 1 and ifnull(si.project_name, '') != ''
diff --git a/erpnext/projects/utils.py b/erpnext/projects/utils.py
index 12ffb00..6fee9b3 100644
--- a/erpnext/projects/utils.py
+++ b/erpnext/projects/utils.py
@@ -8,7 +8,7 @@
 
 @frappe.whitelist()
 def get_time_log_list(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.get_values("Time Log", filters, ["name", "activity_type", "owner"])
+	return frappe.db.get_values("Time Log", filters, ["name", "activity_type", "owner"])
 
 @frappe.whitelist()
 def query_task(doctype, txt, searchfield, start, page_len, filters):
@@ -19,7 +19,7 @@
 	match_conditions = build_match_conditions("Task")
 	match_conditions = ("and" + match_conditions) if match_conditions else ""
 	
-	return frappe.conn.sql("""select name, subject from `tabTask`
+	return frappe.db.sql("""select name, subject from `tabTask`
 		where (`%s` like %s or `subject` like %s) %s
 		order by
 			case when `subject` like %s then 0 else 1 end,
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index 19cad39..d8a095f 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -19,14 +19,14 @@
 	def autoname(self):
 		cust_master_name = frappe.defaults.get_global_default('cust_master_name')
 		if cust_master_name == 'Customer Name':
-			if frappe.conn.exists("Supplier", self.doc.customer_name):
+			if frappe.db.exists("Supplier", self.doc.customer_name):
 				msgprint(_("A Supplier exists with same name"), raise_exception=1)
 			self.doc.name = self.doc.customer_name
 		else:
 			self.doc.name = make_autoname(self.doc.naming_series+'.#####')
 
 	def get_company_abbr(self):
-		return frappe.conn.get_value('Company', self.doc.company, 'abbr')
+		return frappe.db.get_value('Company', self.doc.company, 'abbr')
 	
 	def validate_values(self):
 		if frappe.defaults.get_global_default('cust_master_name') == 'Naming Series' and not self.doc.naming_series:
@@ -37,28 +37,28 @@
 
 	def update_lead_status(self):
 		if self.doc.lead_name:
-			frappe.conn.sql("update `tabLead` set status='Converted' where name = %s", self.doc.lead_name)
+			frappe.db.sql("update `tabLead` set status='Converted' where name = %s", self.doc.lead_name)
 
 	def update_address(self):
-		frappe.conn.sql("""update `tabAddress` set customer_name=%s, modified=NOW() 
+		frappe.db.sql("""update `tabAddress` set customer_name=%s, modified=NOW() 
 			where customer=%s""", (self.doc.customer_name, self.doc.name))
 
 	def update_contact(self):
-		frappe.conn.sql("""update `tabContact` set customer_name=%s, modified=NOW() 
+		frappe.db.sql("""update `tabContact` set customer_name=%s, modified=NOW() 
 			where customer=%s""", (self.doc.customer_name, self.doc.name))
 
 	def update_credit_days_limit(self):
-		frappe.conn.sql("""update tabAccount set credit_days = %s, credit_limit = %s 
+		frappe.db.sql("""update tabAccount set credit_days = %s, credit_limit = %s 
 			where master_type='Customer' and master_name = %s""", 
 			(self.doc.credit_days or 0, self.doc.credit_limit or 0, self.doc.name))
 
 	def create_lead_address_contact(self):
 		if self.doc.lead_name:
-			if not frappe.conn.get_value("Address", {"lead": self.doc.lead_name, "customer": self.doc.customer}):
-				frappe.conn.sql("""update `tabAddress` set customer=%s, customer_name=%s where lead=%s""", 
+			if not frappe.db.get_value("Address", {"lead": self.doc.lead_name, "customer": self.doc.customer}):
+				frappe.db.sql("""update `tabAddress` set customer=%s, customer_name=%s where lead=%s""", 
 					(self.doc.name, self.doc.customer_name, self.doc.lead_name))
 
-			lead = frappe.conn.get_value("Lead", self.doc.lead_name, ["lead_name", "email_id", "phone", "mobile_no"], as_dict=True)
+			lead = frappe.db.get_value("Lead", self.doc.lead_name, ["lead_name", "email_id", "phone", "mobile_no"], as_dict=True)
 			c = Document('Contact') 
 			c.first_name = lead.lead_name 
 			c.email_id = lead.email_id
@@ -88,30 +88,30 @@
 		self.create_lead_address_contact()
 		
 	def validate_name_with_customer_group(self):
-		if frappe.conn.exists("Customer Group", self.doc.name):
+		if frappe.db.exists("Customer Group", self.doc.name):
 			frappe.msgprint("An Customer Group exists with same name (%s), \
 				please change the Customer name or rename the Customer Group" % 
 				self.doc.name, raise_exception=1)
 
 	def delete_customer_address(self):
-		addresses = frappe.conn.sql("""select name, lead from `tabAddress`
+		addresses = frappe.db.sql("""select name, lead from `tabAddress`
 			where customer=%s""", (self.doc.name,))
 		
 		for name, lead in addresses:
 			if lead:
-				frappe.conn.sql("""update `tabAddress` set customer=null, customer_name=null
+				frappe.db.sql("""update `tabAddress` set customer=null, customer_name=null
 					where name=%s""", name)
 			else:
-				frappe.conn.sql("""delete from `tabAddress` where name=%s""", name)
+				frappe.db.sql("""delete from `tabAddress` where name=%s""", name)
 	
 	def delete_customer_contact(self):
-		for contact in frappe.conn.sql_list("""select name from `tabContact` 
+		for contact in frappe.db.sql_list("""select name from `tabContact` 
 			where customer=%s""", self.doc.name):
 				frappe.delete_doc("Contact", contact)
 	
 	def delete_customer_account(self):
 		"""delete customer's ledger if exist and check balance before deletion"""
-		acc = frappe.conn.sql("select name from `tabAccount` where master_type = 'Customer' \
+		acc = frappe.db.sql("select name from `tabAccount` where master_type = 'Customer' \
 			and master_name = %s and docstatus < 2", self.doc.name)
 		if acc:
 			frappe.delete_doc('Account', acc[0][0])
@@ -121,7 +121,7 @@
 		self.delete_customer_contact()
 		self.delete_customer_account()
 		if self.doc.lead_name:
-			frappe.conn.sql("update `tabLead` set status='Interested' where name=%s",self.doc.lead_name)
+			frappe.db.sql("update `tabLead` set status='Interested' where name=%s",self.doc.lead_name)
 			
 	def before_rename(self, olddn, newdn, merge=False):
 		from erpnext.accounts.utils import rename_account_for
@@ -130,13 +130,13 @@
 	def after_rename(self, olddn, newdn, merge=False):
 		set_field = ''
 		if frappe.defaults.get_global_default('cust_master_name') == 'Customer Name':
-			frappe.conn.set(self.doc, "customer_name", newdn)
+			frappe.db.set(self.doc, "customer_name", newdn)
 			self.update_contact()
 			set_field = ", customer_name=%(newdn)s"
 		self.update_customer_address(newdn, set_field)
 
 	def update_customer_address(self, newdn, set_field):
-		frappe.conn.sql("""update `tabAddress` set address_title=%(newdn)s 
+		frappe.db.sql("""update `tabAddress` set address_title=%(newdn)s 
 			{set_field} where customer=%(newdn)s"""\
 			.format(set_field=set_field), ({"newdn": newdn}))
 
@@ -147,14 +147,14 @@
 	
 	out = {}
 	for doctype in ["Opportunity", "Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
-		out[doctype] = frappe.conn.get_value(doctype, 
+		out[doctype] = frappe.db.get_value(doctype, 
 			{"customer": customer, "docstatus": ["!=", 2] }, "count(*)")
 	
-	billing = frappe.conn.sql("""select sum(grand_total), sum(outstanding_amount) 
+	billing = frappe.db.sql("""select sum(grand_total), sum(outstanding_amount) 
 		from `tabSales Invoice` 
 		where customer=%s 
 			and docstatus = 1
-			and fiscal_year = %s""", (customer, frappe.conn.get_default("fiscal_year")))
+			and fiscal_year = %s""", (customer, frappe.db.get_default("fiscal_year")))
 	
 	out["total_billing"] = billing[0][0]
 	out["total_unpaid"] = billing[0][1]
@@ -163,12 +163,12 @@
 
 
 def get_customer_list(doctype, txt, searchfield, start, page_len, filters):
-	if frappe.conn.get_default("cust_master_name") == "Customer Name":
+	if frappe.db.get_default("cust_master_name") == "Customer Name":
 		fields = ["name", "customer_group", "territory"]
 	else:
 		fields = ["name", "customer_name", "customer_group", "territory"]
 		
-	return frappe.conn.sql("""select %s from `tabCustomer` where docstatus < 2 
+	return frappe.db.sql("""select %s from `tabCustomer` where docstatus < 2 
 		and (%s like %s or customer_name like %s) order by 
 		case when name like %s then 0 else 1 end,
 		case when customer_name like %s then 0 else 1 end,
diff --git a/erpnext/selling/doctype/customer/test_customer.py b/erpnext/selling/doctype/customer/test_customer.py
index b515777..b6a7116 100644
--- a/erpnext/selling/doctype/customer/test_customer.py
+++ b/erpnext/selling/doctype/customer/test_customer.py
@@ -41,8 +41,8 @@
 	def test_rename(self):
 		frappe.rename_doc("Customer", "_Test Customer 1", "_Test Customer 1 Renamed")
 
-		self.assertTrue(frappe.conn.exists("Customer", "_Test Customer 1 Renamed"))
-		self.assertFalse(frappe.conn.exists("Customer", "_Test Customer 1"))
+		self.assertTrue(frappe.db.exists("Customer", "_Test Customer 1 Renamed"))
+		self.assertFalse(frappe.db.exists("Customer", "_Test Customer 1"))
 		
 		frappe.rename_doc("Customer", "_Test Customer 1 Renamed", "_Test Customer 1")
 		
diff --git a/erpnext/selling/doctype/installation_note/installation_note.py b/erpnext/selling/doctype/installation_note/installation_note.py
index ba00672..b0a363c 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.py
+++ b/erpnext/selling/doctype/installation_note/installation_note.py
@@ -44,7 +44,7 @@
 		validate_fiscal_year(self.doc.inst_date, self.doc.fiscal_year, "Installation Date")
 	
 	def is_serial_no_added(self, item_code, serial_no):
-		ar_required = frappe.conn.get_value("Item", item_code, "has_serial_no")
+		ar_required = frappe.db.get_value("Item", item_code, "has_serial_no")
 		if ar_required == 'Yes' and not serial_no:
 			msgprint("Serial No is mandatory for item: " + item_code, raise_exception=1)
 		elif ar_required != 'Yes' and cstr(serial_no).strip():
@@ -53,12 +53,12 @@
 	
 	def is_serial_no_exist(self, item_code, serial_no):
 		for x in serial_no:
-			if not frappe.conn.exists("Serial No", x):
+			if not frappe.db.exists("Serial No", x):
 				msgprint("Serial No " + x + " does not exist in the system", raise_exception=1)
 	
 	def is_serial_no_installed(self,cur_s_no,item_code):
 		for x in cur_s_no:
-			status = frappe.conn.sql("select status from `tabSerial No` where name = %s", x)
+			status = frappe.db.sql("select status from `tabSerial No` where name = %s", x)
 			status = status and status[0][0] or ''
 			
 			if status == 'Installed':
@@ -66,7 +66,7 @@
 					raise_exception=1)
 	
 	def get_prevdoc_serial_no(self, prevdoc_detail_docname):
-		serial_nos = frappe.conn.get_value("Delivery Note Item", 
+		serial_nos = frappe.db.get_value("Delivery Note Item", 
 			prevdoc_detail_docname, "serial_no")
 		return get_valid_serial_nos(serial_nos)
 		
@@ -94,7 +94,7 @@
 	def validate_installation_date(self):
 		for d in getlist(self.doclist, 'installed_item_details'):
 			if d.prevdoc_docname:
-				d_date = frappe.conn.get_value("Delivery Note", d.prevdoc_docname, "posting_date")				
+				d_date = frappe.db.get_value("Delivery Note", d.prevdoc_docname, "posting_date")				
 				if d_date > getdate(self.doc.inst_date):
 					msgprint("Installation Date can not be before Delivery Date " + cstr(d_date) + 
 						" for item "+d.item_code, raise_exception=1)
@@ -104,26 +104,26 @@
 			msgprint("Please fetch items from Delivery Note selected", raise_exception=1)
 	
 	def on_update(self):
-		frappe.conn.set(self.doc, 'status', 'Draft')
+		frappe.db.set(self.doc, 'status', 'Draft')
 	
 	def on_submit(self):
 		valid_lst = []
 		valid_lst = self.validate_serial_no()
 		
 		for x in valid_lst:
-			if frappe.conn.get_value("Serial No", x, "warranty_period"):
-				frappe.conn.set_value("Serial No", x, "maintenance_status", "Under Warranty")
-			frappe.conn.set_value("Serial No", x, "status", "Installed")
+			if frappe.db.get_value("Serial No", x, "warranty_period"):
+				frappe.db.set_value("Serial No", x, "maintenance_status", "Under Warranty")
+			frappe.db.set_value("Serial No", x, "status", "Installed")
 
 		self.update_prevdoc_status()
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		for d in getlist(self.doclist, 'installed_item_details'):
 			if d.serial_no:
 				d.serial_no = d.serial_no.replace(",", "\n")
 				for sr_no in d.serial_no.split("\n"):
-					frappe.conn.set_value("Serial No", sr_no, "status", "Delivered")
+					frappe.db.set_value("Serial No", sr_no, "status", "Delivered")
 
 		self.update_prevdoc_status()
-		frappe.conn.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self.doc, 'status', 'Cancelled')
diff --git a/erpnext/selling/doctype/lead/get_leads.py b/erpnext/selling/doctype/lead/get_leads.py
index 4cdeaf1..169f250 100644
--- a/erpnext/selling/doctype/lead/get_leads.py
+++ b/erpnext/selling/doctype/lead/get_leads.py
@@ -9,8 +9,8 @@
 
 def add_sales_communication(subject, content, sender, real_name, mail=None, 
 	status="Open", date=None):
-	lead_name = frappe.conn.get_value("Lead", {"email_id": sender})
-	contact_name = frappe.conn.get_value("Contact", {"email_id": sender})
+	lead_name = frappe.db.get_value("Lead", {"email_id": sender})
+	contact_name = frappe.db.get_value("Contact", {"email_id": sender})
 
 	if not (lead_name or contact_name):
 		# none, create a new Lead
@@ -48,5 +48,5 @@
 			mail.from_real_name, mail=mail, date=mail.date)
 
 def get_leads():
-	if cint(frappe.conn.get_value('Sales Email Settings', None, 'extract_emails')):
+	if cint(frappe.db.get_value('Sales Email Settings', None, 'extract_emails')):
 		SalesMailbox()
\ No newline at end of file
diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index f8f4b47..614a9c2 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -16,14 +16,14 @@
 		self.doclist = doclist
 
 		self._prev = frappe._dict({
-			"contact_date": frappe.conn.get_value("Lead", self.doc.name, "contact_date") if \
+			"contact_date": frappe.db.get_value("Lead", self.doc.name, "contact_date") if \
 				(not cint(self.doc.fields.get("__islocal"))) else None,
-			"contact_by": frappe.conn.get_value("Lead", self.doc.name, "contact_by") if \
+			"contact_by": frappe.db.get_value("Lead", self.doc.name, "contact_by") if \
 				(not cint(self.doc.fields.get("__islocal"))) else None,
 		})
 
 	def onload(self):
-		customer = frappe.conn.get_value("Customer", {"lead_name": self.doc.name})
+		customer = frappe.db.get_value("Customer", {"lead_name": self.doc.name})
 		if customer:
 			self.doc.fields["__is_customer"] = customer
 	
@@ -53,7 +53,7 @@
 	def check_email_id_is_unique(self):
 		if self.doc.email_id:
 			# validate email is unique
-			email_list = frappe.conn.sql("""select name from tabLead where email_id=%s""", 
+			email_list = frappe.db.sql("""select name from tabLead where email_id=%s""", 
 				self.doc.email_id)
 			if len(email_list) > 1:
 				items = [e[0] for e in email_list if e[0]!=self.doc.name]
@@ -61,16 +61,16 @@
 					", ".join(items), raise_exception=True)
 
 	def on_trash(self):
-		frappe.conn.sql("""update `tabSupport Ticket` set lead='' where lead=%s""",
+		frappe.db.sql("""update `tabSupport Ticket` set lead='' where lead=%s""",
 			self.doc.name)
 		
 		self.delete_events()
 		
 	def has_customer(self):
-		return frappe.conn.get_value("Customer", {"lead_name": self.doc.name})
+		return frappe.db.get_value("Customer", {"lead_name": self.doc.name})
 		
 	def has_opportunity(self):
-		return frappe.conn.get_value("Opportunity", {"lead": self.doc.name, "docstatus": 1,
+		return frappe.db.get_value("Opportunity", {"lead": self.doc.name, "docstatus": 1,
 			"status": ["!=", "Lost"]})
 
 @frappe.whitelist()
@@ -88,7 +88,7 @@
 			target[0].customer_type = "Individual"
 			target[0].customer_name = source.doc.lead_name
 			
-		target[0].customer_group = frappe.conn.get_default("customer_group")
+		target[0].customer_group = frappe.db.get_default("customer_group")
 			
 	doclist = get_mapped_doclist("Lead", source_name, 
 		{"Lead": {
diff --git a/erpnext/selling/doctype/opportunity/opportunity.py b/erpnext/selling/doctype/opportunity/opportunity.py
index 39a06ff..9edc261 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.py
+++ b/erpnext/selling/doctype/opportunity/opportunity.py
@@ -19,14 +19,14 @@
 		self.tname = 'Opportunity Item'
 		
 		self._prev = frappe._dict({
-			"contact_date": frappe.conn.get_value("Opportunity", self.doc.name, "contact_date") if \
+			"contact_date": frappe.db.get_value("Opportunity", self.doc.name, "contact_date") if \
 				(not cint(self.doc.fields.get("__islocal"))) else None,
-			"contact_by": frappe.conn.get_value("Opportunity", self.doc.name, "contact_by") if \
+			"contact_by": frappe.db.get_value("Opportunity", self.doc.name, "contact_by") if \
 				(not cint(self.doc.fields.get("__islocal"))) else None,
 		})
 		
 	def get_item_details(self, item_code):
-		item = frappe.conn.sql("""select item_name, stock_uom, description_html, description, item_group, brand
+		item = frappe.db.sql("""select item_name, stock_uom, description_html, description, item_group, brand
 			from `tabItem` where name = %s""", item_code, as_dict=1)
 		ret = {
 			'item_name': item and item[0]['item_name'] or '',
@@ -38,7 +38,7 @@
 		return ret
 
 	def get_cust_address(self,name):
-		details = frappe.conn.sql("select customer_name, address, territory, customer_group from `tabCustomer` where name = '%s' and docstatus != 2" %(name), as_dict = 1)
+		details = frappe.db.sql("select customer_name, address, territory, customer_group from `tabCustomer` where name = '%s' and docstatus != 2" %(name), as_dict = 1)
 		if details:
 			ret = {
 				'customer_name':	details and details[0]['customer_name'] or '',
@@ -48,7 +48,7 @@
 			}
 			# ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query)
 
-			contact_det = frappe.conn.sql("select contact_name, contact_no, email_id from `tabContact` where customer = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1)
+			contact_det = frappe.db.sql("select contact_name, contact_no, email_id from `tabContact` where customer = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1)
 
 			ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
 			ret['contact_no']		 = contact_det and contact_det[0]['contact_no'] or ''
@@ -118,8 +118,8 @@
 		
 	def declare_enquiry_lost(self,arg):
 		if not self.has_quotation():
-			frappe.conn.set(self.doc, 'status', 'Lost')
-			frappe.conn.set(self.doc, 'order_lost_reason', arg)
+			frappe.db.set(self.doc, 'status', 'Lost')
+			frappe.db.set(self.doc, 'order_lost_reason', arg)
 		else:
 			frappe.throw(_("Cannot declare as lost, because Quotation has been made."))
 
@@ -127,7 +127,7 @@
 		self.delete_events()
 		
 	def has_quotation(self):
-		return frappe.conn.get_value("Quotation Item", {"prevdoc_docname": self.doc.name, "docstatus": 1})
+		return frappe.db.get_value("Quotation Item", {"prevdoc_docname": self.doc.name, "docstatus": 1})
 		
 @frappe.whitelist()
 def make_quotation(source_name, target_doclist=None):
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index b108a6a..484c487 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -18,7 +18,7 @@
 		self.fname = 'quotation_details'
 
 	def has_sales_order(self):
-		return frappe.conn.get_value("Sales Order Item", {"prevdoc_docname": self.doc.name, "docstatus": 1})
+		return frappe.db.get_value("Sales Order Item", {"prevdoc_docname": self.doc.name, "docstatus": 1})
 
 	def validate_for_items(self):
 		chk_dupl_itm = []
@@ -34,7 +34,7 @@
 		
 		if self.doc.order_type in ['Maintenance', 'Service']:
 			for d in getlist(self.doclist, 'quotation_details'):
-				is_service_item = frappe.conn.sql("select is_service_item from `tabItem` where name=%s", d.item_code)
+				is_service_item = frappe.db.sql("select is_service_item from `tabItem` where name=%s", d.item_code)
 				is_service_item = is_service_item and is_service_item[0][0] or 'No'
 				
 				if is_service_item == 'No':
@@ -42,7 +42,7 @@
 					raise Exception
 		else:
 			for d in getlist(self.doclist, 'quotation_details'):
-				is_sales_item = frappe.conn.sql("select is_sales_item from `tabItem` where name=%s", d.item_code)
+				is_sales_item = frappe.db.sql("select is_sales_item from `tabItem` where name=%s", d.item_code)
 				is_sales_item = is_sales_item and is_sales_item[0][0] or 'No'
 				
 				if is_sales_item == 'No':
@@ -62,8 +62,8 @@
 	
 	def declare_order_lost(self, arg):
 		if not self.has_sales_order():
-			frappe.conn.set(self.doc, 'status', 'Lost')
-			frappe.conn.set(self.doc, 'order_lost_reason', arg)
+			frappe.db.set(self.doc, 'status', 'Lost')
+			frappe.db.set(self.doc, 'order_lost_reason', arg)
 			self.update_opportunity()
 		else:
 			frappe.throw(_("Cannot set as Lost as Sales Order is made."))
@@ -143,17 +143,17 @@
 	return [d.fields for d in doclist]
 
 def _make_customer(source_name, ignore_permissions=False):
-	quotation = frappe.conn.get_value("Quotation", source_name, ["lead", "order_type"])
+	quotation = frappe.db.get_value("Quotation", source_name, ["lead", "order_type"])
 	if quotation and quotation[0]:
 		lead_name = quotation[0]
-		customer_name = frappe.conn.get_value("Customer", {"lead_name": lead_name})
+		customer_name = frappe.db.get_value("Customer", {"lead_name": lead_name})
 		if not customer_name:
 			from erpnext.selling.doctype.lead.lead import _make_customer
 			customer_doclist = _make_customer(lead_name, ignore_permissions=ignore_permissions)
 			customer = frappe.bean(customer_doclist)
 			customer.ignore_permissions = ignore_permissions
 			if quotation[1] == "Shopping Cart":
-				customer.doc.customer_group = frappe.conn.get_value("Shopping Cart Settings", None,
+				customer.doc.customer_group = frappe.db.get_value("Shopping Cart Settings", None,
 					"default_customer_group")
 			
 			try:
diff --git a/erpnext/selling/doctype/sales_bom/sales_bom.py b/erpnext/selling/doctype/sales_bom/sales_bom.py
index a74c064..823b67d 100644
--- a/erpnext/selling/doctype/sales_bom/sales_bom.py
+++ b/erpnext/selling/doctype/sales_bom/sales_bom.py
@@ -19,13 +19,13 @@
 
 	def validate_main_item(self):
 		"""main item must have Is Stock Item as No and Is Sales Item as Yes"""
-		if not frappe.conn.sql("""select name from tabItem where name=%s and
+		if not frappe.db.sql("""select name from tabItem where name=%s and
 			ifnull(is_stock_item,'')='No' and ifnull(is_sales_item,'')='Yes'""", self.doc.new_item_code):
 			frappe.msgprint("""Parent Item %s is either a Stock Item or a not a Sales Item""",
 				raise_exception=1)
 
 	def get_item_details(self, name):
-		det = frappe.conn.sql("""select description, stock_uom from `tabItem` 
+		det = frappe.db.sql("""select description, stock_uom from `tabItem` 
 			where name = %s""", name)
 		return {
 			'description' : det and det[0][0] or '', 
@@ -35,7 +35,7 @@
 def get_new_item_code(doctype, txt, searchfield, start, page_len, filters):
 	from erpnext.controllers.queries import get_match_cond
 	
-	return frappe.conn.sql("""select name, item_name, description from tabItem 
+	return frappe.db.sql("""select name, item_name, description from tabItem 
 		where is_stock_item="No" and is_sales_item="Yes"
 		and name not in (select name from `tabSales BOM`) and %s like %s
 		%s limit %s, %s""" % (searchfield, "%s", 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 5878c0c..165660d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -38,7 +38,7 @@
 			raise Exception	
 		
 		if self.doc.po_no and self.doc.customer:
-			so = frappe.conn.sql("select name from `tabSales Order` \
+			so = frappe.db.sql("select name from `tabSales Order` \
 				where ifnull(po_no, '') = %s and name != %s and docstatus < 2\
 				and customer = %s", (self.doc.po_no, self.doc.name, self.doc.customer))
 			if so and so[0][0]:
@@ -52,7 +52,7 @@
 			e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '']
 			f = [d.item_code, d.description]
 
-			if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
+			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
 				if not d.warehouse:
 					msgprint("""Please enter Reserved Warehouse for item %s 
 						as it is stock Item""" % d.item_code, raise_exception=1)
@@ -70,14 +70,14 @@
 			# used for production plan
 			d.transaction_date = self.doc.transaction_date
 			
-			tot_avail_qty = frappe.conn.sql("select projected_qty from `tabBin` \
+			tot_avail_qty = frappe.db.sql("select projected_qty from `tabBin` \
 				where item_code = '%s' and warehouse = '%s'" % (d.item_code,d.warehouse))
 			d.projected_qty = tot_avail_qty and flt(tot_avail_qty[0][0]) or 0
 
 	def validate_sales_mntc_quotation(self):
 		for d in getlist(self.doclist, 'sales_order_details'):
 			if d.prevdoc_docname:
-				res = frappe.conn.sql("select name from `tabQuotation` where name=%s and order_type = %s", (d.prevdoc_docname, self.doc.order_type))
+				res = frappe.db.sql("select name from `tabQuotation` where name=%s and order_type = %s", (d.prevdoc_docname, self.doc.order_type))
 				if not res:
 					msgprint("""Order Type (%s) should be same in Quotation: %s \
 						and current Sales Order""" % (self.doc.order_type, d.prevdoc_docname))
@@ -94,7 +94,7 @@
 
 	def validate_proj_cust(self):
 		if self.doc.project_name and self.doc.customer_name:
-			res = frappe.conn.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			res = frappe.db.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
 			if not res:
 				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
 				raise Exception
@@ -146,9 +146,9 @@
 
 		
 	def update_enquiry_status(self, prevdoc, flag):
-		enq = frappe.conn.sql("select t2.prevdoc_docname from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.name=%s", prevdoc)
+		enq = frappe.db.sql("select t2.prevdoc_docname from `tabQuotation` t1, `tabQuotation Item` t2 where t2.parent = t1.name and t1.name=%s", prevdoc)
 		if enq:
-			frappe.conn.sql("update `tabOpportunity` set status = %s where name=%s",(flag,enq[0][0]))
+			frappe.db.sql("update `tabOpportunity` set status = %s where name=%s",(flag,enq[0][0]))
 
 	def update_prevdoc_status(self, flag):				
 		for quotation in self.doclist.get_distinct_values("prevdoc_docname"):
@@ -166,7 +166,7 @@
 		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.grand_total, self)
 		
 		self.update_prevdoc_status('submit')
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		# Cannot cancel stopped SO
@@ -178,39 +178,39 @@
 		
 		self.update_prevdoc_status('cancel')
 		
-		frappe.conn.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self.doc, 'status', 'Cancelled')
 		
 	def check_nextdoc_docstatus(self):
 		# Checks Delivery Note
-		submit_dn = frappe.conn.sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Item` t2 where t1.name = t2.parent and t2.against_sales_order = %s and t1.docstatus = 1", self.doc.name)
+		submit_dn = frappe.db.sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Item` t2 where t1.name = t2.parent and t2.against_sales_order = %s and t1.docstatus = 1", self.doc.name)
 		if submit_dn:
 			msgprint("Delivery Note : " + cstr(submit_dn[0][0]) + " has been submitted against " + cstr(self.doc.doctype) + ". Please cancel Delivery Note : " + cstr(submit_dn[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 			
 		# Checks Sales Invoice
-		submit_rv = frappe.conn.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_rv = frappe.db.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name))
 		if submit_rv:
 			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Sales Invoice : "+ cstr(submit_rv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 			
 		#check maintenance schedule
-		submit_ms = frappe.conn.sql("select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
+		submit_ms = frappe.db.sql("select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
 		if submit_ms:
 			msgprint("Maintenance Schedule : " + cstr(submit_ms[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Schedule : "+ cstr(submit_ms[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 			
 		# check maintenance visit
-		submit_mv = frappe.conn.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
+		submit_mv = frappe.db.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name)
 		if submit_mv:
 			msgprint("Maintenance Visit : " + cstr(submit_mv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Visit : " + cstr(submit_mv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 		
 		# check production order
-		pro_order = frappe.conn.sql("""select name from `tabProduction Order` where sales_order = %s and docstatus = 1""", self.doc.name)
+		pro_order = frappe.db.sql("""select name from `tabProduction Order` where sales_order = %s and docstatus = 1""", self.doc.name)
 		if pro_order:
 			msgprint("""Production Order: %s exists against this sales order. 
 				Please cancel production order first and then cancel this sales order""" % 
 				pro_order[0][0], raise_exception=1)
 
 	def check_modified_date(self):
-		mod_db = frappe.conn.sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name)
-		date_diff = frappe.conn.sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
+		mod_db = frappe.db.sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name)
+		date_diff = frappe.db.sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
 		if date_diff and date_diff[0][0]:
 			msgprint("%s: %s has been modified after you have opened. Please Refresh"
 				% (self.doc.doctype, self.doc.name), raise_exception=1)
@@ -218,21 +218,21 @@
 	def stop_sales_order(self):
 		self.check_modified_date()
 		self.update_stock_ledger(-1)
-		frappe.conn.set(self.doc, 'status', 'Stopped')
+		frappe.db.set(self.doc, 'status', 'Stopped')
 		msgprint("""%s: %s has been Stopped. To make transactions against this Sales Order 
 			you need to Unstop it.""" % (self.doc.doctype, self.doc.name))
 
 	def unstop_sales_order(self):
 		self.check_modified_date()
 		self.update_stock_ledger(1)
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 		msgprint("%s: %s has been Unstopped" % (self.doc.doctype, self.doc.name))
 
 
 	def update_stock_ledger(self, update_stock):
 		from erpnext.stock.utils import update_bin
 		for d in self.get_item_list():
-			if frappe.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
+			if frappe.db.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
 				args = {
 					"item_code": d['item_code'],
 					"warehouse": d['reserved_warehouse'], 
@@ -359,7 +359,7 @@
 	
 @frappe.whitelist()
 def make_maintenance_schedule(source_name, target_doclist=None):
-	maint_schedule = frappe.conn.sql("""select t1.name 
+	maint_schedule = frappe.db.sql("""select t1.name 
 		from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 
 		where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1""", source_name)
 		
@@ -387,7 +387,7 @@
 	
 @frappe.whitelist()
 def make_maintenance_visit(source_name, target_doclist=None):
-	visit = frappe.conn.sql("""select t1.name 
+	visit = frappe.db.sql("""select t1.name 
 		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
 		where t2.parent=t1.name and t2.prevdoc_docname=%s 
 		and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name)
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index 20b1309..9992b01 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -91,11 +91,11 @@
 		return dn
 		
 	def get_bin_reserved_qty(self, item_code, warehouse):
-		return flt(frappe.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, 
+		return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, 
 			"reserved_qty"))
 	
 	def delete_bin(self, item_code, warehouse):
-		bin = frappe.conn.exists({"doctype": "Bin", "item_code": item_code, 
+		bin = frappe.db.exists({"doctype": "Bin", "item_code": item_code, 
 			"warehouse": warehouse})
 		if bin:
 			frappe.delete_doc("Bin", bin[0][0])
@@ -125,7 +125,7 @@
 		so = self.create_so()
 		
 		# allow negative stock
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.set_default("allow_negative_stock", 1)
 		
 		# submit dn
 		dn = self.create_dn_against_so(so)
@@ -154,10 +154,10 @@
 		so = self.create_so()
 		
 		# allow negative stock
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.set_default("allow_negative_stock", 1)
 		
 		# set over-delivery tolerance
-		frappe.conn.set_value('Item', so.doclist[1].item_code, 'tolerance', 50)
+		frappe.db.set_value('Item', so.doclist[1].item_code, 'tolerance', 50)
 		
 		# submit dn
 		dn = self.create_dn_against_so(so, 15)
@@ -210,7 +210,7 @@
 		so = self.create_so(test_record)
 		
 		# allow negative stock
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.set_default("allow_negative_stock", 1)
 		
 		# submit dn
 		dn = self.create_dn_against_so(so)
@@ -259,10 +259,10 @@
 		so = self.create_so(test_record)
 		
 		# allow negative stock
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.set_default("allow_negative_stock", 1)
 		
 		# set over-delivery tolerance
-		frappe.conn.set_value('Item', so.doclist[1].item_code, 'tolerance', 50)
+		frappe.db.set_value('Item', so.doclist[1].item_code, 'tolerance', 50)
 		
 		# submit dn
 		dn = self.create_dn_against_so(so, 15)
diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py
index a190584..5b44c7b 100644
--- a/erpnext/selling/doctype/selling_settings/selling_settings.py
+++ b/erpnext/selling/doctype/selling_settings/selling_settings.py
@@ -13,7 +13,7 @@
 	def validate(self):
 		for key in ["cust_master_name", "customer_group", "territory", "maintain_same_sales_rate",
 			"editable_price_list_rate", "selling_price_list"]:
-				frappe.conn.set_default(key, self.doc.fields.get(key, ""))
+				frappe.db.set_default(key, self.doc.fields.get(key, ""))
 
 		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Customer", "customer_name", 
diff --git a/erpnext/selling/doctype/sms_center/sms_center.py b/erpnext/selling/doctype/sms_center/sms_center.py
index bfdc7d4..e1284e2 100644
--- a/erpnext/selling/doctype/sms_center/sms_center.py
+++ b/erpnext/selling/doctype/sms_center/sms_center.py
@@ -25,23 +25,23 @@
 			where_clause = self.doc.sales_partner and " and ifnull(is_sales_partner, 0) = 1 and sales_partner = '%s'" % self.doc.sales_partner or " and ifnull(sales_partner, '') != ''"
 
 		if self.doc.send_to in ['All Contact', 'All Customer Contact', 'All Supplier Contact', 'All Sales Partner Contact']:
-			rec = frappe.conn.sql("""select CONCAT(ifnull(first_name,''), '', ifnull(last_name,'')), 
+			rec = frappe.db.sql("""select CONCAT(ifnull(first_name,''), '', ifnull(last_name,'')), 
 				mobile_no from `tabContact` where ifnull(mobile_no,'')!='' and 
 				docstatus != 2 %s""", where_clause)
 		
 		elif self.doc.send_to == 'All Lead (Open)':
-			rec = frappe.conn.sql("""select lead_name, mobile_no from `tabLead` where 
+			rec = frappe.db.sql("""select lead_name, mobile_no from `tabLead` where 
 				ifnull(mobile_no,'')!='' and docstatus != 2 and status='Open'""")
 		
 		elif self.doc.send_to == 'All Employee (Active)':
 			where_clause = self.doc.department and " and department = '%s'" % self.doc.department or ""
 			where_clause += self.doc.branch and " and branch = '%s'" % self.doc.branch or ""
-			rec = frappe.conn.sql("""select employee_name, cell_number from 
+			rec = frappe.db.sql("""select employee_name, cell_number from 
 				`tabEmployee` where status = 'Active' and docstatus < 2 and 
 				ifnull(cell_number,'')!='' %s""", where_clause)
 		
 		elif self.doc.send_to == 'All Sales Person':
-			rec = frappe.conn.sql("""select sales_person_name, mobile_no from 
+			rec = frappe.db.sql("""select sales_person_name, mobile_no from 
 				`tabSales Person` where docstatus!=2 and ifnull(mobile_no,'')!=''""")
 			rec_list = ''
 		
diff --git a/erpnext/selling/page/sales_browser/sales_browser.py b/erpnext/selling/page/sales_browser/sales_browser.py
index bcd9146..e53515c 100644
--- a/erpnext/selling/page/sales_browser/sales_browser.py
+++ b/erpnext/selling/page/sales_browser/sales_browser.py
@@ -12,7 +12,7 @@
 	if not frappe.form_dict.get('parent'):
 		frappe.local.form_dict['parent'] = ''
 		
-	return frappe.conn.sql("""select name as value, 
+	return frappe.db.sql("""select name as value, 
 		if(is_group='Yes', 1, 0) as expandable
 		from `tab%(ctype)s`
 		where docstatus < 2
diff --git a/erpnext/selling/page/sales_funnel/sales_funnel.py b/erpnext/selling/page/sales_funnel/sales_funnel.py
index 9b3ff68..06a74e7 100644
--- a/erpnext/selling/page/sales_funnel/sales_funnel.py
+++ b/erpnext/selling/page/sales_funnel/sales_funnel.py
@@ -6,23 +6,23 @@
 
 @frappe.whitelist()
 def get_funnel_data(from_date, to_date):
-	active_leads = frappe.conn.sql("""select count(*) from `tabLead`
+	active_leads = frappe.db.sql("""select count(*) from `tabLead`
 		where (date(`modified`) between %s and %s)
 		and status != "Do Not Contact" """, (from_date, to_date))[0][0]
 		
-	active_leads += frappe.conn.sql("""select count(distinct customer) from `tabContact`
+	active_leads += frappe.db.sql("""select count(distinct customer) from `tabContact`
 		where (date(`modified`) between %s and %s)
 		and status != "Passive" """, (from_date, to_date))[0][0]
 	
-	opportunities = frappe.conn.sql("""select count(*) from `tabOpportunity`
+	opportunities = frappe.db.sql("""select count(*) from `tabOpportunity`
 		where docstatus = 1 and (date(`creation`) between %s and %s)
 		and status != "Lost" """, (from_date, to_date))[0][0]
 	
-	quotations = frappe.conn.sql("""select count(*) from `tabQuotation`
+	quotations = frappe.db.sql("""select count(*) from `tabQuotation`
 		where docstatus = 1 and (date(`creation`) between %s and %s)
 		and status != "Lost" """, (from_date, to_date))[0][0]
 	
-	sales_orders = frappe.conn.sql("""select count(*) from `tabQuotation`
+	sales_orders = frappe.db.sql("""select count(*) from `tabQuotation`
 		where docstatus = 1 and (date(`creation`) between %s and %s)""", (from_date, to_date))[0][0]
 	
 	return [
diff --git a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py
index 19cee5e..5836f9a 100644
--- a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py
+++ b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py
@@ -41,7 +41,7 @@
 
 def get_sales_bom_items():
 	sbom_item_map = {}
-	for sbom in frappe.conn.sql("""select parent, item_code, qty from `tabSales BOM Item` 
+	for sbom in frappe.db.sql("""select parent, item_code, qty from `tabSales BOM Item` 
 		where docstatus < 2""", as_dict=1):
 			sbom_item_map.setdefault(sbom.parent, {}).setdefault(sbom.item_code, sbom.qty)
 			
@@ -49,7 +49,7 @@
 
 def get_item_details():
 	item_map = {}
-	for item in frappe.conn.sql("""select name, item_name, description, stock_uom 
+	for item in frappe.db.sql("""select name, item_name, description, stock_uom 
 		from `tabItem`""", as_dict=1):
 			item_map.setdefault(item.name, item)
 			
@@ -57,7 +57,7 @@
 
 def get_item_warehouse_quantity():
 	iwq_map = {}
-	bin = frappe.conn.sql("""select item_code, warehouse, actual_qty from `tabBin` 
+	bin = frappe.db.sql("""select item_code, warehouse, actual_qty from `tabBin` 
 		where actual_qty > 0""")
 	for item, wh, qty in bin:
 		iwq_map.setdefault(item, {}).setdefault(wh, qty)
diff --git a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
index 9e216a6..43c4e58 100644
--- a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
+++ b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
@@ -16,7 +16,7 @@
 	if filters.get("company"):
 		company_condition = ' and company=%(company)s'
 
-	for si in frappe.conn.sql("""select posting_date, customer, grand_total from `tabSales Invoice`
+	for si in frappe.db.sql("""select posting_date, customer, grand_total from `tabSales Invoice`
 		where docstatus=1 and posting_date <= %(to_date)s 
 		{company_condition} order by posting_date""".format(company_condition=company_condition), 
 		filters, as_dict=1):
diff --git a/erpnext/selling/report/customers_not_buying_since_long_time/customers_not_buying_since_long_time.py b/erpnext/selling/report/customers_not_buying_since_long_time/customers_not_buying_since_long_time.py
index 5fca755..c6b4686 100644
--- a/erpnext/selling/report/customers_not_buying_since_long_time/customers_not_buying_since_long_time.py
+++ b/erpnext/selling/report/customers_not_buying_since_long_time/customers_not_buying_since_long_time.py
@@ -23,7 +23,7 @@
 	return columns, data 
 
 def get_so_details():
-	return frappe.conn.sql("""select 
+	return frappe.db.sql("""select 
 			cust.name, 
 			cust.customer_name, 
 			cust.territory, 
@@ -41,7 +41,7 @@
 		order by 'days_since_last_order' desc """,as_list=1)
 
 def get_last_so_amt(customer):
-	res =  frappe.conn.sql("""select net_total from `tabSales Order`
+	res =  frappe.db.sql("""select net_total from `tabSales Order`
 		where customer ='%(customer)s' and docstatus = 1 order by transaction_date desc 
 		limit 1""" % {'customer':customer})
 
diff --git a/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py b/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py
index 8addff2..2d7b3e3 100644
--- a/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py
+++ b/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py
@@ -63,7 +63,7 @@
 
 #Get sales person & item group details
 def get_salesperson_details(filters):
-	return frappe.conn.sql("""select sp.name, td.item_group, td.target_qty, 
+	return frappe.db.sql("""select sp.name, td.item_group, td.target_qty, 
 		td.target_amount, sp.distribution_id 
 		from `tabSales Person` sp, `tabTarget Detail` td 
 		where td.parent=sp.name and td.fiscal_year=%s order by sp.name""", 
@@ -73,7 +73,7 @@
 def get_target_distribution_details(filters):
 	target_details = {}
 	
-	for d in frappe.conn.sql("""select bd.name, bdd.month, bdd.percentage_allocation 
+	for d in frappe.db.sql("""select bd.name, bdd.month, bdd.percentage_allocation 
 		from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd 
 		where bdd.parent=bd.name and bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1):
 			target_details.setdefault(d.name, {}).setdefault(d.month, flt(d.percentage_allocation))
@@ -84,7 +84,7 @@
 def get_achieved_details(filters):
 	start_date, end_date = get_fiscal_year(fiscal_year = filters["fiscal_year"])[1:]
 	
-	item_details = frappe.conn.sql("""select soi.item_code, soi.qty, soi.base_amount, so.transaction_date, 
+	item_details = frappe.db.sql("""select soi.item_code, soi.qty, soi.base_amount, so.transaction_date, 
 		st.sales_person, MONTHNAME(so.transaction_date) as month_name 
 		from `tabSales Order Item` soi, `tabSales Order` so, `tabSales Team` st 
 		where soi.parent=so.name and so.docstatus=1 and 
@@ -132,4 +132,4 @@
 	return sim_map
 
 def get_item_group(item_name):
-	return frappe.conn.get_value("Item", item_name, "item_group")
\ No newline at end of file
+	return frappe.db.get_value("Item", item_name, "item_group")
\ No newline at end of file
diff --git a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
index 03e23b0..ad409f0 100644
--- a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
+++ b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
@@ -26,7 +26,7 @@
 def get_entries(filters):
 	date_field = filters["doc_type"] == "Sales Order" and "transaction_date" or "posting_date"
 	conditions, items = get_conditions(filters, date_field)
-	entries = frappe.conn.sql("""select dt.name, dt.customer, dt.territory, dt.%s, 
+	entries = frappe.db.sql("""select dt.name, dt.customer, dt.territory, dt.%s, 
 		dt_item.item_code, dt_item.qty, dt_item.base_amount, st.sales_person, 
 		st.allocated_percentage, dt_item.base_amount*st.allocated_percentage/100
 		from `tab%s` dt, `tab%s Item` dt_item, `tabSales Team` st 
@@ -63,7 +63,7 @@
 
 	items = []
 	if key:
-		items = frappe.conn.sql_list("""select name from tabItem where %s = %s""" % 
+		items = frappe.db.sql_list("""select name from tabItem where %s = %s""" % 
 			(key, '%s'), (filters[key]))
 			
 	return items
\ No newline at end of file
diff --git a/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py b/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py
index 12f22dd..831e6b7 100644
--- a/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py
+++ b/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py
@@ -60,7 +60,7 @@
 
 #Get territory & item group details
 def get_territory_details(filters):
-	return frappe.conn.sql("""select t.name, td.item_group, td.target_qty, 
+	return frappe.db.sql("""select t.name, td.item_group, td.target_qty, 
 		td.target_amount, t.distribution_id 
 		from `tabTerritory` t, `tabTarget Detail` td 
 		where td.parent=t.name and td.fiscal_year=%s order by t.name""", 
@@ -70,7 +70,7 @@
 def get_target_distribution_details(filters):
 	target_details = {}
 
-	for d in frappe.conn.sql("""select bd.name, bdd.month, bdd.percentage_allocation 
+	for d in frappe.db.sql("""select bd.name, bdd.month, bdd.percentage_allocation 
 		from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd
 		where bdd.parent=bd.name and bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1):
 			target_details.setdefault(d.name, {}).setdefault(d.month, flt(d.percentage_allocation))
@@ -81,7 +81,7 @@
 def get_achieved_details(filters):
 	start_date, end_date = get_fiscal_year(fiscal_year = filters["fiscal_year"])[1:]
 
-	item_details = frappe.conn.sql("""select soi.item_code, soi.qty, soi.base_amount, so.transaction_date, 
+	item_details = frappe.db.sql("""select soi.item_code, soi.qty, soi.base_amount, so.transaction_date, 
 		so.territory, MONTHNAME(so.transaction_date) as month_name 
 		from `tabSales Order Item` soi, `tabSales Order` so 
 		where soi.parent=so.name and so.docstatus=1 and so.transaction_date>=%s and 
@@ -130,4 +130,4 @@
 	return tim_map
 
 def get_item_group(item_name):
-	return frappe.conn.get_value("Item", item_name, "item_group")
\ No newline at end of file
+	return frappe.db.get_value("Item", item_name, "item_group")
\ No newline at end of file
diff --git a/erpnext/setup/doctype/authorization_control/authorization_control.py b/erpnext/setup/doctype/authorization_control/authorization_control.py
index cdc3d6f..ceab652 100644
--- a/erpnext/setup/doctype/authorization_control/authorization_control.py
+++ b/erpnext/setup/doctype/authorization_control/authorization_control.py
@@ -27,10 +27,10 @@
 				amt_list.append(flt(x[0]))
 			max_amount = max(amt_list)
 			
-			app_dtl = frappe.conn.sql("select approving_user, approving_role from `tabAuthorization Rule` where transaction = %s and (value = %s or value > %s) and docstatus != 2 and based_on = %s and company = %s %s" % ('%s', '%s', '%s', '%s', '%s', condition), (doctype_name, flt(max_amount), total, based_on, company))
+			app_dtl = frappe.db.sql("select approving_user, approving_role from `tabAuthorization Rule` where transaction = %s and (value = %s or value > %s) and docstatus != 2 and based_on = %s and company = %s %s" % ('%s', '%s', '%s', '%s', '%s', condition), (doctype_name, flt(max_amount), total, based_on, company))
 			
 			if not app_dtl:
-				app_dtl = frappe.conn.sql("select approving_user, approving_role from `tabAuthorization Rule` where transaction = %s and (value = %s or value > %s) and docstatus != 2 and based_on = %s and ifnull(company,'') = '' %s" % ('%s', '%s', '%s', '%s', condition), (doctype_name, flt(max_amount), total, based_on)) 
+				app_dtl = frappe.db.sql("select approving_user, approving_role from `tabAuthorization Rule` where transaction = %s and (value = %s or value > %s) and docstatus != 2 and based_on = %s and ifnull(company,'') = '' %s" % ('%s', '%s', '%s', '%s', condition), (doctype_name, flt(max_amount), total, based_on)) 
 			for d in app_dtl:
 				if(d[0]): appr_users.append(d[0])
 				if(d[1]): appr_roles.append(d[1])
@@ -57,18 +57,18 @@
 		add_cond1,add_cond2	= '',''
 		if based_on == 'Itemwise Discount':
 			add_cond1 += " and master_name = '"+cstr(item)+"'"
-			itemwise_exists = frappe.conn.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and company = %s and docstatus != 2 %s %s" % ('%s', '%s', '%s', '%s', cond, add_cond1), (doctype_name, total, based_on, company))
+			itemwise_exists = frappe.db.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and company = %s and docstatus != 2 %s %s" % ('%s', '%s', '%s', '%s', cond, add_cond1), (doctype_name, total, based_on, company))
 			if not itemwise_exists:
-				itemwise_exists = frappe.conn.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and ifnull(company,'') = '' and docstatus != 2 %s %s" % ('%s', '%s', '%s', cond, add_cond1), (doctype_name, total, based_on))
+				itemwise_exists = frappe.db.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and ifnull(company,'') = '' and docstatus != 2 %s %s" % ('%s', '%s', '%s', cond, add_cond1), (doctype_name, total, based_on))
 			if itemwise_exists:
 				self.get_appr_user_role(itemwise_exists, doctype_name, total, based_on, cond+add_cond1, item,company)
 				chk = 0
 		if chk == 1:
 			if based_on == 'Itemwise Discount': add_cond2 += " and ifnull(master_name,'') = ''"
-			appr = frappe.conn.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and company = %s and docstatus != 2 %s %s" % ('%s', '%s', '%s', '%s', cond, add_cond2), (doctype_name, total, based_on, company))
+			appr = frappe.db.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and company = %s and docstatus != 2 %s %s" % ('%s', '%s', '%s', '%s', cond, add_cond2), (doctype_name, total, based_on, company))
 			
 			if not appr:
-				appr = frappe.conn.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and ifnull(company,'') = '' and docstatus != 2 %s %s"% ('%s', '%s', '%s', cond, add_cond2), (doctype_name, total, based_on))
+				appr = frappe.db.sql("select value from `tabAuthorization Rule` where transaction = %s and value <= %s and based_on = %s and ifnull(company,'') = '' and docstatus != 2 %s %s"% ('%s', '%s', '%s', cond, add_cond2), (doctype_name, total, based_on))
 			self.get_appr_user_role(appr, doctype_name, total, based_on, cond+add_cond2, item, company)
 			
 			
@@ -111,7 +111,7 @@
 		# ================
 		# Check for authorization set for individual user
 	 
-		based_on = [x[0] for x in frappe.conn.sql("select distinct based_on from `tabAuthorization Rule` where transaction = %s and system_user = %s and (company = %s or ifnull(company,'')='') and docstatus != 2", (doctype_name, session['user'], company))]
+		based_on = [x[0] for x in frappe.db.sql("select distinct based_on from `tabAuthorization Rule` where transaction = %s and system_user = %s and (company = %s or ifnull(company,'')='') and docstatus != 2", (doctype_name, session['user'], company))]
 
 		for d in based_on:
 			self.bifurcate_based_on_type(doctype_name, total, av_dis, d, doc_obj, 1, company)
@@ -123,7 +123,7 @@
 		# Specific Role
 		# ===============
 		# Check for authorization set on particular roles
-		based_on = [x[0] for x in frappe.conn.sql("""select based_on 
+		based_on = [x[0] for x in frappe.db.sql("""select based_on 
 			from `tabAuthorization Rule` 
 			where transaction = %s and system_role IN (%s) and based_on IN (%s) 
 			and (company = %s or ifnull(company,'')='') 
@@ -147,9 +147,9 @@
 	# payroll related check
 	def get_value_based_rule(self,doctype_name,employee,total_claimed_amount,company):
 		val_lst =[]
-		val = frappe.conn.sql("select value from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)< %s and company = %s and docstatus!=2",(doctype_name,employee,employee,total_claimed_amount,company))
+		val = frappe.db.sql("select value from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)< %s and company = %s and docstatus!=2",(doctype_name,employee,employee,total_claimed_amount,company))
 		if not val:
-			val = frappe.conn.sql("select value from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)< %s and ifnull(company,'') = '' and docstatus!=2",(doctype_name, employee, employee, total_claimed_amount))
+			val = frappe.db.sql("select value from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)< %s and ifnull(company,'') = '' and docstatus!=2",(doctype_name, employee, employee, total_claimed_amount))
 
 		if val:
 			val_lst = [y[0] for y in val]
@@ -157,9 +157,9 @@
 			val_lst.append(0)
 	
 		max_val = max(val_lst)
-		rule = frappe.conn.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and company = %s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)= %s and docstatus!=2",(doctype_name,company,employee,employee,flt(max_val)), as_dict=1)
+		rule = frappe.db.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and company = %s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)= %s and docstatus!=2",(doctype_name,company,employee,employee,flt(max_val)), as_dict=1)
 		if not rule:
-			rule = frappe.conn.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and ifnull(company,'') = '' and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)= %s and docstatus!=2",(doctype_name,employee,employee,flt(max_val)), as_dict=1)
+			rule = frappe.db.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and ifnull(company,'') = '' and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(value,0)= %s and docstatus!=2",(doctype_name,employee,employee,flt(max_val)), as_dict=1)
 
 		return rule
 	
@@ -174,9 +174,9 @@
 			if doctype_name == 'Expense Claim':
 				rule = self.get_value_based_rule(doctype_name,doc_obj.doc.employee,doc_obj.doc.total_claimed_amount, doc_obj.doc.company)
 			elif doctype_name == 'Appraisal':
-				rule = frappe.conn.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and company = %s and docstatus!=2",(doctype_name,doc_obj.doc.employee, doc_obj.doc.employee, doc_obj.doc.company),as_dict=1)				
+				rule = frappe.db.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and company = %s and docstatus!=2",(doctype_name,doc_obj.doc.employee, doc_obj.doc.employee, doc_obj.doc.company),as_dict=1)				
 				if not rule:
-					rule = frappe.conn.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(company,'') = '' and docstatus!=2",(doctype_name,doc_obj.doc.employee, doc_obj.doc.employee),as_dict=1)				
+					rule = frappe.db.sql("select name, to_emp, to_designation, approving_role, approving_user from `tabAuthorization Rule` where transaction=%s and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) and ifnull(company,'') = '' and docstatus!=2",(doctype_name,doc_obj.doc.employee, doc_obj.doc.employee),as_dict=1)				
 			
 			if rule:
 				for m in rule:
@@ -184,7 +184,7 @@
 						if m['approving_user']:
 							app_specific_user.append(m['approving_user'])
 						elif m['approving_role']:
-							user_lst = [z[0] for z in frappe.conn.sql("select distinct t1.name from `tabProfile` t1, `tabUserRole` t2 where t2.role=%s and t2.parent=t1.name and t1.name !='Administrator' and t1.name != 'Guest' and t1.docstatus !=2",m['approving_role'])]
+							user_lst = [z[0] for z in frappe.db.sql("select distinct t1.name from `tabProfile` t1, `tabUserRole` t2 where t2.role=%s and t2.parent=t1.name and t1.name !='Administrator' and t1.name != 'Guest' and t1.docstatus !=2",m['approving_role'])]
 							for x in user_lst:
 								if not x in app_user:
 									app_user.append(x)
diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.py b/erpnext/setup/doctype/authorization_rule/authorization_rule.py
index 196b3b0..d7c8cb2 100644
--- a/erpnext/setup/doctype/authorization_rule/authorization_rule.py
+++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.py
@@ -18,7 +18,7 @@
 
 
 	def check_duplicate_entry(self):
-		exists = frappe.conn.sql("""select name, docstatus from `tabAuthorization Rule` 
+		exists = frappe.db.sql("""select name, docstatus from `tabAuthorization Rule` 
 			where transaction = %s and based_on = %s and system_user = %s 
 			and system_role = %s and approving_user = %s and approving_role = %s 
 			and to_emp =%s and to_designation=%s and name != %s""", 
@@ -38,12 +38,12 @@
 
 	def validate_master_name(self):
 		if self.doc.based_on == 'Customerwise Discount' and \
-				not frappe.conn.sql("select name from tabCustomer where name = '%s' and docstatus != 2" % \
+				not frappe.db.sql("select name from tabCustomer where name = '%s' and docstatus != 2" % \
 				 	(self.doc.master_name)):
 			msgprint("Please select valid Customer Name for Customerwise Discount", 
 			 	raise_exception=1)
 		elif self.doc.based_on == 'Itemwise Discount' and \
-				not frappe.conn.sql("select name from tabItem where name = '%s' and docstatus != 2" % \
+				not frappe.db.sql("select name from tabItem where name = '%s' and docstatus != 2" % \
 				 	(self.doc.master_name)):
 			msgprint("Please select valid Item Name for Itemwise Discount", raise_exception=1)
 		elif (self.doc.based_on == 'Grand Total' or \
@@ -64,7 +64,7 @@
 					Applicable To (Role).", raise_exception=1)
 			elif self.doc.system_user and self.doc.approving_role and \
 			 		has_common([self.doc.approving_role], [x[0] for x in \
-					frappe.conn.sql("select role from `tabUserRole` where parent = '%s'" % \
+					frappe.db.sql("select role from `tabUserRole` where parent = '%s'" % \
 					 	(self.doc.system_user))]):
 				msgprint("System User : %s is assigned role : %s. So rule does not make sense" % 
 				 	(self.doc.system_user,self.doc.approving_role), raise_exception=1)
diff --git a/erpnext/setup/doctype/backup_manager/backup_dropbox.py b/erpnext/setup/doctype/backup_manager/backup_dropbox.py
index 4ee0183..212efbc 100644
--- a/erpnext/setup/doctype/backup_manager/backup_dropbox.py
+++ b/erpnext/setup/doctype/backup_manager/backup_dropbox.py
@@ -35,17 +35,17 @@
 def dropbox_callback(oauth_token=None, not_approved=False):
 	from dropbox import client
 	if not not_approved:
-		if frappe.conn.get_value("Backup Manager", None, "dropbox_access_key")==oauth_token:		
+		if frappe.db.get_value("Backup Manager", None, "dropbox_access_key")==oauth_token:		
 			allowed = 1
 			message = "Dropbox access allowed."
 
 			sess = get_dropbox_session()
-			sess.set_request_token(frappe.conn.get_value("Backup Manager", None, "dropbox_access_key"), 
-				frappe.conn.get_value("Backup Manager", None, "dropbox_access_secret"))
+			sess.set_request_token(frappe.db.get_value("Backup Manager", None, "dropbox_access_key"), 
+				frappe.db.get_value("Backup Manager", None, "dropbox_access_secret"))
 			access_token = sess.obtain_access_token()
-			frappe.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_key", access_token.key)
-			frappe.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_secret", access_token.secret)
-			frappe.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_allowed", allowed)
+			frappe.db.set_value("Backup Manager", "Backup Manager", "dropbox_access_key", access_token.key)
+			frappe.db.set_value("Backup Manager", "Backup Manager", "dropbox_access_secret", access_token.secret)
+			frappe.db.set_value("Backup Manager", "Backup Manager", "dropbox_access_allowed", allowed)
 			dropbox_client = client.DropboxClient(sess)
 			try:
 				dropbox_client.file_create_folder("files")
@@ -65,7 +65,7 @@
 	if allowed:
 		frappe.local.message_success = True
 	
-	frappe.conn.commit()
+	frappe.db.commit()
 	frappe.response['type'] = 'page'
 	frappe.response['page_name'] = 'message.html'
 
@@ -74,13 +74,13 @@
 	from conf import dropbox_access_key, dropbox_secret_key
 	from frappe.utils.backups import new_backup
 	from frappe.utils import get_files_path, get_backups_path
-	if not frappe.conn:
+	if not frappe.db:
 		frappe.connect()
 
 	sess = session.DropboxSession(dropbox_access_key, dropbox_secret_key, "app_folder")
 
-	sess.set_token(frappe.conn.get_value("Backup Manager", None, "dropbox_access_key"),
-		frappe.conn.get_value("Backup Manager", None, "dropbox_access_secret"))
+	sess.set_token(frappe.db.get_value("Backup Manager", None, "dropbox_access_key"),
+		frappe.db.get_value("Backup Manager", None, "dropbox_access_secret"))
 	
 	dropbox_client = client.DropboxClient(sess)
 
@@ -89,7 +89,7 @@
 	filename = os.path.join(get_backups_path(), os.path.basename(backup.backup_path_db))
 	upload_file_to_dropbox(filename, "/database", dropbox_client)
 
-	frappe.conn.close()
+	frappe.db.close()
 	response = dropbox_client.metadata("/files")
 	
 	# upload files to files folder
diff --git a/erpnext/setup/doctype/backup_manager/backup_googledrive.py b/erpnext/setup/doctype/backup_manager/backup_googledrive.py
index 8532e74..0ea64ba 100644
--- a/erpnext/setup/doctype/backup_manager/backup_googledrive.py
+++ b/erpnext/setup/doctype/backup_manager/backup_googledrive.py
@@ -38,7 +38,7 @@
 	}
 
 def upload_files(name, mimetype, service, folder_id):
-	if not frappe.conn:
+	if not frappe.db:
 		frappe.connect()
 	file_name = os.path.basename(name)
 	media_body = MediaFileUpload(name, mimetype=mimetype, resumable=True)
@@ -58,10 +58,10 @@
 
 def backup_to_gdrive():
 	from frappe.utils.backups import new_backup
-	if not frappe.conn:
+	if not frappe.db:
 		frappe.connect()
 	get_gdrive_flow()
-	credentials_json = frappe.conn.get_value("Backup Manager", None, "gdrive_credentials")
+	credentials_json = frappe.db.get_value("Backup Manager", None, "gdrive_credentials")
 	credentials = oauth2client.client.Credentials.new_from_json(credentials_json)
 	http = httplib2.Http()
 	http = credentials.authorize(http)
@@ -74,15 +74,15 @@
 	
 	# upload files to database folder
 	upload_files(filename, 'application/x-gzip', drive_service, 
-		frappe.conn.get_value("Backup Manager", None, "database_folder_id"))
+		frappe.db.get_value("Backup Manager", None, "database_folder_id"))
 	
 	# upload files to files folder
 	did_not_upload = []
 	error_log = []
 	
-	files_folder_id = frappe.conn.get_value("Backup Manager", None, "files_folder_id")
+	files_folder_id = frappe.db.get_value("Backup Manager", None, "files_folder_id")
 	
-	frappe.conn.close()
+	frappe.db.close()
 	path = os.path.join(frappe.local.site_path, "public", "files")
 	for filename in os.listdir(path):
 		filename = cstr(filename)
@@ -139,16 +139,16 @@
 	database_folder_id = create_folder('database', drive_service, erpnext_folder_id)
 	files_folder_id = create_folder('files', drive_service, erpnext_folder_id)
 
-	frappe.conn.set_value("Backup Manager", "Backup Manager", "gdrive_access_allowed", allowed)
-	frappe.conn.set_value("Backup Manager", "Backup Manager", "database_folder_id", database_folder_id)
-	frappe.conn.set_value("Backup Manager", "Backup Manager", "files_folder_id", files_folder_id)
+	frappe.db.set_value("Backup Manager", "Backup Manager", "gdrive_access_allowed", allowed)
+	frappe.db.set_value("Backup Manager", "Backup Manager", "database_folder_id", database_folder_id)
+	frappe.db.set_value("Backup Manager", "Backup Manager", "files_folder_id", files_folder_id)
 	final_credentials = credentials.to_json()
-	frappe.conn.set_value("Backup Manager", "Backup Manager", "gdrive_credentials", final_credentials)
+	frappe.db.set_value("Backup Manager", "Backup Manager", "gdrive_credentials", final_credentials)
 
 	frappe.msgprint("Updated")
 
 def create_erpnext_folder(service):
-	if not frappe.conn:
+	if not frappe.db:
 		frappe.connect()
 	erpnext = {
 		'title': 'erpnext',
diff --git a/erpnext/setup/doctype/backup_manager/backup_manager.py b/erpnext/setup/doctype/backup_manager/backup_manager.py
index f6abdb1..c397800 100644
--- a/erpnext/setup/doctype/backup_manager/backup_manager.py
+++ b/erpnext/setup/doctype/backup_manager/backup_manager.py
@@ -18,10 +18,10 @@
 	take_backups_if("Weekly")
 
 def take_backups_if(freq):
-	if frappe.conn.get_value("Backup Manager", None, "upload_backups_to_dropbox")==freq:
+	if frappe.db.get_value("Backup Manager", None, "upload_backups_to_dropbox")==freq:
 		take_backups_dropbox()
 		
-	# if frappe.conn.get_value("Backup Manager", None, "upload_backups_to_gdrive")==freq:
+	# if frappe.db.get_value("Backup Manager", None, "upload_backups_to_gdrive")==freq:
 	# 	take_backups_gdrive()
 	
 @frappe.whitelist()
@@ -71,8 +71,8 @@
 		<p>Please contact your system manager for more information.</p>
 		""" % (service_name, error_status)
 	
-	if not frappe.conn:
+	if not frappe.db:
 		frappe.connect()
 	
-	recipients = frappe.conn.get_value("Backup Manager", None, "send_notifications_to").split(",")
+	recipients = frappe.db.get_value("Backup Manager", None, "send_notifications_to").split(",")
 	sendmail(recipients, subject=subject, msg=message)
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index 2961d24..fb3059b 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -20,7 +20,7 @@
 		exists = False
 		for doctype in ["Sales Invoice", "Delivery Note", "Sales Order", "Quotation",
 			"Purchase Invoice", "Purchase Receipt", "Purchase Order", "Supplier Quotation"]:
-				if frappe.conn.sql("""select name from `tab%s` where company=%s and docstatus=1
+				if frappe.db.sql("""select name from `tab%s` where company=%s and docstatus=1
 					limit 1""" % (doctype, "%s"), self.doc.name):
 						exists = True
 						break
@@ -32,31 +32,31 @@
 			frappe.msgprint("Abbreviation cannot have more than 5 characters",
 				raise_exception=1)
 				
-		self.previous_default_currency = frappe.conn.get_value("Company", self.doc.name, "default_currency")
+		self.previous_default_currency = frappe.db.get_value("Company", self.doc.name, "default_currency")
 		if self.doc.default_currency and self.previous_default_currency and \
 			self.doc.default_currency != self.previous_default_currency and \
 			self.check_if_transactions_exist():
 				msgprint(_("Sorry! You cannot change company's default currency, because there are existing transactions against it. You will need to cancel those transactions if you want to change the default currency."), raise_exception=True)
 
 	def on_update(self):
-		if not frappe.conn.sql("""select name from tabAccount 
+		if not frappe.db.sql("""select name from tabAccount 
 			where company=%s and docstatus<2 limit 1""", self.doc.name):
 			self.create_default_accounts()
 			self.create_default_warehouses()
 			self.create_default_web_page()
 		
-		if not frappe.conn.get_value("Cost Center", {"group_or_ledger": "Ledger", 
+		if not frappe.db.get_value("Cost Center", {"group_or_ledger": "Ledger", 
 				"company": self.doc.name}):
 			self.create_default_cost_center()
 			
 		self.set_default_accounts()
 
 		if self.doc.default_currency:
-			frappe.conn.set_value("Currency", self.doc.default_currency, "enabled", 1)
+			frappe.db.set_value("Currency", self.doc.default_currency, "enabled", 1)
 
 	def create_default_warehouses(self):
 		for whname in ("Stores", "Work In Progress", "Finished Goods"):
-			if not frappe.conn.exists("Warehouse", whname + " - " + self.doc.abbr):
+			if not frappe.db.exists("Warehouse", whname + " - " + self.doc.abbr):
 				frappe.bean({
 					"doctype":"Warehouse",
 					"warehouse_name": whname,
@@ -65,8 +65,8 @@
 				}).insert()
 			
 	def create_default_web_page(self):
-		if not frappe.conn.get_value("Website Settings", None, "home_page") and \
-				not frappe.conn.sql("select name from tabCompany where name!=%s", self.doc.name):
+		if not frappe.db.get_value("Website Settings", None, "home_page") and \
+				not frappe.db.sql("select name from tabCompany where name!=%s", self.doc.name):
 			import os
 			with open(os.path.join(os.path.dirname(__file__), "sample_home_page.html"), "r") as webfile:
 				webpage = frappe.bean({
@@ -217,7 +217,7 @@
 		for d in acc_list_common:
 			self.add_acc(d)
 
-		country = frappe.conn.sql("select value from tabSingles where field = 'country' and doctype = 'Control Panel'")
+		country = frappe.db.sql("select value from tabSingles where field = 'country' and doctype = 'Control Panel'")
 		country = country and cstr(country[0][0]) or ''
 
 		# load taxes (only for India)
@@ -240,8 +240,8 @@
 		def _set_default_accounts(accounts):
 			for a in accounts:
 				account_name = accounts[a] + " - " + self.doc.abbr
-				if not self.doc.fields.get(a) and frappe.conn.exists("Account", account_name):
-					frappe.conn.set(self.doc, a, account_name)
+				if not self.doc.fields.get(a) and frappe.db.exists("Account", account_name):
+					frappe.db.set(self.doc, a, account_name)
 			
 		_set_default_accounts({
 			"receivables_group": "Accounts Receivable",
@@ -249,7 +249,7 @@
 			"default_cash_account": "Cash"
 		})
 		
-		if cint(frappe.conn.get_value("Accounts Settings", None, "auto_accounting_for_stock")):
+		if cint(frappe.db.get_value("Accounts Settings", None, "auto_accounting_for_stock")):
 			_set_default_accounts({
 				"stock_received_but_not_billed": "Stock Received But Not Billed",
 				"stock_adjustment_account": "Stock Adjustment",
@@ -280,28 +280,28 @@
 				cc_bean.ignore_mandatory = True
 			cc_bean.insert()
 			
-		frappe.conn.set(self.doc, "cost_center", "Main - " + self.doc.abbr)
+		frappe.db.set(self.doc, "cost_center", "Main - " + self.doc.abbr)
 
 	def on_trash(self):
 		"""
 			Trash accounts and cost centers for this company if no gl entry exists
 		"""
-		rec = frappe.conn.sql("SELECT name from `tabGL Entry` where company = %s", self.doc.name)
+		rec = frappe.db.sql("SELECT name from `tabGL Entry` where company = %s", self.doc.name)
 		if not rec:
 			#delete tabAccount
-			frappe.conn.sql("delete from `tabAccount` where company = %s order by lft desc, rgt desc", self.doc.name)
+			frappe.db.sql("delete from `tabAccount` where company = %s order by lft desc, rgt desc", self.doc.name)
 			
 			#delete cost center child table - budget detail
-			frappe.conn.sql("delete bd.* from `tabBudget Detail` bd, `tabCost Center` cc where bd.parent = cc.name and cc.company = %s", self.doc.name)
+			frappe.db.sql("delete bd.* from `tabBudget Detail` bd, `tabCost Center` cc where bd.parent = cc.name and cc.company = %s", self.doc.name)
 			#delete cost center
-			frappe.conn.sql("delete from `tabCost Center` WHERE company = %s order by lft desc, rgt desc", self.doc.name)
+			frappe.db.sql("delete from `tabCost Center` WHERE company = %s order by lft desc, rgt desc", self.doc.name)
 			
-		if not frappe.conn.get_value("Stock Ledger Entry", {"company": self.doc.name}):
-			frappe.conn.sql("""delete from `tabWarehouse` where company=%s""", self.doc.name)
+		if not frappe.db.get_value("Stock Ledger Entry", {"company": self.doc.name}):
+			frappe.db.sql("""delete from `tabWarehouse` where company=%s""", self.doc.name)
 			
 		frappe.defaults.clear_default("company", value=self.doc.name)
 			
-		frappe.conn.sql("""update `tabSingles` set value=""
+		frappe.db.sql("""update `tabSingles` set value=""
 			where doctype='Global Defaults' and field='default_company' 
 			and value=%s""", self.doc.name)
 			
@@ -310,19 +310,19 @@
 			frappe.throw(_("Sorry, companies cannot be merged"))
 	
 	def after_rename(self, olddn, newdn, merge=False):
-		frappe.conn.set(self.doc, "company_name", newdn)
+		frappe.db.set(self.doc, "company_name", newdn)
 
-		frappe.conn.sql("""update `tabDefaultValue` set defvalue=%s 
+		frappe.db.sql("""update `tabDefaultValue` set defvalue=%s 
 			where defkey='Company' and defvalue=%s""", (newdn, olddn))
 
 		frappe.defaults.clear_cache()
 
 @frappe.whitelist()
 def replace_abbr(company, old, new):
-	frappe.conn.set_value("Company", company, "abbr", new)
+	frappe.db.set_value("Company", company, "abbr", new)
 	
 	def _rename_record(dt):
-		for d in frappe.conn.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company):
+		for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company):
 			parts = d[0].split(" - ")
 			if parts[-1].lower() == old.lower():
 				name_without_abbr = " - ".join(parts[:-1])
@@ -330,10 +330,10 @@
 		
 	for dt in ["Account", "Cost Center", "Warehouse"]:
 		_rename_record(dt)
-		frappe.conn.commit()
+		frappe.db.commit()
 
 def get_name_with_abbr(name, company):
-	company_abbr = frappe.conn.get_value("Company", company, "abbr")		
+	company_abbr = frappe.db.get_value("Company", company, "abbr")		
 	parts = name.split(" - ")
 
 	if parts[-1].lower() != company_abbr.lower():
diff --git a/erpnext/setup/doctype/currency/currency.py b/erpnext/setup/doctype/currency/currency.py
index 5c7097d..2f6a62a 100644
--- a/erpnext/setup/doctype/currency/currency.py
+++ b/erpnext/setup/doctype/currency/currency.py
@@ -12,7 +12,7 @@
 def validate_conversion_rate(currency, conversion_rate, conversion_rate_label, company):
 	"""common validation for currency and price list currency"""
 
-	company_currency = frappe.conn.get_value("Company", company, "default_currency")
+	company_currency = frappe.db.get_value("Company", company, "default_currency")
 
 	if not conversion_rate:
 		throw(_('%(conversion_rate_label)s is mandatory. Maybe Currency Exchange record is not created for %(from_currency)s to %(to_currency)s') % {
diff --git a/erpnext/setup/doctype/customer_group/customer_group.py b/erpnext/setup/doctype/customer_group/customer_group.py
index 676e425..547f19f 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.py
+++ b/erpnext/setup/doctype/customer_group/customer_group.py
@@ -14,7 +14,7 @@
 		self.nsm_parent_field = 'parent_customer_group';
 
 	def validate(self): 
-		if frappe.conn.sql("select name from `tabCustomer Group` where name = %s and docstatus = 2", 
+		if frappe.db.sql("select name from `tabCustomer Group` where name = %s and docstatus = 2", 
 		 		(self.doc.customer_group_name)):
 			msgprint("""Another %s record is trashed. 
 				To untrash please go to Setup -> Recycle Bin.""" % 
@@ -26,13 +26,13 @@
 		self.validate_one_root()
 		
 	def validate_name_with_customer(self):
-		if frappe.conn.exists("Customer", self.doc.name):
+		if frappe.db.exists("Customer", self.doc.name):
 			frappe.msgprint("An Customer exists with same name (%s), \
 				please change the Customer Group name or rename the Customer" % 
 				self.doc.name, raise_exception=1)
 
 	def on_trash(self):
-		cust = frappe.conn.sql("select name from `tabCustomer` where ifnull(customer_group, '') = %s", 
+		cust = frappe.db.sql("select name from `tabCustomer` where ifnull(customer_group, '') = %s", 
 		 	self.doc.name)
 		cust = [d[0] for d in cust]
 		if cust:
@@ -41,7 +41,7 @@
 				To trash/delete this, remove/change customer group in customer master""" %
 				(self.doc.name, cust or ''), raise_exception=1)
 
-		if frappe.conn.sql("select name from `tabCustomer Group` where parent_customer_group = %s \
+		if frappe.db.sql("select name from `tabCustomer Group` where parent_customer_group = %s \
 				and docstatus != 2", self.doc.name):
 			msgprint("Child customer group exists for this customer group. \
 				You can not trash/cancel/delete this customer group.", raise_exception=1)
diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index 6632a9e..0cdbcb9 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -49,12 +49,12 @@
 		self.doc, self.doclist = doc, doclist
 		self.from_date, self.to_date = self.get_from_to_date()
 		self.future_from_date, self.future_to_date = self.get_future_from_to_date()
-		self.currency = frappe.conn.get_value("Company", self.doc.company,
+		self.currency = frappe.db.get_value("Company", self.doc.company,
 			"default_currency")
 
 	def get_profiles(self):
 		"""get list of profiles"""
-		profile_list = frappe.conn.sql("""
+		profile_list = frappe.db.sql("""
 			select name, enabled from tabProfile
 			where docstatus=0 and name not in ('Administrator', 'Guest')
 			and user_type = "System User"
@@ -71,7 +71,7 @@
 	
 	def send(self):
 		# send email only to enabled users
-		valid_users = [p[0] for p in frappe.conn.sql("""select name from `tabProfile`
+		valid_users = [p[0] for p in frappe.db.sql("""select name from `tabProfile`
 			where enabled=1""")]
 		recipients = filter(lambda r: r in valid_users,
 			self.doc.recipient_list.split("\n"))
@@ -153,7 +153,7 @@
 		return msg
 	
 	def get_income_year_to_date(self):
-		return self.get_income(frappe.conn.get_defaults("year_start_date"), 
+		return self.get_income(frappe.db.get_defaults("year_start_date"), 
 			self.meta.get_label("income_year_to_date"))
 			
 	def get_bank_balance(self):
@@ -339,7 +339,7 @@
 			company = """and company="%s" """ % self.doc.company
 		else:
 			company = ""
-		count = frappe.conn.sql("""select count(*) from `tab%s`
+		count = frappe.db.sql("""select count(*) from `tab%s`
 			where docstatus=%s %s and
 			date(creation)>=%s and date(creation)<=%s""" % 
 			(doctype, docstatus, company, "%s", "%s"), (self.from_date, self.to_date))
@@ -348,7 +348,7 @@
 		return count, self.get_html(label, None, count)
 		
 	def get_new_sum(self, doctype, label, sum_field):
-		count_sum = frappe.conn.sql("""select count(*), sum(ifnull(`%s`, 0))
+		count_sum = frappe.db.sql("""select count(*), sum(ifnull(`%s`, 0))
 			from `tab%s` where docstatus=1 and company = %s and
 			date(creation)>=%s and date(creation)<=%s""" % (sum_field, doctype, "%s",
 			"%s", "%s"), (self.doc.company, self.from_date, self.to_date))
@@ -372,7 +372,7 @@
 				hasattr(self, "gl_entries"):
 			return self.gl_entries
 		
-		gl_entries = frappe.conn.sql("""select `account`, 
+		gl_entries = frappe.db.sql("""select `account`, 
 			ifnull(credit, 0) as credit, ifnull(debit, 0) as debit, `against`
 			from `tabGL Entry`
 			where company=%s 
@@ -388,7 +388,7 @@
 		
 	def get_accounts(self):
 		if not hasattr(self, "accounts"):
-			self.accounts = frappe.conn.sql("""select name, is_pl_account,
+			self.accounts = frappe.db.sql("""select name, is_pl_account,
 				debit_or_credit, account_type, account_name, master_type
 				from `tabAccount` where company=%s and docstatus < 2
 				and group_or_ledger = "Ledger" order by lft""",
@@ -451,7 +451,7 @@
 		return send_date
 	
 	def get_open_tickets(self):
-		open_tickets = frappe.conn.sql("""select name, subject, modified, raised_by
+		open_tickets = frappe.db.sql("""select name, subject, modified, raised_by
 			from `tabSupport Ticket` where status='Open'
 			order by modified desc limit 10""", as_dict=True)
 			
@@ -479,7 +479,7 @@
 		# do not send email digests to expired accounts
 		return
 	
-	for ed in frappe.conn.sql("""select name from `tabEmail Digest`
+	for ed in frappe.db.sql("""select name from `tabEmail Digest`
 			where enabled=1 and docstatus<2""", as_list=1):
 		ed_obj = get_obj('Email Digest', ed[0])
 		if (now_date == ed_obj.get_next_sending()):
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.py b/erpnext/setup/doctype/global_defaults/global_defaults.py
index 2bbe507..d61ff8a 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.py
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.py
@@ -32,22 +32,22 @@
 		self.update_control_panel()
 		
 		for key in keydict:
-			frappe.conn.set_default(key, self.doc.fields.get(keydict[key], ''))
+			frappe.db.set_default(key, self.doc.fields.get(keydict[key], ''))
 			
 		# update year start date and year end date from fiscal_year
-		year_start_end_date = frappe.conn.sql("""select year_start_date, year_end_date 
+		year_start_end_date = frappe.db.sql("""select year_start_date, year_end_date 
 			from `tabFiscal Year` where name=%s""", self.doc.current_fiscal_year)
 
 		ysd = year_start_end_date[0][0] or ''
 		yed = year_start_end_date[0][1] or ''
 
 		if ysd and yed:
-			frappe.conn.set_default('year_start_date', ysd.strftime('%Y-%m-%d'))
-			frappe.conn.set_default('year_end_date', yed.strftime('%Y-%m-%d'))
+			frappe.db.set_default('year_start_date', ysd.strftime('%Y-%m-%d'))
+			frappe.db.set_default('year_end_date', yed.strftime('%Y-%m-%d'))
 		
 		# enable default currency
 		if self.doc.default_currency:
-			frappe.conn.set_value("Currency", self.doc.default_currency, "enabled", 1)
+			frappe.db.set_value("Currency", self.doc.default_currency, "enabled", 1)
 		
 		# clear cache
 		frappe.clear_cache()
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index 2379291..aa1002e 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -25,6 +25,6 @@
 		self.validate_one_root()
 		
 	def validate_name_with_item(self):
-		if frappe.conn.exists("Item", self.doc.name):
+		if frappe.db.exists("Item", self.doc.name):
 			frappe.msgprint("An item exists with same name (%s), please change the \
 				item group name or rename the item" % self.doc.name, raise_exception=1)
diff --git a/erpnext/setup/doctype/item_group/test_item_group.py b/erpnext/setup/doctype/item_group/test_item_group.py
index 1169734..0f174ed 100644
--- a/erpnext/setup/doctype/item_group/test_item_group.py
+++ b/erpnext/setup/doctype/item_group/test_item_group.py
@@ -79,18 +79,18 @@
 class TestItem(unittest.TestCase):
 	def test_basic_tree(self, records=None):
 		min_lft = 1
-		max_rgt = frappe.conn.sql("select max(rgt) from `tabItem Group`")[0][0]
+		max_rgt = frappe.db.sql("select max(rgt) from `tabItem Group`")[0][0]
 		
 		if not records:
 			records = test_records[2:]
 		
 		for item_group in records:
 			item_group = item_group[0]
-			lft, rgt, parent_item_group = frappe.conn.get_value("Item Group", item_group["item_group_name"], 
+			lft, rgt, parent_item_group = frappe.db.get_value("Item Group", item_group["item_group_name"], 
 				["lft", "rgt", "parent_item_group"])
 			
 			if parent_item_group:
-				parent_lft, parent_rgt = frappe.conn.get_value("Item Group", parent_item_group,
+				parent_lft, parent_rgt = frappe.db.get_value("Item Group", parent_item_group,
 					["lft", "rgt"])
 			else:
 				# root
@@ -116,7 +116,7 @@
 		def get_no_of_children(item_groups, no_of_children):
 			children = []
 			for ig in item_groups:
-				children += frappe.conn.sql_list("""select name from `tabItem Group`
+				children += frappe.db.sql_list("""select name from `tabItem Group`
 				where ifnull(parent_item_group, '')=%s""", ig or '')
 			
 			if len(children):
@@ -147,7 +147,7 @@
 		
 	def test_move_group_into_another(self):
 		# before move
-		old_lft, old_rgt = frappe.conn.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
+		old_lft, old_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
 		
 		# put B under C
 		group_b = frappe.bean("Item Group", "_Test Item Group B")
@@ -158,7 +158,7 @@
 		self.test_basic_tree()
 		
 		# after move
-		new_lft, new_rgt = frappe.conn.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
+		new_lft, new_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
 		
 		# lft should reduce
 		self.assertEquals(old_lft - new_lft, rgt - lft + 1)
@@ -180,11 +180,11 @@
 		
 	def print_tree(self):
 		import json
-		print json.dumps(frappe.conn.sql("select name, lft, rgt from `tabItem Group` order by lft"), indent=1)
+		print json.dumps(frappe.db.sql("select name, lft, rgt from `tabItem Group` order by lft"), indent=1)
 		
 	def test_move_leaf_into_another_group(self):
 		# before move
-		old_lft, old_rgt = frappe.conn.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
+		old_lft, old_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
 		
 		group_b_3 = frappe.bean("Item Group", "_Test Item Group B - 3")
 		lft, rgt = group_b_3.doc.lft, group_b_3.doc.rgt
@@ -194,7 +194,7 @@
 		group_b_3.save()
 		self.test_basic_tree()
 		
-		new_lft, new_rgt = frappe.conn.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
+		new_lft, new_rgt = frappe.db.get_value("Item Group", "_Test Item Group C", ["lft", "rgt"])
 		
 		# lft should remain the same
 		self.assertEquals(old_lft - new_lft, 0)
@@ -210,11 +210,11 @@
 		
 	def test_delete_leaf(self):
 		# for checking later
-		parent_item_group = frappe.conn.get_value("Item Group", "_Test Item Group B - 3", "parent_item_group")
-		rgt = frappe.conn.get_value("Item Group", parent_item_group, "rgt")
+		parent_item_group = frappe.db.get_value("Item Group", "_Test Item Group B - 3", "parent_item_group")
+		rgt = frappe.db.get_value("Item Group", parent_item_group, "rgt")
 		
 		ancestors = get_ancestors_of("Item Group", "_Test Item Group B - 3")
-		ancestors = frappe.conn.sql("""select name, rgt from `tabItem Group`
+		ancestors = frappe.db.sql("""select name, rgt from `tabItem Group`
 			where name in ({})""".format(", ".join(["%s"]*len(ancestors))), tuple(ancestors), as_dict=True)
 		
 		frappe.delete_doc("Item Group", "_Test Item Group B - 3")
@@ -224,7 +224,7 @@
 		
 		# rgt of each ancestor would reduce by 2
 		for item_group in ancestors:
-			new_lft, new_rgt = frappe.conn.get_value("Item Group", item_group.name, ["lft", "rgt"])
+			new_lft, new_rgt = frappe.db.get_value("Item Group", item_group.name, ["lft", "rgt"])
 			self.assertEquals(new_rgt, item_group.rgt - 2)
 		
 		# insert it back
@@ -247,7 +247,7 @@
 		self.test_basic_tree()
 		
 		# move its children back
-		for name in frappe.conn.sql_list("""select name from `tabItem Group`
+		for name in frappe.db.sql_list("""select name from `tabItem Group`
 			where parent_item_group='_Test Item Group C'"""):
 			
 			bean = frappe.bean("Item Group", name)
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index 5a50b7b..5b0c9e2 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -15,13 +15,13 @@
 	def get_transactions(self, arg=None):
 		return {
 			"transactions": "\n".join([''] + sorted(list(set(
-				frappe.conn.sql_list("""select parent
+				frappe.db.sql_list("""select parent
 					from `tabDocField` where fieldname='naming_series'""") 
-				+ frappe.conn.sql_list("""select dt from `tabCustom Field` 
+				+ frappe.db.sql_list("""select dt from `tabCustom Field` 
 					where fieldname='naming_series'""")
 				)))),
 			"prefixes": "\n".join([''] + [i[0] for i in 
-				frappe.conn.sql("""select name from tabSeries order by name""")])
+				frappe.db.sql("""select name from tabSeries order by name""")])
 		}
 
 	def scrub_options_list(self, ol):
@@ -59,7 +59,7 @@
 		from frappe.model.doc import Document
 		prop_dict = {'options': "\n".join(options), 'default': default}
 		for prop in prop_dict:
-			ps_exists = frappe.conn.sql("""SELECT name FROM `tabProperty Setter`
+			ps_exists = frappe.db.sql("""SELECT name FROM `tabProperty Setter`
 					WHERE doc_type = %s AND field_name = 'naming_series'
 					AND property = %s""", (doctype, prop))
 			if ps_exists:
@@ -86,11 +86,11 @@
 		dt = DocType()
 
 		parent = list(set(
-			frappe.conn.sql_list("""select dt.name 
+			frappe.db.sql_list("""select dt.name 
 				from `tabDocField` df, `tabDocType` dt 
 				where dt.name = df.parent and df.fieldname='naming_series' and dt.name != %s""",
 				self.doc.select_doc_for_series)
-			+ frappe.conn.sql_list("""select dt.name 
+			+ frappe.db.sql_list("""select dt.name 
 				from `tabCustom Field` df, `tabDocType` dt 
 				where dt.name = df.dt and df.fieldname='naming_series' and dt.name != %s""",
 				self.doc.select_doc_for_series)
@@ -126,19 +126,19 @@
 	def get_current(self, arg=None):
 		"""get series current"""
 		if self.doc.prefix:
-			self.doc.current_value = frappe.conn.get_value("Series", 
+			self.doc.current_value = frappe.db.get_value("Series", 
 				self.doc.prefix.split('.')[0], "current")
 
 	def insert_series(self, series):
 		"""insert series if missing"""
-		if not frappe.conn.exists('Series', series):
-			frappe.conn.sql("insert into tabSeries (name, current) values (%s, 0)", (series))
+		if not frappe.db.exists('Series', series):
+			frappe.db.sql("insert into tabSeries (name, current) values (%s, 0)", (series))
 
 	def update_series_start(self):
 		if self.doc.prefix:
 			prefix = self.doc.prefix.split('.')[0]
 			self.insert_series(prefix)
-			frappe.conn.sql("update `tabSeries` set current = %s where name = %s", 
+			frappe.db.sql("update `tabSeries` set current = %s where name = %s", 
 				(self.doc.current_value, prefix))
 			msgprint(_("Series Updated Successfully"))
 		else:
@@ -151,7 +151,7 @@
 		make_property_setter(doctype, "naming_series", "reqd", 1, "Check")
 
 		# set values for mandatory
-		frappe.conn.sql("""update `tab{doctype}` set naming_series={s} where 
+		frappe.db.sql("""update `tab{doctype}` set naming_series={s} where 
 			ifnull(naming_series, '')=''""".format(doctype=doctype, s="%s"), 
 			get_default_naming_series(doctype))
 
@@ -167,7 +167,7 @@
 			make_property_setter(doctype, fieldname, "reqd", 1, "Check")
 
 			# set values for mandatory
-			frappe.conn.sql("""update `tab{doctype}` set `{fieldname}`=`name` where 
+			frappe.db.sql("""update `tab{doctype}` set `{fieldname}`=`name` where 
 				ifnull({fieldname}, '')=''""".format(doctype=doctype, fieldname=fieldname))
 
 def get_default_naming_series(doctype):
diff --git a/erpnext/setup/doctype/notification_control/notification_control.py b/erpnext/setup/doctype/notification_control/notification_control.py
index 2385067..c513746 100644
--- a/erpnext/setup/doctype/notification_control/notification_control.py
+++ b/erpnext/setup/doctype/notification_control/notification_control.py
@@ -13,11 +13,11 @@
 
 	def get_message(self, arg):
 		fn = arg.lower().replace(' ', '_') + '_message'
-		v = frappe.conn.sql("select value from tabSingles where field=%s and doctype=%s", (fn, 'Notification Control'))
+		v = frappe.db.sql("select value from tabSingles where field=%s and doctype=%s", (fn, 'Notification Control'))
 		return v and v[0][0] or ''
 
 	def set_message(self, arg = ''):
 		fn = self.doc.select_transaction.lower().replace(' ', '_') + '_message'
-		frappe.conn.set(self.doc, fn, self.doc.custom_message)
+		frappe.db.set(self.doc, fn, self.doc.custom_message)
 		msgprint("Custom Message for %s updated!" % self.doc.select_transaction)
 
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py
index 76eaca2..288cadf 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.py
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.py
@@ -16,7 +16,7 @@
 
 	def get_contacts(self,nm):
 		if nm:
-			contact_details =frappe.conn.convert_to_lists(frappe.conn.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where sales_partner = '%s'"%nm))
+			contact_details =frappe.db.convert_to_lists(frappe.db.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where sales_partner = '%s'"%nm))
 			return contact_details
 		else:
 			return ''
diff --git a/erpnext/setup/doctype/sales_person/sales_person.py b/erpnext/setup/doctype/sales_person/sales_person.py
index 6bf2cc3..7bf2fd6 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.py
+++ b/erpnext/setup/doctype/sales_person/sales_person.py
@@ -23,9 +23,9 @@
 		self.validate_one_root()
 	
 	def get_email_id(self):
-		profile = frappe.conn.get_value("Employee", self.doc.employee, "user_id")
+		profile = frappe.db.get_value("Employee", self.doc.employee, "user_id")
 		if not profile:
 			frappe.throw("User ID (Profile) not set for Employee %s" % self.doc.employee)
 		else:
-			return frappe.conn.get_value("Profile", profile, "email") or profile
+			return frappe.db.get_value("Profile", profile, "email") or profile
 		
\ No newline at end of file
diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py
index 0dd79e5..35e3534 100644
--- a/erpnext/setup/install.py
+++ b/erpnext/setup/install.py
@@ -8,12 +8,12 @@
 def after_install():
 	import_defaults()
 	import_country_and_currency()
-	frappe.conn.set_value('Control Panel', None, 'home_page', 'setup-wizard')
+	frappe.db.set_value('Control Panel', None, 'home_page', 'setup-wizard')
 	feature_setup()
 	from erpnext.setup.page.setup_wizard.setup_wizard import add_all_roles_to
 	add_all_roles_to("Administrator")
 	set_single_defaults()
-	frappe.conn.commit()
+	frappe.db.commit()
 
 def import_country_and_currency():
 	from frappe.country_info import get_all
@@ -28,7 +28,7 @@
 			"time_zones": "\n".join(country.timezones or [])
 		}).insert()
 		
-		if country.currency and not frappe.conn.exists("Currency", country.currency):
+		if country.currency and not frappe.db.exists("Currency", country.currency):
 			frappe.doc({
 				"doctype": "Currency",
 				"currency_name": country.currency,
@@ -133,11 +133,11 @@
 
 def set_single_defaults():
 	sql = "select dt.name, df.fieldname, df.default from `tabDocType` dt, `tabDocField` df where dt.issingle=1 and df.parent=dt.name and ifnull(df.default, '')!=''"
-	for doctype, field, value in frappe.conn.sql(sql):
+	for doctype, field, value in frappe.db.sql(sql):
 		b = frappe.bean(doctype, doctype)
 		try:
 			setattr(b.doc.fields, field, value)
 			b.save()
 		except frappe.MandatoryError:
 			pass
-	frappe.conn.set_default("date_format", "dd-mm-yyyy")
+	frappe.db.set_default("date_format", "dd-mm-yyyy")
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index 3d7b1b5..cec6212 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -10,7 +10,7 @@
 
 @frappe.whitelist()
 def setup_account(args=None):
-	# if frappe.conn.sql("select name from tabCompany"):
+	# if frappe.db.sql("select name from tabCompany"):
 	# 	frappe.throw(_("Setup Already Complete!!"))
 		
 	if not args:
@@ -31,10 +31,10 @@
 	create_items(args)
 	create_customers(args)
 	create_suppliers(args)
-	frappe.conn.set_value('Control Panel', None, 'home_page', 'desktop')
+	frappe.db.set_value('Control Panel', None, 'home_page', 'desktop')
 
 	frappe.clear_cache()
-	frappe.conn.commit()
+	frappe.db.commit()
 	
 	# suppress msgprints
 	frappe.local.message_log = []
@@ -61,13 +61,13 @@
 		# Update Profile
 		if not args.get('last_name') or args.get('last_name')=='None': 
 				args['last_name'] = None
-		frappe.conn.sql("""update `tabProfile` SET first_name=%(first_name)s,
+		frappe.db.sql("""update `tabProfile` SET first_name=%(first_name)s,
 			last_name=%(last_name)s WHERE name=%(name)s""", args)
 		
 	if args.get("attach_profile"):
 		filename, filetype, content = args.get("attach_profile").split(",")
 		fileurl = save_file(filename, content, "Profile", args.get("name"), decode=True).file_name
-		frappe.conn.set_value("Profile", args.get("name"), "user_image", fileurl)
+		frappe.db.set_value("Profile", args.get("name"), "user_image", fileurl)
 		
 	add_all_roles_to(args.get("name"))
 	
@@ -112,14 +112,14 @@
 	
 def set_defaults(args):
 	# enable default currency
-	frappe.conn.set_value("Currency", args.get("currency"), "enabled", 1)
+	frappe.db.set_value("Currency", args.get("currency"), "enabled", 1)
 	
 	global_defaults = frappe.bean("Global Defaults", "Global Defaults")
 	global_defaults.doc.fields.update({
 		'current_fiscal_year': args.curr_fiscal_year,
 		'default_currency': args.get('currency'),
 		'default_company':args.get('company_name'),
-		'date_format': frappe.conn.get_value("Country", args.get("country"), "date_format"),
+		'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"),
 		"float_precision": 3,
 		"country": args.get("country"),
 		"time_zone": args.get("time_zone")
@@ -181,9 +181,9 @@
 	if not system_managers: 
 		return
 	
-	companies = frappe.conn.sql_list("select name FROM `tabCompany`")
+	companies = frappe.db.sql_list("select name FROM `tabCompany`")
 	for company in companies:
-		if not frappe.conn.exists("Email Digest", "Default Weekly Digest - " + company):
+		if not frappe.db.exists("Email Digest", "Default Weekly Digest - " + company):
 			edigest = frappe.bean({
 				"doctype": "Email Digest",
 				"name": "Default Weekly Digest - " + company,
@@ -253,7 +253,7 @@
 			if args.get("item_img_" + str(i)):
 				filename, filetype, content = args.get("item_img_" + str(i)).split(",")
 				fileurl = save_file(filename, content, "Item", item, decode=True).file_name
-				frappe.conn.set_value("Item", item, "image", fileurl)
+				frappe.db.set_value("Item", item, "image", fileurl)
 					
 	for i in xrange(1,6):
 		item = args.get("item_buy_" + str(i))
@@ -274,7 +274,7 @@
 			if args.get("item_img_" + str(i)):
 				filename, filetype, content = args.get("item_img_" + str(i)).split(",")
 				fileurl = save_file(filename, content, "Item", item, decode=True).file_name
-				frappe.conn.set_value("Item", item, "image", fileurl)
+				frappe.db.set_value("Item", item, "image", fileurl)
 
 
 def create_customers(args):
@@ -330,13 +330,13 @@
 		
 		filename, filetype, content = args.get("attach_letterhead").split(",")
 		fileurl = save_file(filename, content, "Letter Head", "Standard", decode=True).file_name
-		frappe.conn.set_value("Letter Head", "Standard", "content", "<img src='%s' style='max-width: 100%%;'>" % fileurl)
+		frappe.db.set_value("Letter Head", "Standard", "content", "<img src='%s' style='max-width: 100%%;'>" % fileurl)
 		
 		
 				
 def add_all_roles_to(name):
 	profile = frappe.doc("Profile", name)
-	for role in frappe.conn.sql("""select name from tabRole"""):
+	for role in frappe.db.sql("""select name from tabRole"""):
 		if role[0] not in ["Administrator", "Guest", "All", "Customer", "Supplier", "Partner"]:
 			d = profile.addchild("user_roles", "UserRole")
 			d.role = role[0]
@@ -345,10 +345,10 @@
 def create_territories():
 	"""create two default territories, one for home country and one named Rest of the World"""
 	from frappe.utils.nestedset import get_root_of
-	country = frappe.conn.get_value("Control Panel", None, "country")
+	country = frappe.db.get_value("Control Panel", None, "country")
 	root_territory = get_root_of("Territory")
 	for name in (country, "Rest Of The World"):
-		if name and not frappe.conn.exists("Territory", name):
+		if name and not frappe.db.exists("Territory", name):
 			frappe.bean({
 				"doctype": "Territory",
 				"territory_name": name.replace("'", ""),
diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py
index 30fae1b..0bd614f 100644
--- a/erpnext/setup/utils.py
+++ b/erpnext/setup/utils.py
@@ -7,9 +7,9 @@
 import json
 
 def get_company_currency(company):
-	currency = frappe.conn.get_value("Company", company, "default_currency")
+	currency = frappe.db.get_value("Company", company, "default_currency")
 	if not currency:
-		currency = frappe.conn.get_default("currency")
+		currency = frappe.db.get_default("currency")
 	if not currency:
 		throw(_('Please specify Default Currency in Company Master \
 			and Global Defaults'))
@@ -18,21 +18,21 @@
 
 def get_root_of(doctype):
 	"""Get root element of a DocType with a tree structure"""
-	result = frappe.conn.sql_list("""select name from `tab%s` 
+	result = frappe.db.sql_list("""select name from `tab%s` 
 		where lft=1 and rgt=(select max(rgt) from `tab%s` where docstatus < 2)""" % 
 		(doctype, doctype))
 	return result[0] if result else None
 	
 def get_ancestors_of(doctype, name):
 	"""Get ancestor elements of a DocType with a tree structure"""
-	lft, rgt = frappe.conn.get_value(doctype, name, ["lft", "rgt"])
-	result = frappe.conn.sql_list("""select name from `tab%s` 
+	lft, rgt = frappe.db.get_value(doctype, name, ["lft", "rgt"])
+	result = frappe.db.sql_list("""select name from `tab%s` 
 		where lft<%s and rgt>%s order by lft desc""" % (doctype, "%s", "%s"), (lft, rgt))
 	return result or []
 
 @frappe.whitelist()
 def get_price_list_currency(price_list):
-	price_list_currency = frappe.conn.get_value("Price List", {"name": price_list, 
+	price_list_currency = frappe.db.get_value("Price List", {"name": price_list, 
 		"enabled": 1}, "currency")
 
 	if not price_list_currency:
diff --git a/erpnext/startup/__init__.py b/erpnext/startup/__init__.py
index a3fe7ce..faafb76 100644
--- a/erpnext/startup/__init__.py
+++ b/erpnext/startup/__init__.py
@@ -34,7 +34,7 @@
 def get_monthly_bulk_mail_limit():
 	import frappe
 	# if global settings, then 500 or unlimited
-	if frappe.conn.get_value('Email Settings', None, 'outgoing_mail_server'):
+	if frappe.db.get_value('Email Settings', None, 'outgoing_mail_server'):
 		return 999999
 	else:
 		return 500
diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py
index 148f373..c342eab 100644
--- a/erpnext/startup/boot.py
+++ b/erpnext/startup/boot.py
@@ -10,7 +10,7 @@
 	import frappe
 	import frappe.model.doc
 	
-	bootinfo['custom_css'] = frappe.conn.get_value('Style Settings', None, 'custom_css') or ''
+	bootinfo['custom_css'] = frappe.db.get_value('Style Settings', None, 'custom_css') or ''
 	bootinfo['website_settings'] = frappe.model.doc.getsingle('Website Settings')
 
 	if frappe.session['user']!='Guest':
@@ -23,10 +23,10 @@
 			"Notification Control").get_values()
 				
 		# if no company, show a dialog box to create a new company
-		bootinfo["customer_count"] = frappe.conn.sql("""select count(*) from tabCustomer""")[0][0]
+		bootinfo["customer_count"] = frappe.db.sql("""select count(*) from tabCustomer""")[0][0]
 
 		if not bootinfo["customer_count"]:
-			bootinfo['setup_complete'] = frappe.conn.sql("""select name from 
+			bootinfo['setup_complete'] = frappe.db.sql("""select name from 
 				tabCompany limit 1""") and 'Yes' or 'No'
 		
 		
@@ -35,20 +35,20 @@
 		for key in ['max_users', 'expires_on', 'max_space', 'status', 'commercial_support']:
 			if key in conf: bootinfo[key] = conf.get(key)
 
-		bootinfo['docs'] += frappe.conn.sql("""select name, default_currency, cost_center
+		bootinfo['docs'] += frappe.db.sql("""select name, default_currency, cost_center
             from `tabCompany`""", as_dict=1, update={"doctype":":Company"})
 
 def load_country_and_currency(bootinfo):
 	if bootinfo.control_panel.country and \
-		frappe.conn.exists("Country", bootinfo.control_panel.country):
+		frappe.db.exists("Country", bootinfo.control_panel.country):
 		bootinfo["docs"] += [frappe.doc("Country", bootinfo.control_panel.country)]
 		
-	bootinfo["docs"] += frappe.conn.sql("""select * from tabCurrency
+	bootinfo["docs"] += frappe.db.sql("""select * from tabCurrency
 		where ifnull(enabled,0)=1""", as_dict=1, update={"doctype":":Currency"})
 
 def get_letter_heads():
 	import frappe
-	ret = frappe.conn.sql("""select name, content from `tabLetter Head` 
+	ret = frappe.db.sql("""select name, content from `tabLetter Head` 
 		where ifnull(disabled,0)=0""")
 	return dict(ret)
 	
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index 5fd8436..1fb7ea0 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -14,8 +14,8 @@
 		# create feed
 		from frappe.utils import nowtime
 		from frappe.profile import get_user_fullname
-		frappe.conn.begin()
+		frappe.db.begin()
 		make_feed('Login', 'Profile', login_manager.user, login_manager.user,
 			'%s logged in at %s' % (get_user_fullname(login_manager.user), nowtime()), 
 			login_manager.user=='Administrator' and '#8CA2B3' or '#1B750D')
-		frappe.conn.commit()
\ No newline at end of file
+		frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index f546911..1b5e243 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -16,7 +16,7 @@
 		
 	def validate(self):
 		if self.doc.fields.get("__islocal") or not self.doc.stock_uom:
-			self.doc.stock_uom = frappe.conn.get_value('Item', self.doc.item_code, 'stock_uom')
+			self.doc.stock_uom = frappe.db.get_value('Item', self.doc.item_code, 'stock_uom')
 				
 		self.validate_mandatory()
 		
@@ -60,7 +60,7 @@
 		self.doc.save()
 		
 	def get_first_sle(self):
-		sle = frappe.conn.sql("""
+		sle = frappe.db.sql("""
 			select * from `tabStock Ledger Entry`
 			where item_code = %s
 			and warehouse = %s
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 3eeb4b7..42d1eec 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -34,7 +34,7 @@
 		}]
 		
 	def onload(self):
-		billed_qty = frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tabSales Invoice Item`
+		billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Invoice Item`
 			where docstatus=1 and delivery_note=%s""", self.doc.name)
 		if billed_qty:
 			total_qty = sum((item.qty for item in self.doclist.get({"parentfield": "delivery_note_details"})))
@@ -46,12 +46,12 @@
 	def set_actual_qty(self):
 		for d in getlist(self.doclist, 'delivery_note_details'):
 			if d.item_code and d.warehouse:
-				actual_qty = frappe.conn.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse))
+				actual_qty = frappe.db.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse))
 				d.actual_qty = actual_qty and flt(actual_qty[0][0]) or 0
 
 	def so_required(self):
 		"""check in manage account if sales order required or not"""
-		if frappe.conn.get_value("Selling Settings", None, 'so_required') == 'Yes':
+		if frappe.db.get_value("Selling Settings", None, 'so_required') == 'Yes':
 			 for d in getlist(self.doclist,'delivery_note_details'):
 				 if not d.against_sales_order:
 					 msgprint("Sales Order No. required against item %s"%d.item_code)
@@ -104,7 +104,7 @@
 	def validate_proj_cust(self):
 		"""check for does customer belong to same project as entered.."""
 		if self.doc.project_name and self.doc.customer:
-			res = frappe.conn.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			res = frappe.db.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
 			if not res:
 				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
 				raise Exception
@@ -115,7 +115,7 @@
 			e = [d.item_code, d.description, d.warehouse, d.against_sales_order or d.against_sales_invoice, d.batch_no or '']
 			f = [d.item_code, d.description, d.against_sales_order or d.against_sales_invoice]
 
-			if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
+			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
 				if e in check_list:
 					msgprint("Please check whether item %s has been entered twice wrongly." 
 						% d.item_code)
@@ -130,7 +130,7 @@
 
 	def validate_warehouse(self):
 		for d in self.get_item_list():
-			if frappe.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
+			if frappe.db.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
 				if not d['warehouse']:
 					msgprint("Please enter Warehouse for item %s as it is stock item"
 						% d['item_code'], raise_exception=1)
@@ -138,11 +138,11 @@
 
 	def update_current_stock(self):
 		for d in getlist(self.doclist, 'delivery_note_details'):
-			bin = frappe.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+			bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
 			d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
 
 		for d in getlist(self.doclist, 'packing_details'):
-			bin = frappe.conn.sql("select actual_qty, projected_qty from `tabBin` where item_code =	%s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+			bin = frappe.db.sql("select actual_qty, projected_qty from `tabBin` where item_code =	%s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
 			d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
 			d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
 
@@ -163,7 +163,7 @@
 		self.make_gl_entries()
 
 		# set DN status
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 
 
 	def on_cancel(self):
@@ -174,7 +174,7 @@
 		
 		self.update_stock_ledger()
 
-		frappe.conn.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self.doc, 'status', 'Cancelled')
 		self.cancel_packing_slips()
 		
 		self.make_cancel_gl_entries()
@@ -201,12 +201,12 @@
 			frappe.msgprint("Packing Error:\n" + err_msg, raise_exception=1)
 
 	def check_next_docstatus(self):
-		submit_rv = frappe.conn.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_rv = frappe.db.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
 		if submit_rv:
 			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
 			raise Exception , "Validation Error."
 
-		submit_in = frappe.conn.sql("select t1.name from `tabInstallation Note` t1, `tabInstallation Note Item` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_in = frappe.db.sql("select t1.name from `tabInstallation Note` t1, `tabInstallation Note Item` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
 		if submit_in:
 			msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
 			raise Exception , "Validation Error."
@@ -215,7 +215,7 @@
 		"""
 			Cancel submitted packing slips related to this delivery note
 		"""
-		res = frappe.conn.sql("""SELECT name FROM `tabPacking Slip` WHERE delivery_note = %s 
+		res = frappe.db.sql("""SELECT name FROM `tabPacking Slip` WHERE delivery_note = %s 
 			AND docstatus = 1""", self.doc.name)
 
 		if res:
@@ -229,7 +229,7 @@
 	def update_stock_ledger(self):
 		sl_entries = []
 		for d in self.get_item_list():
-			if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
+			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
 					and d.warehouse:
 				self.update_reserved_qty(d)
 										
@@ -270,7 +270,7 @@
 	"""returns a map: {dn_detail: invoiced_qty}"""
 	invoiced_qty_map = {}
 	
-	for dn_detail, qty in frappe.conn.sql("""select dn_detail, qty from `tabSales Invoice Item`
+	for dn_detail, qty in frappe.db.sql("""select dn_detail, qty from `tabSales Invoice Item`
 		where delivery_note=%s and docstatus=1""", delivery_note):
 			if not invoiced_qty_map.get(dn_detail):
 				invoiced_qty_map[dn_detail] = 0
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 30ff38d..16b8d3b 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -52,7 +52,7 @@
 		dn.insert()
 		dn.submit()
 		
-		stock_value, stock_value_difference = frappe.conn.get_value("Stock Ledger Entry", 
+		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
 			{"voucher_type": "Delivery Note", "voucher_no": dn.doc.name, 
 				"item_code": "_Test Item"}, ["stock_value", "stock_value_difference"])
 		self.assertEqual(stock_value, 0)
@@ -64,7 +64,7 @@
 		self.clear_stock_account_balance()
 		set_perpetual_inventory()
 		self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
-		frappe.conn.set_value("Item", "_Test Item", "valuation_method", "FIFO")
+		frappe.db.set_value("Item", "_Test Item", "valuation_method", "FIFO")
 		
 		_insert_purchase_receipt()
 		
@@ -72,7 +72,7 @@
 		dn.doclist[1].expense_account = "Cost of Goods Sold - _TC"
 		dn.doclist[1].cost_center = "Main - _TC"
 
-		stock_in_hand_account = frappe.conn.get_value("Account", 
+		stock_in_hand_account = frappe.db.get_value("Account", 
 			{"master_name": dn.doclist[1].warehouse})
 		
 		from erpnext.accounts.utils import get_balance_on
@@ -127,7 +127,7 @@
 		dn.doclist[1].item_code = "_Test Sales BOM Item"
 		dn.doclist[1].qty = 1
 	
-		stock_in_hand_account = frappe.conn.get_value("Account", 
+		stock_in_hand_account = frappe.db.get_value("Account", 
 			{"master_name": dn.doclist[1].warehouse})
 		
 		from erpnext.accounts.utils import get_balance_on
@@ -169,9 +169,9 @@
 		dn.insert()
 		dn.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "status"), "Delivered")
-		self.assertFalse(frappe.conn.get_value("Serial No", serial_nos[0], "warehouse"))
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], 
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Delivered")
+		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], 
 			"delivery_document_no"), dn.doc.name)
 			
 		return dn
@@ -183,9 +183,9 @@
 
 		serial_nos = get_serial_nos(dn.doclist[1].serial_no)
 
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "status"), "Available")
-		self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
-		self.assertFalse(frappe.conn.get_value("Serial No", serial_nos[0], 
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Available")
+		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
+		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], 
 			"delivery_document_no"))
 
 	def test_serialize_status(self):
@@ -208,9 +208,9 @@
 		self.assertRaises(SerialNoStatusError, dn.submit)
 		
 	def clear_stock_account_balance(self):
-		frappe.conn.sql("""delete from `tabBin`""")
-		frappe.conn.sql("delete from `tabStock Ledger Entry`")
-		frappe.conn.sql("delete from `tabGL Entry`")
+		frappe.db.sql("""delete from `tabBin`""")
+		frappe.db.sql("delete from `tabStock Ledger Entry`")
+		frappe.db.sql("delete from `tabGL Entry`")
 
 test_dependencies = ["Sales BOM"]
 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 3c0b71f..58d151a 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -18,7 +18,7 @@
 		self.doc.fields["__sle_exists"] = self.check_if_sle_exists()
 	
 	def autoname(self):
-		if frappe.conn.get_default("item_naming_by")=="Naming Series":
+		if frappe.db.get_default("item_naming_by")=="Naming Series":
 			from frappe.model.doc import make_autoname
 			self.doc.item_code = make_autoname(self.doc.naming_series+'.#####')
 		elif not self.doc.item_code:
@@ -46,7 +46,7 @@
 			self.doc.parent_website_route = frappe.get_website_route("Item Group", self.doc.item_group)
 
 		if self.doc.name:
-			self.old_page_name = frappe.conn.get_value('Item', self.doc.name, 'page_name')
+			self.old_page_name = frappe.db.get_value('Item', self.doc.name, 'page_name')
 			
 	def on_update(self):
 		self.validate_name_with_item_group()
@@ -72,13 +72,13 @@
 	def check_stock_uom_with_bin(self):
 		if not self.doc.fields.get("__islocal"):
 			matched=True
-			ref_uom = frappe.conn.get_value("Stock Ledger Entry", 
+			ref_uom = frappe.db.get_value("Stock Ledger Entry", 
 				{"item_code": self.doc.name}, "stock_uom")
 			if ref_uom:
 				if cstr(ref_uom) != cstr(self.doc.stock_uom):
 					matched = False
 			else:
-				bin_list = frappe.conn.sql("select * from tabBin where item_code=%s", 
+				bin_list = frappe.db.sql("select * from tabBin where item_code=%s", 
 					self.doc.item_code, as_dict=1)
 				for bin in bin_list:
 					if (bin.reserved_qty > 0 or bin.ordered_qty > 0 or bin.indented_qty > 0 \
@@ -87,7 +87,7 @@
 							break
 						
 				if matched and bin_list:
-					frappe.conn.sql("""update tabBin set stock_uom=%s where item_code=%s""",
+					frappe.db.sql("""update tabBin set stock_uom=%s where item_code=%s""",
 						(self.doc.stock_uom, self.doc.name))
 				
 			if not matched:
@@ -122,7 +122,7 @@
 			
 	def check_for_active_boms(self):
 		if self.doc.is_purchase_item != "Yes":
-			bom_mat = frappe.conn.sql("""select distinct t1.parent 
+			bom_mat = frappe.db.sql("""select distinct t1.parent 
 				from `tabBOM Item` t1, `tabBOM` t2 where t2.name = t1.parent 
 				and t1.item_code =%s and ifnull(t1.bom_no, '') = '' and t2.is_active = 1 
 				and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name)
@@ -132,7 +132,7 @@
 					as it is present in one or many Active BOMs"))
 					
 		if self.doc.is_manufactured_item != "Yes":
-			bom = frappe.conn.sql("""select name from `tabBOM` where item = %s 
+			bom = frappe.db.sql("""select name from `tabBOM` where item = %s 
 				and is_active = 1""", (self.doc.name,))
 			if bom and bom[0][0]:
 				frappe.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many \
@@ -150,7 +150,7 @@
 		check_list=[]
 		for d in getlist(self.doclist,'item_tax'):
 			if d.tax_type:
-				account_type = frappe.conn.get_value("Account", d.tax_type, "account_type")
+				account_type = frappe.db.get_value("Account", d.tax_type, "account_type")
 				
 				if account_type not in ['Tax', 'Chargeable', 'Income Account', 'Expense Account']:
 					msgprint("'%s' is not Tax / Chargeable / Income / Expense Account" % d.tax_type, raise_exception=1)
@@ -162,7 +162,7 @@
 						
 	def validate_barcode(self):
 		if self.doc.barcode:
-			duplicate = frappe.conn.sql("""select name from tabItem where barcode = %s 
+			duplicate = frappe.db.sql("""select name from tabItem where barcode = %s 
 				and name != %s""", (self.doc.barcode, self.doc.name))
 			if duplicate:
 				msgprint("Barcode: %s already used in item: %s" % 
@@ -170,7 +170,7 @@
 
 	def cant_change(self):
 		if not self.doc.fields.get("__islocal"):
-			vals = frappe.conn.get_value("Item", self.doc.name, 
+			vals = frappe.db.get_value("Item", self.doc.name, 
 				["has_serial_no", "is_stock_item", "valuation_method"], as_dict=True)
 			
 			if vals and ((self.doc.is_stock_item == "No" and vals.is_stock_item == "Yes") or 
@@ -187,19 +187,19 @@
 					raise_exception=1)
 	
 	def check_if_sle_exists(self):
-		sle = frappe.conn.sql("""select name from `tabStock Ledger Entry` 
+		sle = frappe.db.sql("""select name from `tabStock Ledger Entry` 
 			where item_code = %s""", self.doc.name)
 		return sle and 'exists' or 'not exists'
 
 	def validate_name_with_item_group(self):
 		# causes problem with tree build
-		if frappe.conn.exists("Item Group", self.doc.name):
+		if frappe.db.exists("Item Group", self.doc.name):
 			frappe.msgprint("An item group exists with same name (%s), \
 				please change the item name or rename the item group" % 
 				self.doc.name, raise_exception=1)
 
 	def update_item_price(self):
-		frappe.conn.sql("""update `tabItem Price` set item_name=%s, 
+		frappe.db.sql("""update `tabItem Price` set item_name=%s, 
 			item_description=%s, modified=NOW() where item_code=%s""",
 			(self.doc.item_name, self.doc.description, self.doc.name))
 
@@ -212,10 +212,10 @@
 		return page_name_from
 		
 	def get_tax_rate(self, tax_type):
-		return { "tax_rate": frappe.conn.get_value("Account", tax_type, "tax_rate") }
+		return { "tax_rate": frappe.db.get_value("Account", tax_type, "tax_rate") }
 
 	def get_file_details(self, arg = ''):
-		file = frappe.conn.sql("select file_group, description from tabFile where name = %s", eval(arg)['file_name'], as_dict = 1)
+		file = frappe.db.sql("select file_group, description from tabFile where name = %s", eval(arg)['file_name'], as_dict = 1)
 
 		ret = {
 			'file_group'	:	file and file[0]['file_group'] or '',
@@ -224,24 +224,24 @@
 		return ret
 		
 	def on_trash(self):
-		frappe.conn.sql("""delete from tabBin where item_code=%s""", self.doc.item_code)
+		frappe.db.sql("""delete from tabBin where item_code=%s""", self.doc.item_code)
 
 	def before_rename(self, olddn, newdn, merge=False):
 		if merge:
 			# Validate properties before merging
-			if not frappe.conn.exists("Item", newdn):
+			if not frappe.db.exists("Item", newdn):
 				frappe.throw(_("Item ") + newdn +_(" does not exists"))
 			
 			field_list = ["stock_uom", "is_stock_item", "has_serial_no", "has_batch_no"]
-			new_properties = [cstr(d) for d in frappe.conn.get_value("Item", newdn, field_list)]
+			new_properties = [cstr(d) for d in frappe.db.get_value("Item", newdn, field_list)]
 			if new_properties != [cstr(self.doc.fields[fld]) for fld in field_list]:
 				frappe.throw(_("To merge, following properties must be same for both items")
 					+ ": \n" + ", ".join([self.meta.get_label(fld) for fld in field_list]))
 
-			frappe.conn.sql("delete from `tabBin` where item_code=%s", olddn)
+			frappe.db.sql("delete from `tabBin` where item_code=%s", olddn)
 
 	def after_rename(self, olddn, newdn, merge):
-		frappe.conn.set_value("Item", newdn, "item_code", newdn)
+		frappe.db.set_value("Item", newdn, "item_code", newdn)
 			
 		if merge:
 			self.set_last_purchase_rate(newdn)
@@ -249,23 +249,23 @@
 			
 	def set_last_purchase_rate(self, newdn):
 		last_purchase_rate = get_last_purchase_details(newdn).get("base_rate", 0)
-		frappe.conn.set_value("Item", newdn, "last_purchase_rate", last_purchase_rate)
+		frappe.db.set_value("Item", newdn, "last_purchase_rate", last_purchase_rate)
 			
 	def recalculate_bin_qty(self, newdn):
 		from erpnext.utilities.repost_stock import repost_stock
-		frappe.conn.auto_commit_on_many_writes = 1
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.auto_commit_on_many_writes = 1
+		frappe.db.set_default("allow_negative_stock", 1)
 		
-		for warehouse in frappe.conn.sql("select name from `tabWarehouse`"):
+		for warehouse in frappe.db.sql("select name from `tabWarehouse`"):
 			repost_stock(newdn, warehouse[0])
 		
-		frappe.conn.set_default("allow_negative_stock", 
-			frappe.conn.get_value("Stock Settings", None, "allow_negative_stock"))
-		frappe.conn.auto_commit_on_many_writes = 0
+		frappe.db.set_default("allow_negative_stock", 
+			frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
+		frappe.db.auto_commit_on_many_writes = 0
 
 def validate_end_of_life(item_code, end_of_life=None, verbose=1):
 	if not end_of_life:
-		end_of_life = frappe.conn.get_value("Item", item_code, "end_of_life")
+		end_of_life = frappe.db.get_value("Item", item_code, "end_of_life")
 	
 	if end_of_life and getdate(end_of_life) <= now_datetime().date():
 		msg = (_("Item") + " %(item_code)s: " + _("reached its end of life on") + \
@@ -280,7 +280,7 @@
 		
 def validate_is_stock_item(item_code, is_stock_item=None, verbose=1):
 	if not is_stock_item:
-		is_stock_item = frappe.conn.get_value("Item", item_code, "is_stock_item")
+		is_stock_item = frappe.db.get_value("Item", item_code, "is_stock_item")
 		
 	if is_stock_item != "Yes":
 		msg = (_("Item") + " %(item_code)s: " + _("is not a Stock Item")) % {
@@ -291,7 +291,7 @@
 		
 def validate_cancelled_item(item_code, docstatus=None, verbose=1):
 	if docstatus is None:
-		docstatus = frappe.conn.get_value("Item", item_code, "docstatus")
+		docstatus = frappe.db.get_value("Item", item_code, "docstatus")
 	
 	if docstatus == 2:
 		msg = (_("Item") + " %(item_code)s: " + _("is a cancelled Item")) % {
@@ -310,7 +310,7 @@
 def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0):
 	"""returns last purchase details in stock uom"""
 	# get last purchase order item details
-	last_purchase_order = frappe.conn.sql("""\
+	last_purchase_order = frappe.db.sql("""\
 		select po.name, po.transaction_date, po.conversion_rate,
 			po_item.conversion_factor, po_item.base_price_list_rate, 
 			po_item.discount_percentage, po_item.base_rate
@@ -321,7 +321,7 @@
 		limit 1""", (item_code, cstr(doc_name)), as_dict=1)
 
 	# get last purchase receipt item details		
-	last_purchase_receipt = frappe.conn.sql("""\
+	last_purchase_receipt = frappe.db.sql("""\
 		select pr.name, pr.posting_date, pr.posting_time, pr.conversion_rate,
 			pr_item.conversion_factor, pr_item.base_price_list_rate, pr_item.discount_percentage,
 			pr_item.base_rate
diff --git a/erpnext/stock/doctype/item_price/item_price.py b/erpnext/stock/doctype/item_price/item_price.py
index 791a7fe..879fcae 100644
--- a/erpnext/stock/doctype/item_price/item_price.py
+++ b/erpnext/stock/doctype/item_price/item_price.py
@@ -19,7 +19,7 @@
 		self.update_item_details()
 		
 	def validate_item(self):
-		if not frappe.conn.exists("Item", self.doc.item_code):
+		if not frappe.db.exists("Item", self.doc.item_code):
 			throw("{doctype}: {item} {not_found}".format(**{
 				"doctype": _("Item"), 
 				"item": self.doc.item_code, 
@@ -27,7 +27,7 @@
 			}))
 
 	def validate_price_list(self):
-		enabled = frappe.conn.get_value("Price List", self.doc.price_list, "enabled")
+		enabled = frappe.db.get_value("Price List", self.doc.price_list, "enabled")
 		if not enabled:
 			throw("{message}: {price_list} {disabled}".format(**{
 				"message": _("Price List"),
@@ -36,7 +36,7 @@
 			}))
 
 	def check_duplicate_item(self):
-		if frappe.conn.sql("""select name from `tabItem Price` 
+		if frappe.db.sql("""select name from `tabItem Price` 
 			where item_code=%s and price_list=%s and name!=%s""", 
 			(self.doc.item_code, self.doc.price_list, self.doc.name)):
 				throw("{duplicate_item}: {item_code}, {already}: {price_list}".format(**{
@@ -48,10 +48,10 @@
 
 	def update_price_list_details(self):
 		self.doc.buying, self.doc.selling, self.doc.currency = \
-			frappe.conn.get_value("Price List", {"name": self.doc.price_list, "enabled": 1}, 
+			frappe.db.get_value("Price List", {"name": self.doc.price_list, "enabled": 1}, 
 				["buying", "selling", "currency"])
 
 	def update_item_details(self):
-		self.doc.item_name, self.doc.item_description = frappe.conn.get_value("Item", 
+		self.doc.item_name, self.doc.item_description = frappe.db.get_value("Item", 
 			self.doc.item_code, ["item_name", "description"])
 				
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index bb8af4a..f310744 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -30,7 +30,7 @@
 
 	def validate_purchase_receipts(self, purchase_receipts):
 		for pr in purchase_receipts:
-			if frappe.conn.get_value("Purchase Receipt", pr, "docstatus") != 1:
+			if frappe.db.get_value("Purchase Receipt", pr, "docstatus") != 1:
 				frappe.throw(_("Purchase Receipt") + ": " + pr + _(" is not submitted document"))
 
 	def add_charges_in_pr(self, purchase_receipts):
@@ -76,7 +76,7 @@
 				d.save()
 	
 	def get_total_pr_amt(self, purchase_receipts):
-		return frappe.conn.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt` 
+		return frappe.db.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt` 
 			WHERE name in (%s)""" % ', '.join(['%s']*len(purchase_receipts)), 
 			tuple(purchase_receipts))[0][0]
 			
@@ -86,9 +86,9 @@
 			
 			pr_bean.run_method("update_ordered_qty")
 			
-			frappe.conn.sql("""delete from `tabStock Ledger Entry` 
+			frappe.db.sql("""delete from `tabStock Ledger Entry` 
 				where voucher_type='Purchase Receipt' and voucher_no=%s""", pr)
-			frappe.conn.sql("""delete from `tabGL Entry` where voucher_type='Purchase Receipt' 
+			frappe.db.sql("""delete from `tabGL Entry` where voucher_type='Purchase Receipt' 
 				and voucher_no=%s""", pr)
 			
 	def submit_pr(self, purchase_receipts):
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 2969766..2fca85b 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -37,13 +37,13 @@
 		
 		for so_no in so_items.keys():
 			for item in so_items[so_no].keys():
-				already_indented = frappe.conn.sql("""select sum(ifnull(qty, 0)) 
+				already_indented = frappe.db.sql("""select sum(ifnull(qty, 0)) 
 					from `tabMaterial Request Item` 
 					where item_code = %s and sales_order_no = %s and 
 					docstatus = 1 and parent != %s""", (item, so_no, self.doc.name))
 				already_indented = already_indented and flt(already_indented[0][0]) or 0
 				
-				actual_so_qty = frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item` 
+				actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item` 
 					where parent = %s and item_code = %s and docstatus = 1""", (so_no, item))
 				actual_so_qty = actual_so_qty and flt(actual_so_qty[0][0]) or 0
 				
@@ -85,7 +85,7 @@
 		
 		from erpnext.stock.utils import update_bin
 		for d in getlist(self.doclist, 'indent_details'):
-			if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes":
+			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
 				if not d.warehouse:
 					frappe.throw("Please Enter Warehouse for Item %s as it is stock item" 
 						% cstr(d.item_code))
@@ -103,13 +103,13 @@
 				update_bin(args)		
 		
 	def on_submit(self):
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 		self.update_bin(is_submit = 1, is_stopped = 0)
 	
 	def check_modified_date(self):
-		mod_db = frappe.conn.sql("""select modified from `tabMaterial Request` where name = %s""", 
+		mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""", 
 			self.doc.name)
-		date_diff = frappe.conn.sql("""select TIMEDIFF('%s', '%s')"""
+		date_diff = frappe.db.sql("""select TIMEDIFF('%s', '%s')"""
 			% (mod_db[0][0], cstr(self.doc.modified)))
 		
 		if date_diff and date_diff[0][0]:
@@ -121,7 +121,7 @@
 		self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
 
 		# Step 2:=> Set status 
-		frappe.conn.set(self.doc, 'status', cstr(status))
+		frappe.db.set(self.doc, 'status', cstr(status))
 		
 		# Step 3:=> Acknowledge User
 		msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
@@ -140,7 +140,7 @@
 		self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
 		
 		# Step 5:=> Set Status
-		frappe.conn.set(self.doc,'status','Cancelled')
+		frappe.db.set(self.doc,'status','Cancelled')
 		
 	def update_completed_qty(self, mr_items=None):
 		if self.doc.material_request_type != "Transfer":
@@ -154,11 +154,11 @@
 		per_ordered = 0.0
 		for d in item_doclist:
 			if d.name in mr_items:
-				d.ordered_qty =  flt(frappe.conn.sql("""select sum(transfer_qty) 
+				d.ordered_qty =  flt(frappe.db.sql("""select sum(transfer_qty) 
 					from `tabStock Entry Detail` where material_request = %s 
 					and material_request_item = %s and docstatus = 1""", 
 					(self.doc.name, d.name))[0][0])
-				frappe.conn.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
+				frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
 				
 			# note: if qty is 0, its row is still counted in len(item_doclist)
 			# hence adding 1 to per_ordered
@@ -168,7 +168,7 @@
 				per_ordered += flt(d.ordered_qty / flt(d.qty))
 		
 		self.doc.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
-		frappe.conn.set_value(self.doc.doctype, self.doc.name, "per_ordered", self.doc.per_ordered)
+		frappe.db.set_value(self.doc.doctype, self.doc.name, "per_ordered", self.doc.per_ordered)
 		
 def update_completed_qty(bean, method):
 	if bean.doc.doctype == "Stock Entry":
@@ -298,9 +298,9 @@
 	return [d.fields for d in target_doclist]
 	
 def get_material_requests_based_on_supplier(supplier):
-	supplier_items = [d[0] for d in frappe.conn.get_values("Item", 
+	supplier_items = [d[0] for d in frappe.db.get_values("Item", 
 		{"default_supplier": supplier})]
-	material_requests = frappe.conn.sql_list("""select distinct mr.name 
+	material_requests = frappe.db.sql_list("""select distinct mr.name 
 		from `tabMaterial Request` mr, `tabMaterial Request Item` mr_item
 		where mr.name = mr_item.parent
 		and mr_item.item_code in (%s)
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index 3a097b9..0f06b50 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -65,9 +65,9 @@
 				self.assertEquals(val, doclist[i].fields.get(fieldname))
 				
 	def _test_requested_qty(self, qty1, qty2):
-		self.assertEqual(flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
+		self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
 			"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty1)
-		self.assertEqual(flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
+		self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
 			"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty2)
 			
 	def _insert_stock_entry(self, qty1, qty2):
@@ -109,7 +109,7 @@
 		se.submit()
 				
 	def test_completed_qty_for_purchase(self):
-		frappe.conn.sql("""delete from `tabBin`""")
+		frappe.db.sql("""delete from `tabBin`""")
 		
 		# submit material request of type Purchase
 		mr = frappe.bean(copy=test_records[0])
@@ -156,8 +156,8 @@
 		self._test_requested_qty(54.0, 3.0)
 		
 	def test_completed_qty_for_transfer(self):
-		frappe.conn.sql("""delete from `tabBin`""")
-		frappe.conn.sql("""delete from `tabStock Ledger Entry`""")
+		frappe.db.sql("""delete from `tabBin`""")
+		frappe.db.sql("""delete from `tabStock Ledger Entry`""")
 		
 		# submit material request of type Purchase
 		mr = frappe.bean(copy=test_records[0])
@@ -219,8 +219,8 @@
 		self._test_requested_qty(54.0, 3.0)
 		
 	def test_completed_qty_for_over_transfer(self):
-		frappe.conn.sql("""delete from `tabBin`""")
-		frappe.conn.sql("""delete from `tabStock Ledger Entry`""")
+		frappe.db.sql("""delete from `tabBin`""")
+		frappe.db.sql("""delete from `tabStock Ledger Entry`""")
 		
 		# submit material request of type Purchase
 		mr = frappe.bean(copy=test_records[0])
diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py
index 4316b83..b01307d 100644
--- a/erpnext/stock/doctype/packed_item/packed_item.py
+++ b/erpnext/stock/doctype/packed_item/packed_item.py
@@ -14,16 +14,16 @@
 		self.doc, self.doclist = d, dl
 		
 def get_sales_bom_items(item_code):
-	return frappe.conn.sql("""select t1.item_code, t1.qty, t1.uom 
+	return frappe.db.sql("""select t1.item_code, t1.qty, t1.uom 
 		from `tabSales BOM Item` t1, `tabSales BOM` t2 
 		where t2.new_item_code=%s and t1.parent = t2.name""", item_code, as_dict=1)
 
 def get_packing_item_details(item):
-	return frappe.conn.sql("""select item_name, description, stock_uom from `tabItem` 
+	return frappe.db.sql("""select item_name, description, stock_uom from `tabItem` 
 		where name = %s""", item, as_dict = 1)[0]
 
 def get_bin_qty(item, warehouse):
-	det = frappe.conn.sql("""select actual_qty, projected_qty from `tabBin` 
+	det = frappe.db.sql("""select actual_qty, projected_qty from `tabBin` 
 		where item_code = %s and warehouse = %s""", (item, warehouse), as_dict = 1)
 	return det and det[0] or ''
 
@@ -66,7 +66,7 @@
 	for d in obj.doclist.get({"parentfield": item_table_fieldname}):
 		warehouse = (item_table_fieldname == "sales_order_details") \
 			and d.warehouse or d.warehouse
-		if frappe.conn.get_value("Sales BOM", {"new_item_code": d.item_code}):
+		if frappe.db.get_value("Sales BOM", {"new_item_code": d.item_code}):
 			for i in get_sales_bom_items(d.item_code):
 				update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty), 
 					warehouse, d, packing_list_idx)
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.py b/erpnext/stock/doctype/packing_slip/packing_slip.py
index cc3fdc4..03d6e41 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.py
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.py
@@ -32,7 +32,7 @@
 		"""
 			Validates if delivery note has status as draft
 		"""
-		if cint(frappe.conn.get_value("Delivery Note", self.doc.delivery_note, "docstatus")) != 0:
+		if cint(frappe.db.get_value("Delivery Note", self.doc.delivery_note, "docstatus")) != 0:
 			msgprint(_("""Invalid Delivery Note. Delivery Note should exist and should be in draft state. Please rectify and try again."""), raise_exception=1)
 	
 	def validate_items_mandatory(self):
@@ -53,7 +53,7 @@
 				raise_exception=1)
 		
 		
-		res = frappe.conn.sql("""SELECT name FROM `tabPacking Slip`
+		res = frappe.db.sql("""SELECT name FROM `tabPacking Slip`
 			WHERE delivery_note = %(delivery_note)s AND docstatus = 1 AND
 			(from_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
 			OR to_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
@@ -94,7 +94,7 @@
 			condition = " and item_code in (%s)" % (", ".join(["%s"]*len(rows)))
 		
 		# gets item code, qty per item code, latest packed qty per item code and stock uom
-		res = frappe.conn.sql("""select item_code, ifnull(sum(qty), 0) as qty,
+		res = frappe.db.sql("""select item_code, ifnull(sum(qty), 0) as qty,
 			(select sum(ifnull(psi.qty, 0) * (abs(ps.to_case_no - ps.from_case_no) + 1))
 				from `tabPacking Slip` ps, `tabPacking Slip Item` psi
 				where ps.name = psi.parent and ps.docstatus = 1
@@ -133,7 +133,7 @@
 			self.doc.from_case_no = self.get_recommended_case_no()
 
 		for d in self.doclist.get({"parentfield": "item_details"}):
-			res = frappe.conn.get_value("Item", d.item_code, 
+			res = frappe.db.get_value("Item", d.item_code, 
 				["net_weight", "weight_uom"], as_dict=True)
 			
 			if res and len(res)>0:
@@ -145,7 +145,7 @@
 			Returns the next case no. for a new packing slip for a delivery
 			note
 		"""
-		recommended_case_no = frappe.conn.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip`
+		recommended_case_no = frappe.db.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip`
 			WHERE delivery_note = %(delivery_note)s AND docstatus=1""", self.doc.fields)
 		
 		return cint(recommended_case_no[0][0]) + 1
@@ -165,7 +165,7 @@
 
 def item_details(doctype, txt, searchfield, start, page_len, filters):
 	from erpnext.controllers.queries import get_match_cond
-	return frappe.conn.sql("""select name, item_name, description from `tabItem` 
+	return frappe.db.sql("""select name, item_name, description from `tabItem` 
 				where name in ( select item_code FROM `tabDelivery Note Item` 
 	 						where parent= %s 
 	 							and ifnull(qty, 0) > ifnull(packed_qty, 0)) 
diff --git a/erpnext/stock/doctype/price_list/price_list.py b/erpnext/stock/doctype/price_list/price_list.py
index 936d868..37b9567 100644
--- a/erpnext/stock/doctype/price_list/price_list.py
+++ b/erpnext/stock/doctype/price_list/price_list.py
@@ -31,15 +31,15 @@
 
 	def set_default_if_missing(self):
 		if cint(self.doc.selling):
-			if not frappe.conn.get_value("Selling Settings", None, "selling_price_list"):
+			if not frappe.db.get_value("Selling Settings", None, "selling_price_list"):
 				frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.doc.name)
 
 		elif cint(self.doc.buying):
-			if not frappe.conn.get_value("Buying Settings", None, "buying_price_list"):
+			if not frappe.db.get_value("Buying Settings", None, "buying_price_list"):
 				frappe.set_value("Buying Settings", "Buying Settings", "buying_price_list", self.doc.name)
 
 	def update_item_price(self):
-		frappe.conn.sql("""update `tabItem Price` set currency=%s, 
+		frappe.db.sql("""update `tabItem Price` set currency=%s, 
 			buying=%s, selling=%s, modified=NOW() where price_list=%s""", 
 			(self.doc.currency, cint(self.doc.buying), cint(self.doc.selling), self.doc.name))
 
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 8590113..b797e43 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -32,7 +32,7 @@
 		}]
 		
 	def onload(self):
-		billed_qty = frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tabPurchase Invoice Item`
+		billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabPurchase Invoice Item`
 			where purchase_receipt=%s""", self.doc.name)
 		if billed_qty:
 			total_qty = sum((item.qty for item in self.doclist.get({"parentfield": "purchase_receipt_details"})))
@@ -96,7 +96,7 @@
 	def validate_challan_no(self):
 		"Validate if same challan no exists for same supplier in a submitted purchase receipt"
 		if self.doc.challan_no:
-			exists = frappe.conn.sql("""
+			exists = frappe.db.sql("""
 			SELECT name FROM `tabPurchase Receipt`
 			WHERE name!=%s AND supplier=%s AND challan_no=%s
 		AND docstatus=1""", (self.doc.name, self.doc.supplier, self.doc.challan_no))
@@ -128,7 +128,7 @@
 			
 
 	def po_required(self):
-		if frappe.conn.get_value("Buying Settings", None, "po_required") == 'Yes':
+		if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':
 			 for d in getlist(self.doclist,'purchase_receipt_details'):
 				 if not d.prevdoc_docname:
 					 msgprint("Purchse Order No. required against item %s"%d.item_code)
@@ -186,14 +186,14 @@
 				})
 
 	def get_already_received_qty(self, po, po_detail):
-		qty = frappe.conn.sql("""select sum(qty) from `tabPurchase Receipt Item` 
+		qty = frappe.db.sql("""select sum(qty) from `tabPurchase Receipt Item` 
 			where prevdoc_detail_docname = %s and docstatus = 1 
 			and prevdoc_doctype='Purchase Order' and prevdoc_docname=%s 
 			and parent != %s""", (po_detail, po, self.doc.name))
 		return qty and flt(qty[0][0]) or 0.0
 		
 	def get_po_qty_and_warehouse(self, po_detail):
-		po_qty, po_warehouse = frappe.conn.get_value("Purchase Order Item", po_detail, 
+		po_qty, po_warehouse = frappe.db.get_value("Purchase Order Item", po_detail, 
 			["qty", "warehouse"])
 		return po_qty, po_warehouse
 	
@@ -210,7 +210,7 @@
 
 	def validate_inspection(self):
 		for d in getlist(self.doclist, 'purchase_receipt_details'):		 #Enter inspection date for all items that require inspection
-			ins_reqd = frappe.conn.sql("select inspection_required from `tabItem` where name = %s",
+			ins_reqd = frappe.db.sql("select inspection_required from `tabItem` where name = %s",
 				(d.item_code,), as_dict = 1)
 			ins_reqd = ins_reqd and ins_reqd[0]['inspection_required'] or 'No'
 			if ins_reqd == 'Yes' and not d.qa_no:
@@ -232,7 +232,7 @@
 		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total)
 
 		# Set status as Submitted
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 
 		self.update_prevdoc_status()
 		
@@ -248,7 +248,7 @@
 		self.make_gl_entries()
 
 	def check_next_docstatus(self):
-		submit_rv = frappe.conn.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_rv = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % (self.doc.name))
 		if submit_rv:
 			msgprint("Purchase Invoice : " + cstr(self.submit_rv[0][0]) + " has already been submitted !")
 			raise Exception , "Validation Error."
@@ -261,13 +261,13 @@
 		# Check if Purchase Invoice has been submitted against current Purchase Order
 		# pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Invoice', docname = self.doc.name, detail_doctype = 'Purchase Invoice Item')
 
-		submitted = frappe.conn.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % self.doc.name)
+		submitted = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % self.doc.name)
 		if submitted:
 			msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
 			raise Exception
 
 		
-		frappe.conn.set(self.doc,'status','Cancelled')
+		frappe.db.set(self.doc,'status','Cancelled')
 
 		self.update_ordered_qty()
 		
@@ -281,7 +281,7 @@
 	def get_current_stock(self):
 		for d in getlist(self.doclist, 'pr_raw_material_details'):
 			if self.doc.supplier_warehouse:
-				bin = frappe.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.doc.supplier_warehouse), as_dict = 1)
+				bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.doc.supplier_warehouse), as_dict = 1)
 				d.current_stock = bin and flt(bin[0]['actual_qty']) or 0
 
 	def get_rate(self,arg):
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 3d97172..efc3a8b 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -37,14 +37,14 @@
 		pr.insert()
 		pr.submit()
 		
-		stock_value, stock_value_difference = frappe.conn.get_value("Stock Ledger Entry", 
+		stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
 			{"voucher_type": "Purchase Receipt", "voucher_no": pr.doc.name, 
 				"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"}, 
 			["stock_value", "stock_value_difference"])
 		self.assertEqual(stock_value, 375)
 		self.assertEqual(stock_value_difference, 375)
 		
-		bin_stock_value = frappe.conn.get_value("Bin", {"item_code": "_Test Item", 
+		bin_stock_value = frappe.db.get_value("Bin", {"item_code": "_Test Item", 
 			"warehouse": "_Test Warehouse - _TC"}, "stock_value")
 		self.assertEqual(bin_stock_value, 375)
 		
@@ -64,9 +64,9 @@
 		
 		self.assertTrue(gl_entries)
 		
-		stock_in_hand_account = frappe.conn.get_value("Account", 
+		stock_in_hand_account = frappe.db.get_value("Account", 
 			{"master_name": pr.doclist[1].warehouse})		
-		fixed_asset_account = frappe.conn.get_value("Account", 
+		fixed_asset_account = frappe.db.get_value("Account", 
 			{"master_name": pr.doclist[2].warehouse})
 		
 		expected_values = {
@@ -85,9 +85,9 @@
 		set_perpetual_inventory(0)
 		
 	def _clear_stock_account_balance(self):
-		frappe.conn.sql("delete from `tabStock Ledger Entry`")
-		frappe.conn.sql("""delete from `tabBin`""")
-		frappe.conn.sql("""delete from `tabGL Entry`""")
+		frappe.db.sql("delete from `tabStock Ledger Entry`")
+		frappe.db.sql("""delete from `tabBin`""")
+		frappe.db.sql("""delete from `tabGL Entry`""")
 		
 	def test_subcontracting(self):
 		pr = frappe.bean(copy=test_records[1])
@@ -105,7 +105,7 @@
 		pr.insert()
 		pr.submit()
 		
-		self.assertEquals(frappe.conn.get_value("Serial No", pr.doclist[1].serial_no, 
+		self.assertEquals(frappe.db.get_value("Serial No", pr.doclist[1].serial_no, 
 			"supplier"), pr.doc.supplier)
 			
 		return pr
@@ -114,11 +114,11 @@
 		pr = self.test_serial_no_supplier()
 		pr.cancel()
 		
-		self.assertFalse(frappe.conn.get_value("Serial No", pr.doclist[1].serial_no, 
+		self.assertFalse(frappe.db.get_value("Serial No", pr.doclist[1].serial_no, 
 			"warehouse"))
 			
 def get_gl_entries(voucher_type, voucher_no):
-	return frappe.conn.sql("""select account, debit, credit
+	return frappe.db.sql("""select account, debit, credit
 		from `tabGL Entry` where voucher_type=%s and voucher_no=%s
 		order by account desc""", (voucher_type, voucher_no), as_dict=1)
 		
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index e47b551..df5e194 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -51,7 +51,7 @@
 
 	def validate_warehouse(self):
 		if not self.doc.fields.get("__islocal"):
-			item_code, warehouse = frappe.conn.get_value("Serial No", 
+			item_code, warehouse = frappe.db.get_value("Serial No", 
 				self.doc.name, ["item_code", "warehouse"])
 			if item_code != self.doc.item_code:
 				frappe.throw(_("Item Code cannot be changed for Serial No."), 
@@ -77,7 +77,7 @@
 	def set_status(self, last_sle):
 		if last_sle:
 			if last_sle.voucher_type == "Stock Entry":
-				document_type = frappe.conn.get_value("Stock Entry", last_sle.voucher_no, 
+				document_type = frappe.db.get_value("Stock Entry", last_sle.voucher_no, 
 					"purpose")
 			else:
 				document_type = last_sle.voucher_type
@@ -106,7 +106,7 @@
 			self.doc.purchase_rate = purchase_sle.incoming_rate
 			if purchase_sle.voucher_type == "Purchase Receipt":
 				self.doc.supplier, self.doc.supplier_name = \
-					frappe.conn.get_value("Purchase Receipt", purchase_sle.voucher_no, 
+					frappe.db.get_value("Purchase Receipt", purchase_sle.voucher_no, 
 						["supplier", "supplier_name"])
 		else:
 			for fieldname in ("purchase_document_type", "purchase_document_no", 
@@ -120,7 +120,7 @@
 			self.doc.delivery_date = delivery_sle.posting_date
 			self.doc.delivery_time = delivery_sle.posting_time
 			self.doc.customer, self.doc.customer_name = \
-				frappe.conn.get_value(delivery_sle.voucher_type, delivery_sle.voucher_no, 
+				frappe.db.get_value(delivery_sle.voucher_type, delivery_sle.voucher_no, 
 					["customer", "customer_name"])
 			if self.doc.warranty_period:
 				self.doc.warranty_expiry_date	= add_days(cstr(delivery_sle.posting_date), 
@@ -148,7 +148,7 @@
 		
 	def get_stock_ledger_entries(self):
 		sle_dict = {}
-		for sle in frappe.conn.sql("""select * from `tabStock Ledger Entry` 
+		for sle in frappe.db.sql("""select * from `tabStock Ledger Entry` 
 			where serial_no like %s and item_code=%s and ifnull(is_cancelled, 'No')='No' 
 			order by posting_date desc, posting_time desc, name desc""", 
 			("%%%s%%" % self.doc.name, self.doc.item_code), as_dict=1):
@@ -173,14 +173,14 @@
 			
 	def after_rename(self, old, new, merge=False):
 		"""rename serial_no text fields"""
-		for dt in frappe.conn.sql("""select parent from tabDocField 
+		for dt in frappe.db.sql("""select parent from tabDocField 
 			where fieldname='serial_no' and fieldtype='Text'"""):
 			
-			for item in frappe.conn.sql("""select name, serial_no from `tab%s` 
+			for item in frappe.db.sql("""select name, serial_no from `tab%s` 
 				where serial_no like '%%%s%%'""" % (dt[0], old)):
 				
 				serial_nos = map(lambda i: i==old and new or i, item[1].split('\n'))
-				frappe.conn.sql("""update `tab%s` set serial_no = %s 
+				frappe.db.sql("""update `tab%s` set serial_no = %s 
 					where name=%s""" % (dt[0], '%s', '%s'),
 					('\n'.join(serial_nos), item[0]))
 	
@@ -219,7 +219,7 @@
 					(": %s" % sle.item_code), SerialNoDuplicateError)
 			
 			for serial_no in serial_nos:
-				if frappe.conn.exists("Serial No", serial_no):
+				if frappe.db.exists("Serial No", serial_no):
 					sr = frappe.bean("Serial No", serial_no)
 					
 					if sr.doc.item_code!=sle.item_code:
@@ -254,12 +254,12 @@
 		serial_nos = []
 		for i in xrange(cint(sle.actual_qty)):
 			serial_nos.append(make_autoname(item_det.serial_no_series))
-		frappe.conn.set(sle, "serial_no", "\n".join(serial_nos))
+		frappe.db.set(sle, "serial_no", "\n".join(serial_nos))
 		
 	if sle.serial_no:
 		serial_nos = get_serial_nos(sle.serial_no)
 		for serial_no in serial_nos:
-			if frappe.conn.exists("Serial No", serial_no):
+			if frappe.db.exists("Serial No", serial_no):
 				sr = frappe.bean("Serial No", serial_no)
 				sr.make_controller().via_stock_ledger = True
 				sr.doc.warehouse = sle.warehouse if sle.actual_qty > 0 else None
@@ -268,7 +268,7 @@
 				make_serial_no(serial_no, sle)
 
 def get_item_details(item_code):
-	return frappe.conn.sql("""select name, has_batch_no, docstatus, 
+	return frappe.db.sql("""select name, has_batch_no, docstatus, 
 		is_stock_item, has_serial_no, serial_no_series 
 		from tabItem where name=%s""", item_code, as_dict=True)[0]
 		
@@ -289,7 +289,7 @@
 	return sr.doc.name
 	
 def update_serial_nos_after_submit(controller, parentfield):
-	stock_ledger_entries = frappe.conn.sql("""select voucher_detail_no, serial_no
+	stock_ledger_entries = frappe.db.sql("""select voucher_detail_no, serial_no
 		from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", 
 		(controller.doc.doctype, controller.doc.name), as_dict=True)
 		
@@ -304,4 +304,4 @@
 
 		if d.serial_no != serial_no:
 			d.serial_no = serial_no
-			frappe.conn.set_value(d.doctype, d.name, "serial_no", serial_no)
+			frappe.db.set_value(d.doctype, d.name, "serial_no", serial_no)
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 8ef66e5..719f7b1 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -154,7 +154,7 @@
 			self.doc.production_order = None
 	
 	def check_duplicate_entry_for_production_order(self):
-		other_ste = [t[0] for t in frappe.conn.get_values("Stock Entry",  {
+		other_ste = [t[0] for t in frappe.db.get_values("Stock Entry",  {
 			"production_order": self.doc.production_order,
 			"purpose": self.doc.purpose,
 			"docstatus": ["!=", 2],
@@ -162,10 +162,10 @@
 		}, "name")]
 		
 		if other_ste:
-			production_item, qty = frappe.conn.get_value("Production Order", 
+			production_item, qty = frappe.db.get_value("Production Order", 
 				self.doc.production_order, ["production_item", "qty"])
 			args = other_ste + [production_item]
-			fg_qty_already_entered = frappe.conn.sql("""select sum(actual_qty)
+			fg_qty_already_entered = frappe.db.sql("""select sum(actual_qty)
 				from `tabStock Entry Detail` 
 				where parent in (%s) 
 					and item_code = %s 
@@ -203,7 +203,7 @@
 		incoming_rate = 0
 		if self.doc.purpose == "Sales Return" and \
 				(self.doc.delivery_note_no or self.doc.sales_invoice_no):
-			sle = frappe.conn.sql("""select name, posting_date, posting_time, 
+			sle = frappe.db.sql("""select name, posting_date, posting_time, 
 				actual_qty, stock_value, warehouse from `tabStock Ledger Entry` 
 				where voucher_type = %s and voucher_no = %s and 
 				item_code = %s limit 1""", 
@@ -231,7 +231,7 @@
 					
 	def validate_bom(self):
 		for d in getlist(self.doclist, 'mtn_details'):
-			if d.bom_no and not frappe.conn.sql("""select name from `tabBOM`
+			if d.bom_no and not frappe.db.sql("""select name from `tabBOM`
 					where item = %s and name = %s and docstatus = 1 and is_active = 1""",
 					(d.item_code, d.bom_no)):
 				msgprint(_("Item") + " %s: " % cstr(d.item_code)
@@ -296,7 +296,7 @@
 						returned=_("Max Returnable Qty"), qty=returnable_qty), StockOverReturnError)
 						
 	def get_already_returned_item_qty(self, ref_fieldname):
-		return dict(frappe.conn.sql("""select item_code, sum(transfer_qty) as qty
+		return dict(frappe.db.sql("""select item_code, sum(transfer_qty) as qty
 			from `tabStock Entry Detail` where parent in (
 				select name from `tabStock Entry` where `%s`=%s and docstatus=1)
 			group by item_code""" % (ref_fieldname, "%s"), (self.doc.fields.get(ref_fieldname),)))
@@ -358,7 +358,7 @@
 					+ "(%s/%s)" % (produced_qty, flt(pro_bean.doc.qty)), StockOverProductionError)
 					
 			status = 'Completed' if flt(produced_qty) >= flt(pro_bean.doc.qty) else 'In Process'
-			frappe.conn.sql("""update `tabProduction Order` set status=%s, produced_qty=%s 
+			frappe.db.sql("""update `tabProduction Order` set status=%s, produced_qty=%s 
 				where name=%s""", (status, produced_qty, self.doc.production_order))
 			
 	def update_planned_qty(self, pro_bean):
@@ -372,7 +372,7 @@
 					
 	def get_item_details(self, arg):
 		arg = json.loads(arg)
-		item = frappe.conn.sql("""select stock_uom, description, item_name, 
+		item = frappe.db.sql("""select stock_uom, description, item_name, 
 			expense_account, buying_cost_center from `tabItem` 
 			where name = %s and (ifnull(end_of_life,'')='' or end_of_life ='0000-00-00' 
 			or end_of_life > now())""", (arg.get('item_code')), as_dict = 1)
@@ -385,7 +385,7 @@
 			'description'		  	: item and item[0]['description'] or '',
 			'item_name' 		  	: item and item[0]['item_name'] or '',
 			'expense_account'		: item and item[0]['expense_account'] or arg.get("expense_account") \
-				or frappe.conn.get_value("Company", arg.get("company"), "default_expense_account"),
+				or frappe.db.get_value("Company", arg.get("company"), "default_expense_account"),
 			'cost_center'			: item and item[0]['buying_cost_center'] or arg.get("cost_center"),
 			'qty'					: 0,
 			'transfer_qty'			: 0,
@@ -400,7 +400,7 @@
 
 	def get_uom_details(self, arg = ''):
 		arg, ret = eval(arg), {}
-		uom = frappe.conn.sql("""select conversion_factor from `tabUOM Conversion Detail` 
+		uom = frappe.db.sql("""select conversion_factor from `tabUOM Conversion Detail` 
 			where parent = %s and uom = %s""", (arg['item_code'], arg['uom']), as_dict = 1)
 		if not uom or not flt(uom[0].conversion_factor):
 			msgprint("There is no Conversion Factor for UOM '%s' in Item '%s'" % (arg['uom'],
@@ -463,7 +463,7 @@
 					
 			# add finished good item to Stock Entry Detail table -- along with bom_no
 			if self.doc.production_order and self.doc.purpose == "Manufacture/Repack":
-				item = frappe.conn.get_value("Item", pro_obj.doc.production_item, ["item_name", 
+				item = frappe.db.get_value("Item", pro_obj.doc.production_item, ["item_name", 
 					"description", "stock_uom", "expense_account", "buying_cost_center"], as_dict=1)
 				self.add_to_stock_entry_detail({
 					cstr(pro_obj.doc.production_item): {
@@ -482,7 +482,7 @@
 				if self.doc.purpose=="Material Receipt":
 					self.doc.from_warehouse = ""
 					
-				item = frappe.conn.sql("""select name, item_name, description, 
+				item = frappe.db.sql("""select name, item_name, description, 
 					stock_uom, expense_account, buying_cost_center from `tabItem` 
 					where name=(select item from tabBOM where name=%s)""", 
 					self.doc.bom_no, as_dict=1)
@@ -550,7 +550,7 @@
 
 	def get_issued_qty(self):
 		issued_item_qty = {}
-		result = frappe.conn.sql("""select t1.item_code, sum(t1.qty)
+		result = frappe.db.sql("""select t1.item_code, sum(t1.qty)
 			from `tabStock Entry Detail` t1, `tabStock Entry` t2
 			where t1.parent = t2.name and t2.production_order = %s and t2.docstatus = 1
 			and t2.purpose = 'Material Transfer'
@@ -562,7 +562,7 @@
 
 	def add_to_stock_entry_detail(self, item_dict, bom_no=None, idx=None):
 		if not idx:	idx = 1
-		expense_account, cost_center = frappe.conn.get_values("Company", self.doc.company, \
+		expense_account, cost_center = frappe.db.get_values("Company", self.doc.company, \
 			["default_expense_account", "cost_center"])[0]
 
 		for d in item_dict:
@@ -594,7 +594,7 @@
 	def validate_with_material_request(self):
 		for item in self.doclist.get({"parentfield": "mtn_details"}):
 			if item.material_request:
-				mreq_item = frappe.conn.get_value("Material Request Item", 
+				mreq_item = frappe.db.get_value("Material Request Item", 
 					{"name": item.material_request_item, "parent": item.material_request},
 					["item_code", "warehouse", "idx"], as_dict=True)
 				if mreq_item.item_code != item.item_code or mreq_item.warehouse != item.t_warehouse:
@@ -606,16 +606,16 @@
 @frappe.whitelist()					
 def get_party_details(ref_dt, ref_dn):
 	if ref_dt in ["Delivery Note", "Sales Invoice"]:
-		res = frappe.conn.get_value(ref_dt, ref_dn, 
+		res = frappe.db.get_value(ref_dt, ref_dn, 
 			["customer", "customer_name", "address_display as customer_address"], as_dict=1)
 	else:
-		res = frappe.conn.get_value(ref_dt, ref_dn, 
+		res = frappe.db.get_value(ref_dt, ref_dn, 
 			["supplier", "supplier_name", "address_display as supplier_address"], as_dict=1)
 	return res or {}
 	
 @frappe.whitelist()
 def get_production_order_details(production_order):
-	result = frappe.conn.sql("""select bom_no, 
+	result = frappe.db.sql("""select bom_no, 
 		ifnull(qty, 0) - ifnull(produced_qty, 0) as fg_completed_qty, use_multi_level_bom, 
 		wip_warehouse from `tabProduction Order` where name = %s""", production_order, as_dict=1)
 	return result and result[0] or {}
@@ -625,7 +625,7 @@
 	if doctype == "Sales Invoice":
 		conditions = "and update_stock=1"
 	
-	return frappe.conn.sql("""select name, customer, customer_name
+	return frappe.db.sql("""select name, customer, customer_name
 		from `tab%s` where docstatus = 1
 			and (`%s` like %%(txt)s 
 				or `customer` like %%(txt)s) %s %s
@@ -636,7 +636,7 @@
 		as_list=True)
 	
 def query_purchase_return_doc(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.conn.sql("""select name, supplier, supplier_name
+	return frappe.db.sql("""select name, supplier, supplier_name
 		from `tab%s` where docstatus = 1
 			and (`%s` like %%(txt)s 
 				or `supplier` like %%(txt)s) %s
@@ -685,7 +685,7 @@
 	}
 	
 	if filters.get("s_warehouse"):
-		batch_nos = frappe.conn.sql("""select batch_no 
+		batch_nos = frappe.db.sql("""select batch_no 
 			from `tabStock Ledger Entry` sle 
 			where item_code = '%(item_code)s' 
 				and warehouse = '%(s_warehouse)s'
@@ -704,7 +704,7 @@
 	if batch_nos:
 		return batch_nos
 	else:
-		return frappe.conn.sql("""select name from `tabBatch` 
+		return frappe.db.sql("""select name from `tabBatch` 
 			where item = '%(item_code)s'
 			and docstatus < 2
 			and (ifnull(expiry_date, '2099-12-31') >= %(posting_date)s 
@@ -721,7 +721,7 @@
 	
 	all_items = list(set([d.item_code for d in 
 		ref_doclist.get({"parentfield": ["in", parentfields]})]))
-	stock_items = frappe.conn.sql_list("""select name from `tabItem`
+	stock_items = frappe.db.sql_list("""select name from `tabItem`
 		where is_stock_item='Yes' and name in (%s)""" % (", ".join(["%s"] * len(all_items))),
 		tuple(all_items))
 
@@ -878,7 +878,7 @@
 	if isinstance(value, basestring):
 		value = [value]
 	
-	return frappe.conn.sql_list("""select distinct parent from `tab%s`
+	return frappe.db.sql_list("""select distinct parent from `tab%s`
 		where docstatus = 1 and `%s` in (%s)""" % (doctype, link_field,
 			", ".join(["%s"]*len(value))), tuple(value))
 			
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 6a57056..f127aa1 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -13,14 +13,14 @@
 		frappe.set_user("Administrator")
 		set_perpetual_inventory(0)
 		if hasattr(self, "old_default_company"):
-			frappe.conn.set_default("company", self.old_default_company)
+			frappe.db.set_default("company", self.old_default_company)
 
 	def test_auto_material_request(self):
-		frappe.conn.sql("""delete from `tabMaterial Request Item`""")
-		frappe.conn.sql("""delete from `tabMaterial Request`""")
+		frappe.db.sql("""delete from `tabMaterial Request Item`""")
+		frappe.db.sql("""delete from `tabMaterial Request`""")
 		self._clear_stock_account_balance()
 
-		frappe.conn.set_value("Stock Settings", None, "auto_indent", True)
+		frappe.db.set_value("Stock Settings", None, "auto_indent", True)
 
 		st1 = frappe.bean(copy=test_records[0])
 		st1.insert()
@@ -34,12 +34,12 @@
 
 		reorder_item()
 
-		mr_name = frappe.conn.sql("""select parent from `tabMaterial Request Item`
+		mr_name = frappe.db.sql("""select parent from `tabMaterial Request Item`
 			where item_code='_Test Item'""")
 
 		self.assertTrue(mr_name)
 
-		frappe.conn.set_default("company", self.old_default_company)
+		frappe.db.set_default("company", self.old_default_company)
 
 	def test_material_receipt_gl_entry(self):
 		self._clear_stock_account_balance()
@@ -49,7 +49,7 @@
 		mr.insert()
 		mr.submit()
 
-		stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
+		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mr.doclist[1].t_warehouse})
 
 		self.check_stock_ledger_entries("Stock Entry", mr.doc.name,
@@ -64,10 +64,10 @@
 
 		mr.cancel()
 
-		self.assertFalse(frappe.conn.sql("""select * from `tabStock Ledger Entry`
+		self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
 
-		self.assertFalse(frappe.conn.sql("""select * from `tabGL Entry`
+		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
 
 
@@ -84,7 +84,7 @@
 		self.check_stock_ledger_entries("Stock Entry", mi.doc.name,
 			[["_Test Item", "_Test Warehouse - _TC", -40.0]])
 
-		stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
+		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mi.doclist[1].s_warehouse})
 
 		self.check_gl_entries("Stock Entry", mi.doc.name,
@@ -95,16 +95,16 @@
 		)
 
 		mi.cancel()
-		self.assertFalse(frappe.conn.sql("""select * from `tabStock Ledger Entry`
+		self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
 
-		self.assertFalse(frappe.conn.sql("""select * from `tabGL Entry`
+		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
 
-		self.assertEquals(frappe.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
+		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
 			"item_code": mi.doclist[1].item_code}, "actual_qty"), 50)
 
-		self.assertEquals(frappe.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
+		self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
 			"item_code": mi.doclist[1].item_code}, "stock_value"), 5000)
 
 	def test_material_transfer_gl_entry(self):
@@ -120,10 +120,10 @@
 		self.check_stock_ledger_entries("Stock Entry", mtn.doc.name,
 			[["_Test Item", "_Test Warehouse - _TC", -45.0], ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]])
 
-		stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
+		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mtn.doclist[1].s_warehouse})
 
-		fixed_asset_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
+		fixed_asset_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mtn.doclist[1].t_warehouse})
 
 
@@ -136,10 +136,10 @@
 
 
 		mtn.cancel()
-		self.assertFalse(frappe.conn.sql("""select * from `tabStock Ledger Entry`
+		self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
 
-		self.assertFalse(frappe.conn.sql("""select * from `tabGL Entry`
+		self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
 
 
@@ -157,7 +157,7 @@
 			[["_Test Item", "_Test Warehouse - _TC", -50.0],
 				["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1]])
 
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
 			order by account desc""", repack.doc.name, as_dict=1)
 		self.assertFalse(gl_entries)
@@ -175,7 +175,7 @@
 		repack.insert()
 		repack.submit()
 
-		stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
+		stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
 			"master_name": repack.doclist[2].t_warehouse})
 
 		self.check_gl_entries("Stock Entry", repack.doc.name,
@@ -190,7 +190,7 @@
 		expected_sle.sort(key=lambda x: x[0])
 
 		# check stock ledger entries
-		sle = frappe.conn.sql("""select item_code, warehouse, actual_qty
+		sle = frappe.db.sql("""select item_code, warehouse, actual_qty
 			from `tabStock Ledger Entry` where voucher_type = %s
 			and voucher_no = %s order by item_code, warehouse, actual_qty""",
 			(voucher_type, voucher_no), as_list=1)
@@ -205,7 +205,7 @@
 	def check_gl_entries(self, voucher_type, voucher_no, expected_gl_entries):
 		expected_gl_entries.sort(key=lambda x: x[0])
 
-		gl_entries = frappe.conn.sql("""select account, debit, credit
+		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type=%s and voucher_no=%s
 			order by account asc, debit asc""", (voucher_type, voucher_no), as_list=1)
 		self.assertTrue(gl_entries)
@@ -227,10 +227,10 @@
 		se2.insert()
 		se2.submit()
 
-		frappe.conn.set_default("company", self.old_default_company)
+		frappe.db.set_default("company", self.old_default_company)
 
 	def _get_actual_qty(self):
-		return flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item",
+		return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
 			"warehouse": "_Test Warehouse - _TC"}, "actual_qty"))
 
 	def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
@@ -506,7 +506,7 @@
 
 		self.assertEquals(actual_qty_1 - 5, actual_qty_2)
 
-		frappe.conn.set_default("company", self.old_default_company)
+		frappe.db.set_default("company", self.old_default_company)
 
 		return se, pr.doc.name
 
@@ -608,17 +608,17 @@
 
 		self.assertEquals(actual_qty_1 - 5, actual_qty_2)
 
-		frappe.conn.set_default("company", self.old_default_company)
+		frappe.db.set_default("company", self.old_default_company)
 
 		return se, pr.doc.name
 
 	def _clear_stock_account_balance(self):
-		frappe.conn.sql("delete from `tabStock Ledger Entry`")
-		frappe.conn.sql("""delete from `tabBin`""")
-		frappe.conn.sql("""delete from `tabGL Entry`""")
+		frappe.db.sql("delete from `tabStock Ledger Entry`")
+		frappe.db.sql("""delete from `tabBin`""")
+		frappe.db.sql("""delete from `tabGL Entry`""")
 
-		self.old_default_company = frappe.conn.get_default("company")
-		frappe.conn.set_default("company", "_Test Company")
+		self.old_default_company = frappe.db.get_default("company")
+		frappe.db.set_default("company", "_Test Company")
 
 	def test_serial_no_not_reqd(self):
 		se = frappe.bean(copy=test_records[0])
@@ -662,11 +662,11 @@
 		se.insert()
 		se.submit()
 
-		self.assertTrue(frappe.conn.exists("Serial No", "ABCD"))
-		self.assertTrue(frappe.conn.exists("Serial No", "EFGH"))
+		self.assertTrue(frappe.db.exists("Serial No", "ABCD"))
+		self.assertTrue(frappe.db.exists("Serial No", "EFGH"))
 
 		se.cancel()
-		self.assertFalse(frappe.conn.get_value("Serial No", "ABCD", "warehouse"))
+		self.assertFalse(frappe.db.get_value("Serial No", "ABCD", "warehouse"))
 
 	def test_serial_no_not_exists(self):
 		self._clear_stock_account_balance()
@@ -699,8 +699,8 @@
 
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
 
-		self.assertTrue(frappe.conn.exists("Serial No", serial_nos[0]))
-		self.assertTrue(frappe.conn.exists("Serial No", serial_nos[1]))
+		self.assertTrue(frappe.db.exists("Serial No", serial_nos[0]))
+		self.assertTrue(frappe.db.exists("Serial No", serial_nos[1]))
 
 		return se
 
@@ -734,10 +734,10 @@
 		se.doclist[1].t_warehouse = "_Test Warehouse 1 - _TC"
 		se.insert()
 		se.submit()
-		self.assertTrue(frappe.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
+		self.assertTrue(frappe.db.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
 
 		se.cancel()
-		self.assertTrue(frappe.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC")
+		self.assertTrue(frappe.db.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC")
 
 	def test_serial_warehouse_error(self):
 		self._clear_stock_account_balance()
@@ -760,7 +760,7 @@
 		se.cancel()
 
 		serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
-		self.assertFalse(frappe.conn.get_value("Serial No", serial_no, "warehouse"))
+		self.assertFalse(frappe.db.get_value("Serial No", serial_no, "warehouse"))
 		
 	def test_warehouse_company_validation(self):
 		set_perpetual_inventory(0)
@@ -806,20 +806,20 @@
 		
 	def test_freeze_stocks (self):
 		self._clear_stock_account_balance()
-		frappe.conn.set_value('Stock Settings', None,'stock_auth_role', '')
+		frappe.db.set_value('Stock Settings', None,'stock_auth_role', '')
 
 		# test freeze_stocks_upto
 		date_newer_than_test_records = add_days(getdate(test_records[0][0]['posting_date']), 5)
-		frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto", date_newer_than_test_records)
+		frappe.db.set_value("Stock Settings", None, "stock_frozen_upto", date_newer_than_test_records)
 		se = frappe.bean(copy=test_records[0]).insert()
 		self.assertRaises (StockFreezeError, se.submit)
-		frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto", '')
+		frappe.db.set_value("Stock Settings", None, "stock_frozen_upto", '')
 
 		# test freeze_stocks_upto_days
-		frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto_days", 7)
+		frappe.db.set_value("Stock Settings", None, "stock_frozen_upto_days", 7)
 		se = frappe.bean(copy=test_records[0]).insert()
 		self.assertRaises (StockFreezeError, se.submit)
-		frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto_days", 0)
+		frappe.db.set_value("Stock Settings", None, "stock_frozen_upto_days", 0)
 
 def make_serialized_item():
 	se = frappe.bean(copy=test_records[0])
diff --git a/erpnext/stock/doctype/stock_ledger/stock_ledger.py b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
index eedf716..664eadb 100644
--- a/erpnext/stock/doctype/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
@@ -25,7 +25,7 @@
 			if v.get('is_cancelled') == 'Yes':
 				v['actual_qty'] = -flt(v['actual_qty'])
 				# cancel matching entry
-				frappe.conn.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
+				frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
 					modified=%s, modified_by=%s
 					where voucher_no=%s and voucher_type=%s""", 
 					(now(), frappe.session.user, v['voucher_no'], v['voucher_type']))
@@ -53,5 +53,5 @@
 		"""
 		Repost everything!
 		"""
-		for wh in frappe.conn.sql("select name from tabWarehouse"):
+		for wh in frappe.db.sql("select name from tabWarehouse"):
 			get_obj('Warehouse', wh[0]).repost_stock()
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index bc677ac..276b369 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -37,7 +37,7 @@
 	#check for item quantity available in stock
 	def actual_amt_check(self):
 		if self.doc.batch_no:
-			batch_bal_after_transaction = flt(frappe.conn.sql("""select sum(actual_qty)
+			batch_bal_after_transaction = flt(frappe.db.sql("""select sum(actual_qty)
 				from `tabStock Ledger Entry`
 				where warehouse=%s and item_code=%s and batch_no=%s""",
 				(self.doc.warehouse, self.doc.item_code, self.doc.batch_no))[0][0])
@@ -60,11 +60,11 @@
 			if not self.doc.fields.get(k):
 				msgprint("Stock Ledger Entry: '%s' is mandatory" % k, raise_exception = 1)
 			elif k == 'warehouse':
-				if not frappe.conn.sql("select name from tabWarehouse where name = '%s'" % self.doc.fields.get(k)):
+				if not frappe.db.sql("select name from tabWarehouse where name = '%s'" % self.doc.fields.get(k)):
 					msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1)
 
 	def validate_item(self):
-		item_det = frappe.conn.sql("""select name, has_batch_no, docstatus,
+		item_det = frappe.db.sql("""select name, has_batch_no, docstatus,
 			is_stock_item, has_serial_no, serial_no_series
 			from tabItem where name=%s""",
 			self.doc.item_code, as_dict=True)[0]
@@ -78,7 +78,7 @@
 				frappe.throw("Batch number is mandatory for Item '%s'" % self.doc.item_code)
 
 			# check if batch belongs to item
-			if not frappe.conn.sql("""select name from `tabBatch`
+			if not frappe.db.sql("""select name from `tabBatch`
 				where item='%s' and name ='%s' and docstatus != 2""" % (self.doc.item_code, self.doc.batch_no)):
 				frappe.throw("'%s' is not a valid Batch Number for Item '%s'" % (self.doc.batch_no, self.doc.item_code))
 
@@ -86,15 +86,15 @@
 			self.doc.stock_uom = item_det.stock_uom
 
 	def check_stock_frozen_date(self):
-		stock_frozen_upto = frappe.conn.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
+		stock_frozen_upto = frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
 		if stock_frozen_upto:
-			stock_auth_role = frappe.conn.get_value('Stock Settings', None,'stock_auth_role')
+			stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
 			if getdate(self.doc.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in frappe.user.get_roles():
 				msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=StockFreezeError)
 
-		stock_frozen_upto_days = int(frappe.conn.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
+		stock_frozen_upto_days = int(frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
 		if stock_frozen_upto_days:
-			stock_auth_role = frappe.conn.get_value('Stock Settings', None,'stock_auth_role')
+			stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
 			older_than_x_days_ago = (add_days(getdate(self.doc.posting_date), stock_frozen_upto_days) <= date.today())
 			if older_than_x_days_ago and not stock_auth_role in frappe.user.get_roles():
 				msgprint("You are not authorized to do / modify back dated stock entries older than %d days ago" %stock_frozen_upto_days, raise_exception=StockFreezeError)
@@ -105,8 +105,8 @@
 			self.doc.posting_time = '00:00'
 
 def on_doctype_update():
-	if not frappe.conn.sql("""show index from `tabStock Ledger Entry`
+	if not frappe.db.sql("""show index from `tabStock Ledger Entry`
 		where Key_name="posting_sort_index" """):
-		frappe.conn.commit()
-		frappe.conn.sql("""alter table `tabStock Ledger Entry`
+		frappe.db.commit()
+		frappe.db.sql("""alter table `tabStock Ledger Entry`
 			add index posting_sort_index(posting_date, posting_time, name)""")
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 23c9bef..48a164c 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -243,7 +243,7 @@
 			"voucher_type": self.doc.doctype,
 			"voucher_no": self.doc.name,
 			"company": self.doc.company,
-			"stock_uom": frappe.conn.get_value("Item", row.item_code, "stock_uom"),
+			"stock_uom": frappe.db.get_value("Item", row.item_code, "stock_uom"),
 			"voucher_detail_no": row.voucher_detail_no,
 			"fiscal_year": self.doc.fiscal_year,
 			"is_cancelled": "No"
@@ -258,12 +258,12 @@
 		"""	Delete Stock Ledger Entries related to this voucher
 			and repost future Stock Ledger Entries"""
 				
-		existing_entries = frappe.conn.sql("""select distinct item_code, warehouse 
+		existing_entries = frappe.db.sql("""select distinct item_code, warehouse 
 			from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", 
 			(self.doc.doctype, self.doc.name), as_dict=1)
 				
 		# delete entries
-		frappe.conn.sql("""delete from `tabStock Ledger Entry` 
+		frappe.db.sql("""delete from `tabStock Ledger Entry` 
 			where voucher_type=%s and voucher_no=%s""", (self.doc.doctype, self.doc.name))
 		
 		# repost future entries for selected item_code, warehouse
@@ -289,8 +289,8 @@
 			
 		if not self.doc.expense_account:
 			msgprint(_("Please enter Expense Account"), raise_exception=1)
-		elif not frappe.conn.sql("""select * from `tabStock Ledger Entry`"""):
-			if frappe.conn.get_value("Account", self.doc.expense_account, 
+		elif not frappe.db.sql("""select * from `tabStock Ledger Entry`"""):
+			if frappe.db.get_value("Account", self.doc.expense_account, 
 					"is_pl_account") == "Yes":
 				msgprint(_("""Expense Account can not be a PL Account, as this stock \
 					reconciliation is an opening entry. \
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index cdb8c3e..0486cd2 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -37,20 +37,20 @@
 			stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
 		
 			# check stock value
-			res = frappe.conn.sql("""select stock_value from `tabStock Ledger Entry`
+			res = frappe.db.sql("""select stock_value from `tabStock Ledger Entry`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'
 				and posting_date = %s and posting_time = %s order by name desc limit 1""", 
 				(d[2], d[3]))
 			self.assertEqual(res and flt(res[0][0]) or 0, d[4])
 			
 			# check bin qty and stock value
-			bin = frappe.conn.sql("""select actual_qty, stock_value from `tabBin`
+			bin = frappe.db.sql("""select actual_qty, stock_value from `tabBin`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'""")
 			
 			self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1])] or [], [d[5], d[6]])
 			
 			# no gl entries
-			gl_entries = frappe.conn.sql("""select name from `tabGL Entry` 
+			gl_entries = frappe.db.sql("""select name from `tabGL Entry` 
 				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""",
 				 stock_reco.doc.name)
 			self.assertFalse(gl_entries)
@@ -82,7 +82,7 @@
 			stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
 			
 			# check stock value in sle
-			res = frappe.conn.sql("""select stock_value from `tabStock Ledger Entry`
+			res = frappe.db.sql("""select stock_value from `tabStock Ledger Entry`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'
 				and posting_date = %s and posting_time = %s order by name desc limit 1""", 
 				(d[2], d[3]))
@@ -90,14 +90,14 @@
 			self.assertEqual(res and flt(res[0][0], 4) or 0, d[4])
 			
 			# bin qty and stock value
-			bin = frappe.conn.sql("""select actual_qty, stock_value from `tabBin`
+			bin = frappe.db.sql("""select actual_qty, stock_value from `tabBin`
 				where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'""")
 			
 			self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1], 4)] or [], 
 				[flt(d[5]), flt(d[6])])
 				
 			# no gl entries
-			gl_entries = frappe.conn.sql("""select name from `tabGL Entry` 
+			gl_entries = frappe.db.sql("""select name from `tabGL Entry` 
 				where voucher_type = 'Stock Reconciliation' and voucher_no = %s""", 
 				stock_reco.doc.name)
 			self.assertFalse(gl_entries)
@@ -170,9 +170,9 @@
 
 
 	def cleanup_data(self):
-		frappe.conn.sql("delete from `tabStock Ledger Entry`")
-		frappe.conn.sql("delete from tabBin")
-		frappe.conn.sql("delete from `tabGL Entry`")
+		frappe.db.sql("delete from `tabStock Ledger Entry`")
+		frappe.db.sql("delete from tabBin")
+		frappe.db.sql("delete from `tabGL Entry`")
 						
 	def submit_stock_reconciliation(self, qty, rate, posting_date, posting_time):
 		stock_reco = frappe.bean([{
@@ -193,8 +193,8 @@
 		return stock_reco
 		
 	def insert_existing_sle(self, valuation_method):
-		frappe.conn.set_value("Item", "_Test Item", "valuation_method", valuation_method)
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.set_value("Item", "_Test Item", "valuation_method", valuation_method)
+		frappe.db.set_default("allow_negative_stock", 1)
 		
 		stock_entry = [
 			{
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py
index 470ae1b..7f03bb1 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.py
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.py
@@ -14,7 +14,7 @@
 	def validate(self):
 		for key in ["item_naming_by", "item_group", "stock_uom",
 			"allow_negative_stock"]:
-			frappe.conn.set_default(key, self.doc.fields.get(key, ""))
+			frappe.db.set_default(key, self.doc.fields.get(key, ""))
 			
 		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Item", "item_code", 
diff --git a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index f226efd..5160e83 100644
--- a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -33,7 +33,7 @@
 			msgprint("Please Enter Conversion Factor.")
 			raise Exception
 		
-		stock_uom = frappe.conn.sql("select stock_uom from `tabItem` where name = '%s'" % self.doc.item_code)
+		stock_uom = frappe.db.sql("select stock_uom from `tabItem` where name = '%s'" % self.doc.item_code)
 		stock_uom = stock_uom and stock_uom[0][0]
 		if cstr(self.doc.new_stock_uom) == cstr(stock_uom):
 			msgprint("Item Master is already updated with New Stock UOM " + cstr(self.doc.new_stock_uom))
@@ -49,9 +49,9 @@
 	def update_bin(self):
 		# update bin
 		if flt(self.doc.conversion_factor) != flt(1):
-			frappe.conn.sql("update `tabBin` set stock_uom = '%s' , indented_qty = ifnull(indented_qty,0) * %s, ordered_qty = ifnull(ordered_qty,0) * %s, reserved_qty = ifnull(reserved_qty,0) * %s, planned_qty = ifnull(planned_qty,0) * %s, projected_qty = actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty	where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.item_code) )
+			frappe.db.sql("update `tabBin` set stock_uom = '%s' , indented_qty = ifnull(indented_qty,0) * %s, ordered_qty = ifnull(ordered_qty,0) * %s, reserved_qty = ifnull(reserved_qty,0) * %s, planned_qty = ifnull(planned_qty,0) * %s, projected_qty = actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty	where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.item_code) )
 		else:
-			frappe.conn.sql("update `tabBin` set stock_uom = '%s' where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.item_code) )
+			frappe.db.sql("update `tabBin` set stock_uom = '%s' where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.item_code) )
 
 		# acknowledge user
 		msgprint(" All Bins Updated Successfully.")
@@ -61,16 +61,16 @@
 		from erpnext.stock.stock_ledger import update_entries_after
 		
 		if flt(self.doc.conversion_factor) != flt(1):
-			frappe.conn.sql("update `tabStock Ledger Entry` set stock_uom = '%s', actual_qty = ifnull(actual_qty,0) * '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
+			frappe.db.sql("update `tabStock Ledger Entry` set stock_uom = '%s', actual_qty = ifnull(actual_qty,0) * '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
 		else:
-			frappe.conn.sql("update `tabStock Ledger Entry` set stock_uom = '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.item_code))
+			frappe.db.sql("update `tabStock Ledger Entry` set stock_uom = '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.item_code))
 		
 		# acknowledge user
 		msgprint("Stock Ledger Entries Updated Successfully.")
 		
 		# update item valuation
 		if flt(self.doc.conversion_factor) != flt(1):
-			wh = frappe.conn.sql("select name from `tabWarehouse`")
+			wh = frappe.db.sql("select name from `tabWarehouse`")
 			for w in wh:
 				update_entries_after({"item_code": self.doc.item_code, "warehouse": w[0]})
 
@@ -90,8 +90,8 @@
 
 		
 	def validate_uom_integer_type(self):
-		current_is_integer = frappe.conn.get_value("UOM", self.doc.current_stock_uom, "must_be_whole_number")
-		new_is_integer = frappe.conn.get_value("UOM", self.doc.new_stock_uom, "must_be_whole_number")
+		current_is_integer = frappe.db.get_value("UOM", self.doc.current_stock_uom, "must_be_whole_number")
+		new_is_integer = frappe.db.get_value("UOM", self.doc.new_stock_uom, "must_be_whole_number")
 		
 		if current_is_integer and not new_is_integer:
 			frappe.msgprint("New UOM must be of type Whole Number", raise_exception=True)
@@ -104,5 +104,5 @@
 
 @frappe.whitelist()
 def get_stock_uom(item_code):
-	return { 'current_stock_uom': cstr(frappe.conn.get_value('Item', item_code, 'stock_uom')) }
+	return { 'current_stock_uom': cstr(frappe.db.get_value('Item', item_code, 'stock_uom')) }
 	
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 8d9268a..8ec6235 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -12,7 +12,7 @@
 		self.doclist = doclist
 	
 	def autoname(self):
-		suffix = " - " + frappe.conn.get_value("Company", self.doc.company, "abbr")
+		suffix = " - " + frappe.db.get_value("Company", self.doc.company, "abbr")
 		if not self.doc.warehouse_name.endswith(suffix):
 			self.doc.name = self.doc.warehouse_name + suffix
 
@@ -24,8 +24,8 @@
 				
 	def update_parent_account(self):
 		if not self.doc.__islocal and (self.doc.create_account_under != 
-			frappe.conn.get_value("Warehouse", self.doc.name, "create_account_under")):
-				warehouse_account = frappe.conn.get_value("Account", 
+			frappe.db.get_value("Warehouse", self.doc.name, "create_account_under")):
+				warehouse_account = frappe.db.get_value("Account", 
 					{"account_type": "Warehouse", "company": self.doc.company, 
 					"master_name": self.doc.name}, ["name", "parent_account"])
 				if warehouse_account and warehouse_account[1] != self.doc.create_account_under:
@@ -38,10 +38,10 @@
 						
 	def create_account_head(self):
 		if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
-			if not frappe.conn.get_value("Account", {"account_type": "Warehouse", 
-					"master_name": self.doc.name}) and not frappe.conn.get_value("Account", 
+			if not frappe.db.get_value("Account", {"account_type": "Warehouse", 
+					"master_name": self.doc.name}) and not frappe.db.get_value("Account", 
 					{"account_name": self.doc.warehouse_name}):
-				if self.doc.fields.get("__islocal") or not frappe.conn.get_value(
+				if self.doc.fields.get("__islocal") or not frappe.db.get_value(
 						"Stock Ledger Entry", {"warehouse": self.doc.name}):
 					self.validate_parent_account()
 					ac_bean = frappe.bean({
@@ -61,7 +61,7 @@
 	
 	def validate_parent_account(self):
 		if not self.doc.create_account_under:
-			parent_account = frappe.conn.get_value("Account", 
+			parent_account = frappe.db.get_value("Account", 
 				{"account_name": "Stock Assets", "company": self.doc.company})
 			if parent_account:
 				self.doc.create_account_under = parent_account
@@ -71,7 +71,7 @@
 		
 	def on_trash(self):
 		# delete bin
-		bins = frappe.conn.sql("select * from `tabBin` where warehouse = %s", 
+		bins = frappe.db.sql("select * from `tabBin` where warehouse = %s", 
 			self.doc.name, as_dict=1)
 		for d in bins:
 			if d['actual_qty'] or d['reserved_qty'] or d['ordered_qty'] or \
@@ -79,14 +79,14 @@
 				throw("""Warehouse: %s can not be deleted as qty exists for item: %s""" 
 					% (self.doc.name, d['item_code']))
 			else:
-				frappe.conn.sql("delete from `tabBin` where name = %s", d['name'])
+				frappe.db.sql("delete from `tabBin` where name = %s", d['name'])
 				
-		warehouse_account = frappe.conn.get_value("Account", 
+		warehouse_account = frappe.db.get_value("Account", 
 			{"account_type": "Warehouse", "master_name": self.doc.name})
 		if warehouse_account:
 			frappe.delete_doc("Account", warehouse_account)
 				
-		if frappe.conn.sql("""select name from `tabStock Ledger Entry` 
+		if frappe.db.sql("""select name from `tabStock Ledger Entry` 
 				where warehouse = %s""", self.doc.name):
 			throw(_("""Warehouse can not be deleted as stock ledger entry 
 				exists for this warehouse."""))
@@ -97,13 +97,13 @@
 		new_warehouse = get_name_with_abbr(newdn, self.doc.company)
 
 		if merge:
-			if not frappe.conn.exists("Warehouse", new_warehouse):
+			if not frappe.db.exists("Warehouse", new_warehouse):
 				frappe.throw(_("Warehouse ") + new_warehouse +_(" does not exists"))
 				
-			if self.doc.company != frappe.conn.get_value("Warehouse", new_warehouse, "company"):
+			if self.doc.company != frappe.db.get_value("Warehouse", new_warehouse, "company"):
 				frappe.throw(_("Both Warehouse must belong to same Company"))
 				
-			frappe.conn.sql("delete from `tabBin` where warehouse=%s", olddn)
+			frappe.db.sql("delete from `tabBin` where warehouse=%s", olddn)
 			
 		from erpnext.accounts.utils import rename_account_for
 		rename_account_for("Warehouse", olddn, newdn, merge, self.doc.company)
@@ -116,15 +116,15 @@
 			
 	def recalculate_bin_qty(self, newdn):
 		from erpnext.utilities.repost_stock import repost_stock
-		frappe.conn.auto_commit_on_many_writes = 1
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.auto_commit_on_many_writes = 1
+		frappe.db.set_default("allow_negative_stock", 1)
 		
-		for item in frappe.conn.sql("""select distinct item_code from (
+		for item in frappe.db.sql("""select distinct item_code from (
 			select name as item_code from `tabItem` where ifnull(is_stock_item, 'Yes')='Yes'
 			union 
 			select distinct item_code from tabBin) a"""):
 				repost_stock(item[0], newdn)
 			
-		frappe.conn.set_default("allow_negative_stock", 
-			frappe.conn.get_value("Stock Settings", None, "allow_negative_stock"))
-		frappe.conn.auto_commit_on_many_writes = 0
\ No newline at end of file
+		frappe.db.set_default("allow_negative_stock", 
+			frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
+		frappe.db.auto_commit_on_many_writes = 0
\ No newline at end of file
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 5680da8..dfe4cc3 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -78,9 +78,9 @@
 
 def get_item_code(barcode=None, serial_no=None):
 	if barcode:
-		item_code = frappe.conn.get_value("Item", {"barcode": barcode})
+		item_code = frappe.db.get_value("Item", {"barcode": barcode})
 	elif serial_no:
-		item_code = frappe.conn.get_value("Serial No", serial_no, "item_code")
+		item_code = frappe.db.get_value("Serial No", serial_no, "item_code")
 
 	if not item_code:
 		throw(_("No Item found with ") + _("Barcode") if barcode else _("Serial No") + 
@@ -130,9 +130,9 @@
 		"description": item.description_html or item.description,
 		"warehouse": user_default_warehouse or args.warehouse or item.default_warehouse,
 		"income_account": item.income_account or args.income_account \
-			or frappe.conn.get_value("Company", args.company, "default_income_account"),
+			or frappe.db.get_value("Company", args.company, "default_income_account"),
 		"expense_account": item.expense_account or args.expense_account \
-			or frappe.conn.get_value("Company", args.company, "default_expense_account"),
+			or frappe.db.get_value("Company", args.company, "default_expense_account"),
 		"cost_center": item.selling_cost_center \
 			if args.transaction_type == "selling" else item.buying_cost_center,
 		"batch_no": None,
@@ -163,7 +163,7 @@
 		validate_price_list(args)
 		validate_conversion_rate(args, meta)
 
-		price_list_rate = frappe.conn.get_value("Item Price", 
+		price_list_rate = frappe.db.get_value("Item Price", 
 			{"price_list": args.price_list, "item_code": args.item_code}, "price_list_rate")
 			
 		if not price_list_rate: return {}
@@ -178,7 +178,7 @@
 			
 def validate_price_list(args):
 	if args.get("price_list"):
-		if not frappe.conn.get_value("Price List", 
+		if not frappe.db.get_value("Price List", 
 			{"name": args.price_list, args.transaction_type: 1, "enabled": 1}):
 				throw(_("Price List is either disabled or for not ") + _(args.transaction_type))
 	else:
@@ -208,7 +208,7 @@
 			frappe._dict({"fields": args})))
 
 def get_item_discount(item_group, customer):
-	parent_item_groups = [x[0] for x in frappe.conn.sql("""SELECT parent.name 
+	parent_item_groups = [x[0] for x in frappe.db.sql("""SELECT parent.name 
 		FROM `tabItem Group` AS node, `tabItem Group` AS parent 
 		WHERE parent.lft <= node.lft and parent.rgt >= node.rgt and node.name = %s
 		GROUP BY parent.name 
@@ -216,7 +216,7 @@
 		
 	discount = 0
 	for d in parent_item_groups:
-		res = frappe.conn.sql("""select discount, name from `tabCustomer Discount` 
+		res = frappe.db.sql("""select discount, name from `tabCustomer Discount` 
 			where parent = %s and item_group = %s""", (customer, d))
 		if res:
 			discount = flt(res[0][0])
@@ -253,17 +253,17 @@
 	return res
 
 def get_pos_settings(company):
-	pos_settings = frappe.conn.sql("""select * from `tabPOS Setting` where user = %s 
+	pos_settings = frappe.db.sql("""select * from `tabPOS Setting` where user = %s 
 		and company = %s""", (frappe.session['user'], company), as_dict=1)
 	
 	if not pos_settings:
-		pos_settings = frappe.conn.sql("""select * from `tabPOS Setting` 
+		pos_settings = frappe.db.sql("""select * from `tabPOS Setting` 
 			where ifnull(user,'') = '' and company = %s""", company, as_dict=1)
 			
 	return pos_settings and pos_settings[0] or None
 	
 def get_serial_nos_by_fifo(args, item_bean):
-	return "\n".join(frappe.conn.sql_list("""select name from `tabSerial No` 
+	return "\n".join(frappe.db.sql_list("""select name from `tabSerial No` 
 		where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available' 
 		order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {
 			"item_code": args.item_code,
@@ -273,15 +273,15 @@
 		
 @frappe.whitelist()
 def get_conversion_factor(item_code, uom):
-	return {"conversion_factor": frappe.conn.get_value("UOM Conversion Detail",
+	return {"conversion_factor": frappe.db.get_value("UOM Conversion Detail",
 		{"parent": item_code, "uom": uom}, "conversion_factor")}
 		
 @frappe.whitelist()
 def get_projected_qty(item_code, warehouse):
-	return {"projected_qty": frappe.conn.get_value("Bin", 
+	return {"projected_qty": frappe.db.get_value("Bin", 
 		{"item_code": item_code, "warehouse": warehouse}, "projected_qty")}
 		
 @frappe.whitelist()
 def get_available_qty(item_code, warehouse):
-	return frappe.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, 
+	return frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, 
 		["projected_qty", "actual_qty"], as_dict=True) or {}
\ No newline at end of file
diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
index 2b3ec2c..c88fd11 100644
--- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
+++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
@@ -49,7 +49,7 @@
 #get all details
 def get_stock_ledger_entries(filters):
 	conditions = get_conditions(filters)
-	return frappe.conn.sql("""select item_code, batch_no, warehouse, 
+	return frappe.db.sql("""select item_code, batch_no, warehouse, 
 		posting_date, actual_qty 
 		from `tabStock Ledger Entry` 
 		where docstatus < 2 %s order by item_code, warehouse""" %
@@ -79,7 +79,7 @@
 
 def get_item_details(filters):
 	item_map = {}
-	for d in frappe.conn.sql("select name, item_name, description from tabItem", as_dict=1):
+	for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1):
 		item_map.setdefault(d.name, d)
 
 	return item_map
\ No newline at end of file
diff --git a/erpnext/stock/report/item_prices/item_prices.py b/erpnext/stock/report/item_prices/item_prices.py
index 8f7a481..0d5539e 100644
--- a/erpnext/stock/report/item_prices/item_prices.py
+++ b/erpnext/stock/report/item_prices/item_prices.py
@@ -45,7 +45,7 @@
 	
 	item_map = {}
 	
-	for i in frappe.conn.sql("select name, item_name, description, \
+	for i in frappe.db.sql("select name, item_name, description, \
 		stock_uom, standard_rate from tabItem \
 		order by item_code", as_dict=1):
 			item_map.setdefault(i.name, i)
@@ -57,7 +57,7 @@
 
 	rate = {}
 
-	price_list = frappe.conn.sql("""select ip.item_code, ip.buying, ip.selling, 
+	price_list = frappe.db.sql("""select ip.item_code, ip.buying, ip.selling, 
 		concat(ip.price_list, " - ", ip.currency, " ", ip.price_list_rate) as price 
 		from `tabItem Price` ip, `tabPrice List` pl 
 		where ip.price_list=pl.name and pl.enabled=1""", as_dict=1)
@@ -105,7 +105,7 @@
 				order by result.item_code asc, result.posting_date desc) result_wrapper
 				group by item_code"""
 
-	for d in frappe.conn.sql(query, as_dict=1):
+	for d in frappe.db.sql(query, as_dict=1):
 		item_last_purchase_rate_map.setdefault(d.item_code, d.base_rate)
 
 	return item_last_purchase_rate_map
@@ -115,7 +115,7 @@
 
 	item_bom_map = {}
 	
-	for b in frappe.conn.sql("""select item, (total_cost/quantity) as bom_rate 
+	for b in frappe.db.sql("""select item, (total_cost/quantity) as bom_rate 
 		from `tabBOM` where is_active=1 and is_default=1""", as_dict=1):
 			item_bom_map.setdefault(b.item, flt(b.bom_rate))
 
@@ -126,7 +126,7 @@
 
 	item_val_rate_map = {}
 	
-	for d in frappe.conn.sql("""select item_code, 
+	for d in frappe.db.sql("""select item_code, 
 		sum(actual_qty*valuation_rate)/sum(actual_qty) as val_rate
 		from tabBin where actual_qty > 0 group by item_code""", as_dict=1):
 			item_val_rate_map.setdefault(d.item_code, d.val_rate)
diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
index 5266180..839a70f 100644
--- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
+++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
@@ -6,7 +6,7 @@
 
 def execute(filters=None):
 	if not filters: filters = {}
-	float_preceision = frappe.conn.get_default("float_preceision")
+	float_preceision = frappe.db.get_default("float_preceision")
 
 	condition =get_condition(filters)
 
@@ -42,12 +42,12 @@
 	]
 
 def get_item_info():
-	return frappe.conn.sql("""select name, item_name, description, min_order_qty,
+	return frappe.db.sql("""select name, item_name, description, min_order_qty,
 		lead_time_days	from tabItem""", as_dict=1)
 
 def get_consumed_items(condition):
 
-	cn_items = frappe.conn.sql("""select se_item.item_code, 
+	cn_items = frappe.db.sql("""select se_item.item_code, 
 				sum(se_item.actual_qty) as 'consume_qty'
 		from `tabStock Entry` se, `tabStock Entry Detail` se_item
 		where se.name = se_item.parent and se.docstatus = 1 
@@ -62,12 +62,12 @@
 
 def get_delivered_items(condition):
 
-	dn_items = frappe.conn.sql("""select dn_item.item_code, sum(dn_item.qty) as dn_qty
+	dn_items = frappe.db.sql("""select dn_item.item_code, sum(dn_item.qty) as dn_qty
 		from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
 		where dn.name = dn_item.parent and dn.docstatus = 1 %s 
 		group by dn_item.item_code""" % (condition), as_dict=1)
 
-	si_items = frappe.conn.sql("""select si_item.item_name, sum(si_item.qty) as si_qty
+	si_items = frappe.db.sql("""select si_item.item_name, sum(si_item.qty) as si_qty
 		from `tabSales Invoice` si, `tabSales Invoice Item` si_item
 		where si.name = si_item.parent and si.docstatus = 1 and 
 		ifnull(si.update_stock, 0) = 1 and ifnull(si.is_pos, 0) = 1 %s 
diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py
index 1d782c5..d8a8dc7 100644
--- a/erpnext/stock/report/stock_ageing/stock_ageing.py
+++ b/erpnext/stock/report/stock_ageing/stock_ageing.py
@@ -63,7 +63,7 @@
 	return item_details
 	
 def get_stock_ledger_entries(filters):
-	return frappe.conn.sql("""select 
+	return frappe.db.sql("""select 
 			item.name, item.item_name, item_group, brand, description, item.stock_uom, 
 			actual_qty, posting_date
 		from `tabStock Ledger Entry` sle,
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py
index 31554ec..298e971 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.py
@@ -32,7 +32,7 @@
 		"Batch:Link/Batch:100", "Serial #:Link/Serial No:100", "Company:Link/Company:100"]
 	
 def get_stock_ledger_entries(filters):
-	return frappe.conn.sql("""select concat_ws(" ", posting_date, posting_time) as date,
+	return frappe.db.sql("""select concat_ws(" ", posting_date, posting_time) as date,
 			item_code, warehouse, actual_qty, qty_after_transaction, 
 			stock_value, voucher_type, voucher_no, batch_no, serial_no, company
 		from `tabStock Ledger Entry`
@@ -44,7 +44,7 @@
 
 def get_item_details(filters):
 	item_details = {}
-	for item in frappe.conn.sql("""select name, item_name, description, item_group, 
+	for item in frappe.db.sql("""select name, item_name, description, item_group, 
 			brand, stock_uom from `tabItem` {item_conditions}"""\
 			.format(item_conditions=get_item_conditions(filters)), filters, as_dict=1):
 		item_details.setdefault(item.name, item)
diff --git a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
index 2bfd0c8..cc514f7 100644
--- a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
+++ b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
@@ -7,7 +7,7 @@
 def execute(filters=None):
 	columns = get_columns()
 		
-	data = frappe.conn.sql("""select 
+	data = frappe.db.sql("""select 
 			item.name, item.item_name, description, item_group, brand, warehouse, item.stock_uom, 
 			actual_qty, planned_qty, indented_qty, ordered_qty, reserved_qty, 
 			projected_qty, item.re_order_level, item.re_order_qty
diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
index ec3eaca..22b4ec6 100644
--- a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
+++ b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
@@ -63,7 +63,7 @@
 	conditions, values = get_conditions(filters)
 	consumed_details = {}
 
-	for d in frappe.conn.sql("""select sle.item_code, i.item_name, i.description, 
+	for d in frappe.db.sql("""select sle.item_code, i.item_name, i.description, 
 		i.stock_uom, sle.actual_qty, sle.stock_value_difference, 
 		sle.voucher_no, sle.voucher_type
 		from `tabStock Ledger Entry` sle, `tabItem` i 
@@ -76,7 +76,7 @@
 	item_supplier_map = {}
 	supplier = filters.get('supplier')
 
-	for d in frappe.conn.sql("""select pr.supplier, pri.item_code from 
+	for d in frappe.db.sql("""select pr.supplier, pri.item_code from 
 		`tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri 
 		where pr.name=pri.parent and pr.docstatus=1 and 
 		pri.item_code=(select name from `tabItem` where 
@@ -91,5 +91,5 @@
 	return item_supplier_map
 
 def get_material_transfer_vouchers():
-	return frappe.conn.sql_list("""select name from `tabStock Entry` where 
+	return frappe.db.sql_list("""select name from `tabStock Entry` where 
 		purpose='Material Transfer' and docstatus=1""")
\ No newline at end of file
diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py
index 76ab7e8..eb7df86 100644
--- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py
+++ b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py
@@ -49,7 +49,7 @@
 #get all details
 def get_stock_ledger_entries(filters):
 	conditions = get_conditions(filters)
-	return frappe.conn.sql("""select item_code, warehouse, 
+	return frappe.db.sql("""select item_code, warehouse, 
 		posting_date, actual_qty, company 
 		from `tabStock Ledger Entry` 
 		where docstatus < 2 %s order by item_code, warehouse""" %
@@ -79,7 +79,7 @@
 
 def get_item_details(filters):
 	item_map = {}
-	for d in frappe.conn.sql("select name, item_name, description from tabItem", as_dict=1):
+	for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1):
 		item_map.setdefault(d.name, d)
 
 	return item_map
\ No newline at end of file
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 53446af..822c8f2 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -42,7 +42,7 @@
 				sl_entries[0].get('voucher_no'))
 			
 def set_as_cancel(voucher_type, voucher_no):
-	frappe.conn.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
+	frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
 		modified=%s, modified_by=%s
 		where voucher_no=%s and voucher_type=%s""", 
 		(now(), frappe.session.user, voucher_type, voucher_no))
@@ -56,7 +56,7 @@
 	return sle.doc.name
 	
 def delete_cancelled_entry(voucher_type, voucher_no):
-	frappe.conn.sql("""delete from `tabStock Ledger Entry` 
+	frappe.db.sql("""delete from `tabStock Ledger Entry` 
 		where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
 
 def update_entries_after(args, verbose=1):
@@ -89,7 +89,7 @@
 	stock_value_difference = 0.0
 
 	for sle in entries_to_fix:
-		if sle.serial_no or not cint(frappe.conn.get_default("allow_negative_stock")):
+		if sle.serial_no or not cint(frappe.db.get_default("allow_negative_stock")):
 			# validate negative stock for serialized items, fifo valuation 
 			# or when negative stock is not allowed for moving average
 			if not validate_negative_stock(qty_after_transaction, sle):
@@ -125,7 +125,7 @@
 		prev_stock_value = stock_value
 			
 		# update current sle
-		frappe.conn.sql("""update `tabStock Ledger Entry`
+		frappe.db.sql("""update `tabStock Ledger Entry`
 			set qty_after_transaction=%s, valuation_rate=%s, stock_queue=%s,
 			stock_value=%s, stock_value_difference=%s where name=%s""", 
 			(qty_after_transaction, valuation_rate,
@@ -135,7 +135,7 @@
 		_raise_exceptions(args, verbose)
 	
 	# update bin
-	if not frappe.conn.exists({"doctype": "Bin", "item_code": args["item_code"], 
+	if not frappe.db.exists({"doctype": "Bin", "item_code": args["item_code"], 
 			"warehouse": args["warehouse"]}):
 		bin_wrapper = frappe.bean([{
 			"doctype": "Bin",
@@ -145,7 +145,7 @@
 		bin_wrapper.ignore_permissions = 1
 		bin_wrapper.insert()
 	
-	frappe.conn.sql("""update `tabBin` set valuation_rate=%s, actual_qty=%s,
+	frappe.db.sql("""update `tabBin` set valuation_rate=%s, actual_qty=%s,
 		stock_value=%s, 
 		projected_qty = (actual_qty + indented_qty + ordered_qty + planned_qty - reserved_qty)
 		where item_code=%s and warehouse=%s""", (valuation_rate, qty_after_transaction,
@@ -181,7 +181,7 @@
 	if not args.get("posting_time"):
 		args["posting_time"] = "00:00"
 	
-	return frappe.conn.sql("""select * from `tabStock Ledger Entry`
+	return frappe.db.sql("""select * from `tabStock Ledger Entry`
 		where item_code = %%(item_code)s
 		and warehouse = %%(warehouse)s
 		and ifnull(is_cancelled, 'No')='No'
@@ -223,7 +223,7 @@
 	elif incoming_rate == 0 or flt(sle.actual_qty) < 0:
 		# In case of delivery/stock issue, get average purchase rate
 		# of serial nos of current entry
-		incoming_rate = flt(frappe.conn.sql("""select avg(ifnull(purchase_rate, 0))
+		incoming_rate = flt(frappe.db.sql("""select avg(ifnull(purchase_rate, 0))
 			from `tabSerial No` where name in (%s)""" % (", ".join(["%s"]*len(serial_no))),
 			tuple(serial_no))[0][0])
 	
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 7a1246a..7105e79 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -13,7 +13,7 @@
 def get_stock_balance_on(warehouse, posting_date=None):
 	if not posting_date: posting_date = nowdate()
 	
-	stock_ledger_entries = frappe.conn.sql("""
+	stock_ledger_entries = frappe.db.sql("""
 		SELECT 
 			item_code, stock_value
 		FROM 
@@ -31,14 +31,14 @@
 	
 def get_latest_stock_balance():
 	bin_map = {}
-	for d in frappe.conn.sql("""SELECT item_code, warehouse, stock_value as stock_value 
+	for d in frappe.db.sql("""SELECT item_code, warehouse, stock_value as stock_value 
 		FROM tabBin""", as_dict=1):
 			bin_map.setdefault(d.warehouse, {}).setdefault(d.item_code, flt(d.stock_value))
 			
 	return bin_map
 	
 def get_bin(item_code, warehouse):
-	bin = frappe.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse})
+	bin = frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse})
 	if not bin:
 		bin_wrapper = frappe.bean([{
 			"doctype": "Bin",
@@ -54,7 +54,7 @@
 	return bin_obj
 
 def update_bin(args):
-	is_stock_item = frappe.conn.get_value('Item', args.get("item_code"), 'is_stock_item')
+	is_stock_item = frappe.db.get_value('Item', args.get("item_code"), 'is_stock_item')
 	if is_stock_item == 'Yes':
 		bin = get_bin(args.get("item_code"), args.get("warehouse"))
 		bin.update_stock(args)
@@ -71,7 +71,7 @@
 	if args.get("serial_no"):
 		in_rate = get_avg_purchase_rate(args.get("serial_no"))
 	elif args.get("bom_no"):
-		result = frappe.conn.sql("""select ifnull(total_cost, 0) / ifnull(quantity, 1) 
+		result = frappe.db.sql("""select ifnull(total_cost, 0) / ifnull(quantity, 1) 
 			from `tabBOM` where name = %s and docstatus=1 and is_active=1""", args.get("bom_no"))
 		in_rate = result and flt(result[0][0]) or 0
 	else:
@@ -91,13 +91,13 @@
 	"""get average value of serial numbers"""
 	
 	serial_nos = get_valid_serial_nos(serial_nos)
-	return flt(frappe.conn.sql("""select avg(ifnull(purchase_rate, 0)) from `tabSerial No` 
+	return flt(frappe.db.sql("""select avg(ifnull(purchase_rate, 0)) from `tabSerial No` 
 		where name in (%s)""" % ", ".join(["%s"] * len(serial_nos)),
 		tuple(serial_nos))[0][0])
 
 def get_valuation_method(item_code):
 	"""get valuation method from item or default"""
-	val_method = frappe.conn.get_value('Item', item_code, 'valuation_method')
+	val_method = frappe.db.get_value('Item', item_code, 'valuation_method')
 	if not val_method:
 		val_method = get_global_default('valuation_method') or "FIFO"
 	return val_method
@@ -148,7 +148,7 @@
 	return valid_serial_nos
 
 def validate_warehouse_company(warehouse, company):
-	warehouse_company = frappe.conn.get_value("Warehouse", warehouse, "company")
+	warehouse_company = frappe.db.get_value("Warehouse", warehouse, "company")
 	if warehouse_company and warehouse_company != company:
 		frappe.msgprint(_("Warehouse does not belong to company.") + " (" + \
 			warehouse + ", " + company +")", raise_exception=InvalidWarehouseCompany)
@@ -182,11 +182,11 @@
 def reorder_item():
 	""" Reorder item if stock reaches reorder level"""
 	if getattr(frappe.local, "auto_indent", None) is None:
-		frappe.local.auto_indent = cint(frappe.conn.get_value('Stock Settings', None, 'auto_indent'))
+		frappe.local.auto_indent = cint(frappe.db.get_value('Stock Settings', None, 'auto_indent'))
 	
 	if frappe.local.auto_indent:
 		material_requests = {}
-		bin_list = frappe.conn.sql("""select item_code, warehouse, projected_qty
+		bin_list = frappe.db.sql("""select item_code, warehouse, projected_qty
 			from tabBin where ifnull(item_code, '') != '' and ifnull(warehouse, '') != ''
 			and exists (select name from `tabItem` 
 				where `tabItem`.name = `tabBin`.item_code and 
@@ -194,14 +194,14 @@
 				(ifnull(end_of_life, '')='' or end_of_life > now()))""", as_dict=True)
 		for bin in bin_list:
 			#check if re-order is required
-			item_reorder = frappe.conn.get("Item Reorder", 
+			item_reorder = frappe.db.get("Item Reorder", 
 				{"parent": bin.item_code, "warehouse": bin.warehouse})
 			if item_reorder:
 				reorder_level = item_reorder.warehouse_reorder_level
 				reorder_qty = item_reorder.warehouse_reorder_qty
 				material_request_type = item_reorder.material_request_type or "Purchase"
 			else:
-				reorder_level, reorder_qty = frappe.conn.get_value("Item", bin.item_code,
+				reorder_level, reorder_qty = frappe.db.get_value("Item", bin.item_code,
 					["re_order_level", "re_order_qty"])
 				material_request_type = "Purchase"
 		
@@ -209,9 +209,9 @@
 				if flt(reorder_level) - flt(bin.projected_qty) > flt(reorder_qty):
 					reorder_qty = flt(reorder_level) - flt(bin.projected_qty)
 					
-				company = frappe.conn.get_value("Warehouse", bin.warehouse, "company") or \
+				company = frappe.db.get_value("Warehouse", bin.warehouse, "company") or \
 					frappe.defaults.get_defaults()["company"] or \
-					frappe.conn.sql("""select name from tabCompany limit 1""")[0][0]
+					frappe.db.sql("""select name from tabCompany limit 1""")[0][0]
 					
 				material_requests.setdefault(material_request_type, frappe._dict()).setdefault(
 					company, []).append(frappe._dict({
@@ -276,7 +276,7 @@
 
 	if mr_list:
 		if getattr(frappe.local, "reorder_email_notify", None) is None:
-			frappe.local.reorder_email_notify = cint(frappe.conn.get_value('Stock Settings', None, 
+			frappe.local.reorder_email_notify = cint(frappe.db.get_value('Stock Settings', None, 
 				'reorder_email_notify'))
 			
 		if(frappe.local.reorder_email_notify):
@@ -288,7 +288,7 @@
 def send_email_notification(mr_list):
 	""" Notify user about auto creation of indent"""
 	
-	email_list = frappe.conn.sql_list("""select distinct r.parent 
+	email_list = frappe.db.sql_list("""select distinct r.parent 
 		from tabUserRole r, tabProfile p
 		where p.name = r.parent and p.enabled = 1 and p.docstatus < 2
 		and r.role in ('Purchase Manager','Material Manager') 
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.py b/erpnext/support/doctype/customer_issue/customer_issue.py
index 1709673..9f4b3db 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.py
+++ b/erpnext/support/doctype/customer_issue/customer_issue.py
@@ -22,18 +22,18 @@
 				raise_exception=True)
 				
 		if self.doc.status=="Closed" and \
-			frappe.conn.get_value("Customer Issue", self.doc.name, "status")!="Closed":
+			frappe.db.get_value("Customer Issue", self.doc.name, "status")!="Closed":
 			self.doc.resolution_date = today()
 			self.doc.resolved_by = frappe.session.user
 	
 	def on_cancel(self):
-		lst = frappe.conn.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t2.prevdoc_docname = '%s' and	t1.docstatus!=2"%(self.doc.name))
+		lst = frappe.db.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t2.prevdoc_docname = '%s' and	t1.docstatus!=2"%(self.doc.name))
 		if lst:
 			lst1 = ','.join([x[0] for x in lst])
 			msgprint("Maintenance Visit No. "+lst1+" already created against this customer issue. So can not be Cancelled")
 			raise Exception
 		else:
-			frappe.conn.set(self.doc, 'status', 'Cancelled')
+			frappe.db.set(self.doc, 'status', 'Cancelled')
 
 	def on_update(self):
 		pass
@@ -42,7 +42,7 @@
 def make_maintenance_visit(source_name, target_doclist=None):
 	from frappe.model.mapper import get_mapped_doclist
 	
-	visit = frappe.conn.sql("""select t1.name 
+	visit = frappe.db.sql("""select t1.name 
 		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
 		where t2.parent=t1.name and t2.prevdoc_docname=%s 
 		and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name)
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
index bed4199..7211a89 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -16,7 +16,7 @@
 		self.doclist = doclist
 	
 	def get_item_details(self, item_code):
-		item = frappe.conn.sql("""select item_name, description from `tabItem` 
+		item = frappe.db.sql("""select item_name, description from `tabItem` 
 			where name=%s""", (item_code), as_dict=1)
 		ret = {
 			'item_name': item and item[0]['item_name'] or '',
@@ -26,7 +26,7 @@
 		
 	def generate_schedule(self):
 		self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
-		frappe.conn.sql("""delete from `tabMaintenance Schedule Detail` 
+		frappe.db.sql("""delete from `tabMaintenance Schedule Detail` 
 			where parent=%s""", (self.doc.name))
 		count = 1
 		for d in getlist(self.doclist, 'item_maintenance_detail'):
@@ -64,7 +64,7 @@
 				sp = frappe.bean("Sales Person", d.sales_person).make_controller()
 				email_map[d.sales_person] = sp.get_email_id()
 
-			scheduled_date = frappe.conn.sql("""select scheduled_date from 
+			scheduled_date = frappe.db.sql("""select scheduled_date from 
 				`tabMaintenance Schedule Detail` where sales_person=%s and item_code=%s and 
 				parent=%s""", (d.sales_person, d.item_code, self.doc.name), as_dict=1)
 
@@ -83,7 +83,7 @@
 						"ref_name": self.doc.name
 					}).insert()
 
-		frappe.conn.set(self.doc, 'status', 'Submitted')		
+		frappe.db.set(self.doc, 'status', 'Submitted')		
 		
 	#get schedule dates
 	#----------------------
@@ -117,7 +117,7 @@
 
 		if fy_details and fy_details[0]:
 			# check holiday list in employee master
-			holiday_list = frappe.conn.sql_list("""select h.holiday_date from `tabEmployee` emp, 
+			holiday_list = frappe.db.sql_list("""select h.holiday_date from `tabEmployee` emp, 
 				`tabSales Person` sp, `tabHoliday` h, `tabHoliday List` hl 
 				where sp.name=%s and emp.name=sp.employee 
 				and hl.name=emp.holiday_list and 
@@ -125,7 +125,7 @@
 				hl.fiscal_year=%s""", (sales_person, fy_details[0]))
 			if not holiday_list:
 				# check global holiday list
-				holiday_list = frappe.conn.sql("""select h.holiday_date from 
+				holiday_list = frappe.db.sql("""select h.holiday_date from 
 					`tabHoliday` h, `tabHoliday List` hl 
 					where h.parent=hl.name and ifnull(hl.is_default, 0) = 1 
 					and hl.fiscal_year=%s""", fy_details[0])
@@ -197,7 +197,7 @@
 	def validate_sales_order(self):
 		for d in getlist(self.doclist, 'item_maintenance_detail'):
 			if d.prevdoc_docname:
-				chk = frappe.conn.sql("""select ms.name from `tabMaintenance Schedule` ms, 
+				chk = frappe.db.sql("""select ms.name from `tabMaintenance Schedule` ms, 
 					`tabMaintenance Schedule Item` msi where msi.parent=ms.name and 
 					msi.prevdoc_docname=%s and ms.docstatus=1""", d.prevdoc_docname)
 				if chk:
@@ -212,7 +212,7 @@
 				cur_s_no = cur_serial_no.split(',')
 				
 				for x in cur_s_no:
-					chk = frappe.conn.sql("""select name, status from `tabSerial No` 
+					chk = frappe.db.sql("""select name, status from `tabSerial No` 
 						where docstatus!=2 and name=%s""", (x))
 					chk1 = chk and chk[0][0] or ''
 					status = chk and chk[0][1] or ''
@@ -235,7 +235,7 @@
 				cur_s_no = cur_serial_no.split(',')
 				
 				for x in cur_s_no:
-					dt = frappe.conn.sql("""select delivery_date from `tabSerial No` 
+					dt = frappe.db.sql("""select delivery_date from `tabSerial No` 
 						where name=%s""", x)
 					dt = dt and dt[0][0] or ''
 					
@@ -251,16 +251,16 @@
 		cur_s_no = cur_serial_no.split(',')
 		
 		for x in cur_s_no:
-			frappe.conn.sql("""update `tabSerial No` set amc_expiry_date=%s, 
+			frappe.db.sql("""update `tabSerial No` set amc_expiry_date=%s, 
 				maintenance_status='Under AMC' where name=%s""", (amc_end_date, x))
 	
 	def on_update(self):
-		frappe.conn.set(self.doc, 'status', 'Draft')
+		frappe.db.set(self.doc, 'status', 'Draft')
 	
 	def validate_serial_no_warranty(self):
 		for d in getlist(self.doclist, 'item_maintenance_detail'):
 			if cstr(d.serial_no).strip():
-				dt = frappe.conn.sql("""select warranty_expiry_date, amc_expiry_date 
+				dt = frappe.db.sql("""select warranty_expiry_date, amc_expiry_date 
 					from `tabSerial No` where name=%s""", d.serial_no, as_dict=1)
 				if dt[0]['warranty_expiry_date'] and dt[0]['warranty_expiry_date'] >= d.start_date:
 					throw("""Serial No: %s is already under warranty upto %s. 
@@ -307,7 +307,7 @@
 		for d in getlist(self.doclist, 'item_maintenance_detail'):
 			if d.serial_no:
 				self.update_amc_date(d.serial_no, '')
-		frappe.conn.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self.doc, 'status', 'Cancelled')
 		delete_events(self.doc.doctype, self.doc.name)
 
 	def on_trash(self):
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
index a79b2a9..78cd428 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
@@ -18,7 +18,7 @@
 		self.doclist = doclist
 	
 	def get_item_details(self, item_code):
-		item = frappe.conn.sql("select item_name,description from `tabItem` where name = '%s'" %(item_code), as_dict=1)
+		item = frappe.db.sql("select item_name,description from `tabItem` where name = '%s'" %(item_code), as_dict=1)
 		ret = {
 			'item_name' : item and item[0]['item_name'] or '',
 			'description' : item and item[0]['description'] or ''
@@ -27,7 +27,7 @@
 			
 	def validate_serial_no(self):
 		for d in getlist(self.doclist, 'maintenance_visit_details'):
-			if d.serial_no and not frappe.conn.sql("select name from `tabSerial No` where name = '%s' and docstatus != 2" % d.serial_no):
+			if d.serial_no and not frappe.db.sql("select name from `tabSerial No` where name = '%s' and docstatus != 2" % d.serial_no):
 				msgprint("Serial No: "+ d.serial_no + " not exists in the system")
 				raise Exception
 
@@ -51,7 +51,7 @@
 					elif self.doc.completion_status == 'Partially Completed':
 						status = 'Work In Progress'
 				else:
-					nm = frappe.conn.sql("select t1.name, t1.mntc_date, t2.service_person, t2.work_done from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t1.completion_status = 'Partially Completed' and t2.prevdoc_docname = %s and t1.name!=%s and t1.docstatus = 1 order by t1.name desc limit 1", (d.prevdoc_docname, self.doc.name))
+					nm = frappe.db.sql("select t1.name, t1.mntc_date, t2.service_person, t2.work_done from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t1.completion_status = 'Partially Completed' and t2.prevdoc_docname = %s and t1.name!=%s and t1.docstatus = 1 order by t1.name desc limit 1", (d.prevdoc_docname, self.doc.name))
 					
 					if nm:
 						status = 'Work In Progress'
@@ -64,7 +64,7 @@
 						service_person = ''
 						work_done = ''
 				
-				frappe.conn.sql("update `tabCustomer Issue` set resolution_date=%s, resolved_by=%s, resolution_details=%s, status=%s where name =%s",(mntc_date,service_person,work_done,status,d.prevdoc_docname))
+				frappe.db.sql("update `tabCustomer Issue` set resolution_date=%s, resolved_by=%s, resolution_details=%s, status=%s where name =%s",(mntc_date,service_person,work_done,status,d.prevdoc_docname))
 	
 
 	def check_if_last_visit(self):
@@ -76,7 +76,7 @@
 				check_for_doctype = d.prevdoc_doctype
 		
 		if check_for_docname:
-			check = frappe.conn.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t1.name!=%s and t2.prevdoc_docname=%s and t1.docstatus = 1 and (t1.mntc_date > %s or (t1.mntc_date = %s and t1.mntc_time > %s))", (self.doc.name, check_for_docname, self.doc.mntc_date, self.doc.mntc_date, self.doc.mntc_time))
+			check = frappe.db.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t1.name!=%s and t2.prevdoc_docname=%s and t1.docstatus = 1 and (t1.mntc_date > %s or (t1.mntc_date = %s and t1.mntc_time > %s))", (self.doc.name, check_for_docname, self.doc.mntc_date, self.doc.mntc_date, self.doc.mntc_time))
 			
 			if check:
 				check_lst = [x[0] for x in check]
@@ -88,11 +88,11 @@
 	
 	def on_submit(self):
 		self.update_customer_issue(1)		
-		frappe.conn.set(self.doc, 'status', 'Submitted')
+		frappe.db.set(self.doc, 'status', 'Submitted')
 	
 	def on_cancel(self):
 		self.check_if_last_visit()		
-		frappe.conn.set(self.doc, 'status', 'Cancelled')
+		frappe.db.set(self.doc, 'status', 'Cancelled')
 
 	def on_update(self):
 		pass
\ No newline at end of file
diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/support/doctype/newsletter/newsletter.py
index 43dff93..ad5c0a7 100644
--- a/erpnext/support/doctype/newsletter/newsletter.py
+++ b/erpnext/support/doctype/newsletter/newsletter.py
@@ -14,7 +14,7 @@
 		
 	def onload(self):
 		if self.doc.email_sent:
-			self.doc.fields["__status_count"] = dict(frappe.conn.sql("""select status, count(*)
+			self.doc.fields["__status_count"] = dict(frappe.db.sql("""select status, count(*)
 				from `tabBulk Email` where ref_doctype=%s and ref_docname=%s
 				group by status""", (self.doc.doctype, self.doc.name))) or None
 
@@ -41,18 +41,18 @@
 			"doctype": self.send_to_doctype
 		}))
 
-		frappe.conn.set(self.doc, "email_sent", 1)
+		frappe.db.set(self.doc, "email_sent", 1)
 	
 	def get_recipients(self):
 		self.email_field = None
 		if self.doc.send_to_type=="Contact":
 			self.send_to_doctype = "Contact"
 			if self.doc.contact_type == "Customer":		
-				return frappe.conn.sql_list("""select email_id from tabContact 
+				return frappe.db.sql_list("""select email_id from tabContact 
 					where ifnull(email_id, '') != '' and ifnull(customer, '') != ''""")
 
 			elif self.doc.contact_type == "Supplier":		
-				return frappe.conn.sql_list("""select email_id from tabContact 
+				return frappe.db.sql_list("""select email_id from tabContact 
 					where ifnull(email_id, '') != '' and ifnull(supplier, '') != ''""")
 	
 		elif self.doc.send_to_type=="Lead":
@@ -66,14 +66,14 @@
 			if conditions:
 				conditions = "".join(conditions)
 				
-			return frappe.conn.sql_list("""select email_id from tabLead 
+			return frappe.db.sql_list("""select email_id from tabLead 
 				where ifnull(email_id, '') != '' %s""" % (conditions or ""))
 
 		elif self.doc.send_to_type=="Employee":
 			self.send_to_doctype = "Employee"
 			self.email_field = "company_email"
 
-			return frappe.conn.sql_list("""select 
+			return frappe.db.sql_list("""select 
 				if(ifnull(company_email, '')!='', company_email, personal_email) as email_id 
 				from `tabEmployee` where status='Active'""")
 
@@ -93,7 +93,7 @@
 		from frappe.utils.email_lib.bulk import send
 		
 		if not frappe.flags.in_test:
-			frappe.conn.auto_commit_on_many_writes = True
+			frappe.db.auto_commit_on_many_writes = True
 
 		send(recipients = self.recipients, sender = sender, 
 			subject = self.doc.subject, message = self.doc.message,
@@ -101,7 +101,7 @@
 			ref_doctype = self.doc.doctype, ref_docname = self.doc.name)
 
 		if not frappe.flags.in_test:
-			frappe.conn.auto_commit_on_many_writes = False
+			frappe.db.auto_commit_on_many_writes = False
 
 	def validate_send(self):
 		if self.doc.fields.get("__islocal"):
@@ -116,9 +116,9 @@
 def get_lead_options():
 	return {
 		"sources": ["All"] + filter(None, 
-			frappe.conn.sql_list("""select distinct source from tabLead""")),
+			frappe.db.sql_list("""select distinct source from tabLead""")),
 		"statuses": ["All"] + filter(None, 
-			frappe.conn.sql_list("""select distinct status from tabLead"""))
+			frappe.db.sql_list("""select distinct status from tabLead"""))
 	}
 
 
@@ -128,7 +128,7 @@
 	from frappe.model.doc import get_default_naming_series
 	real_name, email_id = parseaddr(email_id)
 	
-	if frappe.conn.get_value("Lead", {"email_id": email_id}):
+	if frappe.db.get_value("Lead", {"email_id": email_id}):
 		return
 	
 	lead = frappe.bean({
@@ -137,7 +137,7 @@
 		"lead_name": real_name or email_id,
 		"status": "Contacted",
 		"naming_series": get_default_naming_series("Lead"),
-		"company": frappe.conn.get_default("company"),
+		"company": frappe.db.get_default("company"),
 		"source": "Email"
 	})
 	lead.insert()
\ No newline at end of file
diff --git a/erpnext/support/doctype/newsletter/test_newsletter.py b/erpnext/support/doctype/newsletter/test_newsletter.py
index 6e30c65..1eff657 100644
--- a/erpnext/support/doctype/newsletter/test_newsletter.py
+++ b/erpnext/support/doctype/newsletter/test_newsletter.py
@@ -8,9 +8,9 @@
 		w = frappe.bean(test_records[0])
 		w.insert()
 		self.assertTrue("test_lead@example.com" in w.controller.get_recipients())
-		frappe.conn.sql("""delete from `tabBulk Email`""")
+		frappe.db.sql("""delete from `tabBulk Email`""")
 		w.controller.send_emails()
-		self.assertTrue(frappe.conn.get_value("Bulk Email", {"recipient": "test_lead@example.com"}))
+		self.assertTrue(frappe.db.get_value("Bulk Email", {"recipient": "test_lead@example.com"}))
 
 	def test_get_recipients_lead_by_status(self):
 		w = frappe.bean(test_records[0])
@@ -33,7 +33,7 @@
 		w = frappe.bean(test_records[2])
 		w.insert()
 		self.assertTrue("test_custom2@example.com" in w.controller.get_recipients())
-		self.assertTrue(frappe.conn.get("Lead", 
+		self.assertTrue(frappe.db.get("Lead", 
 			{"email_id": "test_custom2@example.com"}))
 
 
diff --git a/erpnext/support/doctype/support_ticket/get_support_mails.py b/erpnext/support/doctype/support_ticket/get_support_mails.py
index 735a159..9dd9ac8 100644
--- a/erpnext/support/doctype/support_ticket/get_support_mails.py
+++ b/erpnext/support/doctype/support_ticket/get_support_mails.py
@@ -24,7 +24,7 @@
 		thread_id = mail.get_thread_id()
 		new_ticket = False
 
-		if not (thread_id and frappe.conn.exists("Support Ticket", thread_id)):
+		if not (thread_id and frappe.db.exists("Support Ticket", thread_id)):
 			new_ticket = True
 		
 		ticket = add_support_communication(mail.subject, mail.content, mail.from_email,
@@ -53,7 +53,7 @@
 			msg = cstr(response))
 		
 def get_support_mails():
-	if cint(frappe.conn.get_value('Email Settings', None, 'sync_support_mails')):
+	if cint(frappe.db.get_value('Email Settings', None, 'sync_support_mails')):
 		SupportMailbox()
 		
 def add_support_communication(subject, content, sender, docname=None, mail=None):
diff --git a/erpnext/support/doctype/support_ticket/support_ticket.py b/erpnext/support/doctype/support_ticket/support_ticket.py
index c2aa345..13ee178 100644
--- a/erpnext/support/doctype/support_ticket/support_ticket.py
+++ b/erpnext/support/doctype/support_ticket/support_ticket.py
@@ -13,13 +13,13 @@
 		self.doclist = doclist
 	
 	def get_sender(self, comm):
-		return frappe.conn.get_value('Email Settings',None,'support_email')
+		return frappe.db.get_value('Email Settings',None,'support_email')
 
 	def get_subject(self, comm):
 		return '[' + self.doc.name + '] ' + (comm.subject or 'No Subject Specified')
 	
 	def get_content(self, comm):
-		signature = frappe.conn.get_value('Email Settings',None,'support_signature')
+		signature = frappe.db.get_value('Email Settings',None,'support_signature')
 		content = comm.content
 		if signature:
 			content += '<p>' + signature + '</p>'
@@ -41,16 +41,16 @@
 		email_id = email.utils.parseaddr(email_id)
 		if email_id:
 			if not self.doc.lead:
-				self.doc.lead = frappe.conn.get_value("Lead", {"email_id": email_id})
+				self.doc.lead = frappe.db.get_value("Lead", {"email_id": email_id})
 			if not self.doc.contact:
-				self.doc.contact = frappe.conn.get_value("Contact", {"email_id": email_id})
+				self.doc.contact = frappe.db.get_value("Contact", {"email_id": email_id})
 				
 			if not self.doc.company:		
-				self.doc.company = frappe.conn.get_value("Lead", self.doc.lead, "company") or \
-					frappe.conn.get_default("company")
+				self.doc.company = frappe.db.get_value("Lead", self.doc.lead, "company") or \
+					frappe.db.get_default("company")
 
 	def update_status(self):
-		status = frappe.conn.get_value("Support Ticket", self.doc.name, "status")
+		status = frappe.db.get_value("Support Ticket", self.doc.name, "status")
 		if self.doc.status!="Open" and status =="Open" and not self.doc.first_responded_on:
 			self.doc.first_responded_on = now()
 		if self.doc.status=="Closed" and status !="Closed":
@@ -65,6 +65,6 @@
 	st.save()
 		
 def auto_close_tickets():
-	frappe.conn.sql("""update `tabSupport Ticket` set status = 'Closed' 
+	frappe.db.sql("""update `tabSupport Ticket` set status = 'Closed' 
 		where status = 'Replied' 
 		and date_sub(curdate(),interval 15 Day) > modified""")
diff --git a/erpnext/utilities/cleanup_data.py b/erpnext/utilities/cleanup_data.py
index 9b1988e..d8c342d 100644
--- a/erpnext/utilities/cleanup_data.py
+++ b/erpnext/utilities/cleanup_data.py
@@ -34,9 +34,9 @@
 		"Job Applicant", "Web Page", "Website Slideshow", "Blog Post", "Blog Category", "Blogger", 
 		"Time Log", "Time Log Batch", "Workflow"]
 	for d in trans:
-		for t in frappe.conn.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d):
-			frappe.conn.sql("delete from `tab%s`" % (t))
-		frappe.conn.sql("delete from `tab%s`" % (d))
+		for t in frappe.db.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d):
+			frappe.db.sql("delete from `tab%s`" % (t))
+		frappe.db.sql("delete from `tab%s`" % (d))
 		print "Deleted " + d
 	
 	
@@ -95,18 +95,18 @@
 		'BOM': ''
 	}
 	for d in masters.keys():
-		for t in frappe.conn.sql("select options from tabDocField where parent='%s' \
+		for t in frappe.db.sql("select options from tabDocField where parent='%s' \
 			and fieldtype='Table'" % d):
-			frappe.conn.sql("delete from `tab%s`" % (t))
+			frappe.db.sql("delete from `tab%s`" % (t))
 		lst = '"'+'","'.join(masters[d])+ '"'
-		frappe.conn.sql("delete from `tab%s` where name not in (%s)" % (d, lst))
+		frappe.db.sql("delete from `tab%s` where name not in (%s)" % (d, lst))
 		print "Deleted " + d
 
 
 
 def reset_all_series():
 	# Reset master series
-	frappe.conn.sql("""update tabSeries set current = 0 where name not in 
+	frappe.db.sql("""update tabSeries set current = 0 where name not in 
 		('Ann/', 'BSD', 'DEF', 'DF', 'EV', 'Event Updates/', 'FileData-', 
 		'FL', 'FMD/', 'GLM Detail', 'Login Page/', 'MDI', 'MDR', 'MI', 'MIR', 
 		'PERM', 'PR', 'SRCH/C/', 'TD', 'TIC/', 'TMD/', 'TW', 'UR', '_FEED', 
@@ -115,7 +115,7 @@
 	print "Series updated"
 		
 def reset_transaction_series():
-	frappe.conn.sql("""update tabSeries set current = 0 where name in 
+	frappe.db.sql("""update tabSeries set current = 0 where name in 
 		('JV', 'INV', 'BILL', 'SO', 'DN', 'PO', 'LEAD', 'ENQUIRY', 'ENQ', 'CI',
 		 'IN', 'PS', 'IDT', 'QAI', 'QTN', 'STE', 'SQTN', 'SUP', 'SR', 
 		'POS', 'LAP', 'LAL', 'EXP')""")
@@ -125,9 +125,9 @@
 def delete_main_masters():
 	main_masters = ['Fiscal Year', 'Company', 'DefaultValue']
 	for d in main_masters:
-		for t in frappe.conn.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d):
-			frappe.conn.sql("delete from `tab%s`" % (t))
-		frappe.conn.sql("delete from `tab%s`" % (d))
+		for t in frappe.db.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d):
+			frappe.db.sql("delete from `tab%s`" % (t))
+		frappe.db.sql("delete from `tab%s`" % (d))
 		print "Deleted " + d
 
 def reset_global_defaults():
@@ -163,7 +163,7 @@
 
 def run():
 	frappe.connect()
-	frappe.conn.begin()
+	frappe.db.begin()
 	
 	# Confirmation from user
 	confirm = ''
@@ -195,8 +195,8 @@
 		reset_global_defaults()
 
 	print "System cleaned up succesfully"
-	frappe.conn.commit()
-	frappe.conn.close()
+	frappe.db.commit()
+	frappe.db.close()
 
 
 if __name__ == '__main__':
diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py
index 988cbd2..b80f13a 100644
--- a/erpnext/utilities/doctype/address/address.py
+++ b/erpnext/utilities/doctype/address/address.py
@@ -34,7 +34,7 @@
 		elif self.doc.is_shipping_address != 1:
 			for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
 				if self.doc.fields.get(fieldname):
-					if not frappe.conn.sql("""select name from `tabAddress` where is_primary_address=1
+					if not frappe.db.sql("""select name from `tabAddress` where is_primary_address=1
 						and `%s`=%s and name!=%s""" % (fieldname, "%s", "%s"), 
 						(self.doc.fields[fieldname], self.doc.name)):
 							self.doc.is_primary_address = 1
@@ -48,14 +48,14 @@
 	def _unset_other(self, is_address_type):
 		for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
 			if self.doc.fields.get(fieldname):
-				frappe.conn.sql("""update `tabAddress` set `%s`=0 where `%s`=%s and name!=%s""" %
+				frappe.db.sql("""update `tabAddress` set `%s`=0 where `%s`=%s and name!=%s""" %
 					(is_address_type, fieldname, "%s", "%s"), (self.doc.fields[fieldname], self.doc.name))
 				break
 
 @frappe.whitelist()
 def get_address_display(address_dict):
 	if not isinstance(address_dict, dict):
-		address_dict = frappe.conn.get_value("Address", address_dict, "*", as_dict=True) or {}
+		address_dict = frappe.db.get_value("Address", address_dict, "*", as_dict=True) or {}
 	
 	meta = frappe.get_doctype("Address")
 	sequence = (("", "address_line1"), 
diff --git a/erpnext/utilities/doctype/contact/contact.py b/erpnext/utilities/doctype/contact/contact.py
index 2b9c8ca..cc7ffc0 100644
--- a/erpnext/utilities/doctype/contact/contact.py
+++ b/erpnext/utilities/doctype/contact/contact.py
@@ -30,24 +30,24 @@
 	def validate_primary_contact(self):
 		if self.doc.is_primary_contact == 1:
 			if self.doc.customer:
-				frappe.conn.sql("update tabContact set is_primary_contact=0 where customer = '%s'" % (self.doc.customer))
+				frappe.db.sql("update tabContact set is_primary_contact=0 where customer = '%s'" % (self.doc.customer))
 			elif self.doc.supplier:
-				frappe.conn.sql("update tabContact set is_primary_contact=0 where supplier = '%s'" % (self.doc.supplier))	
+				frappe.db.sql("update tabContact set is_primary_contact=0 where supplier = '%s'" % (self.doc.supplier))	
 			elif self.doc.sales_partner:
-				frappe.conn.sql("update tabContact set is_primary_contact=0 where sales_partner = '%s'" % (self.doc.sales_partner))
+				frappe.db.sql("update tabContact set is_primary_contact=0 where sales_partner = '%s'" % (self.doc.sales_partner))
 		else:
 			if self.doc.customer:
-				if not frappe.conn.sql("select name from tabContact where is_primary_contact=1 and customer = '%s'" % (self.doc.customer)):
+				if not frappe.db.sql("select name from tabContact where is_primary_contact=1 and customer = '%s'" % (self.doc.customer)):
 					self.doc.is_primary_contact = 1
 			elif self.doc.supplier:
-				if not frappe.conn.sql("select name from tabContact where is_primary_contact=1 and supplier = '%s'" % (self.doc.supplier)):
+				if not frappe.db.sql("select name from tabContact where is_primary_contact=1 and supplier = '%s'" % (self.doc.supplier)):
 					self.doc.is_primary_contact = 1
 			elif self.doc.sales_partner:
-				if not frappe.conn.sql("select name from tabContact where is_primary_contact=1 and sales_partner = '%s'" % (self.doc.sales_partner)):
+				if not frappe.db.sql("select name from tabContact where is_primary_contact=1 and sales_partner = '%s'" % (self.doc.sales_partner)):
 					self.doc.is_primary_contact = 1
 
 	def on_trash(self):
-		frappe.conn.sql("""update `tabSupport Ticket` set contact='' where contact=%s""",
+		frappe.db.sql("""update `tabSupport Ticket` set contact='' where contact=%s""",
 			self.doc.name)
 
 @frappe.whitelist()
diff --git a/erpnext/utilities/doctype/note/note.py b/erpnext/utilities/doctype/note/note.py
index 50afa7e..99846d9 100644
--- a/erpnext/utilities/doctype/note/note.py
+++ b/erpnext/utilities/doctype/note/note.py
@@ -23,6 +23,6 @@
 	def validate(self):
 		if not self.doc.fields.get("__islocal"):
 			if frappe.session.user != self.doc.owner:
-				if frappe.session.user not in frappe.conn.sql_list("""select user from `tabNote User` 
+				if frappe.session.user not in frappe.db.sql_list("""select user from `tabNote User` 
 					where parent=%s and permission='Edit'""", self.doc.name):
 					frappe.msgprint("You are not authorized to edit this record.", raise_exception=True)
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.py b/erpnext/utilities/doctype/rename_tool/rename_tool.py
index b642282..835e647 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.py
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.py
@@ -13,7 +13,7 @@
 		
 @frappe.whitelist()
 def get_doctypes():
-	return frappe.conn.sql_list("""select name from tabDocType
+	return frappe.db.sql_list("""select name from tabDocType
 		where ifnull(allow_rename,0)=1 and module!='Core' order by name""")
 		
 @frappe.whitelist()
@@ -45,7 +45,7 @@
 			try:
 				if rename_doc(select_doctype, row[0], row[1]):
 					rename_log.append(_("Successful: ") + row[0] + " -> " + row[1])
-					frappe.conn.commit()
+					frappe.db.commit()
 				else:
 					rename_log.append(_("Ignored: ") + row[0] + " -> " + row[1])
 			except Exception, e:
diff --git a/erpnext/utilities/doctype/sms_control/sms_control.py b/erpnext/utilities/doctype/sms_control/sms_control.py
index 14ae989..832c443 100644
--- a/erpnext/utilities/doctype/sms_control/sms_control.py
+++ b/erpnext/utilities/doctype/sms_control/sms_control.py
@@ -33,10 +33,10 @@
 
 	def get_sender_name(self):
 		"returns name as SMS sender"
-		sender_name = frappe.conn.get_value('Global Defaults', None, 'sms_sender_name') or \
+		sender_name = frappe.db.get_value('Global Defaults', None, 'sms_sender_name') or \
 			'ERPNXT'
 		if len(sender_name) > 6 and \
-				frappe.conn.get_value("Control Panel", None, "country") == "India":
+				frappe.db.get_value("Control Panel", None, "country") == "India":
 			throw(_("""
 				As per TRAI rule, sender name must be exactly 6 characters.
 				Kindly change sender name in Setup --> Global Defaults.
@@ -48,7 +48,7 @@
 	def get_contact_number(self, arg):
 		"returns mobile number of the contact"
 		args = json.loads(arg)
-		number = frappe.conn.sql("""select mobile_no, phone from tabContact where name=%s and %s=%s""" % 
+		number = frappe.db.sql("""select mobile_no, phone from tabContact where name=%s and %s=%s""" % 
 			('%s', args['key'], '%s'), (args['contact_name'], args['value']))
 		return number and (number[0][0] or number[0][1]) or ''
 	
@@ -66,7 +66,7 @@
 			'sender_name'	: sender_name or self.get_sender_name()
 		}
 
-		if frappe.conn.get_value('SMS Settings', None, 'sms_gateway_url'):
+		if frappe.db.get_value('SMS Settings', None, 'sms_gateway_url'):
 			ret = self.send_via_gateway(arg)
 			msgprint(ret)
 
diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py
index c31eb53..b9211fb 100644
--- a/erpnext/utilities/repost_stock.py
+++ b/erpnext/utilities/repost_stock.py
@@ -11,21 +11,21 @@
 	"""
 	Repost everything!
 	"""
-	frappe.conn.auto_commit_on_many_writes = 1
+	frappe.db.auto_commit_on_many_writes = 1
 	
 	if allow_negative_stock:
-		frappe.conn.set_default("allow_negative_stock", 1)
+		frappe.db.set_default("allow_negative_stock", 1)
 	
-	for d in frappe.conn.sql("""select distinct item_code, warehouse from 
+	for d in frappe.db.sql("""select distinct item_code, warehouse from 
 		(select item_code, warehouse from tabBin
 		union
 		select item_code, warehouse from `tabStock Ledger Entry`) a"""):
 			repost_stock(d[0], d[1], allow_negative_stock)
 			
 	if allow_negative_stock:
-		frappe.conn.set_default("allow_negative_stock", 
-			frappe.conn.get_value("Stock Settings", None, "allow_negative_stock"))
-	frappe.conn.auto_commit_on_many_writes = 0
+		frappe.db.set_default("allow_negative_stock", 
+			frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
+	frappe.db.auto_commit_on_many_writes = 0
 
 def repost_stock(item_code, warehouse):
 	repost_actual_qty(item_code, warehouse)
@@ -46,7 +46,7 @@
 		pass
 	
 def get_reserved_qty(item_code, warehouse):
-	reserved_qty = frappe.conn.sql("""
+	reserved_qty = frappe.db.sql("""
 		select 
 			sum((dnpi_qty / so_item_qty) * (so_item_qty - so_item_delivered_qty))
 		from 
@@ -88,7 +88,7 @@
 	return flt(reserved_qty[0][0]) if reserved_qty else 0
 	
 def get_indented_qty(item_code, warehouse):
-	indented_qty = frappe.conn.sql("""select sum(pr_item.qty - ifnull(pr_item.ordered_qty, 0))
+	indented_qty = frappe.db.sql("""select sum(pr_item.qty - ifnull(pr_item.ordered_qty, 0))
 		from `tabMaterial Request Item` pr_item, `tabMaterial Request` pr
 		where pr_item.item_code=%s and pr_item.warehouse=%s 
 		and pr_item.qty > ifnull(pr_item.ordered_qty, 0) and pr_item.parent=pr.name 
@@ -97,7 +97,7 @@
 	return flt(indented_qty[0][0]) if indented_qty else 0
 
 def get_ordered_qty(item_code, warehouse):
-	ordered_qty = frappe.conn.sql("""
+	ordered_qty = frappe.db.sql("""
 		select sum((po_item.qty - ifnull(po_item.received_qty, 0))*po_item.conversion_factor)
 		from `tabPurchase Order Item` po_item, `tabPurchase Order` po
 		where po_item.item_code=%s and po_item.warehouse=%s 
@@ -107,7 +107,7 @@
 	return flt(ordered_qty[0][0]) if ordered_qty else 0
 			
 def get_planned_qty(item_code, warehouse):
-	planned_qty = frappe.conn.sql("""
+	planned_qty = frappe.db.sql("""
 		select sum(ifnull(qty, 0) - ifnull(produced_qty, 0)) from `tabProduction Order` 
 		where production_item = %s and fg_warehouse = %s and status != "Stopped"
 		and docstatus=1 and ifnull(qty, 0) > ifnull(produced_qty, 0)""", (item_code, warehouse))
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 1801714..e84cdf9 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -12,9 +12,9 @@
 class TransactionBase(StatusUpdater):
 	def load_notification_message(self):
 		dt = self.doc.doctype.lower().replace(" ", "_")
-		if int(frappe.conn.get_value("Notification Control", None, dt) or 0):
+		if int(frappe.db.get_value("Notification Control", None, dt) or 0):
 			self.doc.fields["__notification_message"] = \
-				frappe.conn.get_value("Notification Control", None, dt + "_message")
+				frappe.db.get_value("Notification Control", None, dt + "_message")
 							
 	def validate_posting_time(self):
 		if not self.doc.posting_time:
@@ -28,7 +28,7 @@
 			self._add_calendar_event(opts)
 			
 	def delete_events(self):
-		frappe.delete_doc("Event", frappe.conn.sql_list("""select name from `tabEvent` 
+		frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent` 
 			where ref_type=%s and ref_name=%s""", (self.doc.doctype, self.doc.name)), 
 			ignore_permissions=True)
 			
@@ -47,7 +47,7 @@
 				"ref_name": self.doc.name
 			}]
 			
-			if frappe.conn.exists("Profile", self.doc.contact_by):
+			if frappe.db.exists("Profile", self.doc.contact_by):
 				event_doclist.append({
 					"doctype": "Event User",
 					"parentfield": "event_individuals",
@@ -84,7 +84,7 @@
 	def compare_values(self, ref_doc, fields, doc=None):
 		for ref_doctype, ref_dn_list in ref_doc.items():
 			for ref_docname in ref_dn_list:
-				prevdoc_values = frappe.conn.get_value(ref_doctype, ref_docname, 
+				prevdoc_values = frappe.db.get_value(ref_doctype, ref_docname, 
 					[d[0] for d in fields], as_dict=1)
 
 				for field, condition in fields:
@@ -92,7 +92,7 @@
 						self.validate_value(field, condition, prevdoc_values[field], doc)
 	
 def delete_events(ref_type, ref_name):
-	frappe.delete_doc("Event", frappe.conn.sql_list("""select name from `tabEvent` 
+	frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent` 
 		where ref_type=%s and ref_name=%s""", (ref_type, ref_name)), for_reload=True)
 
 class UOMMustBeIntegerError(frappe.ValidationError): pass
@@ -101,7 +101,7 @@
 	if isinstance(qty_fields, basestring):
 		qty_fields = [qty_fields]
 	
-	integer_uoms = filter(lambda uom: frappe.conn.get_value("UOM", uom, 
+	integer_uoms = filter(lambda uom: frappe.db.get_value("UOM", uom, 
 		"must_be_whole_number") or None, doclist.get_distinct_values(uom_field))
 		
 	if not integer_uoms: