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:
