diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index cae2028..eccbb47 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -206,7 +206,7 @@
 		
 	def before_rename(self, old, new, merge=False):
 		# Add company abbr if not provided
-		from setup.doctype.company.company import get_name_with_abbr
+		from erpnext.setup.doctype.company.company import get_name_with_abbr
 		new_account = get_name_with_abbr(new, self.doc.company)
 		
 		# Validate properties before merging
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index 81d5a15..80a9f44 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -76,7 +76,7 @@
 		}
 
 def get_invoice_nos(doctype, txt, searchfield, start, page_len, filters):
-	from utilities import build_filter_conditions
+	from erpnext.utilities import build_filter_conditions
 	conditions, filter_values = build_filter_conditions(filters)
 	
 	return webnotes.conn.sql("""select name from `tabSales Invoice` where docstatus = 1 
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.py b/erpnext/accounts/doctype/cost_center/cost_center.py
index 692d47e..0d38cc8 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.py
+++ b/erpnext/accounts/doctype/cost_center/cost_center.py
@@ -75,7 +75,7 @@
 		
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
-		from setup.doctype.company.company import get_name_with_abbr
+		from erpnext.setup.doctype.company.company import get_name_with_abbr
 		new_cost_center = get_name_with_abbr(newdn, self.doc.company)
 		
 		# Validate properties before merging
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index 3a0b28c..358261f 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -51,7 +51,7 @@
 			self.doc.cost_center = None
 		
 	def validate_posting_date(self):
-		from accounts.utils import validate_fiscal_year
+		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, "Posting Date")
 
 	def check_pl_account(self):
diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.js b/erpnext/accounts/doctype/journal_voucher/journal_voucher.js
index a5cd06d..f1b6959 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.js
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.js
@@ -165,7 +165,7 @@
 	var d = locals[dt][dn];
 	if(d.account) {
 		return wn.call({
-			method: "accounts.utils.get_balance_on",
+			method: "erpnext.accounts.utils.get_balance_on",
 			args: {account: d.account, date: doc.posting_date},
 			callback: function(r) {
 				d.balance = r.message;
@@ -208,7 +208,7 @@
 	if(in_list(["Bank Voucher", "Cash Voucher"], doc.voucher_type)) {
 		return wn.call({
 			type: "GET",
-			method: "accounts.doctype.journal_voucher.journal_voucher.get_default_bank_cash_account",
+			method: "erpnext.accounts.doctype.journal_voucher.journal_voucher.get_default_bank_cash_account",
 			args: {
 				"voucher_type": doc.voucher_type,
 				"company": doc.company
@@ -222,7 +222,7 @@
 	} else if(doc.voucher_type=="Opening Entry") {
 		return wn.call({
 			type:"GET",
-			method: "accounts.doctype.journal_voucher.journal_voucher.get_opening_accounts",
+			method: "erpnext.accounts.doctype.journal_voucher.journal_voucher.get_opening_accounts",
 			args: {
 				"company": doc.company
 			},
diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
index 00cbc03..32f8139 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
@@ -8,9 +8,9 @@
 from webnotes.model.doc import addchild
 from webnotes.model.bean import getlist
 from webnotes import msgprint, _
-from setup.utils import get_company_currency
+from erpnext.setup.utils import get_company_currency
 
-from controllers.accounts_controller import AccountsController
+from erpnext.controllers.accounts_controller import AccountsController
 
 class DocType(AccountsController):
 	def __init__(self,d,dl):
@@ -47,7 +47,7 @@
 		self.check_credit_limit()
 
 	def on_cancel(self):
-		from accounts.utils import remove_against_link_from_jv
+		from erpnext.accounts.utils import remove_against_link_from_jv
 		remove_against_link_from_jv(self.doc.doctype, self.doc.name, "against_jv")
 		
 		self.make_gl_entries(1)
@@ -240,7 +240,7 @@
 					Purchase Invoice"))
 
 	def make_gl_entries(self, cancel=0, adv_adj=0):
-		from accounts.general_ledger import make_gl_entries
+		from erpnext.accounts.general_ledger import make_gl_entries
 		gl_map = []
 		for d in self.doclist.get({"parentfield": "entries"}):
 			if d.debit or d.credit:
@@ -334,7 +334,7 @@
 
 @webnotes.whitelist()
 def get_default_bank_cash_account(company, voucher_type):
-	from accounts.utils import get_balance_on
+	from erpnext.accounts.utils import get_balance_on
 	account = webnotes.conn.get_value("Company", company,
 		voucher_type=="Bank Voucher" and "default_bank_account" or "default_cash_account")
 	if account:
@@ -345,7 +345,7 @@
 		
 @webnotes.whitelist()
 def get_payment_entry_from_sales_invoice(sales_invoice):
-	from accounts.utils import get_balance_on
+	from erpnext.accounts.utils import get_balance_on
 	si = webnotes.bean("Sales Invoice", sales_invoice)
 	jv = get_payment_entry(si.doc)
 	jv.doc.remark = 'Payment received against Sales Invoice %(name)s. %(remarks)s' % si.doc.fields
@@ -363,7 +363,7 @@
 
 @webnotes.whitelist()
 def get_payment_entry_from_purchase_invoice(purchase_invoice):
-	from accounts.utils import get_balance_on
+	from erpnext.accounts.utils import get_balance_on
 	pi = webnotes.bean("Purchase Invoice", purchase_invoice)
 	jv = get_payment_entry(pi.doc)
 	jv.doc.remark = 'Payment against Purchase Invoice %(name)s. %(remarks)s' % pi.doc.fields
@@ -407,7 +407,7 @@
 @webnotes.whitelist()
 def get_opening_accounts(company):
 	"""get all balance sheet accounts for opening entry"""
-	from accounts.utils import get_balance_on
+	from erpnext.accounts.utils import get_balance_on
 	accounts = webnotes.conn.sql_list("""select name from tabAccount 
 		where group_or_ledger='Ledger' and is_pl_account='No' and company=%s""", company)
 	
diff --git a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
index 70fb4e2..587445f 100644
--- a/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/test_journal_voucher.py
@@ -34,14 +34,14 @@
 			where against_jv=%s""", jv_invoice.doc.name))
 	
 	def test_jv_against_stock_account(self):
-		from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
+		from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 		set_perpetual_inventory()
 		
 		jv = webnotes.bean(copy=test_records[0])
 		jv.doclist[1].account = "_Test Warehouse - _TC"
 		jv.insert()
 		
-		from accounts.general_ledger import StockAccountInvalidTransaction
+		from erpnext.accounts.general_ledger import StockAccountInvalidTransaction
 		self.assertRaises(StockAccountInvalidTransaction, jv.submit)
 
 		set_perpetual_inventory(0)
@@ -61,7 +61,7 @@
 			{"voucher_type": "Journal Voucher", "voucher_no": jv.doc.name}))
 			
 	def test_monthly_budget_crossed_stop(self):
-		from accounts.utils import BudgetError
+		from erpnext.accounts.utils import BudgetError
 		webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
 		self.clear_account_balance()
 		
@@ -77,7 +77,7 @@
 		webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
 		
 	def test_yearly_budget_crossed_stop(self):
-		from accounts.utils import BudgetError
+		from erpnext.accounts.utils import BudgetError
 		self.clear_account_balance()
 		self.test_monthly_budget_crossed_ignore()
 		
@@ -96,7 +96,7 @@
 		webnotes.conn.set_value("Company", "_Test Company", "yearly_bgt_flag", "Ignore")
 		
 	def test_monthly_budget_on_cancellation(self):
-		from accounts.utils import BudgetError
+		from erpnext.accounts.utils import BudgetError
 		webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
 		self.clear_account_balance()
 		
diff --git a/erpnext/accounts/doctype/mis_control/mis_control.py b/erpnext/accounts/doctype/mis_control/mis_control.py
index 3a0483f..d2c0961 100644
--- a/erpnext/accounts/doctype/mis_control/mis_control.py
+++ b/erpnext/accounts/doctype/mis_control/mis_control.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes.utils import flt, get_first_day, get_last_day, has_common
 import webnotes.defaults
-from accounts.utils import get_balance_on
+from erpnext.accounts.utils import get_balance_on
 
 class DocType:
 	def __init__(self, doc, doclist):
@@ -29,7 +29,7 @@
 
 		ret['period'] = ['Annual','Half Yearly','Quarterly','Monthly']
 		
-		from accounts.page.accounts_browser.accounts_browser import get_companies
+		from erpnext.accounts.page.accounts_browser.accounts_browser import get_companies
 		ret['company'] = get_companies()
 
 		#--- to get fiscal year and start_date of that fiscal year -----
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 6a31191..efd2e91 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
@@ -121,14 +121,14 @@
 				lst.append(args)
 		
 		if lst:
-			from accounts.utils import reconcile_against_document
+			from erpnext.accounts.utils import reconcile_against_document
 			reconcile_against_document(lst)
 			msgprint("Successfully allocated.")
 		else:
 			msgprint("No amount allocated.", raise_exception=1)
 
 def gl_entry_details(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 	
 	return webnotes.conn.sql("""select gle.voucher_no, gle.posting_date, 
 		gle.%(account_type)s from `tabGL Entry` gle
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 5d7fc1e..db58040 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes.utils import cstr, flt, getdate
 from webnotes import msgprint, _
-from controllers.accounts_controller import AccountsController
+from erpnext.controllers.accounts_controller import AccountsController
 
 class DocType(AccountsController):
 	def __init__(self,d,dl):
@@ -33,7 +33,7 @@
 				_("must be a Liability account"))
 
 	def validate_posting_date(self):
-		from accounts.utils import get_fiscal_year
+		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 = webnotes.conn.sql("""select name from `tabPeriod Closing Voucher`
@@ -99,5 +99,5 @@
 				"credit": abs(net_pl_balance) if net_pl_balance < 0 else 0
 			}))
 			
-		from accounts.general_ledger import make_gl_entries
+		from erpnext.accounts.general_ledger import make_gl_entries
 		make_gl_entries(gl_entries)
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 97e49ae..c779d9b 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
@@ -11,7 +11,7 @@
 		# clear GL Entries
 		webnotes.conn.sql("""delete from `tabGL Entry`""")
 		
-		from accounts.doctype.journal_voucher.test_journal_voucher import test_records as jv_records
+		from erpnext.accounts.doctype.journal_voucher.test_journal_voucher import test_records as jv_records
 		jv = webnotes.bean(copy=jv_records[2])
 		jv.insert()
 		jv.submit()
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index 9d75264..c20b297 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -44,7 +44,7 @@
 			cur_frm.add_custom_button(wn._('From Purchase Order'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
+						method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
 						source_doctype: "Purchase Order",
 						get_query_filters: {
 							supplier: cur_frm.doc.supplier || undefined,
@@ -59,7 +59,7 @@
 			cur_frm.add_custom_button(wn._('From Purchase Receipt'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
+						method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
 						source_doctype: "Purchase Receipt",
 						get_query_filters: {
 							supplier: cur_frm.doc.supplier || undefined,
@@ -107,7 +107,7 @@
 
 cur_frm.cscript.make_bank_voucher = function() {
 	return wn.call({
-		method: "accounts.doctype.journal_voucher.journal_voucher.get_payment_entry_from_purchase_invoice",
+		method: "erpnext.accounts.doctype.journal_voucher.journal_voucher.get_payment_entry_from_purchase_invoice",
 		args: {
 			"purchase_invoice": cur_frm.doc.name,
 		},
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 6c71fff..ddc68e7 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -8,12 +8,12 @@
 from webnotes.model.bean import getlist
 from webnotes.model.code import get_obj
 from webnotes import msgprint, _
-from setup.utils import get_company_currency
+from erpnext.setup.utils import get_company_currency
 
 import webnotes.defaults
 
 	
-from controllers.buying_controller import BuyingController
+from erpnext.controllers.buying_controller import BuyingController
 class DocType(BuyingController):
 	def __init__(self,d,dl):
 		self.doc, self.doclist = d, dl 
@@ -289,7 +289,7 @@
 				lst.append(args)
 		
 		if lst:
-			from accounts.utils import reconcile_against_document
+			from erpnext.accounts.utils import reconcile_against_document
 			reconcile_against_document(lst)
 
 	def on_submit(self):
@@ -425,11 +425,11 @@
 			)
 		
 		if gl_entries:
-			from accounts.general_ledger import make_gl_entries
+			from erpnext.accounts.general_ledger import make_gl_entries
 			make_gl_entries(gl_entries, cancel=(self.doc.docstatus == 2))
 
 	def on_cancel(self):
-		from accounts.utils import remove_against_link_from_jv
+		from erpnext.accounts.utils import remove_against_link_from_jv
 		remove_against_link_from_jv(self.doc.doctype, self.doc.name, "against_voucher")
 		
 		self.update_prevdoc_status()
@@ -455,7 +455,7 @@
 				
 @webnotes.whitelist()
 def get_expense_account(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 	
 	# expense account can be any Debit account, 
 	# but can also be a Liability account with account_type='Expense Account' in special circumstances. 
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 9d82ca7..8a8b4a7 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -9,7 +9,7 @@
 import json	
 from webnotes.utils import cint
 import webnotes.defaults
-from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 test_dependencies = ["Item", "Cost Center"]
 test_ignore = ["Serial No"]
@@ -171,7 +171,7 @@
 			self.assertEqual(tax.total, expected_values[i][2])
 			
 	def test_purchase_invoice_with_advance(self):
-		from accounts.doctype.journal_voucher.test_journal_voucher \
+		from erpnext.accounts.doctype.journal_voucher.test_journal_voucher \
 			import test_records as jv_test_records
 			
 		jv = webnotes.bean(copy=jv_test_records[1])
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.js b/erpnext/accounts/doctype/sales_invoice/pos.js
index adbdca1..c432765 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.js
+++ b/erpnext/accounts/doctype/sales_invoice/pos.js
@@ -199,7 +199,7 @@
 		var me = this;
 		me.item_timeout = null;
 		wn.call({
-			method: 'accounts.doctype.sales_invoice.pos.get_items',
+			method: 'erpnext.accounts.doctype.sales_invoice.pos.get_items',
 			args: {
 				sales_or_purchase: this.sales_or_purchase,
 				price_list: this.price_list,
@@ -450,7 +450,7 @@
 		var me = this;
 		me.barcode_timeout = null;
 		wn.call({
-			method: 'accounts.doctype.sales_invoice.pos.get_item_code',
+			method: 'erpnext.accounts.doctype.sales_invoice.pos.get_item_code',
 			args: {barcode_serial_no: this.barcode.$input.val()},
 			callback: function(r) {
 				if (r.message) {
@@ -503,7 +503,7 @@
 			msgprint(wn._("Payment cannot be made for empty cart"));
 		else {
 			wn.call({
-				method: 'accounts.doctype.sales_invoice.pos.get_mode_of_payment',
+				method: 'erpnext.accounts.doctype.sales_invoice.pos.get_mode_of_payment',
 				callback: function(r) {
 					for (x=0; x<=r.message.length - 1; x++) {
 						mode_of_payment.push(r.message[x].name);
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 7784005..1940c6e 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -90,7 +90,7 @@
 		this.$sales_order_btn = cur_frm.appframe.add_primary_action(wn._('From Sales Order'), 
 			function() {
 				wn.model.map_current_doc({
-					method: "selling.doctype.sales_order.sales_order.make_sales_invoice",
+					method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
 					source_doctype: "Sales Order",
 					get_query_filters: {
 						docstatus: 1,
@@ -107,7 +107,7 @@
 		this.$delivery_note_btn = cur_frm.appframe.add_primary_action(wn._('From Delivery Note'), 
 			function() {
 				wn.model.map_current_doc({
-					method: "stock.doctype.delivery_note.delivery_note.make_sales_invoice",
+					method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
 					source_doctype: "Delivery Note",
 					get_query: function() {
 						var filters = {
@@ -258,14 +258,14 @@
 
 cur_frm.cscript['Make Delivery Note'] = function() {
 	wn.model.open_mapped_doc({
-		method: "accounts.doctype.sales_invoice.sales_invoice.make_delivery_note",
+		method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_delivery_note",
 		source_name: cur_frm.doc.name
 	})
 }
 
 cur_frm.cscript.make_bank_voucher = function() {
 	return wn.call({
-		method: "accounts.doctype.journal_voucher.journal_voucher.get_payment_entry_from_sales_invoice",
+		method: "erpnext.accounts.doctype.journal_voucher.journal_voucher.get_payment_entry_from_sales_invoice",
 		args: {
 			"sales_invoice": cur_frm.doc.name
 		},
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index b1834d5..d5b4c51 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -17,7 +17,7 @@
 
 month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12}
 
-from controllers.selling_controller import SellingController
+from erpnext.controllers.selling_controller import SellingController
 
 class DocType(SellingController):
 	def __init__(self,d,dl):
@@ -109,7 +109,7 @@
 		
 		self.check_stop_sales_order("sales_order")
 		
-		from accounts.utils import remove_against_link_from_jv
+		from erpnext.accounts.utils import remove_against_link_from_jv
 		remove_against_link_from_jv(self.doc.doctype, self.doc.name, "against_invoice")
 
 		self.update_status_updater_args()
@@ -184,7 +184,7 @@
 		if cint(self.doc.is_pos) != 1:
 			return
 		
-		from selling.utils import get_pos_settings, apply_pos_settings	
+		from erpnext.selling.utils import get_pos_settings, apply_pos_settings	
 		pos = get_pos_settings(self.doc.company)
 			
 		if pos:
@@ -285,7 +285,7 @@
 				lst.append(args)
 		
 		if lst:
-			from accounts.utils import reconcile_against_document
+			from erpnext.accounts.utils import reconcile_against_document
 			reconcile_against_document(lst)
 			
 	def validate_customer_account(self):
@@ -464,7 +464,7 @@
 						if not d.warehouse:
 							d.warehouse = cstr(w)
 
-			from stock.doctype.packed_item.packed_item import make_packing_list
+			from erpnext.stock.doctype.packed_item.packed_item import make_packing_list
 			make_packing_list(self, 'entries')
 		else:
 			self.doclist = self.doc.clear_table(self.doclist, 'packing_details')
@@ -511,7 +511,7 @@
 		gl_entries = self.get_gl_entries()
 		
 		if gl_entries:
-			from accounts.general_ledger import make_gl_entries
+			from erpnext.accounts.general_ledger import make_gl_entries
 			
 			update_outstanding = cint(self.doc.is_pos) and self.doc.write_off_account \
 				and 'No' or 'Yes'
@@ -523,7 +523,7 @@
 					self.update_gl_entries_after()
 				
 	def get_gl_entries(self, warehouse_account=None):
-		from accounts.general_ledger import merge_similar_entries
+		from erpnext.accounts.general_ledger import merge_similar_entries
 		
 		gl_entries = []
 		
@@ -749,7 +749,7 @@
 
 def make_new_invoice(ref_wrapper, posting_date):
 	from webnotes.model.bean import clone
-	from accounts.utils import get_fiscal_year
+	from erpnext.accounts.utils import get_fiscal_year
 	new_invoice = clone(ref_wrapper)
 	
 	mcount = month_map[ref_wrapper.doc.recurring_type]
@@ -903,7 +903,7 @@
 
 @webnotes.whitelist()
 def get_income_account(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 
 	# income account can be any Credit account, 
 	# but can also be a Asset account with account_type='Income Account' in special circumstances. 
diff --git a/erpnext/accounts/doctype/sales_invoice/templates/pages/invoice.py b/erpnext/accounts/doctype/sales_invoice/templates/pages/invoice.py
index 89789d3..2002d14 100644
--- a/erpnext/accounts/doctype/sales_invoice/templates/pages/invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/templates/pages/invoice.py
@@ -9,7 +9,7 @@
 no_cache = True
 
 def get_context():
-	from portal.utils import get_transaction_context
+	from erpnext.portal.utils import get_transaction_context
 	context = get_transaction_context("Sales Invoice", webnotes.form_dict.name)
 	modify_status(context.get("doc"))
 	context.update({
diff --git a/erpnext/accounts/doctype/sales_invoice/templates/pages/invoices.py b/erpnext/accounts/doctype/sales_invoice/templates/pages/invoices.py
index 871e37d..7c2e4ed 100644
--- a/erpnext/accounts/doctype/sales_invoice/templates/pages/invoices.py
+++ b/erpnext/accounts/doctype/sales_invoice/templates/pages/invoices.py
@@ -7,7 +7,7 @@
 no_cache = True
 
 def get_context():
-	from portal.utils import get_currency_context
+	from erpnext.portal.utils import get_currency_context
 	context = get_currency_context()
 	context.update({
 		"title": "Invoices",
@@ -20,8 +20,8 @@
 	
 @webnotes.whitelist()
 def get_invoices(start=0):
-	from portal.utils import get_transaction_list
-	from accounts.doctype.sales_invoice.templates.pages.invoice import modify_status
+	from erpnext.portal.utils import get_transaction_list
+	from erpnext.accounts.doctype.sales_invoice.templates.pages.invoice import modify_status
 	invoices = get_transaction_list("Sales Invoice", start, ["outstanding_amount"])
 	for d in invoices:
 		modify_status(d)
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 9b740d1..478ed3c 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -5,8 +5,8 @@
 import unittest, json
 from webnotes.utils import flt
 from webnotes.model.bean import DocstatusTransitionError, TimestampMismatchError
-from accounts.utils import get_stock_and_account_difference
-from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
+from erpnext.accounts.utils import get_stock_and_account_difference
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 class TestSalesInvoice(unittest.TestCase):
 	def make(self):
@@ -262,7 +262,7 @@
 		webnotes.conn.sql("""delete from `tabGL Entry`""")
 		w = self.make()
 		
-		from accounts.doctype.journal_voucher.test_journal_voucher \
+		from erpnext.accounts.doctype.journal_voucher.test_journal_voucher \
 			import test_records as jv_test_records
 			
 		jv = webnotes.bean(webnotes.copy_doclist(jv_test_records[0]))
@@ -399,7 +399,7 @@
 		webnotes.delete_doc("Account", "_Test Warehouse No Account - _TC")
 		
 		# insert purchase receipt
-		from stock.doctype.purchase_receipt.test_purchase_receipt import test_records \
+		from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import test_records \
 			as pr_test_records
 		pr = webnotes.bean(copy=pr_test_records[0])
 		pr.doc.naming_series = "_T-Purchase Receipt-"
@@ -505,7 +505,7 @@
 		set_perpetual_inventory(0)
 		
 	def _insert_purchase_receipt(self):
-		from stock.doctype.purchase_receipt.test_purchase_receipt import test_records \
+		from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import test_records \
 			as pr_test_records
 		pr = webnotes.bean(copy=pr_test_records[0])
 		pr.doc.naming_series = "_T-Purchase Receipt-"
@@ -514,7 +514,7 @@
 		pr.submit()
 		
 	def _insert_delivery_note(self):
-		from stock.doctype.delivery_note.test_delivery_note import test_records \
+		from erpnext.stock.doctype.delivery_note.test_delivery_note import test_records \
 			as dn_test_records
 		dn = webnotes.bean(copy=dn_test_records[0])
 		dn.doc.naming_series = "_T-Delivery Note-"
@@ -523,7 +523,7 @@
 		return dn
 		
 	def _insert_pos_settings(self):
-		from accounts.doctype.pos_setting.test_pos_setting \
+		from erpnext.accounts.doctype.pos_setting.test_pos_setting \
 			import test_records as pos_setting_test_records
 		webnotes.conn.sql("""delete from `tabPOS Setting`""")
 		
@@ -531,7 +531,7 @@
 		ps.insert()
 		
 	def test_sales_invoice_with_advance(self):
-		from accounts.doctype.journal_voucher.test_journal_voucher \
+		from erpnext.accounts.doctype.journal_voucher.test_journal_voucher \
 			import test_records as jv_test_records
 			
 		jv = webnotes.bean(copy=jv_test_records[0])
@@ -654,7 +654,7 @@
 
 	def _test_recurring_invoice(self, base_si, first_and_last_day):
 		from webnotes.utils import add_months, get_last_day
-		from accounts.doctype.sales_invoice.sales_invoice import manage_recurring_invoices
+		from erpnext.accounts.doctype.sales_invoice.sales_invoice import manage_recurring_invoices
 		
 		no_of_months = ({"Monthly": 1, "Quarterly": 3, "Yearly": 12})[base_si.doc.recurring_type]
 		
@@ -706,8 +706,8 @@
 		webnotes.conn.sql("delete from `tabGL Entry`")
 
 	def test_serialized(self):
-		from stock.doctype.stock_entry.test_stock_entry import make_serialized_item
-		from stock.doctype.serial_no.serial_no import get_serial_nos
+		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
+		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		
 		se = make_serialized_item()
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
@@ -728,7 +728,7 @@
 		return si
 			
 	def test_serialized_cancel(self):
-		from stock.doctype.serial_no.serial_no import get_serial_nos
+		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		si = self.test_serialized()
 		si.cancel()
 
@@ -740,8 +740,8 @@
 			"delivery_document_no"))
 
 	def test_serialize_status(self):
-		from stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
-		from stock.doctype.stock_entry.test_stock_entry import make_serialized_item
+		from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
+		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
 		
 		se = make_serialized_item()
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
diff --git a/erpnext/accounts/doctype/shipping_rule/shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/shipping_rule.py
index dd4db5f..5c084f3 100644
--- a/erpnext/accounts/doctype/shipping_rule/shipping_rule.py
+++ b/erpnext/accounts/doctype/shipping_rule/shipping_rule.py
@@ -8,7 +8,7 @@
 from webnotes import _, msgprint
 from webnotes.utils import flt, fmt_money
 from webnotes.model.controller import DocListController
-from setup.utils import get_company_currency
+from erpnext.setup.utils import get_company_currency
 
 class OverlappingConditionError(webnotes.ValidationError): pass
 class FromGreaterThanToError(webnotes.ValidationError): pass
diff --git a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
index 8bac02b..6bf6bd3 100644
--- a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
+++ b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
@@ -3,7 +3,7 @@
 
 import webnotes
 import unittest
-from accounts.doctype.shipping_rule.shipping_rule import FromGreaterThanToError, ManyBlankToValuesError, OverlappingConditionError
+from erpnext.accounts.doctype.shipping_rule.shipping_rule import FromGreaterThanToError, ManyBlankToValuesError, OverlappingConditionError
 
 class TestShippingRule(unittest.TestCase):
 	def test_from_greater_than_to(self):
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 87814b1..b638e6c 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes.utils import flt, cstr
 from webnotes import _
-from accounts.utils import validate_expense_against_budget
+from erpnext.accounts.utils import validate_expense_against_budget
 
 
 class StockAccountInvalidTransaction(webnotes.ValidationError): pass
@@ -107,7 +107,7 @@
 def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None, 
 		adv_adj=False, update_outstanding="Yes"):
 	
-	from accounts.doctype.gl_entry.gl_entry import check_negative_balance, \
+	from erpnext.accounts.doctype.gl_entry.gl_entry import check_negative_balance, \
 		check_freezing_date, update_outstanding_amt, validate_frozen_account
 		
 	if not gl_entries:
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js
index d57073a..4623fdd 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.js
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.js
@@ -63,7 +63,7 @@
 		
 	// load up companies
 	return wn.call({
-		method:'accounts.page.accounts_browser.accounts_browser.get_companies',
+		method: 'erpnext.accounts.page.accounts_browser.accounts_browser.get_companies',
 		callback: function(r) {
 			wrapper.$company_select.empty();
 			$.each(r.message, function(i, v) {
@@ -108,7 +108,7 @@
 			parent: $(wrapper), 
 			label: ctype==="Account" ? "Accounts" : "Cost Centers",
 			args: {ctype: ctype, comp: company},
-			method: 'accounts.page.accounts_browser.accounts_browser.get_children',
+			method: 'erpnext.accounts.page.accounts_browser.accounts_browser.get_children',
 			click: function(link) {
 				if(me.cur_toolbar) 
 					$(me.cur_toolbar).toggle(false);
@@ -261,7 +261,7 @@
 			
 			return wn.call({
 				args: v,
-				method:'accounts.utils.add_ac',
+				method: 'erpnext.accounts.utils.add_ac',
 				callback: function(r) {
 					$(btn).done_working();
 					d.hide();
@@ -308,7 +308,7 @@
 			
 			return wn.call({
 				args: v,
-				method:'accounts.utils.add_cc',
+				method: 'erpnext.accounts.utils.add_cc',
 				callback: function(r) {
 					$(btn).done_working();
 					d.hide();
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py
index 68a53b2..6dfbf4a 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.py
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.py
@@ -5,7 +5,7 @@
 import webnotes
 import webnotes.defaults
 from webnotes.utils import flt
-from accounts.utils import get_balance_on
+from erpnext.accounts.utils import get_balance_on
 
 @webnotes.whitelist()
 def get_companies():
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.py b/erpnext/accounts/report/accounts_payable/accounts_payable.py
index e5489d1..bb02ab2 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.py
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes.utils import getdate, nowdate, flt, cstr
 from webnotes import msgprint, _
-from accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
+from erpnext.accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
 
 def execute(filters=None):
 	if not filters: filters = {}
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 431a649..f2a1edd 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
+++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
@@ -12,7 +12,7 @@
 	columns = get_columns()	
 	data = get_entries(filters)
 	
-	from accounts.utils import get_balance_on
+	from erpnext.accounts.utils import get_balance_on
 	balance_as_per_company = get_balance_on(filters["account"], filters["report_date"])
 
 	total_debit, total_credit = 0,0
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 a5860c8..8d164f8 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
@@ -6,8 +6,8 @@
 from webnotes import _, msgprint
 from webnotes.utils import flt
 import time
-from accounts.utils import get_fiscal_year
-from controllers.trends import get_period_date_ranges, get_period_month_ranges
+from erpnext.accounts.utils import get_fiscal_year
+from erpnext.controllers.trends import get_period_date_ranges, get_period_month_ranges
 
 def execute(filters=None):
 	if not filters: filters = {}
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 8e73062..4f7a1e4 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import webnotes
 from webnotes.utils import flt
-from stock.utils import get_buying_amount, get_sales_bom_buying_amount
+from erpnext.stock.utils import get_buying_amount, get_sales_bom_buying_amount
 
 def execute(filters=None):
 	if not filters: filters = {}
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 1273360..4662462 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
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import webnotes
 from webnotes import msgprint, _
-from accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
+from erpnext.accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
 
 def execute(filters=None):
 	if not filters: filters = {}
diff --git a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.py b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.py
index 4c38bed..4587618 100644
--- a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.py
+++ b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns,get_data
+from erpnext.controllers.trends	import get_columns,get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
diff --git a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.py b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.py
index 70c61d7..da70623 100644
--- a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.py
+++ b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns,get_data
+from erpnext.controllers.trends	import get_columns,get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index caad793..2b7c06f 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -8,7 +8,7 @@
 from webnotes.model.doc import addchild
 from webnotes import msgprint, _
 from webnotes.utils import formatdate
-from utilities import build_filter_conditions
+from erpnext.utilities import build_filter_conditions
 
 
 class FiscalYearError(webnotes.ValidationError): pass
@@ -260,7 +260,7 @@
 				(d.diff, d.voucher_type, d.voucher_no))
 	
 def get_stock_and_account_difference(account_list=None, posting_date=None):
-	from stock.utils import get_stock_balance_on
+	from erpnext.stock.utils import get_stock_balance_on
 	
 	if not posting_date: posting_date = nowdate()
 	
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.py b/erpnext/buying/doctype/buying_settings/buying_settings.py
index 53e4479..25d0f72 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.py
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.py
@@ -14,6 +14,6 @@
 		for key in ["supplier_type", "supp_master_name", "maintain_same_rate", "buying_price_list"]:
 			webnotes.conn.set_default(key, self.doc.fields.get(key, ""))
 
-		from setup.doctype.naming_series.naming_series import set_by_naming_series
+		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Supplier", "supplier_name", 
 			self.doc.get("supp_master_name")=="Naming Series", hide_name_field=False)
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index 9661f6e..86b252d 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -112,7 +112,7 @@
 				cur_frm.fields_dict[me.frm.cscript.fname].grid.grid_rows[item.idx - 1].remove();
 			} else {
 				return this.frm.call({
-					method: "buying.utils.get_item_details",
+					method: "erpnext.buying.utils.get_item_details",
 					child: item,
 					args: {
 						args: {
@@ -178,7 +178,7 @@
 		var item = wn.model.get_doc(cdt, cdn);
 		if(item.item_code && item.uom) {
 			return this.frm.call({
-				method: "buying.utils.get_conversion_factor",
+				method: "erpnext.buying.utils.get_conversion_factor",
 				child: item,
 				args: {
 					item_code: item.item_code,
@@ -211,7 +211,7 @@
 		var item = wn.model.get_doc(cdt, cdn);
 		if(item.item_code && item.warehouse) {
 			return this.frm.call({
-				method: "buying.utils.get_projected_qty",
+				method: "erpnext.buying.utils.get_projected_qty",
 				child: item,
 				args: {
 					item_code: item.item_code,
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index c265874..b2e59b0 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -8,10 +8,10 @@
 from webnotes.model.utils import getlist
 from webnotes import msgprint, _
 
-from buying.utils import get_last_purchase_details
+from erpnext.buying.utils import get_last_purchase_details
 
 	
-from controllers.buying_controller import BuyingController
+from erpnext.controllers.buying_controller import BuyingController
 class DocType(BuyingController):
 	def __init__(self, doc, doclist=None):
 		self.doc = doc
@@ -94,7 +94,7 @@
 			if not item:
 				msgprint("Item %s does not exist in Item Master." % cstr(d.item_code), raise_exception=True)
 			
-			from stock.utils import validate_end_of_life
+			from erpnext.stock.utils import validate_end_of_life
 			validate_end_of_life(d.item_code, item[0][3])
 			
 			# validate stock item
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index dad2864..7db0035 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -42,14 +42,14 @@
 		
 	make_purchase_receipt: function() {
 		wn.model.open_mapped_doc({
-			method: "buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
+			method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
 			source_name: cur_frm.doc.name
 		})
 	},
 	
 	make_purchase_invoice: function() {
 		wn.model.open_mapped_doc({
-			method: "buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
+			method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
 			source_name: cur_frm.doc.name
 		})
 	},
@@ -58,7 +58,7 @@
 		cur_frm.add_custom_button(wn._('From Material Request'), 
 			function() {
 				wn.model.map_current_doc({
-					method: "stock.doctype.material_request.material_request.make_purchase_order",
+					method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
 					source_doctype: "Material Request",
 					get_query_filters: {
 						material_request_type: "Purchase",
@@ -74,7 +74,7 @@
 		cur_frm.add_custom_button(wn._('From Supplier Quotation'), 
 			function() {
 				wn.model.map_current_doc({
-					method: "buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
+					method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
 					source_doctype: "Supplier Quotation",
 					get_query_filters: {
 						docstatus: 1,
@@ -88,7 +88,7 @@
 		cur_frm.add_custom_button(wn._('For Supplier'), 
 			function() {
 				wn.model.map_current_doc({
-					method: "stock.doctype.material_request.material_request.make_purchase_order_based_on_supplier",
+					method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order_based_on_supplier",
 					source_doctype: "Supplier",
 					get_query_filters: {
 						docstatus: ["!=", 2],
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 33d8b48..ebfda85 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -10,7 +10,7 @@
 from webnotes import msgprint
 
 	
-from controllers.buying_controller import BuyingController
+from erpnext.controllers.buying_controller import BuyingController
 class DocType(BuyingController):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
@@ -35,8 +35,8 @@
 		if not self.doc.status:
 			self.doc.status = "Draft"
 
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
 			"Cancelled"])
 
 		pc_obj = get_obj(dt='Purchase Common')
@@ -83,7 +83,7 @@
 
 		
 	def update_bin(self, is_submit, is_stopped = 0):
-		from stock.utils import update_bin
+		from erpnext.stock.utils import update_bin
 		pc_obj = get_obj('Purchase Common')
 		for d in getlist(self.doclist, 'po_details'):
 			#1. Check if is_stock_item == 'Yes'
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index f6c435c..3659f6d 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -10,7 +10,7 @@
 
 class TestPurchaseOrder(unittest.TestCase):
 	def test_make_purchase_receipt(self):		
-		from buying.doctype.purchase_order.purchase_order import make_purchase_receipt
+		from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
 
 		po = webnotes.bean(copy=test_records[0]).insert()
 
@@ -33,7 +33,7 @@
 	def test_ordered_qty(self):
 		webnotes.conn.sql("delete from tabBin")
 		
-		from buying.doctype.purchase_order.purchase_order import make_purchase_receipt
+		from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
 
 		po = webnotes.bean(copy=test_records[0]).insert()
 
@@ -75,7 +75,7 @@
 			"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 0.0)
 		
 	def test_make_purchase_invocie(self):
-		from buying.doctype.purchase_order.purchase_order import make_purchase_invoice
+		from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice
 
 		po = webnotes.bean(copy=test_records[0]).insert()
 
@@ -98,14 +98,14 @@
 		self.assertEquals(len(po.doclist.get({"parentfield": "po_raw_material_details"})), 2)
 
 	def test_warehouse_company_validation(self):
-		from stock.utils import InvalidWarehouseCompany
+		from erpnext.stock.utils import InvalidWarehouseCompany
 		po = webnotes.bean(copy=test_records[0])
 		po.doc.company = "_Test Company 1"
 		po.doc.conversion_rate = 0.0167
 		self.assertRaises(InvalidWarehouseCompany, po.insert)
 
 	def test_uom_integer_validation(self):
-		from utilities.transaction_base import UOMMustBeIntegerError
+		from erpnext.utilities.transaction_base import UOMMustBeIntegerError
 		po = webnotes.bean(copy=test_records[0])
 		po.doclist[1].qty = 3.4
 		self.assertRaises(UOMMustBeIntegerError, po.insert)
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 0618616..aa8ea2a 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -38,7 +38,7 @@
 
 	return wn.call({
 		type: "GET",
-		method:"buying.doctype.supplier.supplier.get_dashboard_info",
+		method: "erpnext.buying.doctype.supplier.supplier.get_dashboard_info",
 		args: {
 			supplier: cur_frm.doc.name
 		},
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index b2873c5..ace1d12 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -10,7 +10,7 @@
 from webnotes.model.doc import make_autoname
 
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
@@ -149,7 +149,7 @@
 		self.delete_supplier_account()
 		
 	def before_rename(self, olddn, newdn, merge=False):
-		from accounts.utils import rename_account_for
+		from erpnext.accounts.utils import rename_account_for
 		rename_account_for("Supplier", olddn, newdn, merge)
 		
 	def after_rename(self, olddn, newdn, merge=False):
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index 92bf7a1..597ad86 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -22,7 +22,7 @@
 			cur_frm.add_custom_button(wn._('From Material Request'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "stock.doctype.material_request.material_request.make_supplier_quotation",
+						method: "erpnext.stock.doctype.material_request.material_request.make_supplier_quotation",
 						source_doctype: "Material Request",
 						get_query_filters: {
 							material_request_type: "Purchase",
@@ -38,7 +38,7 @@
 		
 	make_purchase_order: function() {
 		wn.model.open_mapped_doc({
-			method: "buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
+			method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
 			source_name: cur_frm.doc.name
 		})
 	}
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index dc564b9..b4562e0 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes.model.code import get_obj
 
-from controllers.buying_controller import BuyingController
+from erpnext.controllers.buying_controller import BuyingController
 class DocType(BuyingController):
 	def __init__(self, doc, doclist=None):
 		self.doc, self.doclist = doc, doclist or []
@@ -17,8 +17,8 @@
 		if not self.doc.status:
 			self.doc.status = "Draft"
 
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
 			"Cancelled"])
 		
 		self.validate_common()
diff --git a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py
index 82ad42a..82444ea 100644
--- a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py
@@ -9,7 +9,7 @@
 
 class TestPurchaseOrder(unittest.TestCase):
 	def test_make_purchase_order(self):
-		from buying.doctype.supplier_quotation.supplier_quotation import make_purchase_order
+		from erpnext.buying.doctype.supplier_quotation.supplier_quotation import make_purchase_order
 
 		sq = webnotes.bean(copy=test_records[0]).insert()
 
diff --git a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.py b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.py
index df8d7cf..1ecdab2 100644
--- a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.py
+++ b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns,get_data
+from erpnext.controllers.trends	import get_columns,get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py
index 0d9c8fa..8a4ae3f 100644
--- a/erpnext/buying/utils.py
+++ b/erpnext/buying/utils.py
@@ -83,7 +83,7 @@
 	return out
 	
 def _get_price_list_rate(args, item_bean, meta):
-	from utilities.transaction_base import validate_currency
+	from erpnext.utilities.transaction_base import validate_currency
 	item = item_bean.doc
 	out = webnotes._dict()
 	
@@ -117,7 +117,7 @@
 	return item_supplier and item_supplier[0].supplier_part_no or None
 
 def _validate_item_details(args, item):
-	from utilities.transaction_base import validate_item_fetch
+	from erpnext.utilities.transaction_base import validate_item_fetch
 	validate_item_fetch(args, item)
 	
 	# validate if purchase item or subcontracted item
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 5388ee1..d48a7a6 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -6,9 +6,9 @@
 from webnotes import _, msgprint
 from webnotes.utils import flt, cint, today, cstr
 from webnotes.model.code import get_obj
-from setup.utils import get_company_currency
-from accounts.utils import get_fiscal_year, validate_fiscal_year
-from utilities.transaction_base import TransactionBase, validate_conversion_rate
+from erpnext.setup.utils import get_company_currency
+from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year
+from erpnext.utilities.transaction_base import TransactionBase, validate_conversion_rate
 import json
 
 class AccountsController(TransactionBase):
@@ -403,7 +403,7 @@
 						raise_exception=1)
 		
 	def get_company_default(self, fieldname):
-		from accounts.utils import get_company_default
+		from erpnext.accounts.utils import get_company_default
 		return get_company_default(self.doc.company, fieldname)
 		
 	def get_stock_items(self):
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index b52d51c..8da572a 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -6,10 +6,10 @@
 from webnotes import _, msgprint
 from webnotes.utils import flt, _round
 
-from buying.utils import get_item_details
-from setup.utils import get_company_currency
+from erpnext.buying.utils import get_item_details
+from erpnext.setup.utils import get_company_currency
 
-from controllers.stock_controller import StockController
+from erpnext.controllers.stock_controller import StockController
 
 class BuyingController(StockController):
 	def onload_post_render(self):
@@ -50,7 +50,7 @@
 					break
 					
 	def validate_warehouse(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from erpnext.stock.utils import validate_warehouse_user, validate_warehouse_company
 		
 		warehouses = list(set([d.warehouse for d in 
 			self.doclist.get({"doctype": self.tname}) if d.warehouse]))
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index 9d64d16..535ca3b 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -186,7 +186,7 @@
 			}, { "start": start, "page_len": page_len, "txt": ("%%%s%%" % txt) })
 
 def get_batch_no(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 
 	if filters.has_key('warehouse'):
 		return webnotes.conn.sql("""select batch_no from `tabStock Ledger Entry` sle 
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index fd4ca40..61db756 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -4,11 +4,11 @@
 from __future__ import unicode_literals
 import webnotes
 from webnotes.utils import cint, flt, comma_or, _round, cstr
-from setup.utils import get_company_currency
-from selling.utils import get_item_details
+from erpnext.setup.utils import get_company_currency
+from erpnext.selling.utils import get_item_details
 from webnotes import msgprint, _
 
-from controllers.stock_controller import StockController
+from erpnext.controllers.stock_controller import StockController
 
 class SellingController(StockController):
 	def onload_post_render(self):
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 8a4a402..eff6491 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -7,8 +7,8 @@
 from webnotes import msgprint, _
 import webnotes.defaults
 
-from controllers.accounts_controller import AccountsController
-from accounts.general_ledger import make_gl_entries, delete_gl_entries
+from erpnext.controllers.accounts_controller import AccountsController
+from erpnext.accounts.general_ledger import make_gl_entries, delete_gl_entries
 
 class StockController(AccountsController):
 	def make_gl_entries(self, update_gl_entries_after=True):
@@ -27,7 +27,7 @@
 	
 	def get_gl_entries(self, warehouse_account=None, default_expense_account=None,
 			default_cost_center=None):
-		from accounts.general_ledger import process_gl_map
+		from erpnext.accounts.general_ledger import process_gl_map
 		if not warehouse_account:
 			warehouse_account = self.get_warehouse_account()
 		
@@ -160,7 +160,7 @@
 			where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
 					
 	def make_adjustment_entry(self, expected_gle, voucher_obj):
-		from accounts.utils import get_stock_and_account_difference
+		from erpnext.accounts.utils import get_stock_and_account_difference
 		account_list = [d.account for d in expected_gle]
 		acc_diff = get_stock_and_account_difference(account_list, expected_gle[0].posting_date)
 		
@@ -190,7 +190,7 @@
 				])
 				
 		if gl_entries:
-			from accounts.general_ledger import make_gl_entries
+			from erpnext.accounts.general_ledger import make_gl_entries
 			make_gl_entries(gl_entries)
 			
 	def check_expense_account(self, item):
@@ -226,7 +226,7 @@
 		return sl_dict
 		
 	def make_sl_entries(self, sl_entries, is_amended=None):
-		from stock.stock_ledger import make_sl_entries
+		from erpnext.stock.stock_ledger import make_sl_entries
 		make_sl_entries(sl_entries, is_amended)
 		
 	def get_stock_ledger_entries(self, item_list=None, warehouse_list=None):
diff --git a/erpnext/home/page/activity/activity.js b/erpnext/home/page/activity/activity.js
index c4b0cf3..91b8184 100644
--- a/erpnext/home/page/activity/activity.js
+++ b/erpnext/home/page/activity/activity.js
@@ -12,7 +12,7 @@
 	var list = new wn.ui.Listing({
 		hide_refresh: true,
 		appframe: wrapper.appframe,
-		method: 'home.page.activity.activity.get_feed',
+		method: 'erpnext.home.page.activity.activity.get_feed',
 		parent: $(wrapper).find(".layout-main"),
 		render_row: function(row, data) {
 			new erpnext.ActivityFeed(row, data);
diff --git a/erpnext/home/page/latest_updates/latest_updates.js b/erpnext/home/page/latest_updates/latest_updates.js
index 80ba85e..06c34ef 100644
--- a/erpnext/home/page/latest_updates/latest_updates.js
+++ b/erpnext/home/page/latest_updates/latest_updates.js
@@ -13,7 +13,7 @@
 		<div class="progress-bar" style="width: 100%;"></div></div>')
 	
 	return wn.call({
-		method:"home.page.latest_updates.latest_updates.get",
+		method: "erpnext.home.page.latest_updates.latest_updates.get",
 		callback: function(r) {
 			parent.empty();
 			$("<p class='help'>"+wn._("Report issues at")+
diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js
index fd2856c..e3626b0 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.js
+++ b/erpnext/hr/doctype/appraisal/appraisal.js
@@ -25,7 +25,7 @@
 
 cur_frm.cscript.kra_template = function(doc, dt, dn) {
 	wn.model.map_current_doc({
-		method: "hr.doctype.appraisal.appraisal.fetch_appraisal_template",
+		method: "erpnext.hr.doctype.appraisal.appraisal.fetch_appraisal_template",
 		source_name: cur_frm.doc.kra_template,
 	});
 }
diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py
index 3abc1ae..10d4222 100644
--- a/erpnext/hr/doctype/attendance/attendance.py
+++ b/erpnext/hr/doctype/attendance/attendance.py
@@ -33,7 +33,7 @@
 					raise_exception=1)
 	
 	def validate_fiscal_year(self):
-		from accounts.utils import validate_fiscal_year
+		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.att_date, self.doc.fiscal_year)
 	
 	def validate_att_date(self):
@@ -48,8 +48,8 @@
 				_(" not active or does not exists in the system"), raise_exception=1)
 			
 	def validate(self):
-		import utilities
-		utilities.validate_status(self.doc.status, ["Present", "Absent", "Half Day"])
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Present", "Absent", "Half Day"])
 		self.validate_fiscal_year()
 		self.validate_att_date()
 		self.validate_duplicate_record()
diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js
index 08cadbd..55be526 100644
--- a/erpnext/hr/doctype/employee/employee.js
+++ b/erpnext/hr/doctype/employee/employee.js
@@ -29,7 +29,7 @@
 	setup_leave_approver_select: function() {
 		var me = this;
 		return this.frm.call({
-			method:"hr.utils.get_leave_approver_list",
+			method: "erpnext.hr.utils.get_leave_approver_list",
 			callback: function(r) {
 				var df = wn.meta.get_docfield("Employee Leave Approver", "leave_approver",
 					me.frm.doc.name);
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 7129739..c185963 100644
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -27,8 +27,8 @@
 		self.doc.employee = self.doc.name
 
 	def validate(self):
-		import utilities
-		utilities.validate_status(self.doc.status, ["Active", "Left"])
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Active", "Left"])
 
 		self.doc.employee = self.doc.name
 		self.validate_date()
@@ -143,7 +143,7 @@
 			
 	def validate_employee_leave_approver(self):
 		from webnotes.profile import Profile
-		from hr.doctype.leave_application.leave_application import InvalidLeaveApproverError
+		from erpnext.hr.doctype.leave_application.leave_application import InvalidLeaveApproverError
 		
 		for l in self.doclist.get({"parentfield": "employee_leave_approvers"}):
 			if "Leave Approver" not in Profile(l.leave_approver).get_roles():
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index c32df80..c65fe0a 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -7,7 +7,7 @@
 	make_bank_voucher: function() {
 		var me = this;
 		return wn.call({
-			method: "accounts.doctype.journal_voucher.journal_voucher.get_default_bank_cash_account",
+			method: "erpnext.accounts.doctype.journal_voucher.journal_voucher.get_default_bank_cash_account",
 			args: {
 				"company": cur_frm.doc.company,
 				"voucher_type": "Bank Voucher"
@@ -60,7 +60,7 @@
 	}
 	var exp_approver = doc.exp_approver;
 	return cur_frm.call({
-		method:"hr.utils.get_expense_approver_list",
+		method: "erpnext.hr.utils.get_expense_approver_list",
 		callback: function(r) {
 			cur_frm.set_df_property("exp_approver", "options", r.message);
 			if(exp_approver) cur_frm.set_value("exp_approver", exp_approver);
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py
index 6b792c8..521195f 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.py
@@ -22,7 +22,7 @@
 				'Rejected' before submitting""", raise_exception=1)
 	
 	def validate_fiscal_year(self):
-		from accounts.utils import validate_fiscal_year
+		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, "Posting Date")
 			
 	def validate_exp_details(self):
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.py b/erpnext/hr/doctype/hr_settings/hr_settings.py
index 2abd7c6..e7e5d3e 100644
--- a/erpnext/hr/doctype/hr_settings/hr_settings.py
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.py
@@ -15,7 +15,7 @@
 	def validate(self):
 		self.update_birthday_reminders()
 
-		from setup.doctype.naming_series.naming_series import set_by_naming_series
+		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Employee", "employee_number", 
 			self.doc.get("emp_created_by")=="Naming Series", hide_name_field=True)
 			
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
index 887e789..0262568 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.py
@@ -5,7 +5,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 from webnotes.utils import extract_email_id
 
 class DocType(TransactionBase):
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
index a3b62ca..cd04384 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ b/erpnext/hr/doctype/leave_application/leave_application.js
@@ -13,7 +13,7 @@
 	
 	var leave_approver = doc.leave_approver;
 	return cur_frm.call({
-		method:"hr.utils.get_leave_approver_list",
+		method: "erpnext.hr.utils.get_leave_approver_list",
 		callback: function(r) {
 			cur_frm.set_df_property("leave_approver", "options", $.map(r.message, 
 				function(profile) { 
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 9b75b10..5d73719 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -53,7 +53,7 @@
 		self.notify_employee("cancelled")
 
 	def show_block_day_warning(self):
-		from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates		
+		from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates		
 
 		block_dates = get_applicable_block_dates(self.doc.from_date, self.doc.to_date, 
 			self.doc.employee, self.doc.company, all_lists=True)
@@ -64,7 +64,7 @@
 				webnotes.msgprint(formatdate(d.block_date) + ": " + d.reason)
 
 	def validate_block_days(self):
-		from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
+		from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
 
 		block_dates = get_applicable_block_dates(self.doc.from_date, self.doc.to_date, 
 			self.doc.employee, self.doc.company)
@@ -290,7 +290,7 @@
 
 def add_block_dates(events, start, end, employee, company):
 	# block days
-	from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
+	from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
 
 	cnt = 0
 	block_dates = get_applicable_block_dates(start, end, employee, company, all_lists=True)
diff --git a/erpnext/hr/doctype/leave_application/leave_application_calendar.js b/erpnext/hr/doctype/leave_application/leave_application_calendar.js
index a258c8f..ba09a39 100644
--- a/erpnext/hr/doctype/leave_application/leave_application_calendar.js
+++ b/erpnext/hr/doctype/leave_application/leave_application_calendar.js
@@ -16,5 +16,5 @@
 			right: 'month'
 		}
 	},
-	get_events_method: "hr.doctype.leave_application.leave_application.get_events"
+	get_events_method: "erpnext.hr.doctype.leave_application.leave_application.get_events"
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index 9f8a8e1..44e818d 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -4,7 +4,7 @@
 import webnotes
 import unittest
 
-from hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError
+from erpnext.hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError
 
 class TestLeaveApplication(unittest.TestCase):
 	def tearDown(self):
@@ -129,7 +129,7 @@
 			"docstatus"), 1)
 		
 	def _test_leave_approval_invalid_leave_approver_insert(self):
-		from hr.doctype.leave_application.leave_application import InvalidLeaveApproverError
+		from erpnext.hr.doctype.leave_application.leave_application import InvalidLeaveApproverError
 		
 		self._clear_applications()
 		
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 973436e..4585e90 100644
--- a/erpnext/hr/doctype/leave_block_list/leave_block_list.py
+++ b/erpnext/hr/doctype/leave_block_list/leave_block_list.py
@@ -5,7 +5,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from accounts.utils import validate_fiscal_year
+from erpnext.accounts.utils import validate_fiscal_year
 from webnotes import _
 
 class DocType:
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 0f0da65..13fa42c 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
@@ -4,7 +4,7 @@
 import webnotes
 import unittest
 
-from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
+from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
 
 class TestLeaveBlockList(unittest.TestCase):
 	def tearDown(self):
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index f5eeea1..946106d 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -9,10 +9,10 @@
 from webnotes.model.bean import getlist
 from webnotes.model.code import get_obj
 from webnotes import msgprint, _
-from setup.utils import get_company_currency
+from erpnext.setup.utils import get_company_currency
 
 	
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self,doc,doclist=[]):
@@ -39,7 +39,7 @@
 
 
 	def pull_sal_struct(self, struct):
-		from hr.doctype.salary_structure.salary_structure import make_salary_slip
+		from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip
 		self.doclist = make_salary_slip(struct, self.doclist)
 		
 	def pull_emp_details(self):
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index 29e9407..372a858 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -8,7 +8,7 @@
 	def setUp(self):
 		webnotes.conn.sql("""delete from `tabLeave Application`""")
 		webnotes.conn.sql("""delete from `tabSalary Slip`""")
-		from hr.doctype.leave_application.test_leave_application import test_records as leave_applications
+		from erpnext.hr.doctype.leave_application.test_leave_application import test_records as leave_applications
 		la = webnotes.bean(copy=leave_applications[4])
 		la.insert()
 		la.doc.status = "Approved"
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js
index 8e36dbd..dd9ab97 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.js
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.js
@@ -20,7 +20,7 @@
 
 cur_frm.cscript['Make Salary Slip'] = function() {
 	wn.model.open_mapped_doc({
-		method: "hr.doctype.salary_structure.salary_structure.make_salary_slip",
+		method: "erpnext.hr.doctype.salary_structure.salary_structure.make_salary_slip",
 		source_name: cur_frm.doc.name
 	});
 }
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
index 9f86dfe..aed3d7f 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
@@ -22,7 +22,7 @@
 		}
 		window.location.href = repl(wn.request.url + 
 			'?cmd=%(cmd)s&from_date=%(from_date)s&to_date=%(to_date)s', {
-				cmd: "hr.doctype.upload_attendance.upload_attendance.get_template",
+				cmd: "erpnext.hr.doctype.upload_attendance.upload_attendance.get_template",
 				from_date: this.frm.doc.att_fr_date,
 				to_date: this.frm.doc.att_to_date,
 			});
@@ -36,7 +36,7 @@
 		wn.upload.make({
 			parent: $wrapper,
 			args: {
-				method: 'hr.doctype.upload_attendance.upload_attendance.upload'
+				method: 'erpnext.hr.doctype.upload_attendance.upload_attendance.upload'
 			},
 			sample_url: "e.g. http://example.com/somefile.csv",
 			callback: function(fid, filename, r) {
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.py b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
index 7bd1fd0..4f1069a 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.py
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.py
@@ -51,7 +51,7 @@
 	return w
 	
 def add_data(w, args):
-	from accounts.utils import get_fiscal_year
+	from erpnext.accounts.utils import get_fiscal_year
 	
 	dates = get_dates(args)
 	employees = get_active_employees()
diff --git a/erpnext/startup/install.py b/erpnext/manage.py
similarity index 78%
rename from erpnext/startup/install.py
rename to erpnext/manage.py
index 94a3f55..6f62673 100644
--- a/erpnext/startup/install.py
+++ b/erpnext/manage.py
@@ -5,41 +5,23 @@
 
 import webnotes
 
-def post_import():
-	webnotes.conn.begin()
+def get_hooks():
+	return {
+		"app_include_js": ["assets/js/erpnext.min.js"],
+		"app_include_css": ["assets/css/erpnext.css"],
+		"desktop_icons": get_desktop_icons(),
+		"boot_session": ["erpnext.startup.boot.boot_session"]
+	}
 
-	# feature setup
+def after_install():
 	import_defaults()
 	import_country_and_currency()
-	
-	# home page
 	webnotes.conn.set_value('Control Panel', None, 'home_page', 'setup-wizard')
-
-	# features
 	feature_setup()
-	
-	# all roles to Administrator
-	from setup.page.setup_wizard.setup_wizard import add_all_roles_to
+	from erpnext.setup.page.setup_wizard.setup_wizard import add_all_roles_to
 	add_all_roles_to("Administrator")
-	
 	webnotes.conn.commit()
 
-def feature_setup():
-	"""save global defaults and features setup"""
-	bean = webnotes.bean("Features Setup", "Features Setup")
-	bean.ignore_permissions = True
-
-	# store value as 1 for all these fields
-	flds = ['fs_item_serial_nos', 'fs_item_batch_nos', 'fs_brands', 'fs_item_barcode',
-		'fs_item_advanced', 'fs_packing_details', 'fs_item_group_in_details',
-		'fs_exports', 'fs_imports', 'fs_discounts', 'fs_purchase_discounts',
-		'fs_after_sales_installations', 'fs_projects', 'fs_sales_extras',
-		'fs_recurring_invoice', 'fs_pos', 'fs_manufacturing', 'fs_quality',
-		'fs_page_break', 'fs_more_info', 'fs_pos_view'
-	]
-	bean.doc.fields.update(dict(zip(flds, [1]*len(flds))))
-	bean.save()
-
 def import_country_and_currency():
 	from webnotes.country_info import get_all
 	data = get_all()
@@ -138,4 +120,94 @@
 		if parent_link_field in bean.doc.fields and not bean.doc.fields.get(parent_link_field):
 			bean.ignore_mandatory = True
 		
-		bean.insert()
\ No newline at end of file
+		bean.insert()
+		
+def feature_setup():
+	"""save global defaults and features setup"""
+	bean = webnotes.bean("Features Setup", "Features Setup")
+	bean.ignore_permissions = True
+
+	# store value as 1 for all these fields
+	flds = ['fs_item_serial_nos', 'fs_item_batch_nos', 'fs_brands', 'fs_item_barcode',
+		'fs_item_advanced', 'fs_packing_details', 'fs_item_group_in_details',
+		'fs_exports', 'fs_imports', 'fs_discounts', 'fs_purchase_discounts',
+		'fs_after_sales_installations', 'fs_projects', 'fs_sales_extras',
+		'fs_recurring_invoice', 'fs_pos', 'fs_manufacturing', 'fs_quality',
+		'fs_page_break', 'fs_more_info', 'fs_pos_view'
+	]
+	bean.doc.fields.update(dict(zip(flds, [1]*len(flds))))
+	bean.save()
+		
+def get_desktop_icons():
+	return	{
+		"Accounts": {
+			"color": "#3498db", 
+			"icon": "icon-money", 
+			"link": "accounts-home", 
+			"type": "module"
+		}, 
+		"Activity": {
+			"color": "#e67e22", 
+			"icon": "icon-play", 
+			"label": "Activity", 
+			"link": "activity", 
+			"type": "page"
+		}, 
+		"Buying": {
+			"color": "#c0392b", 
+			"icon": "icon-shopping-cart", 
+			"link": "buying-home", 
+			"type": "module"
+		}, 
+		"HR": {
+			"color": "#2ecc71", 
+			"icon": "icon-group", 
+			"label": "Human Resources", 
+			"link": "hr-home", 
+			"type": "module"
+		}, 
+		"Manufacturing": {
+			"color": "#7f8c8d", 
+			"icon": "icon-cogs", 
+			"link": "manufacturing-home", 
+			"type": "module"
+		}, 
+		"Notes": {
+			"color": "#95a5a6", 
+			"doctype": "Note", 
+			"icon": "icon-file-alt", 
+			"label": "Notes", 
+			"link": "List/Note", 
+			"type": "list"
+		}, 
+		"Projects": {
+			"color": "#8e44ad", 
+			"icon": "icon-puzzle-piece", 
+			"link": "projects-home", 
+			"type": "module"
+		}, 
+		"Selling": {
+			"color": "#1abc9c", 
+			"icon": "icon-tag", 
+			"link": "selling-home", 
+			"type": "module"
+		}, 
+		"Setup": {
+			"color": "#bdc3c7", 
+			"icon": "icon-wrench", 
+			"link": "Setup", 
+			"type": "setup"
+		}, 
+		"Stock": {
+			"color": "#f39c12", 
+			"icon": "icon-truck", 
+			"link": "stock-home", 
+			"type": "module"
+		}, 
+		"Support": {
+			"color": "#2c3e50", 
+			"icon": "icon-phone", 
+			"link": "support-home", 
+			"type": "module"
+		}
+	}
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 7b647a7..45e96f7 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -30,7 +30,7 @@
 		self.clear_operations()
 		self.validate_main_item()
 
-		from utilities.transaction_base import validate_uom_is_integer
+		from erpnext.utilities.transaction_base import validate_uom_is_integer
 		validate_uom_is_integer(self.doclist, "stock_uom", "qty")
 
 		self.validate_operations()
@@ -152,7 +152,7 @@
 			as per valuation method (MAR/FIFO) 
 			as on costing date	
 		"""
-		from stock.utils import get_incoming_rate
+		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 = webnotes.conn.sql("select warehouse from `tabBin` where item_code = %s", args['item_code'])
diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py
index 7917ab3..5f9186a 100644
--- a/erpnext/manufacturing/doctype/bom/test_bom.py
+++ b/erpnext/manufacturing/doctype/bom/test_bom.py
@@ -98,14 +98,14 @@
 
 class TestBOM(unittest.TestCase):
 	def test_get_items(self):
-		from manufacturing.doctype.bom.bom import get_bom_items_as_dict
+		from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict
 		items_dict = get_bom_items_as_dict(bom="BOM/_Test FG Item 2/001", qty=1, fetch_exploded=0)
 		self.assertTrue(test_records[2][1]["item_code"] in items_dict)
 		self.assertTrue(test_records[2][2]["item_code"] in items_dict)
 		self.assertEquals(len(items_dict.values()), 2)
 		
 	def test_get_items_exploded(self):
-		from manufacturing.doctype.bom.bom import get_bom_items_as_dict
+		from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict
 		items_dict = get_bom_items_as_dict(bom="BOM/_Test FG Item 2/001", qty=1, fetch_exploded=1)
 		self.assertTrue(test_records[2][1]["item_code"] in items_dict)
 		self.assertFalse(test_records[2][2]["item_code"] in items_dict)
@@ -114,6 +114,6 @@
 		self.assertEquals(len(items_dict.values()), 3)
 		
 	def test_get_items_list(self):
-		from manufacturing.doctype.bom.bom import get_bom_items
+		from erpnext.manufacturing.doctype.bom.bom import get_bom_items
 		self.assertEquals(len(get_bom_items(bom="BOM/_Test FG Item 2/001", qty=1, fetch_exploded=1)), 3)
 
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index 2277262..075f8bd 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -70,7 +70,7 @@
 
 cur_frm.cscript.make_se = function(purpose) {
 	wn.call({
-		method:"manufacturing.doctype.production_order.production_order.make_stock_entry",
+		method: "erpnext.manufacturing.doctype.production_order.production_order.make_stock_entry",
 		args: {
 			"production_order_id": cur_frm.doc.name,
 			"purpose": purpose
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index c5b2b04..a6e219a 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -20,15 +20,15 @@
 		if self.doc.docstatus == 0:
 			self.doc.status = "Draft"
 			
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
 			"In Process", "Completed", "Cancelled"])
 
 		self.validate_bom_no()
 		self.validate_sales_order()
 		self.validate_warehouse()
 		
-		from utilities.transaction_base import validate_uom_is_integer
+		from erpnext.utilities.transaction_base import validate_uom_is_integer
 		validate_uom_is_integer(self.doclist, "stock_uom", ["qty", "produced_qty"])
 		
 	def validate_bom_no(self):
@@ -50,7 +50,7 @@
 			self.validate_production_order_against_so()
 			
 	def validate_warehouse(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from erpnext.stock.utils import validate_warehouse_user, validate_warehouse_company
 		
 		for w in [self.doc.fg_warehouse, self.doc.wip_warehouse]:
 			validate_warehouse_user(w)
@@ -128,7 +128,7 @@
 			"posting_date": nowdate(),
 			"planned_qty": flt(qty)
 		}
-		from stock.utils import update_bin
+		from erpnext.stock.utils import update_bin
 		update_bin(args)
 
 @webnotes.whitelist()	
diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.py b/erpnext/manufacturing/doctype/production_order/test_production_order.py
index 5269729..62bb26e 100644
--- a/erpnext/manufacturing/doctype/production_order/test_production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/test_production_order.py
@@ -5,8 +5,8 @@
 from __future__ import unicode_literals
 import unittest
 import webnotes
-from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
-from manufacturing.doctype.production_order.production_order import make_stock_entry
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
+from erpnext.manufacturing.doctype.production_order.production_order import make_stock_entry
 
 
 class TestProductionOrder(unittest.TestCase):
@@ -20,7 +20,7 @@
 		pro_bean.insert()
 		pro_bean.submit()
 		
-		from stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records
+		from erpnext.stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records
 		mr1 = webnotes.bean(copy = se_test_records[0])
 		mr1.insert()
 		mr1.submit()
@@ -45,7 +45,7 @@
 		return pro_bean.doc.name
 			
 	def test_over_production(self):
-		from stock.doctype.stock_entry.stock_entry import StockOverProductionError
+		from erpnext.stock.doctype.stock_entry.stock_entry import StockOverProductionError
 		pro_order = self.test_planned_qty()
 		
 		stock_entry = make_stock_entry(pro_order, "Manufacture/Repack")
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 f3626a3..cb611ba 100644
--- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -173,7 +173,7 @@
 		"""It will raise production order (Draft) for all distinct FG items"""
 		self.validate_data()
 
-		from utilities.transaction_base import validate_uom_is_integer
+		from erpnext.utilities.transaction_base import validate_uom_is_integer
 		validate_uom_is_integer(self.doclist, "stock_uom", "planned_qty")
 
 		items = self.get_distinct_items_and_boms()[1]
@@ -208,7 +208,7 @@
 		
 	def create_production_order(self, items):
 		"""Create production order. Called from Production Planning Tool"""
-		from manufacturing.doctype.production_order.production_order import OverProductionError
+		from erpnext.manufacturing.doctype.production_order.production_order import OverProductionError
 
 		pro_list = []
 		for key in items:
@@ -302,7 +302,7 @@
 		
 		item_projected_qty = self.get_projected_qty()
 		
-		from accounts.utils import get_fiscal_year
+		from erpnext.accounts.utils import get_fiscal_year
 		fiscal_year = get_fiscal_year(nowdate())[0]
 		
 		items_to_be_requested = webnotes._dict()
diff --git a/erpnext/patches/april_2013/p01_update_serial_no_valuation_rate.py b/erpnext/patches/april_2013/p01_update_serial_no_valuation_rate.py
index 18fe9b5..c6f0612 100644
--- a/erpnext/patches/april_2013/p01_update_serial_no_valuation_rate.py
+++ b/erpnext/patches/april_2013/p01_update_serial_no_valuation_rate.py
@@ -3,7 +3,7 @@
 
 import webnotes
 from webnotes.utils import cstr
-from stock.stock_ledger import update_entries_after
+from erpnext.stock.stock_ledger import update_entries_after
 
 def execute():
 	webnotes.conn.auto_commit_on_many_writes = 1
diff --git a/erpnext/patches/december_2012/repost_ordered_qty.py b/erpnext/patches/december_2012/repost_ordered_qty.py
index 05cbb64..5b24fdf 100644
--- a/erpnext/patches/december_2012/repost_ordered_qty.py
+++ b/erpnext/patches/december_2012/repost_ordered_qty.py
@@ -3,7 +3,7 @@
 
 def execute():
 	import webnotes
-	from utilities.repost_stock import get_ordered_qty, update_bin
+	from erpnext.utilities.repost_stock import get_ordered_qty, update_bin
 			
 	for d in webnotes.conn.sql("select item_code, warehouse from tabBin"):
 		update_bin(d[0], d[1], {
diff --git a/erpnext/patches/february_2013/repost_reserved_qty.py b/erpnext/patches/february_2013/repost_reserved_qty.py
index 442a81b..fbc6f1a 100644
--- a/erpnext/patches/february_2013/repost_reserved_qty.py
+++ b/erpnext/patches/february_2013/repost_reserved_qty.py
@@ -4,7 +4,7 @@
 import webnotes
 def execute():
 	webnotes.conn.auto_commit_on_many_writes = 1
-	from utilities.repost_stock import get_reserved_qty, update_bin
+	from erpnext.utilities.repost_stock import get_reserved_qty, update_bin
 	
 	for d in webnotes.conn.sql("select item_code, warehouse from tabBin"):
 		update_bin(d[0], d[1], {
diff --git a/erpnext/patches/july_2013/restore_tree_roots.py b/erpnext/patches/july_2013/restore_tree_roots.py
index b6a988f..91b328c 100644
--- a/erpnext/patches/july_2013/restore_tree_roots.py
+++ b/erpnext/patches/july_2013/restore_tree_roots.py
@@ -2,5 +2,5 @@
 # License: GNU General Public License v3. See license.txt
 
 def execute():
-	from startup.install import import_defaults
+	from erpnext.startup.install import import_defaults
 	import_defaults()
\ No newline at end of file
diff --git a/erpnext/patches/june_2013/p04_fix_event_for_lead_oppty_project.py b/erpnext/patches/june_2013/p04_fix_event_for_lead_oppty_project.py
index 735a28a..f80209f 100644
--- a/erpnext/patches/june_2013/p04_fix_event_for_lead_oppty_project.py
+++ b/erpnext/patches/june_2013/p04_fix_event_for_lead_oppty_project.py
@@ -4,7 +4,7 @@
 import webnotes
 
 def execute():
-	from utilities.transaction_base import delete_events
+	from erpnext.utilities.transaction_base import delete_events
 	
 	# delete orphaned Event User
 	webnotes.conn.sql("""delete from `tabEvent User`
diff --git a/erpnext/patches/june_2013/p07_taxes_price_list_for_territory.py b/erpnext/patches/june_2013/p07_taxes_price_list_for_territory.py
index 1cdb783..4a224e3 100644
--- a/erpnext/patches/june_2013/p07_taxes_price_list_for_territory.py
+++ b/erpnext/patches/june_2013/p07_taxes_price_list_for_territory.py
@@ -9,7 +9,7 @@
 	webnotes.reload_doc("accounts", "doctype", "sales_taxes_and_charges_master")
 	webnotes.reload_doc("accounts", "doctype", "shipping_rule")
 	
-	from setup.utils import get_root_of
+	from erpnext.setup.utils import get_root_of
 	root_territory = get_root_of("Territory")
 	
 	for parenttype in ["Sales Taxes and Charges Master", "Price List", "Shipping Rule"]:
diff --git a/erpnext/patches/june_2013/p08_shopping_cart_settings.py b/erpnext/patches/june_2013/p08_shopping_cart_settings.py
index 6af7eb8..45028c8 100644
--- a/erpnext/patches/june_2013/p08_shopping_cart_settings.py
+++ b/erpnext/patches/june_2013/p08_shopping_cart_settings.py
@@ -7,7 +7,7 @@
 	webnotes.reload_doc("selling", "doctype", "shopping_cart_settings")
 	
 	# create two default territories, one for home country and one named Rest of the World
-	from setup.page.setup_wizard.setup_wizard import create_territories
+	from erpnext.setup.page.setup_wizard.setup_wizard import create_territories
 	create_territories()
 	
 	webnotes.conn.set_value("Shopping Cart Settings", None, "default_territory", "Rest of the World")
diff --git a/erpnext/patches/march_2013/p10_set_fiscal_year_for_stock.py b/erpnext/patches/march_2013/p10_set_fiscal_year_for_stock.py
index 1f5adf6..97510c7 100644
--- a/erpnext/patches/march_2013/p10_set_fiscal_year_for_stock.py
+++ b/erpnext/patches/march_2013/p10_set_fiscal_year_for_stock.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 import webnotes
-from accounts.utils import get_fiscal_year, FiscalYearError
+from erpnext.accounts.utils import get_fiscal_year, FiscalYearError
 
 def execute():
 	webnotes.reload_doc("stock", "doctype", "stock_entry")
diff --git a/erpnext/patches/may_2013/p02_update_valuation_rate.py b/erpnext/patches/may_2013/p02_update_valuation_rate.py
index b521734..1419ebf 100644
--- a/erpnext/patches/may_2013/p02_update_valuation_rate.py
+++ b/erpnext/patches/may_2013/p02_update_valuation_rate.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import webnotes
 def execute():
-	from stock.stock_ledger import update_entries_after
+	from erpnext.stock.stock_ledger import update_entries_after
 	item_warehouse = []
 	# update valuation_rate in transaction
 	doctypes = {"Purchase Receipt": "purchase_receipt_details", "Purchase Invoice": "entries"}
diff --git a/erpnext/patches/may_2013/repost_stock_for_no_posting_time.py b/erpnext/patches/may_2013/repost_stock_for_no_posting_time.py
index db03992..b36ccf3 100644
--- a/erpnext/patches/may_2013/repost_stock_for_no_posting_time.py
+++ b/erpnext/patches/may_2013/repost_stock_for_no_posting_time.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 def execute():
 	import webnotes
-	from stock.stock_ledger import update_entries_after
+	from erpnext.stock.stock_ledger import update_entries_after
 	
 	res = webnotes.conn.sql("""select distinct item_code, warehouse from `tabStock Ledger Entry` 
 		where posting_time = '00:00'""")
diff --git a/erpnext/patches/october_2013/perpetual_inventory_stock_transfer_utility.py b/erpnext/patches/october_2013/perpetual_inventory_stock_transfer_utility.py
index 5937422..889f5e2 100644
--- a/erpnext/patches/october_2013/perpetual_inventory_stock_transfer_utility.py
+++ b/erpnext/patches/october_2013/perpetual_inventory_stock_transfer_utility.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import webnotes
 from webnotes.utils import nowdate, nowtime, cstr
-from accounts.utils import get_fiscal_year
+from erpnext.accounts.utils import get_fiscal_year
 
 def execute():
 	item_map = {}
diff --git a/erpnext/patches/october_2013/repost_planned_qty.py b/erpnext/patches/october_2013/repost_planned_qty.py
index 6a78d33..1e9da30 100644
--- a/erpnext/patches/october_2013/repost_planned_qty.py
+++ b/erpnext/patches/october_2013/repost_planned_qty.py
@@ -3,7 +3,7 @@
 
 def execute():
 	import webnotes
-	from utilities.repost_stock import get_planned_qty, update_bin
+	from erpnext.utilities.repost_stock import get_planned_qty, update_bin
 	
 	for d in webnotes.conn.sql("select item_code, warehouse from tabBin"):
 		update_bin(d[0], d[1], {
diff --git a/erpnext/patches/september_2012/repost_stock.py b/erpnext/patches/september_2012/repost_stock.py
index 5df65a2..11c8747 100644
--- a/erpnext/patches/september_2012/repost_stock.py
+++ b/erpnext/patches/september_2012/repost_stock.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 def execute():
 	import webnotes
-	from stock.stock_ledger import update_entries_after
+	from erpnext.stock.stock_ledger import update_entries_after
 	res = webnotes.conn.sql("select distinct item_code, warehouse from `tabStock Ledger Entry`")
 	i=0
 	for d in res:
diff --git a/erpnext/portal/templates/includes/cart.js b/erpnext/portal/templates/includes/cart.js
index 232501d..0765c60 100644
--- a/erpnext/portal/templates/includes/cart.js
+++ b/erpnext/portal/templates/includes/cart.js
@@ -7,7 +7,7 @@
 	erpnext.cart.bind_events();
 	return wn.call({
 		type: "POST",
-		method: "selling.utils.cart.get_cart_quotation",
+		method: "erpnext.selling.utils.cart.get_cart_quotation",
 		callback: function(r) {
 			$("#cart-container").removeClass("hide");
 			$(".progress").remove();
@@ -193,7 +193,7 @@
 		return wn.call({
 			btn: btn,
 			type: "POST",
-			method: "selling.utils.cart.apply_shipping_rule",
+			method: "erpnext.selling.utils.cart.apply_shipping_rule",
 			args: { shipping_rule: rule },
 			callback: function(r) {
 				if(!r.exc) {
@@ -241,7 +241,7 @@
 				
 				return wn.call({
 					type: "POST",
-					method: "selling.utils.cart.update_cart_address",
+					method: "erpnext.selling.utils.cart.update_cart_address",
 					args: {
 						address_fieldname: $address_wrapper.attr("data-fieldname"),
 						address_name: $(this).attr("data-address-name")
@@ -272,7 +272,7 @@
 	place_order: function(btn) {
 		return wn.call({
 			type: "POST",
-			method: "selling.utils.cart.place_order",
+			method: "erpnext.selling.utils.cart.place_order",
 			btn: btn,
 			callback: function(r) {
 				if(r.exc) {
diff --git a/erpnext/portal/templates/pages/profile.py b/erpnext/portal/templates/pages/profile.py
index 241f953..143abef 100644
--- a/erpnext/portal/templates/pages/profile.py
+++ b/erpnext/portal/templates/pages/profile.py
@@ -10,7 +10,7 @@
 no_sitemap = True
 
 def get_context():
-	from selling.utils.cart import get_lead_or_customer
+	from erpnext.selling.utils.cart import get_lead_or_customer
 	party = get_lead_or_customer()
 	if party.doctype == "Lead":
 		mobile_no = party.mobile_no
@@ -27,7 +27,7 @@
 	
 @webnotes.whitelist()
 def update_profile(fullname, password=None, company_name=None, mobile_no=None, phone=None):
-	from selling.utils.cart import update_party
+	from erpnext.selling.utils.cart import update_party
 	update_party(fullname, company_name, mobile_no, phone)
 	
 	if not fullname:
diff --git a/erpnext/portal/utils.py b/erpnext/portal/utils.py
index 727edf3..9ec5422 100644
--- a/erpnext/portal/utils.py
+++ b/erpnext/portal/utils.py
@@ -67,11 +67,11 @@
 		
 	if subject=="Support":
 		# create support ticket
-		from support.doctype.support_ticket.get_support_mails import add_support_communication
+		from erpnext.support.doctype.support_ticket.get_support_mails import add_support_communication
 		add_support_communication(subject, message, sender, mail=None)
 	else:
 		# make lead / communication
-		from selling.doctype.lead.get_leads import add_sales_communication
+		from erpnext.selling.doctype.lead.get_leads import add_sales_communication
 		add_sales_communication(subject or "Website Query", message, sender, sender, 
 			mail=None, status=status)
 	
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 5b20c5b..f159452 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -6,7 +6,7 @@
 
 from webnotes.utils import flt, getdate
 from webnotes import msgprint
-from utilities.transaction_base import delete_events
+from erpnext.utilities.transaction_base import delete_events
 
 class DocType:
 	def __init__(self, doc, doclist=None):
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 227119e..85d8a49 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -80,7 +80,7 @@
 	return data
 
 def get_project(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 	return webnotes.conn.sql(""" select name from `tabProject`
 			where %(key)s like "%(txt)s"
 				%(mcond)s
diff --git a/erpnext/projects/doctype/task/task_calendar.js b/erpnext/projects/doctype/task/task_calendar.js
index 62d9757..f6adf58 100644
--- a/erpnext/projects/doctype/task/task_calendar.js
+++ b/erpnext/projects/doctype/task/task_calendar.js
@@ -18,5 +18,5 @@
 			"label": wn._("Project")
 		}
 	],
-	get_events_method: "projects.doctype.task.task.get_events"
+	get_events_method: "erpnext.projects.doctype.task.task.get_events"
 }
\ No newline at end of file
diff --git a/erpnext/projects/doctype/time_log/test_time_log.py b/erpnext/projects/doctype/time_log/test_time_log.py
index c62bee1..23206d6 100644
--- a/erpnext/projects/doctype/time_log/test_time_log.py
+++ b/erpnext/projects/doctype/time_log/test_time_log.py
@@ -4,7 +4,7 @@
 import webnotes
 import unittest
 
-from projects.doctype.time_log.time_log import OverlapError
+from erpnext.projects.doctype.time_log.time_log import OverlapError
 
 class TestTimeLog(unittest.TestCase):
 	def test_duplication(self):		
diff --git a/erpnext/projects/doctype/time_log/time_log_calendar.js b/erpnext/projects/doctype/time_log/time_log_calendar.js
index 2451de1..ea14074 100644
--- a/erpnext/projects/doctype/time_log/time_log_calendar.js
+++ b/erpnext/projects/doctype/time_log/time_log_calendar.js
@@ -9,5 +9,5 @@
 		"title": "title",
 		"allDay": "allDay"
 	},
-	get_events_method: "projects.doctype.time_log.time_log.get_events"
+	get_events_method: "erpnext.projects.doctype.time_log.time_log.get_events"
 }
\ No newline at end of file
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 8a7e6f5..9fbf709 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
@@ -5,7 +5,7 @@
 
 class TimeLogBatchTest(unittest.TestCase):
 	def test_time_log_status(self):
-		from projects.doctype.time_log.test_time_log import test_records as time_log_records
+		from erpnext.projects.doctype.time_log.test_time_log import test_records as time_log_records
 		time_log = webnotes.bean(copy=time_log_records[0])
 		time_log.doc.fields.update({
 			"from_time": "2013-01-02 10:00:00",
diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js
index 929bfca..0c53ecd 100644
--- a/erpnext/public/js/conf.js
+++ b/erpnext/public/js/conf.js
@@ -9,7 +9,7 @@
 	
 	var brand = ($("<div></div>").append(wn.boot.website_settings.brand_html).text() || 'erpnext');
 	$('.navbar-brand').html('<div style="display: inline-block;">\
-			<object type="image/svg+xml" data="app/images/splash.svg" class="toolbar-splash"></object>\
+			<object type="image/svg+xml" data="assets/erpnext/images/splash.svg" class="toolbar-splash"></object>\
 		</div>' + brand)
 	.attr("title", brand)
 	.addClass("navbar-icon-home")
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index 4c4a810..96f10c7 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -214,7 +214,7 @@
 		var fieldname = buying_or_selling.toLowerCase() + "_price_list";
 		if(this.frm.doc[fieldname]) {
 			return this.frm.call({
-				method: "setup.utils.get_price_list_currency",
+				method: "erpnext.setup.utils.get_price_list_currency",
 				args: { 
 					price_list: this.frm.doc[fieldname],
 				},
diff --git a/erpnext/public/js/website_utils.js b/erpnext/public/js/website_utils.js
index e752812..fda30b8 100644
--- a/erpnext/public/js/website_utils.js
+++ b/erpnext/public/js/website_utils.js
@@ -8,7 +8,7 @@
 wn.send_message = function(opts, btn) {
 	return wn.call({
 		type: "POST",
-		method: "portal.utils.send_message",
+		method: "erpnext.portal.utils.send_message",
 		btn: btn,
 		args: opts,
 		callback: opts.callback
@@ -46,7 +46,7 @@
 		} else {
 			return wn.call({
 				type: "POST",
-				method: "selling.utils.cart.update_cart",
+				method: "erpnext.selling.utils.cart.update_cart",
 				args: {
 					item_code: opts.item_code,
 					qty: opts.qty,
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index 5e0ccc9..8ec4a2b 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -52,7 +52,7 @@
 	
 	return wn.call({
 		type: "GET",
-		method:"selling.doctype.customer.customer.get_dashboard_info",
+		method: "erpnext.selling.doctype.customer.customer.get_dashboard_info",
 		args: {
 			customer: cur_frm.doc.name
 		},
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index d00926f..185c74b 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -9,7 +9,7 @@
 import webnotes.defaults
 
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
@@ -144,7 +144,7 @@
 			webnotes.conn.sql("update `tabLead` set status='Interested' where name=%s",self.doc.lead_name)
 			
 	def before_rename(self, olddn, newdn, merge=False):
-		from accounts.utils import rename_account_for
+		from erpnext.accounts.utils import rename_account_for
 		rename_account_for("Customer", olddn, newdn, merge)
 			
 	def after_rename(self, olddn, newdn, merge=False):
diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js
index ea777e0..d96b993 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.js
+++ b/erpnext/selling/doctype/installation_note/installation_note.js
@@ -47,7 +47,7 @@
 			cur_frm.add_custom_button(wn._('From Delivery Note'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "stock.doctype.delivery_note.delivery_note.make_installation_note",
+						method: "erpnext.stock.doctype.delivery_note.delivery_note.make_installation_note",
 						source_doctype: "Delivery Note",
 						get_query_filters: {
 							docstatus: 1,
diff --git a/erpnext/selling/doctype/installation_note/installation_note.py b/erpnext/selling/doctype/installation_note/installation_note.py
index 026d7e1..253e43e 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.py
+++ b/erpnext/selling/doctype/installation_note/installation_note.py
@@ -7,9 +7,9 @@
 from webnotes.utils import cstr, getdate
 from webnotes.model.bean import getlist
 from webnotes import msgprint
-from stock.utils import get_valid_serial_nos	
+from erpnext.stock.utils import get_valid_serial_nos	
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
@@ -36,11 +36,11 @@
 		self.validate_installation_date()
 		self.check_item_table()
 		
-		from controllers.selling_controller import check_active_sales_items
+		from erpnext.controllers.selling_controller import check_active_sales_items
 		check_active_sales_items(self)
 
 	def validate_fiscal_year(self):
-		from accounts.utils import validate_fiscal_year
+		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.inst_date, self.doc.fiscal_year, "Installation Date")
 	
 	def is_serial_no_added(self, item_code, serial_no):
diff --git a/erpnext/selling/doctype/lead/lead.js b/erpnext/selling/doctype/lead/lead.js
index 54a249f..cf972b6 100644
--- a/erpnext/selling/doctype/lead/lead.js
+++ b/erpnext/selling/doctype/lead/lead.js
@@ -77,14 +77,14 @@
 	
 	create_customer: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.lead.lead.make_customer",
+			method: "erpnext.selling.doctype.lead.lead.make_customer",
 			source_name: cur_frm.doc.name
 		})
 	}, 
 	
 	create_opportunity: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.lead.lead.make_opportunity",
+			method: "erpnext.selling.doctype.lead.lead.make_opportunity",
 			source_name: cur_frm.doc.name
 		})
 	}
diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index 26c06bb..e5f2b62 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -8,7 +8,7 @@
 from webnotes import session, msgprint
 
 	
-from controllers.selling_controller import SellingController
+from erpnext.controllers.selling_controller import SellingController
 
 class DocType(SellingController):
 	def __init__(self, doc, doclist):
diff --git a/erpnext/selling/doctype/lead/test_lead.py b/erpnext/selling/doctype/lead/test_lead.py
index ec18ff7..d3f6f03 100644
--- a/erpnext/selling/doctype/lead/test_lead.py
+++ b/erpnext/selling/doctype/lead/test_lead.py
@@ -19,7 +19,7 @@
 
 class TestLead(unittest.TestCase):
 	def test_make_customer(self):
-		from selling.doctype.lead.lead import make_customer
+		from erpnext.selling.doctype.lead.lead import make_customer
 
 		customer = make_customer("_T-Lead-00001")
 		self.assertEquals(customer[0]["doctype"], "Customer")
diff --git a/erpnext/selling/doctype/opportunity/opportunity.js b/erpnext/selling/doctype/opportunity/opportunity.js
index 05970fc..5fc84fa 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.js
+++ b/erpnext/selling/doctype/opportunity/opportunity.js
@@ -91,7 +91,7 @@
 	
 	create_quotation: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.opportunity.opportunity.make_quotation",
+			method: "erpnext.selling.doctype.opportunity.opportunity.make_quotation",
 			source_name: cur_frm.doc.name
 		})
 	}
@@ -162,7 +162,7 @@
 	cur_frm.toggle_display("contact_info", doc.customer || doc.lead);
 	
 	wn.model.map_current_doc({
-		method: "selling.doctype.lead.lead.make_opportunity",
+		method: "erpnext.selling.doctype.lead.lead.make_opportunity",
 		source_name: cur_frm.doc.lead
 	})
 	
diff --git a/erpnext/selling/doctype/opportunity/opportunity.py b/erpnext/selling/doctype/opportunity/opportunity.py
index e6c0afe..00a447f 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.py
+++ b/erpnext/selling/doctype/opportunity/opportunity.py
@@ -9,7 +9,7 @@
 from webnotes import msgprint, _
 
 	
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self,doc,doclist):
@@ -104,7 +104,7 @@
 		self.validate_uom_is_integer("uom", "qty")
 		self.validate_lead_cust()
 		
-		from accounts.utils import validate_fiscal_year
+		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.transaction_date, self.doc.fiscal_year, "Opportunity Date")
 
 	def on_submit(self):
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index c7bf447..9f145ce 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -39,7 +39,7 @@
 			cur_frm.add_custom_button(wn._('From Opportunity'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "selling.doctype.opportunity.opportunity.make_quotation",
+						method: "erpnext.selling.doctype.opportunity.opportunity.make_quotation",
 						source_doctype: "Opportunity",
 						get_query_filters: {
 							docstatus: 1,
@@ -112,7 +112,7 @@
 // =====================================================================================
 cur_frm.cscript['Make Sales Order'] = function() {
 	wn.model.open_mapped_doc({
-		method: "selling.doctype.quotation.quotation.make_sales_order",
+		method: "erpnext.selling.doctype.quotation.quotation.make_sales_order",
 		source_name: cur_frm.doc.name
 	})
 }
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index f2546b9..6a030b9 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -11,7 +11,7 @@
 
 	
 
-from controllers.selling_controller import SellingController
+from erpnext.controllers.selling_controller import SellingController
 
 class DocType(SellingController):
 	def __init__(self, doc, doclist=[]):
@@ -150,7 +150,7 @@
 		lead_name = quotation[0]
 		customer_name = webnotes.conn.get_value("Customer", {"lead_name": lead_name})
 		if not customer_name:
-			from selling.doctype.lead.lead import _make_customer
+			from erpnext.selling.doctype.lead.lead import _make_customer
 			customer_doclist = _make_customer(lead_name, ignore_permissions=ignore_permissions)
 			customer = webnotes.bean(customer_doclist)
 			customer.ignore_permissions = ignore_permissions
diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py
index 8f0e644..00cbd6c 100644
--- a/erpnext/selling/doctype/quotation/test_quotation.py
+++ b/erpnext/selling/doctype/quotation/test_quotation.py
@@ -9,7 +9,7 @@
 
 class TestQuotation(unittest.TestCase):
 	def test_make_sales_order(self):
-		from selling.doctype.quotation.quotation import make_sales_order
+		from erpnext.selling.doctype.quotation.quotation import make_sales_order
 		
 		quotation = webnotes.bean(copy=test_records[0])
 		quotation.insert()
diff --git a/erpnext/selling/doctype/sales_bom/sales_bom.py b/erpnext/selling/doctype/sales_bom/sales_bom.py
index f6cfafa..2f47be3 100644
--- a/erpnext/selling/doctype/sales_bom/sales_bom.py
+++ b/erpnext/selling/doctype/sales_bom/sales_bom.py
@@ -14,7 +14,7 @@
 	def validate(self):
 		self.validate_main_item()
 
-		from utilities.transaction_base import validate_uom_is_integer
+		from erpnext.utilities.transaction_base import validate_uom_is_integer
 		validate_uom_is_integer(self.doclist, "uom", "qty")
 
 	def validate_main_item(self):
@@ -33,7 +33,7 @@
 		}
 
 def get_new_item_code(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 	
 	return webnotes.conn.sql("""select name, item_name, description from tabItem 
 		where is_stock_item="No" and is_sales_item="Yes"
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index e4b3caf..a8ba502 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -62,7 +62,7 @@
 			cur_frm.add_custom_button(wn._('From Quotation'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "selling.doctype.quotation.quotation.make_sales_order",
+						method: "erpnext.selling.doctype.quotation.quotation.make_sales_order",
 						source_doctype: "Quotation",
 						get_query_filters: {
 							docstatus: 1,
@@ -90,7 +90,7 @@
 		var item = wn.model.get_doc(cdt, cdn);
 		if(item.item_code && item.reserved_warehouse) {
 			return this.frm.call({
-				method: "selling.utils.get_available_qty",
+				method: "erpnext.selling.utils.get_available_qty",
 				child: item,
 				args: {
 					item_code: item.item_code,
@@ -102,35 +102,35 @@
 
 	make_material_request: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.sales_order.sales_order.make_material_request",
+			method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request",
 			source_name: cur_frm.doc.name
 		})
 	},
 
 	make_delivery_note: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.sales_order.sales_order.make_delivery_note",
+			method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
 			source_name: cur_frm.doc.name
 		})
 	},
 
 	make_sales_invoice: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.sales_order.sales_order.make_sales_invoice",
+			method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
 			source_name: cur_frm.doc.name
 		})
 	},
 	
 	make_maintenance_schedule: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.sales_order.sales_order.make_maintenance_schedule",
+			method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_schedule",
 			source_name: cur_frm.doc.name
 		})
 	}, 
 	
 	make_maintenance_visit: function() {
 		wn.model.open_mapped_doc({
-			method: "selling.doctype.sales_order.sales_order.make_maintenance_visit",
+			method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit",
 			source_name: cur_frm.doc.name
 		})
 	},
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 771aafa..aa5f214 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -11,7 +11,7 @@
 from webnotes import msgprint
 from webnotes.model.mapper import get_mapped_doclist
 
-from controllers.selling_controller import SellingController
+from erpnext.controllers.selling_controller import SellingController
 
 class DocType(SellingController):
 	def __init__(self, doc, doclist=None):
@@ -111,7 +111,7 @@
 		self.validate_for_items()
 		self.validate_warehouse()
 
-		from stock.doctype.packed_item.packed_item import make_packing_list
+		from erpnext.stock.doctype.packed_item.packed_item import make_packing_list
 		self.doclist = make_packing_list(self,'sales_order_details')
 
 		self.validate_with_previous_doc()
@@ -119,8 +119,8 @@
 		if not self.doc.status:
 			self.doc.status = "Draft"
 
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", 
 			"Cancelled"])
 
 		if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
@@ -128,7 +128,7 @@
 		
 		
 	def validate_warehouse(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from erpnext.stock.utils import validate_warehouse_user, validate_warehouse_company
 		
 		warehouses = list(set([d.reserved_warehouse for d in 
 			self.doclist.get({"doctype": self.tname}) if d.reserved_warehouse]))
@@ -231,7 +231,7 @@
 
 
 	def update_stock_ledger(self, update_stock):
-		from stock.utils import update_bin
+		from erpnext.stock.utils import update_bin
 		for d in self.get_item_list():
 			if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
 				args = {
diff --git a/erpnext/selling/doctype/sales_order/templates/pages/order.py b/erpnext/selling/doctype/sales_order/templates/pages/order.py
index d53a8b0..0f996e4 100644
--- a/erpnext/selling/doctype/sales_order/templates/pages/order.py
+++ b/erpnext/selling/doctype/sales_order/templates/pages/order.py
@@ -8,7 +8,7 @@
 no_cache = True
 
 def get_context():
-	from portal.utils import get_transaction_context
+	from erpnext.portal.utils import get_transaction_context
 	context = get_transaction_context("Sales Order", webnotes.form_dict.name)
 	modify_status(context.get("doc"))
 	context.update({
diff --git a/erpnext/selling/doctype/sales_order/templates/pages/orders.py b/erpnext/selling/doctype/sales_order/templates/pages/orders.py
index d7f83dc..ad523fc 100644
--- a/erpnext/selling/doctype/sales_order/templates/pages/orders.py
+++ b/erpnext/selling/doctype/sales_order/templates/pages/orders.py
@@ -7,7 +7,7 @@
 no_cache = True
 
 def get_context():
-	from portal.utils import get_currency_context
+	from erpnext.portal.utils import get_currency_context
 	context = get_currency_context()
 	context.update({
 		"title": "My Orders",
@@ -20,8 +20,8 @@
 	
 @webnotes.whitelist()
 def get_orders(start=0):
-	from portal.utils import get_transaction_list
-	from selling.doctype.sales_order.templates.pages.order import modify_status
+	from erpnext.portal.utils import get_transaction_list
+	from erpnext.selling.doctype.sales_order.templates.pages.order import modify_status
 	orders = get_transaction_list("Sales Order", start, ["per_billed", "per_delivered"])
 	for d in orders:
 		modify_status(d)
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index 1549b24..31c7cbc 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -7,7 +7,7 @@
 
 class TestSalesOrder(unittest.TestCase):
 	def test_make_material_request(self):
-		from selling.doctype.sales_order.sales_order import make_material_request
+		from erpnext.selling.doctype.sales_order.sales_order import make_material_request
 		
 		so = webnotes.bean(copy=test_records[0]).insert()
 		
@@ -22,7 +22,7 @@
 		self.assertEquals(len(mr), len(sales_order.doclist))
 
 	def test_make_delivery_note(self):
-		from selling.doctype.sales_order.sales_order import make_delivery_note
+		from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
 
 		so = webnotes.bean(copy=test_records[0]).insert()
 
@@ -37,7 +37,7 @@
 		self.assertEquals(len(dn), len(sales_order.doclist))
 
 	def test_make_sales_invoice(self):
-		from selling.doctype.sales_order.sales_order import make_sales_invoice
+		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
 
 		so = webnotes.bean(copy=test_records[0]).insert()
 
@@ -71,8 +71,8 @@
 		return w
 		
 	def create_dn_against_so(self, so, delivered_qty=0):
-		from stock.doctype.delivery_note.test_delivery_note import test_records as dn_test_records
-		from stock.doctype.delivery_note.test_delivery_note import _insert_purchase_receipt
+		from erpnext.stock.doctype.delivery_note.test_delivery_note import test_records as dn_test_records
+		from erpnext.stock.doctype.delivery_note.test_delivery_note import _insert_purchase_receipt
 
 		_insert_purchase_receipt(so.doclist[1].item_code)
 		
@@ -164,7 +164,7 @@
 		self.check_reserved_qty(so.doclist[1].item_code, so.doclist[1].reserved_warehouse, 10.0)
 		
 	def test_reserved_qty_for_so_with_packing_list(self):
-		from selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
+		from erpnext.selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
 		
 		# change item in test so record
 		test_record = test_records[0][:]
@@ -191,7 +191,7 @@
 			so.doclist[1].reserved_warehouse, 0.0)
 			
 	def test_reserved_qty_for_partial_delivery_with_packing_list(self):
-		from selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
+		from erpnext.selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
 		
 		# change item in test so record
 		
@@ -241,7 +241,7 @@
 			so.doclist[1].reserved_warehouse, 20.0)
 			
 	def test_reserved_qty_for_over_delivery_with_packing_list(self):
-		from selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
+		from erpnext.selling.doctype.sales_bom.test_sales_bom import test_records as sbom_test_records
 		
 		# change item in test so record
 		test_record = webnotes.copy_doclist(test_records[0])
@@ -284,7 +284,7 @@
 		
 		webnotes.session.user = "test@example.com"
 
-		from stock.utils import UserNotAllowedForWarehouse
+		from erpnext.stock.utils import UserNotAllowedForWarehouse
 		so = webnotes.bean(copy = test_records[0])
 		so.doc.company = "_Test Company 1"
 		so.doc.conversion_rate = 0.02
diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py
index 0895e3f..c280619 100644
--- a/erpnext/selling/doctype/selling_settings/selling_settings.py
+++ b/erpnext/selling/doctype/selling_settings/selling_settings.py
@@ -15,6 +15,6 @@
 			"editable_price_list_rate", "selling_price_list"]:
 				webnotes.conn.set_default(key, self.doc.fields.get(key, ""))
 
-		from setup.doctype.naming_series.naming_series import set_by_naming_series
+		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Customer", "customer_name", 
 			self.doc.get("cust_master_name")=="Naming Series", hide_name_field=False)
diff --git a/erpnext/selling/doctype/shopping_cart_settings/shopping_cart_settings.py b/erpnext/selling/doctype/shopping_cart_settings/shopping_cart_settings.py
index 6912ac5..923936e 100644
--- a/erpnext/selling/doctype/shopping_cart_settings/shopping_cart_settings.py
+++ b/erpnext/selling/doctype/shopping_cart_settings/shopping_cart_settings.py
@@ -47,7 +47,7 @@
 		
 		# validate that a Shopping Cart Price List exists for the root territory
 		# as a catch all!
-		from setup.utils import get_root_of
+		from erpnext.setup.utils import get_root_of
 		root_territory = get_root_of("Territory")
 		
 		if root_territory not in territory_name_map.keys():
@@ -143,7 +143,7 @@
 		return self.get_name_from_territory(shipping_territory, "shipping_rules", "shipping_rule")
 		
 	def get_territory_ancestry(self, territory):
-		from setup.utils import get_ancestors_of
+		from erpnext.setup.utils import get_ancestors_of
 		
 		if not hasattr(self, "_territory_ancestry"):
 			self._territory_ancestry = {}
diff --git a/erpnext/selling/doctype/shopping_cart_settings/test_shopping_cart_settings.py b/erpnext/selling/doctype/shopping_cart_settings/test_shopping_cart_settings.py
index 6055c61..be67f6f 100644
--- a/erpnext/selling/doctype/shopping_cart_settings/test_shopping_cart_settings.py
+++ b/erpnext/selling/doctype/shopping_cart_settings/test_shopping_cart_settings.py
@@ -6,7 +6,7 @@
 from __future__ import unicode_literals
 import webnotes
 import unittest
-from selling.doctype.shopping_cart_settings.shopping_cart_settings import ShoppingCartSetupError
+from erpnext.selling.doctype.shopping_cart_settings.shopping_cart_settings import ShoppingCartSetupError
 
 class TestShoppingCartSettings(unittest.TestCase):
 	def setUp(self):
@@ -74,7 +74,7 @@
 		controller = cart_settings.make_controller()
 		self.assertRaises(ShoppingCartSetupError, controller.validate_exchange_rates_exist)
 		
-		from setup.doctype.currency_exchange.test_currency_exchange import test_records as \
+		from erpnext.setup.doctype.currency_exchange.test_currency_exchange import test_records as \
 			currency_exchange_records
 		webnotes.bean(currency_exchange_records[0]).insert()
 		controller.validate_exchange_rates_exist()
diff --git a/erpnext/selling/page/sales_browser/sales_browser.js b/erpnext/selling/page/sales_browser/sales_browser.js
index 58a3b1f..1b7d9aa 100644
--- a/erpnext/selling/page/sales_browser/sales_browser.js
+++ b/erpnext/selling/page/sales_browser/sales_browser.js
@@ -22,7 +22,7 @@
 	wrapper.make_tree = function() {
 		var ctype = wn.get_route()[1] || 'Territory';
 		return wn.call({
-			method: 'selling.page.sales_browser.sales_browser.get_children',
+			method: 'erpnext.selling.page.sales_browser.sales_browser.get_children',
 			args: {ctype: ctype},
 			callback: function(r) {
 				var root = r.message[0]["value"];
@@ -60,7 +60,7 @@
 			parent: $(parent), 
 			label: root,
 			args: {ctype: ctype},
-			method: 'selling.page.sales_browser.sales_browser.get_children',
+			method: 'erpnext.selling.page.sales_browser.sales_browser.get_children',
 			click: function(link) {
 				if(me.cur_toolbar) 
 					$(me.cur_toolbar).toggle(false);
@@ -144,7 +144,7 @@
 			v.ctype = me.ctype;
 			
 			return wn.call({
-				method: 'selling.page.sales_browser.sales_browser.add_node',
+				method: 'erpnext.selling.page.sales_browser.sales_browser.add_node',
 				args: v,
 				callback: function() {
 					$(btn).done_working();
diff --git a/erpnext/selling/report/quotation_trends/quotation_trends.py b/erpnext/selling/report/quotation_trends/quotation_trends.py
index f7c023f..ea0d3db 100644
--- a/erpnext/selling/report/quotation_trends/quotation_trends.py
+++ b/erpnext/selling/report/quotation_trends/quotation_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns, get_data
+from erpnext.controllers.trends	import get_columns, get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
diff --git a/erpnext/selling/report/sales_order_trends/sales_order_trends.py b/erpnext/selling/report/sales_order_trends/sales_order_trends.py
index d407be0..e9354e6 100644
--- a/erpnext/selling/report/sales_order_trends/sales_order_trends.py
+++ b/erpnext/selling/report/sales_order_trends/sales_order_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns,get_data
+from erpnext.controllers.trends	import get_columns,get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
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 ca18936..3e500dc 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
@@ -6,8 +6,8 @@
 from webnotes import _, msgprint
 from webnotes.utils import flt
 import time
-from accounts.utils import get_fiscal_year
-from controllers.trends import get_period_date_ranges, get_period_month_ranges
+from erpnext.accounts.utils import get_fiscal_year
+from erpnext.controllers.trends import get_period_date_ranges, get_period_month_ranges
 from webnotes.model.meta import get_field_precision
 
 def execute(filters=None):
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 08240a7..d55e210 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
@@ -6,8 +6,8 @@
 from webnotes import _, msgprint
 from webnotes.utils import flt
 import time
-from accounts.utils import get_fiscal_year
-from controllers.trends import get_period_date_ranges, get_period_month_ranges
+from erpnext.accounts.utils import get_fiscal_year
+from erpnext.controllers.trends import get_period_date_ranges, get_period_month_ranges
 
 def execute(filters=None):
 	if not filters: filters = {}
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index d6c8fdd..c5eb38c 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -158,7 +158,7 @@
 				cur_frm.fields_dict[me.frm.cscript.fname].grid.grid_rows[item.idx - 1].remove();
 			} else {
 				return this.frm.call({
-					method: "selling.utils.get_item_details",
+					method: "erpnext.selling.utils.get_item_details",
 					child: item,
 					args: {
 						args: {
@@ -268,7 +268,7 @@
 		var item = wn.model.get_doc(cdt, cdn);
 		if(item.item_code && item.warehouse) {
 			return this.frm.call({
-				method: "selling.utils.get_available_qty",
+				method: "erpnext.selling.utils.get_available_qty",
 				child: item,
 				args: {
 					item_code: item.item_code,
diff --git a/erpnext/selling/utils/__init__.py b/erpnext/selling/utils/__init__.py
index 5974da7..c73d76e 100644
--- a/erpnext/selling/utils/__init__.py
+++ b/erpnext/selling/utils/__init__.py
@@ -105,7 +105,7 @@
 	return item_code[0]
 	
 def _validate_item_details(args, item):
-	from utilities.transaction_base import validate_item_fetch
+	from erpnext.utilities.transaction_base import validate_item_fetch
 	validate_item_fetch(args, item)
 	
 	# validate if sales item or service item
@@ -154,7 +154,7 @@
 		return {}
 	
 	# found price list rate - now we can validate
-	from utilities.transaction_base import validate_currency
+	from erpnext.utilities.transaction_base import validate_currency
 	validate_currency(args, item_bean.doc, meta)
 	
 	return {"ref_rate": flt(ref_rate[0].ref_rate) * flt(args.plc_conversion_rate) / flt(args.conversion_rate)}
diff --git a/erpnext/selling/utils/cart.py b/erpnext/selling/utils/cart.py
index 3cd7b3c..f23a571 100644
--- a/erpnext/selling/utils/cart.py
+++ b/erpnext/selling/utils/cart.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import webnotes
+import webnotes, json
 from webnotes import msgprint, _
 import webnotes.defaults
 from webnotes.utils import flt, get_fullname, fmt_money, cstr
@@ -42,7 +42,7 @@
 	quotation.ignore_permissions = True
 	quotation.submit()
 	
-	from selling.doctype.quotation.quotation import _make_sales_order
+	from erpnext.selling.doctype.quotation.quotation import _make_sales_order
 	sales_order = webnotes.bean(_make_sales_order(quotation.doc.name, ignore_permissions=True))
 	sales_order.ignore_permissions = True
 	sales_order.insert()
@@ -92,7 +92,7 @@
 		
 @webnotes.whitelist()
 def update_cart_address(address_fieldname, address_name):
-	from utilities.transaction_base import get_address_display
+	from erpnext.utilities.transaction_base import get_address_display
 	
 	quotation = _get_cart_quotation()
 	address_display = get_address_display(webnotes.doc("Address", address_name).fields)
@@ -123,7 +123,7 @@
 @webnotes.whitelist()
 def save_address(fields, address_fieldname=None):
 	party = get_lead_or_customer()
-	fields = webnotes.load_json(fields)
+	fields = json.loads(fields)
 	
 	if fields.get("name"):
 		bean = webnotes.bean("Address", fields.get("name"))
@@ -147,7 +147,7 @@
 	
 def get_address_docs(party=None):
 	from webnotes.model.doclist import objectify
-	from utilities.transaction_base import get_address_display
+	from erpnext.utilities.transaction_base import get_address_display
 	
 	if not party:
 		party = get_lead_or_customer()
diff --git a/erpnext/selling/utils/product.py b/erpnext/selling/utils/product.py
index 32ff85a..a976e2a 100644
--- a/erpnext/selling/utils/product.py
+++ b/erpnext/selling/utils/product.py
@@ -6,7 +6,7 @@
 import webnotes
 from webnotes.utils import cstr, cint, fmt_money, get_base_path
 from webnotes.webutils import delete_page_cache
-from selling.utils.cart import _get_cart_quotation
+from erpnext.selling.utils.cart import _get_cart_quotation
 
 @webnotes.whitelist(allow_guest=True)
 def get_product_info(item_code):
diff --git a/erpnext/setup/doctype/authorization_control/authorization_control.py b/erpnext/setup/doctype/authorization_control/authorization_control.py
index 8c8900a..6df0915 100644
--- a/erpnext/setup/doctype/authorization_control/authorization_control.py
+++ b/erpnext/setup/doctype/authorization_control/authorization_control.py
@@ -7,10 +7,10 @@
 from webnotes.utils import cstr, flt, has_common, make_esc
 from webnotes.model.bean import getlist
 from webnotes import session, msgprint
-from setup.utils import get_company_currency
+from erpnext.setup.utils import get_company_currency
 
 	
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, d, dl):
diff --git a/erpnext/setup/doctype/backup_manager/backup_manager.js b/erpnext/setup/doctype/backup_manager/backup_manager.js
index c011757..e94a316 100644
--- a/erpnext/setup/doctype/backup_manager/backup_manager.js
+++ b/erpnext/setup/doctype/backup_manager/backup_manager.js
@@ -47,7 +47,7 @@
 	allow_dropbox_access: function() {
 		if(cur_frm.cscript.validate_send_notifications_to()) {
 			return wn.call({
-				method: "setup.doctype.backup_manager.backup_dropbox.get_dropbox_authorize_url",
+				method: "erpnext.setup.doctype.backup_manager.backup_dropbox.get_dropbox_authorize_url",
 				callback: function(r) {
 					if(!r.exc) {
 						cur_frm.set_value("dropbox_access_secret", r.message.secret);
@@ -64,7 +64,7 @@
 	allow_gdrive_access: function() {
 		if(cur_frm.cscript.validate_send_notifications_to()) {
 			return wn.call({
-				method: "setup.doctype.backup_manager.backup_googledrive.get_gdrive_authorize_url",
+				method: "erpnext.setup.doctype.backup_manager.backup_googledrive.get_gdrive_authorize_url",
 				callback: function(r) {
 					if(!r.exc) {
 						window.open(r.message.authorize_url);
@@ -76,7 +76,7 @@
 	
 	validate_gdrive: function() {
 		return wn.call({
-			method: "setup.doctype.backup_manager.backup_googledrive.gdrive_callback",
+			method: "erpnext.setup.doctype.backup_manager.backup_googledrive.gdrive_callback",
 			args: {
 				verification_code: cur_frm.doc.verification_code
 			},
diff --git a/erpnext/setup/doctype/backup_manager/backup_manager.py b/erpnext/setup/doctype/backup_manager/backup_manager.py
index 0a83dea..332d983 100644
--- a/erpnext/setup/doctype/backup_manager/backup_manager.py
+++ b/erpnext/setup/doctype/backup_manager/backup_manager.py
@@ -30,7 +30,7 @@
 def take_backups_dropbox():
 	did_not_upload, error_log = [], []
 	try:
-		from setup.doctype.backup_manager.backup_dropbox import backup_to_dropbox
+		from erpnext.setup.doctype.backup_manager.backup_dropbox import backup_to_dropbox
 		did_not_upload, error_log = backup_to_dropbox()
 		if did_not_upload: raise Exception
 		
@@ -50,7 +50,7 @@
 def take_backups_gdrive():
 	did_not_upload, error_log = [], []
 	try:
-		from setup.doctype.backup_manager.backup_googledrive import backup_to_gdrive
+		from erpnext.setup.doctype.backup_manager.backup_googledrive import backup_to_gdrive
 		did_not_upload, error_log = backup_to_gdrive()
 		if did_not_upload: raise Exception
 		
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index 856d5e1..e047c97 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -27,7 +27,7 @@
 		args = dialog.get_values();
 		if(!args) return;
 		return wn.call({
-			method: "setup.doctype.company.company.replace_abbr",
+			method: "erpnext.setup.doctype.company.company.replace_abbr",
 			args: {
 				"company": cur_frm.doc.name,
 				"old": cur_frm.doc.abbr,
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.js b/erpnext/setup/doctype/global_defaults/global_defaults.js
index ba31f3c..6a2f84a 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.js
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.js
@@ -7,7 +7,7 @@
 		this.timezone = doc.time_zone;
 		
 		wn.call({
-			method:"webnotes.country_info.get_country_timezone_info",
+			method: "webnotes.country_info.get_country_timezone_info",
 			callback: function(data) {
 				erpnext.country_info = data.message.country_info;
 				erpnext.all_timezones = data.message.all_timezones;
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index 5ad25af..6b989d5 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -19,7 +19,7 @@
 		
 		self.validate_name_with_item()
 		
-		from selling.utils.product import invalidate_cache_for
+		from erpnext.selling.utils.product import invalidate_cache_for
 		invalidate_cache_for(self.doc.name)
 				
 		self.validate_one_root()
@@ -30,7 +30,7 @@
 				item group name or rename the item" % self.doc.name, raise_exception=1)
 		
 	def get_context(self):
-		from selling.utils.product import get_product_list_for_group, \
+		from erpnext.selling.utils.product import get_product_list_for_group, \
 			get_parent_item_groups, get_group_item_count
 
 		self.doc.sub_groups = webnotes.conn.sql("""select name, page_name
diff --git a/erpnext/setup/page/setup/setup.js b/erpnext/setup/page/setup/setup.js
index fc6afb4..fdde693 100644
--- a/erpnext/setup/page/setup/setup.js
+++ b/erpnext/setup/page/setup/setup.js
@@ -175,7 +175,7 @@
 	}
 
 	return wn.call({
-		method: "setup.page.setup.setup.get",
+		method: "erpnext.setup.page.setup.setup.get",
 		callback: function(r) {
 			if(r.message) {
 				body.empty();
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.js b/erpnext/setup/page/setup_wizard/setup_wizard.js
index 7b4253d..89a59a3 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.js
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.js
@@ -13,7 +13,7 @@
 			var values = wiz.get_values();
 			wiz.show_working();
 			wn.call({
-				method: "setup.page.setup_wizard.setup_wizard.setup_account",
+				method: "erpnext.setup.page.setup_wizard.setup_wizard.setup_account",
 				args: values,
 				callback: function(r) {
 					if(r.exc) {
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index bf14905..adb031c 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -323,7 +323,7 @@
 			
 def create_territories():
 	"""create two default territories, one for home country and one named Rest of the World"""
-	from setup.utils import get_root_of
+	from erpnext.setup.utils import get_root_of
 	country = webnotes.conn.get_value("Control Panel", None, "country")
 	root_territory = get_root_of("Territory")
 	for name in (country, "Rest Of The World"):
diff --git a/erpnext/setup/page/setup_wizard/test_setup_wizard.py b/erpnext/setup/page/setup_wizard/test_setup_wizard.py
index fe0904d..a4e5c29 100644
--- a/erpnext/setup/page/setup_wizard/test_setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/test_setup_wizard.py
@@ -4,8 +4,8 @@
 from __future__ import unicode_literals
 import webnotes
 
-from setup.page.setup_wizard.test_setup_data import args
-from setup.page.setup_wizard.setup_wizard import setup_account
+from erpnext.setup.page.setup_wizard.test_setup_data import args
+from erpnext.setup.page.setup_wizard.setup_wizard import setup_account
 
 if __name__=="__main__":
 	webnotes.connect()
diff --git a/erpnext/startup/bean_handlers.py b/erpnext/startup/bean_handlers.py
index 679c3aa..095dc0d 100644
--- a/erpnext/startup/bean_handlers.py
+++ b/erpnext/startup/bean_handlers.py
@@ -3,7 +3,7 @@
 
 from home import update_feed
 from webnotes.core.doctype.notification_count.notification_count import clear_doctype_notifications
-from stock.doctype.material_request.material_request import update_completed_qty
+from erpnext.stock.doctype.material_request.material_request import update_completed_qty
 
 def on_method(bean, method):
 	if method in ("on_update", "on_submit"):
diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py
index a8dbf81..cd565c7 100644
--- a/erpnext/startup/boot.py
+++ b/erpnext/startup/boot.py
@@ -4,7 +4,6 @@
 
 from __future__ import unicode_literals
 import webnotes
-import home
 
 def boot_session(bootinfo):
 	"""boot session - send website info if guest"""
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index b59dee5..48c2aa0 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -31,7 +31,7 @@
 		webnotes.conn.commit()
 		
 	if webnotes.conn.get_value("Profile", webnotes.session.user, "user_type") == "Website User":
-		from selling.utils.cart import set_cart_count
+		from erpnext.selling.utils.cart import set_cart_count
 		set_cart_count()
 		
 def on_logout(login_manager):
diff --git a/erpnext/startup/schedule_handlers.py b/erpnext/startup/schedule_handlers.py
index 32987c4..e1b3bb4 100644
--- a/erpnext/startup/schedule_handlers.py
+++ b/erpnext/startup/schedule_handlers.py
@@ -13,13 +13,13 @@
 		* recurring invoice
 	"""
 	# pull emails
-	from support.doctype.support_ticket.get_support_mails import get_support_mails
+	from erpnext.support.doctype.support_ticket.get_support_mails import get_support_mails
 	run_fn(get_support_mails)
 
-	from hr.doctype.job_applicant.get_job_applications import get_job_applications
+	from erpnext.hr.doctype.job_applicant.get_job_applications import get_job_applications
 	run_fn(get_job_applications)
 
-	from selling.doctype.lead.get_leads import get_leads
+	from erpnext.selling.doctype.lead.get_leads import get_leads
 	run_fn(get_leads)
 
 	from webnotes.utils.email_lib.bulk import flush
@@ -35,11 +35,11 @@
 	delete_notification_count_for("Event")
 	
 	# email digest
-	from setup.doctype.email_digest.email_digest import send
+	from erpnext.setup.doctype.email_digest.email_digest import send
 	run_fn(send)
 
 	# run recurring invoices
-	from accounts.doctype.sales_invoice.sales_invoice import manage_recurring_invoices
+	from erpnext.accounts.doctype.sales_invoice.sales_invoice import manage_recurring_invoices
 	run_fn(manage_recurring_invoices)
 
 	# send bulk emails
@@ -47,18 +47,18 @@
 	run_fn(clear_outbox)
 
 	# daily backup
-	from setup.doctype.backup_manager.backup_manager import take_backups_daily
+	from erpnext.setup.doctype.backup_manager.backup_manager import take_backups_daily
 	run_fn(take_backups_daily)
 
 	# check reorder level
-	from stock.utils import reorder_item
+	from erpnext.stock.utils import reorder_item
 	run_fn(reorder_item)
 		
 	# scheduler error
 	scheduler.report_errors()
 
 def execute_weekly():
-	from setup.doctype.backup_manager.backup_manager import take_backups_weekly
+	from erpnext.setup.doctype.backup_manager.backup_manager import take_backups_weekly
 	run_fn(take_backups_weekly)
 
 def execute_monthly():
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 73b1cac..1acb3aa 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -33,7 +33,7 @@
 		self.update_qty(args)
 		
 		if args.get("actual_qty"):
-			from stock.stock_ledger import update_entries_after
+			from erpnext.stock.stock_ledger import update_entries_after
 			
 			if not args.get("posting_date"):
 				args["posting_date"] = nowdate()
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 7376f3c..796bf0f 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -52,7 +52,7 @@
 			cur_frm.add_custom_button(wn._('From Sales Order'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "selling.doctype.sales_order.sales_order.make_delivery_note",
+						method: "erpnext.selling.doctype.sales_order.sales_order.make_delivery_note",
 						source_doctype: "Sales Order",
 						get_query_filters: {
 							docstatus: 1,
@@ -70,14 +70,14 @@
 	
 	make_sales_invoice: function() {
 		wn.model.open_mapped_doc({
-			method: "stock.doctype.delivery_note.delivery_note.make_sales_invoice",
+			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
 			source_name: cur_frm.doc.name
 		})
 	}, 
 	
 	make_installation_note: function() {
 		wn.model.open_mapped_doc({
-			method: "stock.doctype.delivery_note.delivery_note.make_installation_note",
+			method: "erpnext.stock.doctype.delivery_note.delivery_note.make_installation_note",
 			source_name: cur_frm.doc.name
 		});
 	},
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 1089a56..de76bb9 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -10,8 +10,8 @@
 from webnotes import msgprint, _
 import webnotes.defaults
 from webnotes.model.mapper import get_mapped_doclist
-from stock.utils import update_bin
-from controllers.selling_controller import SellingController
+from erpnext.stock.utils import update_bin
+from erpnext.controllers.selling_controller import SellingController
 
 class DocType(SellingController):
 	def __init__(self, doc, doclist=[]):
@@ -61,8 +61,8 @@
 	def validate(self):
 		super(DocType, self).validate()
 		
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Cancelled"])
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Cancelled"])
 
 		self.so_required()
 		self.validate_proj_cust()
@@ -144,7 +144,7 @@
 			d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
 			
 	def on_update(self):
-		from stock.doctype.packed_item.packed_item import make_packing_list
+		from erpnext.stock.doctype.packed_item.packed_item import make_packing_list
 		self.doclist = make_packing_list(self, 'delivery_note_details')
 
 	def on_submit(self):
diff --git a/erpnext/stock/doctype/delivery_note/templates/pages/shipment.py b/erpnext/stock/doctype/delivery_note/templates/pages/shipment.py
index 760ffe0..dc8ab6a 100644
--- a/erpnext/stock/doctype/delivery_note/templates/pages/shipment.py
+++ b/erpnext/stock/doctype/delivery_note/templates/pages/shipment.py
@@ -7,7 +7,7 @@
 no_cache = True
 
 def get_context():
-	from portal.utils import get_transaction_context
+	from erpnext.portal.utils import get_transaction_context
 	context = get_transaction_context("Delivery Note", webnotes.form_dict.name)
 	context.update({
 		"parent_link": "shipments",
diff --git a/erpnext/stock/doctype/delivery_note/templates/pages/shipments.py b/erpnext/stock/doctype/delivery_note/templates/pages/shipments.py
index b8fe65a..8c20149 100644
--- a/erpnext/stock/doctype/delivery_note/templates/pages/shipments.py
+++ b/erpnext/stock/doctype/delivery_note/templates/pages/shipments.py
@@ -7,7 +7,7 @@
 no_cache = True
 
 def get_context():
-	from portal.utils import get_currency_context
+	from erpnext.portal.utils import get_currency_context
 	context = get_currency_context()
 	context.update({
 		"title": "Shipments",
@@ -20,5 +20,5 @@
 	
 @webnotes.whitelist()
 def get_shipments(start=0):
-	from portal.utils import get_transaction_list
+	from erpnext.portal.utils import get_transaction_list
 	return get_transaction_list("Delivery Note", start)
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 64ddff8..7b6b0ad 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -7,7 +7,7 @@
 import webnotes
 import webnotes.defaults
 from webnotes.utils import cint
-from stock.doctype.purchase_receipt.test_purchase_receipt import get_gl_entries, set_perpetual_inventory, test_records as pr_test_records
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import get_gl_entries, set_perpetual_inventory, test_records as pr_test_records
 
 def _insert_purchase_receipt(item_code=None):
 	if not item_code:
@@ -23,7 +23,7 @@
 		self.clear_stock_account_balance()
 		_insert_purchase_receipt()
 		
-		from stock.doctype.delivery_note.delivery_note import make_sales_invoice
+		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
 		_insert_purchase_receipt()
 		dn = webnotes.bean(copy=test_records[0]).insert()
 		
@@ -80,7 +80,7 @@
 		stock_in_hand_account = webnotes.conn.get_value("Account", 
 			{"master_name": dn.doclist[1].warehouse})
 		
-		from accounts.utils import get_balance_on
+		from erpnext.accounts.utils import get_balance_on
 		prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
 
 		dn.insert()
@@ -135,7 +135,7 @@
 		stock_in_hand_account = webnotes.conn.get_value("Account", 
 			{"master_name": dn.doclist[1].warehouse})
 		
-		from accounts.utils import get_balance_on
+		from erpnext.accounts.utils import get_balance_on
 		prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
 	
 		dn.insert()
@@ -161,8 +161,8 @@
 		set_perpetual_inventory(0)
 		
 	def test_serialized(self):
-		from stock.doctype.stock_entry.test_stock_entry import make_serialized_item
-		from stock.doctype.serial_no.serial_no import get_serial_nos
+		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
+		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		
 		se = make_serialized_item()
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
@@ -182,7 +182,7 @@
 		return dn
 			
 	def test_serialized_cancel(self):
-		from stock.doctype.serial_no.serial_no import get_serial_nos
+		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 		dn = self.test_serialized()
 		dn.cancel()
 
@@ -194,8 +194,8 @@
 			"delivery_document_no"))
 
 	def test_serialize_status(self):
-		from stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
-		from stock.doctype.stock_entry.test_stock_entry import make_serialized_item
+		from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
+		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
 		
 		se = make_serialized_item()
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 0459070..e7ce2f9 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -214,7 +214,7 @@
 				self.doc.name, raise_exception=1)
 
 	def update_website(self):
-		from selling.utils.product import invalidate_cache_for
+		from erpnext.selling.utils.product import invalidate_cache_for
 		invalidate_cache_for(self.doc.item_group)
 		[invalidate_cache_for(d.item_group) for d in \
 			self.doclist.get({"doctype":"Website Item Group"})]
@@ -233,7 +233,7 @@
 		return { "tax_rate": webnotes.conn.get_value("Account", tax_type, "tax_rate") }
 
 	def get_context(self):
-		from selling.utils.product import get_parent_item_groups
+		from erpnext.selling.utils.product import get_parent_item_groups
 		self.parent_groups = get_parent_item_groups(self.doc.item_group) + [{"name":self.doc.name}]
 		self.doc.title = self.doc.item_name
 
@@ -280,12 +280,12 @@
 			clear_cache(self.doc.page_name)
 			
 	def set_last_purchase_rate(self, newdn):
-		from buying.utils import get_last_purchase_details
+		from erpnext.buying.utils import get_last_purchase_details
 		last_purchase_rate = get_last_purchase_details(newdn).get("purchase_rate", 0)
 		webnotes.conn.set_value("Item", newdn, "last_purchase_rate", last_purchase_rate)
 			
 	def recalculate_bin_qty(self, newdn):
-		from utilities.repost_stock import repost_stock
+		from erpnext.utilities.repost_stock import repost_stock
 		webnotes.conn.auto_commit_on_many_writes = 1
 		webnotes.conn.set_default("allow_negative_stock", 1)
 		
diff --git a/erpnext/stock/doctype/item/templates/includes/product_list.js b/erpnext/stock/doctype/item/templates/includes/product_list.js
index 268760d..ac84c00 100644
--- a/erpnext/stock/doctype/item/templates/includes/product_list.js
+++ b/erpnext/stock/doctype/item/templates/includes/product_list.js
@@ -15,7 +15,7 @@
 		url: "/",
 		dataType: "json",
 		data: {
-			cmd: "selling.utils.product.get_product_list",
+			cmd: "erpnext.selling.utils.product.get_product_list",
 			start: window.start,
 			search: window.search,
 			product_group: window.product_group
diff --git a/erpnext/stock/doctype/item/templates/includes/product_page.js b/erpnext/stock/doctype/item/templates/includes/product_page.js
index df842cc..5029b90 100644
--- a/erpnext/stock/doctype/item/templates/includes/product_page.js
+++ b/erpnext/stock/doctype/item/templates/includes/product_page.js
@@ -7,7 +7,7 @@
 	
 	wn.call({
 		type: "POST",
-		method: "selling.utils.product.get_product_info",
+		method: "erpnext.selling.utils.product.get_product_info",
 		args: {
 			item_code: "{{ name }}"
 		},
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index b8f6f9e..3cf1d5e 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -10,7 +10,7 @@
 
 class TestItem(unittest.TestCase):
 	def test_default_warehouse(self):
-		from stock.doctype.item.item import WarehouseNotSet
+		from erpnext.stock.doctype.item.item import WarehouseNotSet
 		item = webnotes.bean(copy=test_records[0])
 		item.doc.is_stock_item = "Yes"
 		item.doc.default_warehouse = None
diff --git a/erpnext/stock/doctype/item_price/test_item_price.py b/erpnext/stock/doctype/item_price/test_item_price.py
index 583b3de..bc695ea 100644
--- a/erpnext/stock/doctype/item_price/test_item_price.py
+++ b/erpnext/stock/doctype/item_price/test_item_price.py
@@ -7,7 +7,7 @@
 
 class TestItem(unittest.TestCase):
 	def test_duplicate_item(self):
-		from stock.doctype.item_price.item_price import ItemPriceDuplicateItem
+		from erpnext.stock.doctype.item_price.item_price import ItemPriceDuplicateItem
 		bean = webnotes.bean(copy=test_records[0])
 		self.assertRaises(ItemPriceDuplicateItem, bean.insert)
 
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index 3ca95a4..7dca935 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -49,7 +49,7 @@
 			cur_frm.add_custom_button(wn._('From Sales Order'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "selling.doctype.sales_order.sales_order.make_material_request",
+						method: "erpnext.selling.doctype.sales_order.sales_order.make_material_request",
 						source_doctype: "Sales Order",
 						get_query_filters: {
 							docstatus: 1,
@@ -95,7 +95,7 @@
 			if(!values) return;
 			
 			wn.call({
-				method:"manufacturing.doctype.bom.bom.get_bom_items",
+				method: "erpnext.manufacturing.doctype.bom.bom.get_bom_items",
 				args: values,
 				callback: function(r) {
 					$.each(r.message, function(i, item) {
@@ -128,21 +128,21 @@
 		
 	make_purchase_order: function() {
 		wn.model.open_mapped_doc({
-			method: "stock.doctype.material_request.material_request.make_purchase_order",
+			method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order",
 			source_name: cur_frm.doc.name
 		})
 	},
 
 	make_supplier_quotation: function() {
 		wn.model.open_mapped_doc({
-			method: "stock.doctype.material_request.material_request.make_supplier_quotation",
+			method: "erpnext.stock.doctype.material_request.material_request.make_supplier_quotation",
 			source_name: cur_frm.doc.name
 		})
 	},
 
 	make_stock_entry: function() {
 		wn.model.open_mapped_doc({
-			method: "stock.doctype.material_request.material_request.make_stock_entry",
+			method: "erpnext.stock.doctype.material_request.material_request.make_stock_entry",
 			source_name: cur_frm.doc.name
 		})
 	}
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index f340cca..2f0fcb7 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -12,7 +12,7 @@
 from webnotes.model.code import get_obj
 from webnotes import msgprint, _
 
-from controllers.buying_controller import BuyingController
+from erpnext.controllers.buying_controller import BuyingController
 class DocType(BuyingController):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
@@ -63,8 +63,8 @@
 		if not self.doc.status:
 			self.doc.status = "Draft"
 
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
 		
 		self.validate_value("material_request_type", "in", ["Purchase", "Transfer"])
 
@@ -76,7 +76,7 @@
 	def update_bin(self, is_submit, is_stopped):
 		""" Update Quantity Requested for Purchase in Bin for Material Request of type 'Purchase'"""
 		
-		from stock.utils import update_bin
+		from erpnext.stock.utils import update_bin
 		for d in getlist(self.doclist, 'indent_details'):
 			if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes":
 				if not d.warehouse:
@@ -188,7 +188,7 @@
 			
 def _update_requested_qty(controller, mr_obj, mr_items):
 	"""update requested qty (before ordered_qty is updated)"""
-	from stock.utils import update_bin
+	from erpnext.stock.utils import update_bin
 	for mr_item_name in mr_items:
 		mr_item = mr_obj.doclist.getone({"parentfield": "indent_details", "name": mr_item_name})
 		se_detail = controller.doclist.getone({"parentfield": "mtn_details",
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index c19bfd3..5266f49 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -13,7 +13,7 @@
 		webnotes.defaults.set_global_default("auto_accounting_for_stock", 0)
 
 	def test_make_purchase_order(self):
-		from stock.doctype.material_request.material_request import make_purchase_order
+		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
 
 		mr = webnotes.bean(copy=test_records[0]).insert()
 
@@ -28,7 +28,7 @@
 		self.assertEquals(len(po), len(mr.doclist))
 		
 	def test_make_supplier_quotation(self):
-		from stock.doctype.material_request.material_request import make_supplier_quotation
+		from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
 
 		mr = webnotes.bean(copy=test_records[0]).insert()
 
@@ -44,7 +44,7 @@
 		
 			
 	def test_make_stock_entry(self):
-		from stock.doctype.material_request.material_request import make_stock_entry
+		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 
 		mr = webnotes.bean(copy=test_records[0]).insert()
 
@@ -122,7 +122,7 @@
 		self._test_requested_qty(54.0, 3.0)
 		
 		# map a purchase order
-		from stock.doctype.material_request.material_request import make_purchase_order
+		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
 		po_doclist = make_purchase_order(mr.doc.name)
 		po_doclist[0].supplier = "_Test Supplier"
 		po_doclist[1].qty = 27.0
@@ -169,7 +169,7 @@
 		
 		self._test_requested_qty(54.0, 3.0)
 
-		from stock.doctype.material_request.material_request import make_stock_entry
+		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 				
 		# map a stock entry
 		se_doclist = make_stock_entry(mr.doc.name)
@@ -233,7 +233,7 @@
 		self._test_requested_qty(54.0, 3.0)
 		
 		# map a stock entry
-		from stock.doctype.material_request.material_request import make_stock_entry
+		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 
 		se_doclist = make_stock_entry(mr.doc.name)
 		se_doclist[0].update({
@@ -288,7 +288,7 @@
 		mr.submit()
 
 		# map a stock entry
-		from stock.doctype.material_request.material_request import make_stock_entry
+		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 		
 		se_doclist = make_stock_entry(mr.doc.name)
 		se_doclist[0].update({
@@ -315,7 +315,7 @@
 		self.assertRaises(webnotes.MappingMismatchError, se.insert)
 		
 	def test_warehouse_company_validation(self):
-		from stock.utils import InvalidWarehouseCompany
+		from erpnext.stock.utils import InvalidWarehouseCompany
 		mr = webnotes.bean(copy=test_records[0])
 		mr.doc.company = "_Test Company 1"
 		self.assertRaises(InvalidWarehouseCompany, mr.insert)
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.py b/erpnext/stock/doctype/packing_slip/packing_slip.py
index 8501b2b..9358347 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.py
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.py
@@ -24,7 +24,7 @@
 		self.validate_case_nos()
 		self.validate_qty()
 
-		from utilities.transaction_base import validate_uom_is_integer
+		from erpnext.utilities.transaction_base import validate_uom_is_integer
 		validate_uom_is_integer(self.doclist, "stock_uom", "qty")
 		validate_uom_is_integer(self.doclist, "weight_uom", "net_weight")
 
@@ -165,7 +165,7 @@
 		self.update_item_details()
 
 def item_details(doctype, txt, searchfield, start, page_len, filters):
-	from controllers.queries import get_match_cond
+	from erpnext.controllers.queries import get_match_cond
 	return webnotes.conn.sql("""select name, item_name, description from `tabItem` 
 				where name in ( select item_code FROM `tabDelivery Note Item` 
 	 						where parent= %s 
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index c647305..59a6063 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -28,7 +28,7 @@
 			cur_frm.add_custom_button(wn._(wn._('From Purchase Order')), 
 				function() {
 					wn.model.map_current_doc({
-						method: "buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
+						method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
 						source_doctype: "Purchase Order",
 						get_query_filters: {
 							supplier: cur_frm.doc.supplier || undefined,
@@ -91,7 +91,7 @@
 	
 	make_purchase_invoice: function() {
 		wn.model.open_mapped_doc({
-			method: "stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
+			method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
 			source_name: cur_frm.doc.name
 		})
 	}, 
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index f8173bf..7a33971 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -9,9 +9,9 @@
 from webnotes.model.code import get_obj
 from webnotes import msgprint, _
 import webnotes.defaults
-from stock.utils import update_bin
+from erpnext.stock.utils import update_bin
 
-from controllers.buying_controller import BuyingController
+from erpnext.controllers.buying_controller import BuyingController
 class DocType(BuyingController):
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
@@ -46,8 +46,8 @@
 		if not self.doc.status:
 			self.doc.status = "Draft"
 
-		import utilities
-		utilities.validate_status(self.doc.status, ["Draft", "Submitted", "Cancelled"])
+		from erpnext.utilities import validate_status
+		validate_status(self.doc.status, ["Draft", "Submitted", "Cancelled"])
 
 		self.validate_with_previous_doc()
 		self.validate_rejected_warehouse()
@@ -240,7 +240,7 @@
 		
 		self.update_stock()
 
-		from stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
+		from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
 		update_serial_nos_after_submit(self, "purchase_receipt_details")
 
 		purchase_controller.update_last_purchase_rate(self, 1)
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 96d1a13..89e77ce 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -12,7 +12,7 @@
 	def test_make_purchase_invoice(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory(0)
-		from stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
+		from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
 
 		pr = webnotes.bean(copy=test_records[0]).insert()
 		
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index dc067ec..1690cad 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -8,7 +8,7 @@
 import datetime
 from webnotes import _, ValidationError
 
-from controllers.stock_controller import StockController
+from erpnext.controllers.stock_controller import StockController
 
 class SerialNoCannotCreateDirectError(ValidationError): pass
 class SerialNoCannotCannotChangeError(ValidationError): pass
diff --git a/erpnext/stock/doctype/serial_no/test_serial_no.py b/erpnext/stock/doctype/serial_no/test_serial_no.py
index 8ce36cd..fb23361 100644
--- a/erpnext/stock/doctype/serial_no/test_serial_no.py
+++ b/erpnext/stock/doctype/serial_no/test_serial_no.py
@@ -10,7 +10,7 @@
 test_dependencies = ["Item"]
 test_records = []
 
-from stock.doctype.serial_no.serial_no import *
+from erpnext.stock.doctype.serial_no.serial_no import *
 
 class TestSerialNo(unittest.TestCase):
 	def test_cannot_create_direct(self):
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 76284ea..d5c54b5 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -99,7 +99,7 @@
 				account_for = "stock_received_but_not_billed";
 			
 			return this.frm.call({
-				method: "accounts.utils.get_company_default",
+				method: "erpnext.accounts.utils.get_company_default",
 				args: {
 					"fieldname": account_for, 
 					"company": this.frm.doc.company
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index ba0e724..a4a0424 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -10,9 +10,9 @@
 from webnotes.model.bean import getlist
 from webnotes.model.code import get_obj
 from webnotes import msgprint, _
-from stock.utils import get_incoming_rate
-from stock.stock_ledger import get_previous_sle
-from controllers.queries import get_match_cond
+from erpnext.stock.utils import get_incoming_rate
+from erpnext.stock.stock_ledger import get_previous_sle
+from erpnext.controllers.queries import get_match_cond
 import json
 
 
@@ -22,7 +22,7 @@
 class DuplicateEntryForProductionOrderError(webnotes.ValidationError): pass
 class StockOverProductionError(webnotes.ValidationError): pass
 	
-from controllers.stock_controller import StockController
+from erpnext.controllers.stock_controller import StockController
 
 class DocType(StockController):
 	def __init__(self, doc, doclist=None):
@@ -53,7 +53,7 @@
 	def on_submit(self):
 		self.update_stock_ledger()
 
-		from stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
+		from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
 		update_serial_nos_after_submit(self, "mtn_details")
 		self.update_production_order()
 		self.make_gl_entries()
@@ -64,8 +64,8 @@
 		self.make_cancel_gl_entries()
 		
 	def validate_fiscal_year(self):
-		import accounts.utils
-		accounts.utils.validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year,
+		from erpnext.accounts.utils import validate_fiscal_year
+		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year,
 			self.meta.get_label("posting_date"))
 		
 	def validate_purpose(self):
@@ -356,7 +356,7 @@
 				where name=%s""", (status, produced_qty, self.doc.production_order))
 			
 	def update_planned_qty(self, pro_bean):
-		from stock.utils import update_bin
+		from erpnext.stock.utils import update_bin
 		update_bin({
 			"item_code": pro_bean.doc.production_item,
 			"warehouse": pro_bean.doc.fg_warehouse,
@@ -495,7 +495,7 @@
 		self.get_stock_and_rate()
 	
 	def get_bom_raw_materials(self, qty):
-		from manufacturing.doctype.bom.bom import get_bom_items_as_dict
+		from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict
 		
 		# item dict = { item_code: {qty, description, stock_uom} }
 		item_dict = get_bom_items_as_dict(self.doc.bom_no, qty=qty, fetch_exploded = self.doc.use_multi_level_bom)
@@ -601,7 +601,7 @@
 		return result and result[0] or {}
 		
 	def get_cust_addr(self):
-		from utilities.transaction_base import get_default_address, get_address_display
+		from erpnext.utilities.transaction_base import get_default_address, get_address_display
 		res = webnotes.conn.sql("select customer_name from `tabCustomer` where name = '%s'"%self.doc.customer)
 		address_display = None
 		customer_address = get_default_address("customer", self.doc.customer)
@@ -622,7 +622,7 @@
 		return result and result[0] or {}
 		
 	def get_supp_addr(self):
-		from utilities.transaction_base import get_default_address, get_address_display
+		from erpnext.utilities.transaction_base import get_default_address, get_address_display
 		res = webnotes.conn.sql("""select supplier_name from `tabSupplier`
 			where name=%s""", self.doc.supplier)
 		address_display = None
@@ -811,7 +811,7 @@
 		"company": se.doc.company
 	}]
 	
-	from accounts.utils import get_balance_on
+	from erpnext.accounts.utils import get_balance_on
 	for r in result:
 		jv_list.append({
 			"__islocal": 1,
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index d6f34f6..8014c99 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -4,8 +4,8 @@
 from __future__ import unicode_literals
 import webnotes, unittest
 from webnotes.utils import flt
-from stock.doctype.serial_no.serial_no import *
-from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
+from erpnext.stock.doctype.serial_no.serial_no import *
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 
 class TestStockEntry(unittest.TestCase):
@@ -29,7 +29,7 @@
 		st2.insert()
 		st2.submit()
 		
-		from stock.utils import reorder_item
+		from erpnext.stock.utils import reorder_item
 		reorder_item()
 		
 		mr_name = webnotes.conn.sql("""select parent from `tabMaterial Request Item`
@@ -46,7 +46,7 @@
 			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
 		webnotes.session.user = "test2@example.com"
 
-		from stock.utils import InvalidWarehouseCompany
+		from erpnext.stock.utils import InvalidWarehouseCompany
 		st1 = webnotes.bean(copy=test_records[0])
 		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
 		st1.insert()
@@ -56,7 +56,7 @@
 
 	def test_warehouse_user(self):
 		set_perpetual_inventory(0)
-		from stock.utils import UserNotAllowedForWarehouse
+		from erpnext.stock.utils import UserNotAllowedForWarehouse
 
 		webnotes.bean("Profile", "test@example.com").get_controller()\
 			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
@@ -272,9 +272,9 @@
 			"warehouse": "_Test Warehouse - _TC"}, "actual_qty"))
 			
 	def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
-		from stock.doctype.stock_entry.stock_entry import NotUpdateStockError
+		from erpnext.stock.doctype.stock_entry.stock_entry import NotUpdateStockError
 		
-		from accounts.doctype.sales_invoice.test_sales_invoice \
+		from erpnext.accounts.doctype.sales_invoice.test_sales_invoice \
 			import test_records as sales_invoice_test_records
 		
 		# invalid sales invoice as update stock not checked
@@ -352,10 +352,10 @@
 	def _test_delivery_note_return(self, item_code, delivered_qty, returned_qty):
 		self._insert_material_receipt()
 		
-		from stock.doctype.delivery_note.test_delivery_note \
+		from erpnext.stock.doctype.delivery_note.test_delivery_note \
 			import test_records as delivery_note_test_records
 
-		from stock.doctype.delivery_note.delivery_note import make_sales_invoice
+		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
 		
 		actual_qty_0 = self._get_actual_qty()
 		# make a delivery note based on this invoice
@@ -404,7 +404,7 @@
 		self._test_delivery_note_return("_Test Sales BOM Item", 25, 20)
 		
 	def _test_sales_return_jv(self, se):
-		from stock.doctype.stock_entry.stock_entry import make_return_jv
+		from erpnext.stock.doctype.stock_entry.stock_entry import make_return_jv
 		jv_list = make_return_jv(se.doc.name)
 		
 		self.assertEqual(len(jv_list), 3)
@@ -443,8 +443,8 @@
 	def _test_delivery_note_return_against_sales_order(self, item_code, delivered_qty, returned_qty):
 		self._insert_material_receipt()
 
-		from selling.doctype.sales_order.test_sales_order import test_records as sales_order_test_records
-		from selling.doctype.sales_order.sales_order import make_sales_invoice, make_delivery_note
+		from erpnext.selling.doctype.sales_order.test_sales_order import test_records as sales_order_test_records
+		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice, make_delivery_note
 
 		actual_qty_0 = self._get_actual_qty()
 		
@@ -498,10 +498,10 @@
 		
 		actual_qty_0 = self._get_actual_qty()
 		
-		from stock.doctype.purchase_receipt.test_purchase_receipt \
+		from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt \
 			import test_records as purchase_receipt_test_records
 
-		from stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
+		from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
 		
 		# submit purchase receipt
 		pr = webnotes.bean(copy=purchase_receipt_test_records[0])
@@ -549,7 +549,7 @@
 		return se, pr.doc.name
 		
 	def test_over_stock_return(self):
-		from stock.doctype.stock_entry.stock_entry import StockOverReturnError
+		from erpnext.stock.doctype.stock_entry.stock_entry import StockOverReturnError
 		self._clear_stock_account_balance()
 		
 		# out of 10, 5 gets returned
@@ -567,7 +567,7 @@
 		self.assertRaises(StockOverReturnError, se.insert)
 		
 	def _test_purchase_return_jv(self, se):
-		from stock.doctype.stock_entry.stock_entry import make_return_jv
+		from erpnext.stock.doctype.stock_entry.stock_entry import make_return_jv
 		jv_list = make_return_jv(se.doc.name)
 		
 		self.assertEqual(len(jv_list), 3)
@@ -590,10 +590,10 @@
 		
 		actual_qty_0 = self._get_actual_qty()
 		
-		from buying.doctype.purchase_order.test_purchase_order \
+		from erpnext.buying.doctype.purchase_order.test_purchase_order \
 			import test_records as purchase_order_test_records
 		
-		from buying.doctype.purchase_order.purchase_order import \
+		from erpnext.buying.doctype.purchase_order.purchase_order import \
 			make_purchase_receipt, make_purchase_invoice
 		
 		# submit purchase receipt
diff --git a/erpnext/stock/doctype/stock_ledger/stock_ledger.py b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
index 062d70f..f44e5e3 100644
--- a/erpnext/stock/doctype/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
@@ -9,7 +9,7 @@
 from webnotes.model.bean import getlist
 from webnotes.model.code import get_obj
 from webnotes import session, msgprint
-from stock.utils import get_valid_serial_nos
+from erpnext.stock.utils import get_valid_serial_nos
 
 
 class DocType:
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 f059451..c14918f 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -13,21 +13,21 @@
 		self.doclist = doclist
 
 	def validate(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from erpnext.stock.utils import validate_warehouse_user, validate_warehouse_company
 		self.validate_mandatory()
 		self.validate_item()
 		validate_warehouse_user(self.doc.warehouse)
 		validate_warehouse_company(self.doc.warehouse, self.doc.company)
 		self.scrub_posting_time()
 		
-		from accounts.utils import validate_fiscal_year
+		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, self.meta.get_label("posting_date"))
 		
 	def on_submit(self):
 		self.check_stock_frozen_date()
 		self.actual_amt_check()
 		
-		from stock.doctype.serial_no.serial_no import process_serial_no
+		from erpnext.stock.doctype.serial_no.serial_no import process_serial_no
 		process_serial_no(self.doc)
 		
 	#check for item quantity available in stock
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
index fc50246..bf08738 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
@@ -14,7 +14,7 @@
 		
 		if (sys_defaults.auto_accounting_for_stock && !this.frm.doc.expense_account) {
 			return this.frm.call({
-				method: "accounts.utils.get_company_default",
+				method: "erpnext.accounts.utils.get_company_default",
 				args: {
 					"fieldname": "stock_adjustment_account", 
 					"company": this.frm.doc.company
@@ -94,7 +94,7 @@
 		wn.upload.make({
 			parent: $wrapper,
 			args: {
-				method: 'stock.doctype.stock_reconciliation.stock_reconciliation.upload'
+				method: 'erpnext.stock.doctype.stock_reconciliation.stock_reconciliation.upload'
 			},
 			sample_url: "e.g. http://example.com/somefile.csv",
 			callback: function(fid, filename, r) {
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 01ded1a..f2744af 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -7,9 +7,9 @@
 import json
 from webnotes import msgprint, _
 from webnotes.utils import cstr, flt, cint
-from stock.stock_ledger import update_entries_after
-from controllers.stock_controller import StockController
-from stock.utils import update_bin
+from erpnext.stock.stock_ledger import update_entries_after
+from erpnext.controllers.stock_controller import StockController
+from erpnext.stock.utils import update_bin
 
 class DocType(StockController):
 	def setup(self):
@@ -90,7 +90,7 @@
 			raise webnotes.ValidationError
 						
 	def validate_item(self, item_code, row_num):
-		from stock.utils import validate_end_of_life, validate_is_stock_item, \
+		from erpnext.stock.utils import validate_end_of_life, validate_is_stock_item, \
 			validate_cancelled_item
 		
 		# using try except to catch all validation msgs and display together
@@ -118,8 +118,8 @@
 	def insert_stock_ledger_entries(self):
 		"""	find difference between current and expected entries
 			and create stock ledger entries based on the difference"""
-		from stock.utils import get_valuation_method
-		from stock.stock_ledger import get_previous_sle
+		from erpnext.stock.utils import get_valuation_method
+		from erpnext.stock.stock_ledger import get_previous_sle
 			
 		row_template = ["item_code", "warehouse", "qty", "valuation_rate"]
 		
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index 984e508..287395f 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -8,7 +8,7 @@
 import webnotes, unittest
 from webnotes.utils import flt
 import json
-from accounts.utils import get_fiscal_year, get_stock_and_account_difference, get_balance_on
+from erpnext.accounts.utils import get_fiscal_year, get_stock_and_account_difference, get_balance_on
 
 
 class TestStockReconciliation(unittest.TestCase):
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py
index 48e1ee1..e3e29b9 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.py
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.py
@@ -16,7 +16,7 @@
 			"allow_negative_stock"]:
 			webnotes.conn.set_default(key, self.doc.fields.get(key, ""))
 			
-		from setup.doctype.naming_series.naming_series import set_by_naming_series
+		from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
 		set_by_naming_series("Item", "item_code", 
 			self.doc.get("item_naming_by")=="Naming Series", hide_name_field=True)
 			
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 5441c24..2644995 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
@@ -58,7 +58,7 @@
 			
 	def update_stock_ledger_entry(self):
 		# update stock ledger entry
-		from stock.stock_ledger import update_entries_after
+		from erpnext.stock.stock_ledger import update_entries_after
 		
 		if flt(self.doc.conversion_factor) != flt(1):
 			webnotes.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))
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 3559960..2b7473c 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -80,7 +80,7 @@
 			
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
-		from setup.doctype.company.company import get_name_with_abbr
+		from erpnext.setup.doctype.company.company import get_name_with_abbr
 		new_warehouse = get_name_with_abbr(newdn, self.doc.company)
 
 		if merge:
@@ -89,7 +89,7 @@
 				
 			webnotes.conn.sql("delete from `tabBin` where warehouse=%s", olddn)
 			
-		from accounts.utils import rename_account_for
+		from erpnext.accounts.utils import rename_account_for
 		rename_account_for("Warehouse", olddn, new_warehouse, merge)
 
 		return new_warehouse
@@ -99,7 +99,7 @@
 			self.recalculate_bin_qty(newdn)
 			
 	def recalculate_bin_qty(self, newdn):
-		from utilities.repost_stock import repost_stock
+		from erpnext.utilities.repost_stock import repost_stock
 		webnotes.conn.auto_commit_on_many_writes = 1
 		webnotes.conn.set_default("allow_negative_stock", 1)
 		
diff --git a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.py b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.py
index 6cd6f8e..a3f4218 100644
--- a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.py
+++ b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns,get_data
+from erpnext.controllers.trends	import get_columns,get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
diff --git a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.py b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.py
index 5fd003b..6be1179 100644
--- a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.py
+++ b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from controllers.trends	import get_columns,get_data
+from erpnext.controllers.trends	import get_columns,get_data
 
 def execute(filters=None):
 	if not filters: filters ={}
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 8702744..e6a402c 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes import msgprint
 from webnotes.utils import cint, flt, cstr, now
-from stock.utils import get_valuation_method
+from erpnext.stock.utils import get_valuation_method
 import json
 
 # future reposting
@@ -16,7 +16,7 @@
 
 def make_sl_entries(sl_entries, is_amended=None):
 	if sl_entries:
-		from stock.utils import update_bin
+		from erpnext.stock.utils import update_bin
 	
 		cancel = True if sl_entries[0].get("is_cancelled") == "Yes" else False
 		if cancel:
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 4f5e11a..1d838c9 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -110,7 +110,7 @@
 
 def get_incoming_rate(args):
 	"""Get Incoming Rate based on valuation method"""
-	from stock.stock_ledger import get_previous_sle
+	from erpnext.stock.stock_ledger import get_previous_sle
 		
 	in_rate = 0
 	if args.get("serial_no"):
@@ -299,7 +299,7 @@
 	mr_list = []
 	defaults = webnotes.defaults.get_defaults()
 	exceptions_list = []
-	from accounts.utils import get_fiscal_year
+	from erpnext.accounts.utils import get_fiscal_year
 	current_fiscal_year = get_fiscal_year(nowdate())[0] or defaults.fiscal_year
 	for request_type in material_requests:
 		for company in material_requests[request_type]:
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.js b/erpnext/support/doctype/customer_issue/customer_issue.js
index 066a11a..5d0ffb5 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.js
+++ b/erpnext/support/doctype/customer_issue/customer_issue.js
@@ -25,7 +25,7 @@
 	
 	make_maintenance_visit: function() {
 		wn.model.open_mapped_doc({
-			method: "support.doctype.customer_issue.customer_issue.make_maintenance_visit",
+			method: "erpnext.support.doctype.customer_issue.customer_issue.make_maintenance_visit",
 			source_name: cur_frm.doc.name
 		})
 	}
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.py b/erpnext/support/doctype/customer_issue/customer_issue.py
index 0739a2d..f6e6b6d 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.py
+++ b/erpnext/support/doctype/customer_issue/customer_issue.py
@@ -9,7 +9,7 @@
 
 	
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js
index 25fe69a..f1b2ac8 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.js
@@ -9,7 +9,7 @@
 			cur_frm.add_custom_button(wn._('From Sales Order'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "selling.doctype.sales_order.sales_order.make_maintenance_schedule",
+						method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_schedule",
 						source_doctype: "Sales Order",
 						get_query_filters: {
 							docstatus: 1,
@@ -22,7 +22,7 @@
 		} else if (this.frm.doc.docstatus===1) {
 			cur_frm.add_custom_button(wn._("Make Maintenance Visit"), function() {
 				wn.model.open_mapped_doc({
-					method: "support.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
+					method: "erpnext.support.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
 					source_name: cur_frm.doc.name
 				})
 			})
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
index f18408f..8263b19 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -11,7 +11,7 @@
 
 	
 
-from utilities.transaction_base import TransactionBase, delete_events
+from erpnext.utilities.transaction_base import TransactionBase, delete_events
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.js b/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
index 1a618cd..9b604b9 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
@@ -9,7 +9,7 @@
 			cur_frm.add_custom_button(wn._('From Maintenance Schedule'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "support.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
+						method: "erpnext.support.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
 						source_doctype: "Maintenance Schedule",
 						get_query_filters: {
 							docstatus: 1,
@@ -21,7 +21,7 @@
 			cur_frm.add_custom_button(wn._('From Customer Issue'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "support.doctype.customer_issue.customer_issue.make_maintenance_visit",
+						method: "erpnext.support.doctype.customer_issue.customer_issue.make_maintenance_visit",
 						source_doctype: "Customer Issue",
 						get_query_filters: {
 							status: ["in", "Open, Work in Progress"],
@@ -33,7 +33,7 @@
 			cur_frm.add_custom_button(wn._('From Sales Order'), 
 				function() {
 					wn.model.map_current_doc({
-						method: "selling.doctype.sales_order.sales_order.make_maintenance_visit",
+						method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit",
 						source_doctype: "Sales Order",
 						get_query_filters: {
 							docstatus: 1,
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
index f469657..e56389e 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
@@ -10,7 +10,7 @@
 
 	
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
diff --git a/erpnext/support/doctype/newsletter/newsletter.js b/erpnext/support/doctype/newsletter/newsletter.js
index f7a7ad1..41967e3 100644
--- a/erpnext/support/doctype/newsletter/newsletter.js
+++ b/erpnext/support/doctype/newsletter/newsletter.js
@@ -3,7 +3,7 @@
 
 cur_frm.cscript.onload = function(doc) {
 	return wn.call({
-		method: "support.doctype.newsletter.newsletter.get_lead_options",
+		method: "erpnext.support.doctype.newsletter.newsletter.get_lead_options",
 		type: "GET",
 		callback: function(r) {
 			set_field_options("lead_source", r.message.sources.join("\n"))
diff --git a/erpnext/support/doctype/support_ticket/support_ticket.js b/erpnext/support/doctype/support_ticket/support_ticket.js
index 4f8f756..b372825 100644
--- a/erpnext/support/doctype/support_ticket/support_ticket.js
+++ b/erpnext/support/doctype/support_ticket/support_ticket.js
@@ -75,7 +75,7 @@
 
 	set_status: function(status) {
 		return wn.call({
-			method:"support.doctype.support_ticket.support_ticket.set_status",
+			method: "erpnext.support.doctype.support_ticket.support_ticket.set_status",
 			args: {
 				name: cur_frm.doc.name,
 				status: status
diff --git a/erpnext/support/doctype/support_ticket/support_ticket.py b/erpnext/support/doctype/support_ticket/support_ticket.py
index fd79583..0b95292 100644
--- a/erpnext/support/doctype/support_ticket/support_ticket.py
+++ b/erpnext/support/doctype/support_ticket/support_ticket.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import webnotes
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 from webnotes.utils import now, extract_email_id
 
 class DocType(TransactionBase):
diff --git a/erpnext/support/doctype/support_ticket/templates/pages/tickets.py b/erpnext/support/doctype/support_ticket/templates/pages/tickets.py
index 1816ccc..7434af2 100644
--- a/erpnext/support/doctype/support_ticket/templates/pages/tickets.py
+++ b/erpnext/support/doctype/support_ticket/templates/pages/tickets.py
@@ -32,7 +32,7 @@
 	if not (subject and message):
 		raise webnotes.throw(_("Please write something in subject and message!"))
 		
-	from support.doctype.support_ticket.get_support_mails import add_support_communication
+	from erpnext.support.doctype.support_ticket.get_support_mails import add_support_communication
 	ticket = add_support_communication(subject, message, webnotes.session.user)
 	
 	return ticket.doc.name
\ No newline at end of file
diff --git a/erpnext/utilities/demo/make_demo.py b/erpnext/utilities/demo/make_demo.py
index 18211a1..f469139 100644
--- a/erpnext/utilities/demo/make_demo.py
+++ b/erpnext/utilities/demo/make_demo.py
@@ -100,7 +100,7 @@
 
 def run_accounts(current_date):
 	if can_make("Sales Invoice"):
-		from selling.doctype.sales_order.sales_order import make_sales_invoice
+		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
 		report = "Ordered Items to be Billed"
 		for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Sales Invoice")]:
 			si = webnotes.bean(make_sales_invoice(so))
@@ -110,7 +110,7 @@
 			webnotes.conn.commit()
 
 	if can_make("Purchase Invoice"):
-		from stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
+		from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
 		report = "Received Items to be Billed"
 		for pr in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Invoice")]:
 			pi = webnotes.bean(make_purchase_invoice(pr))
@@ -121,7 +121,7 @@
 			webnotes.conn.commit()
 			
 	if can_make("Payment Received"):
-		from accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_sales_invoice
+		from erpnext.accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_sales_invoice
 		report = "Accounts Receivable"
 		for si in list(set([r[4] for r in query_report.run(report, {"report_date": current_date })["result"] if r[3]=="Sales Invoice"]))[:how_many("Payment Received")]:
 			jv = webnotes.bean(get_payment_entry_from_sales_invoice(si))
@@ -133,7 +133,7 @@
 			webnotes.conn.commit()
 			
 	if can_make("Payment Made"):
-		from accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_purchase_invoice
+		from erpnext.accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_purchase_invoice
 		report = "Accounts Payable"
 		for pi in list(set([r[4] for r in query_report.run(report, {"report_date": current_date })["result"] if r[3]=="Purchase Invoice"]))[:how_many("Payment Made")]:
 			jv = webnotes.bean(get_payment_entry_from_purchase_invoice(pi))
@@ -147,8 +147,8 @@
 def run_stock(current_date):
 	# make purchase requests
 	if can_make("Purchase Receipt"):
-		from buying.doctype.purchase_order.purchase_order import make_purchase_receipt
-		from stock.stock_ledger import NegativeStockError
+		from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
+		from erpnext.stock.stock_ledger import NegativeStockError
 		report = "Purchase Order Items To Be Received"
 		for po in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Receipt")]:
 			pr = webnotes.bean(make_purchase_receipt(po))
@@ -162,9 +162,9 @@
 	
 	# make delivery notes (if possible)
 	if can_make("Delivery Note"):
-		from selling.doctype.sales_order.sales_order import make_delivery_note
-		from stock.stock_ledger import NegativeStockError
-		from stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError
+		from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
+		from erpnext.stock.stock_ledger import NegativeStockError
+		from erpnext.stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError
 		report = "Ordered Items To Be Delivered"
 		for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Delivery Note")]:
 			dn = webnotes.bean(make_delivery_note(so))
@@ -205,7 +205,7 @@
 	
 	# make supplier quotations
 	if can_make("Supplier Quotation"):
-		from stock.doctype.material_request.material_request import make_supplier_quotation
+		from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
 		report = "Material Requests for which Supplier Quotations are not created"
 		for row in query_report.run(report)["result"][:how_many("Supplier Quotation")]:
 			if row[0] != "Total":
@@ -218,7 +218,7 @@
 		
 	# make purchase orders
 	if can_make("Purchase Order"):
-		from stock.doctype.material_request.material_request import make_purchase_order
+		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
 		report = "Requested Items To Be Ordered"
 		for row in query_report.run(report)["result"][:how_many("Purchase Order")]:
 			if row[0] != "Total":
@@ -230,8 +230,8 @@
 				webnotes.conn.commit()
 			
 def run_manufacturing(current_date):
-	from stock.stock_ledger import NegativeStockError
-	from stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, DuplicateEntryForProductionOrderError
+	from erpnext.stock.stock_ledger import NegativeStockError
+	from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, DuplicateEntryForProductionOrderError
 
 	ppt = webnotes.bean("Production Planning Tool", "Production Planning Tool")
 	ppt.doc.company = company
@@ -276,9 +276,9 @@
 		except DuplicateEntryForProductionOrderError: pass
 
 def make_stock_entry_from_pro(pro_id, purpose, current_date):
-	from manufacturing.doctype.production_order.production_order import make_stock_entry
-	from stock.stock_ledger import NegativeStockError
-	from stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, DuplicateEntryForProductionOrderError
+	from erpnext.manufacturing.doctype.production_order.production_order import make_stock_entry
+	from erpnext.stock.stock_ledger import NegativeStockError
+	from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, DuplicateEntryForProductionOrderError
 
 	try:
 		st = webnotes.bean(make_stock_entry(pro_id, purpose))
@@ -322,7 +322,7 @@
 def make_sales_order(current_date):
 	q = get_random("Quotation", {"status": "Submitted"})
 	if q:
-		from selling.doctype.quotation.quotation import make_sales_order
+		from erpnext.selling.doctype.quotation.quotation import make_sales_order
 		so = webnotes.bean(make_sales_order(q))
 		so.doc.transaction_date = current_date
 		so.doc.delivery_date = webnotes.utils.add_days(current_date, 10)
@@ -376,7 +376,7 @@
 
 def complete_setup():
 	print "Complete Setup..."
-	from setup.page.setup_wizard.setup_wizard import setup_account
+	from erpnext.setup.page.setup_wizard.setup_wizard import setup_account
 	setup_account({
 		"first_name": "Test",
 		"last_name": "User",
diff --git a/erpnext/utilities/doctype/contact/contact.py b/erpnext/utilities/doctype/contact/contact.py
index 16f9d32..301d7fd 100644
--- a/erpnext/utilities/doctype/contact/contact.py
+++ b/erpnext/utilities/doctype/contact/contact.py
@@ -5,7 +5,7 @@
 import webnotes
 from webnotes.utils import cstr, extract_email_id
 
-from utilities.transaction_base import TransactionBase
+from erpnext.utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=[]):
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.js b/erpnext/utilities/doctype/rename_tool/rename_tool.js
index c075656..90cd1e1 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.js
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.js
@@ -3,7 +3,7 @@
 
 cur_frm.cscript.refresh = function(doc) {
 	return wn.call({
-		method:"utilities.doctype.rename_tool.rename_tool.get_doctypes",
+		method: "erpnext.utilities.doctype.rename_tool.rename_tool.get_doctypes",
 		callback: function(r) {
 			cur_frm.set_df_property("select_doctype", "options", r.message);
 			cur_frm.cscript.setup_upload();
diff --git a/erpnext/utilities/doctype/sms_control/sms_control.py b/erpnext/utilities/doctype/sms_control/sms_control.py
index 5a9777a..8fbb8fe 100644
--- a/erpnext/utilities/doctype/sms_control/sms_control.py
+++ b/erpnext/utilities/doctype/sms_control/sms_control.py
@@ -2,9 +2,9 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import webnotes
+import webnotes, json
 
-from webnotes.utils import load_json, nowdate, cstr
+from webnotes.utils import nowdate, cstr
 from webnotes.model.code import get_obj
 from webnotes.model.doc import Document
 from webnotes import msgprint
@@ -47,14 +47,14 @@
 	
 	def get_contact_number(self, arg):
 		"returns mobile number of the contact"
-		args = load_json(arg)
+		args = json.loads(arg)
 		number = webnotes.conn.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 ''
 	
 	def send_form_sms(self, arg):
 		"called from client side"
-		args = load_json(arg)
+		args = json.loads(arg)
 		self.send_sms([str(args['number'])], str(args['message']))
 
 	def send_sms(self, receiver_list, msg, sender_name = ''):
diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py
index 48ff25f..cb0ce10 100644
--- a/erpnext/utilities/repost_stock.py
+++ b/erpnext/utilities/repost_stock.py
@@ -39,7 +39,7 @@
 		})
 
 def repost_actual_qty(item_code, warehouse):
-	from stock.stock_ledger import update_entries_after
+	from erpnext.stock.stock_ledger import update_entries_after
 	try:
 		update_entries_after({ "item_code": item_code, "warehouse": warehouse })
 	except:
@@ -116,7 +116,7 @@
 	
 	
 def update_bin(item_code, warehouse, qty_dict=None):
-	from stock.utils import get_bin
+	from erpnext.stock.utils import get_bin
 	bin = get_bin(item_code, warehouse)
 	mismatch = False
 	for fld, val in qty_dict.items():
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 5c28d8d..cb183b0 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -2,12 +2,12 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import webnotes
+import webnotes, json
 from webnotes import msgprint, _
-from webnotes.utils import load_json, cstr, flt, now_datetime, cint
+from webnotes.utils import cstr, flt, now_datetime, cint
 from webnotes.model.doc import addchild
 
-from controllers.status_updater import StatusUpdater
+from erpnext.controllers.status_updater import StatusUpdater
 
 class TransactionBase(StatusUpdater):
 	def get_default_address_and_contact(self, party_field, party_name=None):
@@ -145,7 +145,7 @@
 		self.doc.fields.update(self.get_lead_defaults())
 	
 	def get_customer_address(self, args):
-		args = load_json(args)
+		args = json.loads(args)
 		ret = {
 			'customer_address' : args["address"],
 			'address_display' : get_address_display(args["address"]),
@@ -170,7 +170,7 @@
 	# -----------------------
 	def get_default_supplier_address(self, args):
 		if isinstance(args, basestring):
-			args = load_json(args)
+			args = json.loads(args)
 			
 		address_name = get_default_address("supplier", args["supplier"])
 		ret = {
@@ -184,7 +184,7 @@
 	# Get Supplier Address
 	# -----------------------
 	def get_supplier_address(self, args):
-		args = load_json(args)
+		args = json.loads(args)
 		ret = {
 			'supplier_address' : args['address'],
 			'address_display' : get_address_display(args["address"]),
@@ -439,7 +439,7 @@
 		}, raise_exception=True)
 			
 def validate_item_fetch(args, item):
-	from stock.utils import validate_end_of_life
+	from erpnext.stock.utils import validate_end_of_life
 	validate_end_of_life(item.name, item.end_of_life)
 	
 	# validate company
