Multi currency: test case and fixes
diff --git a/erpnext/accounts/doctype/account/account.json b/erpnext/accounts/doctype/account/account.json
index 82c9c66..737b07e 100644
--- a/erpnext/accounts/doctype/account/account.json
+++ b/erpnext/accounts/doctype/account/account.json
@@ -11,6 +11,8 @@
  "fields": [
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "properties", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -31,6 +33,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "column_break0", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -50,6 +54,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "account_name", 
    "fieldtype": "Data", 
    "hidden": 0, 
@@ -71,6 +77,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "default": "0", 
    "fieldname": "is_group", 
    "fieldtype": "Check", 
@@ -92,6 +100,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "company", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -114,6 +124,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "root_type", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -134,6 +146,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "report_type", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -154,7 +168,10 @@
   }, 
   {
    "allow_on_submit": 0, 
-   "fieldname": "currency", 
+   "bold": 0, 
+   "collapsible": 0, 
+   "depends_on": "eval:doc.is_group==0", 
+   "fieldname": "account_currency", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -175,6 +192,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "column_break1", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -194,6 +213,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "parent_account", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -216,6 +237,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "description": "", 
    "fieldname": "account_type", 
    "fieldtype": "Select", 
@@ -239,6 +262,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "description": "Rate at which this tax is applied", 
    "fieldname": "tax_rate", 
    "fieldtype": "Float", 
@@ -261,6 +286,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "description": "If the account is frozen, entries are allowed to restricted users.", 
    "fieldname": "freeze_account", 
    "fieldtype": "Select", 
@@ -284,6 +311,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "warehouse", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -304,6 +333,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "balance_must_be", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -324,6 +355,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "lft", 
    "fieldtype": "Int", 
    "hidden": 1, 
@@ -343,6 +376,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "rgt", 
    "fieldtype": "Int", 
    "hidden": 1, 
@@ -362,6 +397,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "old_parent", 
    "fieldtype": "Data", 
    "hidden": 1, 
@@ -389,7 +426,7 @@
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-08-13 16:43:10.645538", 
+ "modified": "2015-08-28 17:17:20.899845", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Account", 
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index a57cc25..7f632b1 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -89,10 +89,10 @@
 				frappe.throw(_("Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'"))
 				
 	def validate_account_currency(self):
-		if not self.currency:
-			self.currency = frappe.db.get_value("Company", self.company, "default_currency")
+		if not self.account_currency:
+			self.account_currency = frappe.db.get_value("Company", self.company, "default_currency")
 			
-		elif self.currency != frappe.db.get_value("Account", self.name, "currency"):
+		elif self.account_currency != frappe.db.get_value("Account", self.name, "account_currency"):
 			if frappe.db.get_value("GL Entry", {"account": self.name}):
 				frappe.throw(_("Currency can not be changed after making entries using some other currency"))
 
diff --git a/erpnext/accounts/doctype/account/test_account.py b/erpnext/accounts/doctype/account/test_account.py
index 2a3feda..83516da 100644
--- a/erpnext/accounts/doctype/account/test_account.py
+++ b/erpnext/accounts/doctype/account/test_account.py
@@ -9,36 +9,39 @@
 
 	accounts = [
 		# [account_name, parent_account, is_group]
-		["_Test Account Bank Account", "Bank Accounts", 0, "Bank"],
+		["_Test Bank", "Bank Accounts", 0, "Bank", None],
+		["_Test Bank USD", "Bank Accounts", 0, "Bank", "USD"],
+		["_Test Bank EUR", "Bank Accounts", 0, "Bank", "EUR"],
 
-		["_Test Account Stock Expenses", "Direct Expenses", 1, None],
-		["_Test Account Shipping Charges", "_Test Account Stock Expenses", 0, "Chargeable"],
-		["_Test Account Customs Duty", "_Test Account Stock Expenses", 0, "Tax"],
-		["_Test Account Insurance Charges", "_Test Account Stock Expenses", 0, "Chargeable"],
-		["_Test Account Stock Adjustment", "_Test Account Stock Expenses", 0, "Stock Adjustment"],
+		["_Test Account Stock Expenses", "Direct Expenses", 1, None, None],
+		["_Test Account Shipping Charges", "_Test Account Stock Expenses", 0, "Chargeable", None],
+		["_Test Account Customs Duty", "_Test Account Stock Expenses", 0, "Tax", None],
+		["_Test Account Insurance Charges", "_Test Account Stock Expenses", 0, "Chargeable", None],
+		["_Test Account Stock Adjustment", "_Test Account Stock Expenses", 0, "Stock Adjustment", None],
 
+		["_Test Account Tax Assets", "Current Assets", 1, None, None],
+		["_Test Account VAT", "_Test Account Tax Assets", 0, "Tax", None],
+		["_Test Account Service Tax", "_Test Account Tax Assets", 0, "Tax", None],
 
-		["_Test Account Tax Assets", "Current Assets", 1, None],
-		["_Test Account VAT", "_Test Account Tax Assets", 0, "Tax"],
-		["_Test Account Service Tax", "_Test Account Tax Assets", 0, "Tax"],
+		["_Test Account Reserves and Surplus", "Current Liabilities", 0, None, None],
 
-		["_Test Account Reserves and Surplus", "Current Liabilities", 0, None],
-
-		["_Test Account Cost for Goods Sold", "Expenses", 0, None],
-		["_Test Account Excise Duty", "_Test Account Tax Assets", 0, "Tax"],
-		["_Test Account Education Cess", "_Test Account Tax Assets", 0, "Tax"],
-		["_Test Account S&H Education Cess", "_Test Account Tax Assets", 0, "Tax"],
-		["_Test Account CST", "Direct Expenses", 0, "Tax"],
-		["_Test Account Discount", "Direct Expenses", 0, None],
-		["_Test Write Off", "Indirect Expenses", 0, None],
+		["_Test Account Cost for Goods Sold", "Expenses", 0, None, None],
+		["_Test Account Excise Duty", "_Test Account Tax Assets", 0, "Tax", None],
+		["_Test Account Education Cess", "_Test Account Tax Assets", 0, "Tax", None],
+		["_Test Account S&H Education Cess", "_Test Account Tax Assets", 0, "Tax", None],
+		["_Test Account CST", "Direct Expenses", 0, "Tax", None],
+		["_Test Account Discount", "Direct Expenses", 0, None, None],
+		["_Test Write Off", "Indirect Expenses", 0, None, None],
 
 		# related to Account Inventory Integration
-		["_Test Account Stock In Hand", "Current Assets", 0, None],
-		["_Test Account Fixed Assets", "Current Assets", 0, None],
+		["_Test Account Stock In Hand", "Current Assets", 0, None, None],
+		["_Test Account Fixed Assets", "Current Assets", 0, None, None],
 
 		# Receivable / Payable Account
-		["_Test Receivable", "Current Assets", 0, "Receivable"],
-		["_Test Payable", "Current Liabilities", 0, "Payable"],
+		["_Test Receivable", "Current Assets", 0, "Receivable", None],
+		["_Test Payable", "Current Liabilities", 0, "Payable", None],
+		["_Test Receivable USD", "Current Assets", 0, "Receivable", "USD"],
+		["_Test Payable USD", "Current Liabilities", 0, "Payable", "USD"]
 	]
 
 	for company, abbr in [["_Test Company", "_TC"], ["_Test Company 1", "_TC1"]]:
@@ -48,7 +51,8 @@
 				"parent_account": parent_account + " - " + abbr,
 				"company": company,
 				"is_group": is_group,
-				"account_type": account_type
-			} for account_name, parent_account, is_group, account_type in accounts])
+				"account_type": account_type,
+				"account_currency": currency
+			} for account_name, parent_account, is_group, account_type, currency in accounts])
 
 	return test_objects
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.json b/erpnext/accounts/doctype/gl_entry/gl_entry.json
index dfe9fc3..23a44aa 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.json
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.json
@@ -10,6 +10,8 @@
  "fields": [
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "posting_date", 
    "fieldtype": "Date", 
    "hidden": 0, 
@@ -31,6 +33,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "transaction_date", 
    "fieldtype": "Date", 
    "hidden": 0, 
@@ -52,6 +56,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "account", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -74,6 +80,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "party_type", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -94,6 +102,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "party", 
    "fieldtype": "Dynamic Link", 
    "hidden": 0, 
@@ -114,6 +124,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "cost_center", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -136,6 +148,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "debit", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -158,6 +172,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "credit", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -180,7 +196,9 @@
   }, 
   {
    "allow_on_submit": 0, 
-   "fieldname": "currency", 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "account_currency", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -201,6 +219,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "debit_in_account_currency", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -222,6 +242,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "credit_in_account_currency", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -243,6 +265,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "against", 
    "fieldtype": "Text", 
    "hidden": 0, 
@@ -264,6 +288,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "against_voucher_type", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -286,6 +312,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "against_voucher", 
    "fieldtype": "Dynamic Link", 
    "hidden": 0, 
@@ -308,6 +336,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "voucher_type", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -330,6 +360,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "voucher_no", 
    "fieldtype": "Dynamic Link", 
    "hidden": 0, 
@@ -352,6 +384,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "remarks", 
    "fieldtype": "Text", 
    "hidden": 0, 
@@ -373,6 +407,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "is_opening", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -395,6 +431,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "is_advance", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -417,6 +455,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "fiscal_year", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -439,6 +479,8 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "company", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -469,7 +511,7 @@
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-08-18 14:25:44.430671", 
+ "modified": "2015-08-28 17:14:52.661217", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "GL Entry", 
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index b37b404..83edf1d 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -10,6 +10,8 @@
 from frappe.model.document import Document
 
 class CustomerFrozen(frappe.ValidationError): pass
+class InvalidCurrency(frappe.ValidationError): pass
+class InvalidAccountCurrency(frappe.ValidationError): pass
 
 class GLEntry(Document):
 	def validate(self):
@@ -102,27 +104,31 @@
 					
 	def validate_currency(self):
 		company_currency = frappe.db.get_value("Company", self.company, "default_currency")
-		account_currency = frappe.db.get_value("Account", self.account, "currency") or company_currency
+		account_currency = frappe.db.get_value("Account", self.account, "account_currency") or company_currency
 
-		if not self.currency:
-			self.currency = company_currency
-		if account_currency != self.currency:
+		if not self.account_currency:
+			self.account_currency = company_currency
+		if account_currency != self.account_currency:
 			frappe.throw(_("Accounting Entry for {0} can only be made in currency: {1}")
-				.format(self.account, (account_currency or company_currency)))
+				.format(self.account, (account_currency or company_currency)), InvalidAccountCurrency)
 				
+		
 		if self.party_type and self.party:
 			existing_gle = frappe.db.get_value("GL Entry", {"party_type": self.party_type, 
-				"party": self.party, "company": self.company}, ["name", "currency"], as_dict=1)
+				"party": self.party, "company": self.company}, ["name", "account_currency"], as_dict=1)
 			if not existing_gle:
-				party_currency = frappe.db.get_value(self.party_type, self.party, "default_currency") or company_currency
+				party_currency = frappe.db.get_value(self.party_type, self.party, "default_currency")\
+					 or company_currency
 				if party_currency != account_currency:
 					frappe.throw(_("Invalid Account {0}. Account Currency must be {1}, same as {2}: {3}")
-						.format(self.account, party_currency, self.party_type, self.party))
+						.format(self.account, party_currency, self.party_type, self.party), 
+							InvalidAccountCurrency)
 			else:
-				currency_in_existing_entries = existing_gle.currency or company_currency
-				if currency_in_existing_entries != self.currency:
+				currency_in_existing_entries = existing_gle.account_currency or company_currency
+				if currency_in_existing_entries != self.account_currency:
 					frappe.throw(_("Accounting Entry for {0}: {1} can only be made in currency: {2}")
-						.format(self.party_type, self.party, currency_in_existing_entries))
+						.format(self.party_type, self.party, currency_in_existing_entries), 
+							InvalidAccountCurrency)
 
 def validate_balance_type(account, adv_adj=False):
 	if not adv_adj and account:
diff --git a/erpnext/accounts/doctype/gl_entry/test_gl_entry.py b/erpnext/accounts/doctype/gl_entry/test_gl_entry.py
index 383409c..146d084 100644
--- a/erpnext/accounts/doctype/gl_entry/test_gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/test_gl_entry.py
@@ -11,7 +11,7 @@
 		frappe.db.set_value("Company", "_Test Company", "round_off_cost_center", "_Test Cost Center - _TC")
 		
 		jv = make_journal_entry("_Test Account Cost for Goods Sold - _TC", 
-			"_Test Account Bank Account - _TC", 100, "_Test Cost Center - _TC", submit=False)
+			"_Test Bank - _TC", 100, "_Test Cost Center - _TC", submit=False)
 			
 		jv.get("accounts")[0].debit = 100.01
 		jv.flags.ignore_validate = True
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index e0d580c..adf4c20 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -35,7 +35,7 @@
 	var company_currency = erpnext.get_currency(frm.doc.company);
 		
 	var grid = frm.get_field("accounts").grid;
-	grid.set_column_disp(fields, grid.currency!=company_currency);
+	grid.set_column_disp(fields, grid.account_currency!=company_currency);
 }
 
 erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
@@ -324,7 +324,7 @@
 						$.extend(d, r.message[0]);
 						refresh_field('balance', d.name, 'accounts');
 						refresh_field('party_type', d.name, 'accounts');
-						refresh_field('currency', d.name, 'accounts');
+						refresh_field('account_currency', d.name, 'accounts');
 						
 						if(r.message[1] && (!frm.doc.exchange_rate || frm.doc.exchange_rate == 1.0)) {
 							frm.set_value("exchange_rate", r.message[1])
@@ -339,7 +339,7 @@
 		var company_currency = erpnext.get_currency(frm.doc.company);
 		var row = locals[dt][dn];
 		
-		var exchange_rate = (row.currency==company_currency) ? 1 : frm.doc.exchange_rate;
+		var exchange_rate = (row.account_currency==company_currency) ? 1 : frm.doc.exchange_rate;
 		
 		frappe.model.set_value(dt, dn, "debit", 
 			flt(flt(row.debit_in_account_currency)*exchange_rate), precision("debit", row));
@@ -349,7 +349,7 @@
 		var company_currency = erpnext.get_currency(frm.doc.company);
 		var row = locals[dt][dn];
 		
-		var exchange_rate = (row.currency==company_currency) ? 1 : frm.doc.exchange_rate;
+		var exchange_rate = (row.account_currency==company_currency) ? 1 : frm.doc.exchange_rate;
 		
 		frappe.model.set_value(dt, dn, "credit", 
 			flt(flt(row.credit_in_account_currency)*exchange_rate), precision("credit", row));
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index d61e63a..57d9f0d 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe.utils import cstr, flt, fmt_money, formatdate, getdate, date_diff
+from frappe.utils import cstr, flt, fmt_money, formatdate
 from frappe import msgprint, _, scrub
 from erpnext.setup.utils import get_company_currency, get_exchange_rate
 from erpnext.controllers.accounts_controller import AccountsController
@@ -248,13 +248,18 @@
 
 		self.difference = flt(self.total_debit, self.precision("total_debit")) - \
 			flt(self.total_credit, self.precision("total_credit"))
-		print self.difference
+
 		if self.difference:
 			frappe.throw(_("Total Debit must be equal to Total Credit. The difference is {0}")
 				.format(self.difference))
 				
 	def validate_multi_currency(self):
-		alternate_currency = [d.currency for d in self.get("accounts") if d.currency!=self.company_currency]
+		alternate_currency = []
+		for d in self.get("accounts"):
+			d.account_currency = frappe.db.get_value("Account", d.account, "account_currency") or self.company_currency
+				
+			if d.account_currency!=self.company_currency:
+				alternate_currency.append(d.account_currency)
 			
 		if alternate_currency:
 			if not self.exchange_rate:
@@ -266,10 +271,7 @@
 			self.exchange_rate = 1.0
 			
 		for d in self.get("accounts"):
-			if not d.currency:
-				d.currency = frappe.db.get_value("Account", d.account, "currency") or self.company_currency
-				
-			exchange_rate = self.exchange_rate if d.currency != self.company_currency else 1
+			exchange_rate = self.exchange_rate if d.account_currency != self.company_currency else 1
 			
 			d.debit = flt(flt(d.debit_in_account_currency)*exchange_rate, d.precision("debit"))
 			d.credit = flt(flt(d.credit_in_account_currency)*exchange_rate, d.precision("credit"))
@@ -340,7 +342,7 @@
 						"against": d.against_account,
 						"debit": flt(d.debit, d.precision("debit")),
 						"credit": flt(d.credit, d.precision("credit")),
-						"currency": d.currency,
+						"account_currency": d.account_currency,
 						"debit_in_account_currency": flt(d.debit_in_account_currency, d.precision("debit_in_account_currency")),
 						"credit_in_account_currency": flt(d.credit_in_account_currency, d.precision("credit_in_account_currency")),
 						"against_voucher_type": d.reference_type,
@@ -488,12 +490,12 @@
 	jv.get("accounts")[0].party = si.customer
 	jv.get("accounts")[0].balance = get_balance_on(si.debit_to)
 	jv.get("accounts")[0].party_balance = get_balance_on(party=si.customer, party_type="Customer")
-	jv.get("accounts")[0].credit = si.outstanding_amount
+	jv.get("accounts")[0].credit_in_account_currency = si.outstanding_amount
 	jv.get("accounts")[0].reference_type = si.doctype
 	jv.get("accounts")[0].reference_name = si.name
 
 	# debit bank
-	jv.get("accounts")[1].debit = si.outstanding_amount
+	jv.get("accounts")[1].debit_in_account_currency = si.outstanding_amount
 
 	return jv.as_dict()
 
@@ -510,12 +512,12 @@
 	jv.get("accounts")[0].party = pi.supplier
 	jv.get("accounts")[0].balance = get_balance_on(pi.credit_to)
 	jv.get("accounts")[0].party_balance = get_balance_on(party=pi.supplier, party_type="Supplier")
-	jv.get("accounts")[0].debit = pi.outstanding_amount
+	jv.get("accounts")[0].debit_in_account_currency = pi.outstanding_amount
 	jv.get("accounts")[0].reference_type = pi.doctype
 	jv.get("accounts")[0].reference_name = pi.name
 
 	# credit bank
-	jv.get("accounts")[1].credit = pi.outstanding_amount
+	jv.get("accounts")[1].credit_in_account_currency = pi.outstanding_amount
 
 	return jv.as_dict()
 
@@ -524,6 +526,7 @@
 	"""Returns new Journal Entry document as dict for given Sales Order"""
 	from erpnext.accounts.utils import get_balance_on
 	from erpnext.accounts.party import get_party_account
+	
 	so = frappe.get_doc("Sales Order", sales_order)
 
 	if flt(so.per_billed, 2) != 0.0:
@@ -531,9 +534,15 @@
 
 	jv = get_payment_entry(so)
 	jv.remark = 'Advance payment received against Sales Order {0}.'.format(so.name)
+	
 	party_account = get_party_account(so.company, so.customer, "Customer")
-
-	amount = flt(so.base_grand_total) - flt(so.advance_paid)
+	party_account_currency = frappe.db.get_value("Account", party_account, "account_currency")
+	company_currency = get_company_currency(so.company)
+	
+	if party_account_currency == company_currency:
+		amount = flt(so.base_grand_total) - flt(so.advance_paid)
+	else:
+		amount = flt(so.grand_total) - flt(so.advance_paid)
 
 	# credit customer
 	jv.get("accounts")[0].account = party_account
@@ -541,13 +550,13 @@
 	jv.get("accounts")[0].party = so.customer
 	jv.get("accounts")[0].balance = get_balance_on(party_account)
 	jv.get("accounts")[0].party_balance = get_balance_on(party=so.customer, party_type="Customer")
-	jv.get("accounts")[0].credit = amount
+	jv.get("accounts")[0].credit_in_account_currency = amount
 	jv.get("accounts")[0].reference_type = so.doctype
 	jv.get("accounts")[0].reference_name = so.name
 	jv.get("accounts")[0].is_advance = "Yes"
 
 	# debit bank
-	jv.get("accounts")[1].debit = amount
+	jv.get("accounts")[1].debit_in_account_currency = amount
 
 	return jv.as_dict()
 
@@ -563,9 +572,15 @@
 
 	jv = get_payment_entry(po)
 	jv.remark = 'Advance payment made against Purchase Order {0}.'.format(po.name)
+	
 	party_account = get_party_account(po.company, po.supplier, "Supplier")
-
-	amount = flt(po.base_grand_total) - flt(po.advance_paid)
+	party_account_currency = frappe.db.get_value("Account", party_account, "account_currency")
+	company_currency = get_company_currency(po.company)
+	
+	if party_account_currency == company_currency:
+		amount = flt(po.base_grand_total) - flt(po.advance_paid)
+	else:
+		amount = flt(po.grand_total) - flt(po.advance_paid)
 
 	# credit customer
 	jv.get("accounts")[0].account = party_account
@@ -573,13 +588,13 @@
 	jv.get("accounts")[0].party = po.supplier
 	jv.get("accounts")[0].balance = get_balance_on(party_account)
 	jv.get("accounts")[0].party_balance = get_balance_on(party=po.supplier, party_type="Supplier")
-	jv.get("accounts")[0].debit = amount
+	jv.get("accounts")[0].debit_in_account_currency = amount
 	jv.get("accounts")[0].reference_type = po.doctype
 	jv.get("accounts")[0].reference_name = po.name
 	jv.get("accounts")[0].is_advance = "Yes"
 
 	# debit bank
-	jv.get("accounts")[1].credit = amount
+	jv.get("accounts")[1].credit_in_account_currency = amount
 
 	return jv.as_dict()
 
@@ -669,7 +684,7 @@
 		frappe.msgprint(_("No Permission"), raise_exception=1)
 
 	company_currency = get_company_currency(company)
-	account_details = frappe.db.get_value("Account", account, ["account_type", "currency"], as_dict=1)
+	account_details = frappe.db.get_value("Account", account, ["account_type", "account_currency"], as_dict=1)
 	
 	if account_details.account_type == "Receivable":
 		party_type = "Customer"
@@ -679,12 +694,12 @@
 		party_type = ""
 		
 	exchange_rate = None
-	if account_details.currency != company_currency:
-		exchange_rate = get_exchange_rate(account_details.currency, company_currency)
+	if account_details.account_currency != company_currency:
+		exchange_rate = get_exchange_rate(account_details.account_currency, company_currency)
 		
 	grid_values = {
 		"balance": get_balance_on(account, date),
 		"party_type": party_type,
-		"currency": account_details.currency or company_currency,
+		"account_currency": account_details.account_currency or company_currency,
 	}
 	return grid_values, exchange_rate
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py
index 8995e34..0d9cd24 100644
--- a/erpnext/accounts/doctype/journal_entry/test_journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/test_journal_entry.py
@@ -101,7 +101,7 @@
 		self.set_total_expense_zero("2013-02-28")
 
 		jv = make_journal_entry("_Test Account Cost for Goods Sold - _TC",
-			"_Test Account Bank Account - _TC", 40000, "_Test Cost Center - _TC", submit=True)
+			"_Test Bank - _TC", 40000, "_Test Cost Center - _TC", submit=True)
 
 		self.assertTrue(frappe.db.get_value("GL Entry",
 			{"voucher_type": "Journal Entry", "voucher_no": jv.name}))
@@ -112,7 +112,7 @@
 		self.set_total_expense_zero("2013-02-28")
 
 		jv = make_journal_entry("_Test Account Cost for Goods Sold - _TC",
-			"_Test Account Bank Account - _TC", 40000, "_Test Cost Center - _TC")
+			"_Test Bank - _TC", 40000, "_Test Cost Center - _TC")
 
 		self.assertRaises(BudgetError, jv.submit)
 
@@ -126,7 +126,7 @@
 		self.set_total_expense_zero("2013-02-28")
 
 		jv = make_journal_entry("_Test Account Cost for Goods Sold - _TC",
-			"_Test Account Bank Account - _TC", 150000, "_Test Cost Center - _TC")
+			"_Test Bank - _TC", 150000, "_Test Cost Center - _TC")
 
 		self.assertRaises(BudgetError, jv.submit)
 
@@ -136,13 +136,13 @@
 		self.set_total_expense_zero("2013-02-28")
 
 		jv1 = make_journal_entry("_Test Account Cost for Goods Sold - _TC",
-			"_Test Account Bank Account - _TC", 20000, "_Test Cost Center - _TC", submit=True)
+			"_Test Bank - _TC", 20000, "_Test Cost Center - _TC", submit=True)
 
 		self.assertTrue(frappe.db.get_value("GL Entry",
 			{"voucher_type": "Journal Entry", "voucher_no": jv1.name}))
 
 		jv2 = make_journal_entry("_Test Account Cost for Goods Sold - _TC",
-			"_Test Account Bank Account - _TC", 20000, "_Test Cost Center - _TC", submit=True)
+			"_Test Bank - _TC", 20000, "_Test Cost Center - _TC", submit=True)
 
 		self.assertTrue(frappe.db.get_value("GL Entry",
 			{"voucher_type": "Journal Entry", "voucher_no": jv2.name}))
@@ -165,32 +165,79 @@
 	def set_total_expense_zero(self, posting_date):
 		existing_expense = self.get_actual_expense(posting_date)
 		make_journal_entry("_Test Account Cost for Goods Sold - _TC",
-			"_Test Account Bank Account - _TC", -existing_expense, "_Test Cost Center - _TC", submit=True)
+			"_Test Bank - _TC", -existing_expense, "_Test Cost Center - _TC", submit=True)
+			
+	def test_multi_currency(self):
+		jv = make_journal_entry("_Test Bank USD - _TC",
+			"_Test Bank - _TC", 100, exchange_rate=50, save=False)
+			
+		jv.get("accounts")[1].credit_in_account_currency = 5000
+		jv.submit()
+			
+		gl_entries = frappe.db.sql("""select account, account_currency, debit, credit, 
+			debit_in_account_currency, credit_in_account_currency
+			from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s
+			order by account asc""", jv.name, as_dict=1)
 
-def make_journal_entry(account1, account2, amount, cost_center=None, submit=False):
+		self.assertTrue(gl_entries)
+
+		expected_values = {
+			"_Test Bank USD - _TC": {
+				"account_currency": "USD",
+				"debit": 5000,
+				"debit_in_account_currency": 100,
+				"credit": 0,
+				"credit_in_account_currency": 0
+			},
+			"_Test Bank - _TC": {
+				"account_currency": "INR",
+				"debit": 0,
+				"debit_in_account_currency": 0,
+				"credit": 5000,
+				"credit_in_account_currency": 5000
+			}
+		}
+		
+		for field in ("account_currency", "debit", "debit_in_account_currency", "credit", "credit_in_account_currency"):
+			for i, gle in enumerate(gl_entries):
+				self.assertEquals(expected_values[gle.account][field], gle[field])
+		
+		
+
+		# cancel
+		jv.cancel()
+
+		gle = frappe.db.sql("""select name from `tabGL Entry`
+			where voucher_type='Sales Invoice' and voucher_no=%s""", jv.name)
+
+		self.assertFalse(gle)
+
+def make_journal_entry(account1, account2, amount, cost_center=None, exchange_rate=1, save=True, submit=False):
 	jv = frappe.new_doc("Journal Entry")
 	jv.posting_date = "2013-02-14"
 	jv.company = "_Test Company"
 	jv.fiscal_year = "_Test Fiscal Year 2013"
 	jv.user_remark = "test"
+	jv.exchange_rate = exchange_rate
 
 	jv.set("accounts", [
 		{
 			"account": account1,
 			"cost_center": cost_center,
-			"debit": amount if amount > 0 else 0,
-			"credit": abs(amount) if amount < 0 else 0,
+			"debit_in_account_currency": amount if amount > 0 else 0,
+			"credit_in_account_currency": abs(amount) if amount < 0 else 0,
 		}, {
 			"account": account2,
 			"cost_center": cost_center,
-			"credit": amount if amount > 0 else 0,
-			"debit": abs(amount) if amount < 0 else 0,
+			"credit_in_account_currency": amount if amount > 0 else 0,
+			"debit_in_account_currency": abs(amount) if amount < 0 else 0,
 		}
 	])
-	jv.insert()
+	if save or submit:
+		jv.insert()
 
-	if submit:
-		jv.submit()
+		if submit:
+			jv.submit()
 
 	return jv
 
diff --git a/erpnext/accounts/doctype/journal_entry/test_records.json b/erpnext/accounts/doctype/journal_entry/test_records.json
index f660863..5e25c3c 100644
--- a/erpnext/accounts/doctype/journal_entry/test_records.json
+++ b/erpnext/accounts/doctype/journal_entry/test_records.json
@@ -9,15 +9,15 @@
     "account": "_Test Receivable - _TC",
 	"party_type": "Customer",
 	"party": "_Test Customer",
-    "credit": 400.0,
-    "debit": 0.0,
+    "credit_in_account_currency": 400.0,
+    "debit_in_account_currency": 0.0,
     "doctype": "Journal Entry Account",
     "parentfield": "accounts"
    },
    {
-    "account": "_Test Account Bank Account - _TC",
-    "credit": 0.0,
-    "debit": 400.0,
+    "account": "_Test Bank - _TC",
+    "credit_in_account_currency": 0.0,
+    "debit_in_account_currency": 400.0,
     "doctype": "Journal Entry Account",
     "parentfield": "accounts"
    }
@@ -40,15 +40,15 @@
     "account": "_Test Payable - _TC",
 	"party_type": "Supplier",
 	"party": "_Test Supplier",
-    "credit": 0.0,
-    "debit": 400.0,
+    "credit_in_account_currency": 0.0,
+    "debit_in_account_currency": 400.0,
     "doctype": "Journal Entry Account",
     "parentfield": "accounts"
    },
    {
-    "account": "_Test Account Bank Account - _TC",
-    "credit": 400.0,
-    "debit": 0.0,
+    "account": "_Test Bank - _TC",
+    "credit_in_account_currency": 400.0,
+    "debit_in_account_currency": 0.0,
     "doctype": "Journal Entry Account",
     "parentfield": "accounts"
    }
@@ -71,16 +71,16 @@
     "account": "_Test Receivable - _TC",
 	"party_type": "Customer",
 	"party": "_Test Customer",
-    "credit": 0.0,
-    "debit": 400.0,
+    "credit_in_account_currency": 0.0,
+    "debit_in_account_currency": 400.0,
     "doctype": "Journal Entry Account",
     "parentfield": "accounts"
    },
    {
     "account": "Sales - _TC",
     "cost_center": "_Test Cost Center - _TC",
-    "credit": 400.0,
-    "debit": 0.0,
+    "credit_in_account_currency": 400.0,
+    "debit_in_account_currency": 0.0,
     "doctype": "Journal Entry Account",
     "parentfield": "accounts"
    }
diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
index fa7fcf9..11c92e2 100644
--- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
+++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
@@ -38,13 +38,13 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "currency", 
+   "fieldname": "account_currency", 
    "fieldtype": "Link", 
    "hidden": 1, 
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Currency", 
+   "label": "Account Currency", 
    "no_copy": 1, 
    "options": "Currency", 
    "permlevel": 0, 
@@ -520,7 +520,7 @@
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
- "modified": "2015-08-27 16:09:43.872157", 
+ "modified": "2015-08-28 17:15:25.180681", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Journal Entry Account", 
diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.py b/erpnext/accounts/doctype/payment_tool/payment_tool.py
index 4edbebd..4c001c5 100644
--- a/erpnext/accounts/doctype/payment_tool/payment_tool.py
+++ b/erpnext/accounts/doctype/payment_tool/payment_tool.py
@@ -33,7 +33,8 @@
 				d1.party_type = self.party_type
 				d1.party = self.party
 				d1.balance = get_balance_on(self.party_account)
-				d1.set("debit" if self.received_or_paid=="Paid" else "credit", flt(v.payment_amount))
+				d1.set("debit_in_account_currency" if self.received_or_paid=="Paid" \
+					else "credit_in_account_currency", flt(v.payment_amount))
 				d1.set("reference_type", v.against_voucher_type)
 				d1.set("reference_name", v.against_voucher_no)
 				d1.set('is_advance', 'Yes' if v.against_voucher_type in ['Sales Order', 'Purchase Order'] else 'No')
@@ -41,7 +42,8 @@
 
 		d2 = jv.append("accounts")
 		d2.account = self.payment_account
-		d2.set('debit' if total_payment_amount < 0 else 'credit', abs(total_payment_amount))
+		d2.set('debit_in_account_currency' if total_payment_amount < 0 \
+			else 'credit_in_account_currency', abs(total_payment_amount))
 		if self.payment_account:
 			d2.balance = get_balance_on(self.payment_account)
 
diff --git a/erpnext/accounts/doctype/payment_tool/test_payment_tool.py b/erpnext/accounts/doctype/payment_tool/test_payment_tool.py
index 321986c..4f1c9e9 100644
--- a/erpnext/accounts/doctype/payment_tool/test_payment_tool.py
+++ b/erpnext/accounts/doctype/payment_tool/test_payment_tool.py
@@ -39,7 +39,7 @@
 			"party": "_Test Customer 3",
 			"reference_type": "Sales Order",
 			"reference_name": so2.name,
-			"credit": 1000,
+			"credit_in_account_currency": 1000,
 			"is_advance": "Yes"
 		})
 
@@ -67,7 +67,7 @@
 			"party": "_Test Customer 3",
 			"reference_type": si2.doctype,
 			"reference_name": si2.name,
-			"credit": 561.80
+			"credit_in_account_currency": 561.80
 		})
 
 		pi = self.create_voucher(pi_test_records[0], {
@@ -91,7 +91,7 @@
 			"party": "_Test Customer 3",
 			"party_account": "_Test Receivable - _TC",
 			"payment_mode": "Cheque",
-			"payment_account": "_Test Account Bank Account - _TC",
+			"payment_account": "_Test Bank - _TC",
 			"reference_no": "123456",
 			"reference_date": "2013-02-14"
 		}
@@ -117,10 +117,10 @@
 	def create_against_jv(self, test_record, args):
 		jv = frappe.copy_doc(test_record)
 		jv.get("accounts")[0].update(args)
-		if args.get("debit"):
-			jv.get("accounts")[1].credit = args["debit"]
-		elif args.get("credit"):
-			jv.get("accounts")[1].debit = args["credit"]
+		if args.get("debit_in_account_currency"):
+			jv.get("accounts")[1].credit_in_account_currency = args["debit_in_account_currency"]
+		elif args.get("credit_in_account_currency"):
+			jv.get("accounts")[1].debit_in_account_currency = args["credit_in_account_currency"]
 
 		jv.insert()
 		jv.submit()
@@ -141,7 +141,8 @@
 		outstanding_entries = get_outstanding_vouchers(json.dumps(args))
 
 		for d in outstanding_entries:
-			self.assertEquals(flt(d.get("outstanding_amount"), 2), expected_outstanding.get(d.get("voucher_type"))[1])
+			self.assertEquals(flt(d.get("outstanding_amount"), 2), 
+				expected_outstanding.get(d.get("voucher_type"))[1])
 
 		self.check_jv_entries(doc, outstanding_entries, expected_outstanding)
 
@@ -156,11 +157,10 @@
 		paytool.total_payment_amount = 300
 
 		new_jv = paytool.make_journal_entry()
-
 		for jv_entry in new_jv.get("accounts"):
 			if paytool.party_account == jv_entry.get("account") and paytool.party == jv_entry.get("party"):
-				self.assertEquals(100.00,
-					jv_entry.get("debit" if paytool.party_type=="Supplier" else "credit"))
+				self.assertEquals(100.00, jv_entry.get("debit_in_account_currency" 
+					if paytool.party_type=="Supplier" else "credit_in_account_currency"))
 				self.assertEquals(jv_entry.reference_name,
 					expected_outstanding[jv_entry.reference_type][0])
 
@@ -170,4 +170,6 @@
 	def clear_table_entries(self):
 		frappe.db.sql("""delete from `tabGL Entry` where party in ("_Test Customer 3", "_Test Supplier 1")""")
 		frappe.db.sql("""delete from `tabSales Order` where customer = "_Test Customer 3" """)
+		frappe.db.sql("""delete from `tabSales Invoice` where customer = "_Test Customer 3" """)
 		frappe.db.sql("""delete from `tabPurchase Order` where supplier = "_Test Supplier 1" """)
+		frappe.db.sql("""delete from `tabPurchase Invoice` where supplier = "_Test Supplier 1" """)
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 afff47f..0b59746 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
@@ -10,11 +10,11 @@
 
 class TestPeriodClosingVoucher(unittest.TestCase):
 	def test_closing_entry(self):
-		make_journal_entry("_Test Account Bank Account - _TC", "Sales - _TC", 400, 
+		make_journal_entry("_Test Bank - _TC", "Sales - _TC", 400, 
 			"_Test Cost Center - _TC", submit=True)
 		
 		make_journal_entry("_Test Account Cost for Goods Sold - _TC", 
-			"_Test Account Bank Account - _TC", 600, "_Test Cost Center - _TC", submit=True)
+			"_Test Bank - _TC", 600, "_Test Cost Center - _TC", submit=True)
 			
 		profit_or_loss = frappe.db.sql("""select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) as balance
 			from `tabGL Entry` t1, `tabAccount` t2
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 1a59135..b640dda 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -269,7 +269,7 @@
 		valuation_tax = {}
 		for tax in self.get("taxes"):
 			if tax.category in ("Total", "Valuation and Total") and flt(tax.base_tax_amount_after_discount_amount):
-				account_currency = frappe.db.get_value("Account", tax.account_head, "currency")
+				account_currency = frappe.db.get_value("Account", tax.account_head, "account_currency")
 				
 				dr_or_cr = "debit" if tax.add_deduct_tax == "Add" else "credit"
 				
@@ -298,7 +298,7 @@
 		stock_items = self.get_stock_items()
 		for item in self.get("items"):
 			if flt(item.base_net_amount):
-				account_currency = frappe.db.get_value("Account", item.expense_account, "currency")
+				account_currency = frappe.db.get_value("Account", item.expense_account, "account_currency")
 				gl_entries.append(
 					self.get_gl_dict({
 						"account": item.expense_account,
@@ -360,7 +360,7 @@
 		# writeoff account includes petty difference in the invoice amount
 		# and the amount that is paid
 		if self.write_off_account and flt(self.write_off_amount):
-			write_off_account_currency = frappe.db.get_value("Account", self.write_off_account, "currency")
+			write_off_account_currency = frappe.db.get_value("Account", self.write_off_account, "account_currency")
 			
 			gl_entries.append(
 				self.get_gl_dict({
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 0b74948..2754ee6 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -10,6 +10,7 @@
 import frappe.defaults
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory, \
 	test_records as pr_test_records
+from erpnext.controllers.accounts_controller import InvalidCurrency
 
 test_dependencies = ["Item", "Cost Center"]
 test_ignore = ["Serial No"]
@@ -276,6 +277,55 @@
 			self.assertEquals(expected_values[gle.account][1], gle.credit)
 
 		set_perpetual_inventory(0)
+		
+	def test_multi_currency_gle(self):
+		set_perpetual_inventory(0)
+			
+		pi = make_purchase_invoice(supplier="_Test Supplier USD", credit_to="_Test Payable USD - _TC", 
+			currency="USD", conversion_rate=50)
+
+		gl_entries = frappe.db.sql("""select account, account_currency, debit, credit, 
+			debit_in_account_currency, credit_in_account_currency
+			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
+			order by account asc""", pi.name, as_dict=1)
+
+		self.assertTrue(gl_entries)
+
+		expected_values = {
+			"_Test Payable USD - _TC": {
+				"account_currency": "USD",
+				"debit": 0,
+				"debit_in_account_currency": 0,
+				"credit": 12500,
+				"credit_in_account_currency": 250
+			},
+			"_Test Account Cost for Goods Sold - _TC": {
+				"account_currency": "INR",
+				"debit": 12500,
+				"debit_in_account_currency": 12500,
+				"credit": 0,
+				"credit_in_account_currency": 0
+			}
+		}
+		
+		for field in ("account_currency", "debit", "debit_in_account_currency", "credit", "credit_in_account_currency"):
+			for i, gle in enumerate(gl_entries):
+				self.assertEquals(expected_values[gle.account][field], gle[field])
+				
+				
+		# Check for valid currency
+		pi1 = make_purchase_invoice(supplier="_Test Supplier USD", credit_to="_Test Payable USD - _TC",
+			do_not_save=True)
+		
+		self.assertRaises(InvalidCurrency, pi1.save)
+
+		# cancel
+		pi.cancel()
+
+		gle = frappe.db.sql("""select name from `tabGL Entry`
+			where voucher_type='Sales Invoice' and voucher_no=%s""", pi.name)
+
+		self.assertFalse(gle)
 
 def make_purchase_invoice(**args):
 	pi = frappe.new_doc("Purchase Invoice")
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index 955a19b..0d1b42c 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -1145,7 +1145,7 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Discount", 
+   "label": "Additional Discount", 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
@@ -2951,7 +2951,7 @@
  "is_submittable": 1, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-08-27 16:12:12.077662", 
+ "modified": "2015-08-27 16:46:11.526089", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Sales Invoice", 
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 9639038..0871a66 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -423,22 +423,18 @@
 		if cint(self.is_pos) == 1:
 			if flt(self.paid_amount) == 0:
 				if self.cash_bank_account:
-					paid_amount = flt(flt(self.grand_total) - flt(self.write_off_amount), 
-						self.precision("paid_amount"))
-					base_paid_amount = flt(paid_amount*self.conversion_rate, self.precision("base_paid_amount"))
-					
-					frappe.db.set(self, 'paid_amount', paid_amount)
-					frappe.db.set(self, 'base_paid_amount', base_paid_amount)
-					
+					frappe.db.set(self, 'paid_amount', 
+						flt(flt(self.grand_total) - flt(self.write_off_amount), self.precision("paid_amount")))					
 				else:
 					# show message that the amount is not paid
 					frappe.db.set(self,'paid_amount',0)
-					frappe.db.set(self,'base_paid_amount',0)
 					frappe.msgprint(_("Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified"))
 		else:
 			frappe.db.set(self,'paid_amount',0)
-			frappe.db.set(self,'base_paid_amount',0)
-
+		
+		frappe.db.set(self, 'base_paid_amount', 
+			flt(self.paid_amount*self.conversion_rate, self.precision("base_paid_amount")))
+		
 	def check_prev_docstatus(self):
 		for d in self.get('items'):
 			if d.sales_order and frappe.db.get_value("Sales Order", d.sales_order, "docstatus") != 1:
@@ -512,7 +508,7 @@
 	def make_tax_gl_entries(self, gl_entries):
 		for tax in self.get("taxes"):
 			if flt(tax.base_tax_amount_after_discount_amount):
-				account_currency = frappe.db.get_value("Account", tax.account_head, "currency")
+				account_currency = frappe.db.get_value("Account", tax.account_head, "account_currency")
 				gl_entries.append(
 					self.get_gl_dict({
 						"account": tax.account_head,
@@ -528,7 +524,7 @@
 		# income account gl entries
 		for item in self.get("items"):
 			if flt(item.base_net_amount):
-				account_currency = frappe.db.get_value("Account", item.income_account, "currency")
+				account_currency = frappe.db.get_value("Account", item.income_account, "account_currency")
 				gl_entries.append(
 					self.get_gl_dict({
 						"account": item.income_account,
@@ -547,7 +543,7 @@
 
 	def make_pos_gl_entries(self, gl_entries):
 		if cint(self.is_pos) and self.cash_bank_account and self.paid_amount:
-			bank_account_currency = frappe.db.get_value("Account", self.cash_bank_account, "currency")
+			bank_account_currency = frappe.db.get_value("Account", self.cash_bank_account, "account_currency")
 			# POS, make payment entries
 			gl_entries.append(
 				self.get_gl_dict({
@@ -575,7 +571,7 @@
 	def make_write_off_gl_entry(self, gl_entries):
 		# write off entries, applicable if only pos
 		if self.write_off_account and self.write_off_amount:
-			write_off_account_currency = frappe.db.get_value("Account", self.write_off_account, "currency")
+			write_off_account_currency = frappe.db.get_value("Account", self.write_off_account, "account_currency")
 			
 			gl_entries.append(
 				self.get_gl_dict({
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index c7a992c..e519bd3 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -7,6 +7,8 @@
 from frappe.utils import nowdate, add_days, flt
 from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry, get_qty_after_transaction
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
+from erpnext.controllers.accounts_controller import InvalidCurrency
+from erpnext.accounts.doctype.gl_entry.gl_entry import InvalidAccountCurrency
 
 class TestSalesInvoice(unittest.TestCase):
 	def make(self):
@@ -401,7 +403,7 @@
 		jv.cancel()
 		self.assertEquals(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 561.8)
 
-	def test_sales_invoice_gl_entry_without_aii(self):
+	def test_sales_invoice_gl_entry_without_perpetual_inventory(self):
 		set_perpetual_inventory(0)
 		si = frappe.copy_doc(test_records[1])
 		si.insert()
@@ -433,7 +435,7 @@
 
 		self.assertFalse(gle)
 
-	def test_pos_gl_entry_with_aii(self):
+	def test_pos_gl_entry_with_perpetual_inventory(self):
 		set_perpetual_inventory()
 		self.make_pos_profile()
 
@@ -442,8 +444,7 @@
 		pos = copy.deepcopy(test_records[1])
 		pos["is_pos"] = 1
 		pos["update_stock"] = 1
-		# pos["posting_time"] = "12:05"
-		pos["cash_bank_account"] = "_Test Account Bank Account - _TC"
+		pos["cash_bank_account"] = "_Test Bank - _TC"
 		pos["paid_amount"] = 600.0
 
 		si = frappe.copy_doc(pos)
@@ -474,7 +475,7 @@
 			[stock_in_hand, 0.0, abs(sle.stock_value_difference)],
 			[pos["items"][0]["expense_account"], abs(sle.stock_value_difference), 0.0],
 			[si.debit_to, 0.0, 600.0],
-			["_Test Account Bank Account - _TC", 600.0, 0.0]
+			["_Test Bank - _TC", 600.0, 0.0]
 		])
 
 		for i, gle in enumerate(sorted(gl_entries, key=lambda gle: gle.account)):
@@ -494,7 +495,7 @@
 
 	def make_pos_profile(self):
 		pos_profile = frappe.get_doc({
-			"cash_bank_account": "_Test Account Bank Account - _TC",
+			"cash_bank_account": "_Test Bank - _TC",
 			"company": "_Test Company",
 			"cost_center": "_Test Cost Center - _TC",
 			"currency": "INR",
@@ -513,7 +514,7 @@
 		if not frappe.db.exists("POS Profile", "_Test POS Profile"):
 			pos_profile.insert()
 
-	def test_si_gl_entry_with_aii_and_update_stock_with_warehouse_but_no_account(self):
+	def test_si_gl_entry_with_perpetual_inventory_and_update_stock_with_warehouse_but_no_account(self):
 		set_perpetual_inventory()
 		frappe.delete_doc("Account", "_Test Warehouse No Account - _TC")
 
@@ -567,7 +568,7 @@
 		self.assertFalse(gle)
 		set_perpetual_inventory(0)
 
-	def test_sales_invoice_gl_entry_with_aii_no_item_code(self):
+	def test_sales_invoice_gl_entry_with_perpetual_inventory_no_item_code(self):
 		set_perpetual_inventory()
 
 		si = frappe.get_doc(test_records[1])
@@ -593,7 +594,7 @@
 
 		set_perpetual_inventory(0)
 
-	def test_sales_invoice_gl_entry_with_aii_non_stock_item(self):
+	def test_sales_invoice_gl_entry_with_perpetual_inventory_non_stock_item(self):
 		set_perpetual_inventory()
 		si = frappe.get_doc(test_records[1])
 		si.get("items")[0].item_code = "_Test Non Stock Item"
@@ -841,7 +842,80 @@
 		self.assertEquals(si.total_taxes_and_charges, 234.44)
 		self.assertEquals(si.base_grand_total, 859.44)
 		self.assertEquals(si.grand_total, 859.44)
+		
+	def test_multi_currency_gle(self):
+		set_perpetual_inventory(0)
+		si = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC", 
+			currency="USD", conversion_rate=50)
 
+		gl_entries = frappe.db.sql("""select account, account_currency, debit, credit, 
+			debit_in_account_currency, credit_in_account_currency
+			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
+			order by account asc""", si.name, as_dict=1)
+
+		self.assertTrue(gl_entries)
+
+		expected_values = {
+			"_Test Receivable USD - _TC": {
+				"account_currency": "USD",
+				"debit": 5000,
+				"debit_in_account_currency": 100,
+				"credit": 0,
+				"credit_in_account_currency": 0
+			},
+			"Sales - _TC": {
+				"account_currency": "INR",
+				"debit": 0,
+				"debit_in_account_currency": 0,
+				"credit": 5000,
+				"credit_in_account_currency": 5000
+			}
+		}
+		
+		for field in ("account_currency", "debit", "debit_in_account_currency", "credit", "credit_in_account_currency"):
+			for i, gle in enumerate(gl_entries):
+				self.assertEquals(expected_values[gle.account][field], gle[field])
+
+		# cancel
+		si.cancel()
+
+		gle = frappe.db.sql("""select name from `tabGL Entry`
+			where voucher_type='Sales Invoice' and voucher_no=%s""", si.name)
+
+		self.assertFalse(gle)
+		
+	def test_invalid_currency(self):
+		# Customer currency = USD
+		
+		# Transaction currency cannot be INR
+		si1 = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC", 
+			do_not_save=True)
+		
+		self.assertRaises(InvalidCurrency, si1.save)
+			
+		# Transaction currency cannot be EUR
+		si2 = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC", 
+			currency="EUR", conversion_rate=80, do_not_save=True)
+			
+		self.assertRaises(InvalidCurrency, si2.save)
+		
+		# Transaction currency only allowed in USD
+		si3 = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable USD - _TC", 
+			currency="USD", conversion_rate=50)
+			
+		# Party Account currency must be in USD, as there is existing GLE with USD
+		si4 = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable - _TC", 
+			currency="USD", conversion_rate=50, do_not_submit=True)
+			
+		self.assertRaises(InvalidAccountCurrency, si4.submit)
+		
+		# Party Account currency must be in USD, force customer currency as there is no GLE
+		
+		si3.cancel()
+		si5 = create_sales_invoice(customer="_Test Customer USD", debit_to="_Test Receivable - _TC", 
+			currency="USD", conversion_rate=50, do_not_submit=True)
+			
+		self.assertRaises(InvalidAccountCurrency, si5.submit)
 
 def create_sales_invoice(**args):
 	si = frappe.new_doc("Sales Invoice")
@@ -856,14 +930,15 @@
 	si.is_pos = args.is_pos
 	si.is_return = args.is_return
 	si.return_against = args.return_against
-	si.currency="INR"
-	si.conversion_rate = 1
+	si.currency=args.currency or "INR"
+	si.conversion_rate = args.conversion_rate or 1
 
 	si.append("items", {
 		"item_code": args.item or args.item_code or "_Test Item",
 		"warehouse": args.warehouse or "_Test Warehouse - _TC",
 		"qty": args.qty or 1,
 		"rate": args.rate or 100,
+		"income_account": "Sales - _TC",
 		"expense_account": "Cost of Goods Sold - _TC",
 		"cost_center": "_Test Cost Center - _TC",
 		"serial_no": args.serial_no
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js
index 5627781..7fbe92b 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.js
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.js
@@ -212,7 +212,7 @@
 					description: __("Optional. This setting will be used to filter in various transactions.") },
 				{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate')},
 				{fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse"},
-				{fieldtype:'Link', fieldname:'currency', label:__('Currency'), options:"Currency"}
+				{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency"}
 			]
 		})
 
diff --git a/erpnext/buying/doctype/supplier/test_records.json b/erpnext/buying/doctype/supplier/test_records.json
index dfa5d46..82e0a44 100644
--- a/erpnext/buying/doctype/supplier/test_records.json
+++ b/erpnext/buying/doctype/supplier/test_records.json
@@ -1,14 +1,22 @@
 [
  {
-  "company": "_Test Company", 
   "doctype": "Supplier", 
   "supplier_name": "_Test Supplier", 
   "supplier_type": "_Test Supplier Type"
  },
  {
-  "company": "_Test Company", 
   "doctype": "Supplier", 
   "supplier_name": "_Test Supplier 1", 
   "supplier_type": "_Test Supplier Type"
+ },
+ {
+  "doctype": "Supplier", 
+  "supplier_name": "_Test Supplier USD", 
+  "supplier_type": "_Test Supplier Type",
+  "default_currency": "USD",
+  "accounts": [{
+    "company": "_Test Company",
+    "account": "_Test Payable USD - _TC"
+  }]
  }
-]
+]
\ No newline at end of file
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 6ba954f..7af7369 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -14,6 +14,7 @@
 force_item_fields = ("item_group", "barcode", "brand", "stock_uom")
 
 class CustomerFrozen(frappe.ValidationError): pass
+class InvalidCurrency(frappe.ValidationError): pass
 
 class AccountsController(TransactionBase):
 	def __init__(self, arg1, arg2=None):
@@ -106,8 +107,6 @@
 
 	def set_price_list_currency(self, buying_or_selling):
 		if self.meta.get_field("currency"):
-			company_currency = get_company_currency(self.company)
-
 			# price list part
 			fieldname = "selling_price_list" if buying_or_selling.lower() == "selling" \
 				else "buying_price_list"
@@ -115,22 +114,22 @@
 				self.price_list_currency = frappe.db.get_value("Price List",
 					self.get(fieldname), "currency")
 
-				if self.price_list_currency == company_currency:
+				if self.price_list_currency == self.company_currency:
 					self.plc_conversion_rate = 1.0
 
 				elif not self.plc_conversion_rate:
 					self.plc_conversion_rate = get_exchange_rate(
-						self.price_list_currency, company_currency)
+						self.price_list_currency, self.company_currency)
 
 			# currency
 			if not self.currency:
 				self.currency = self.price_list_currency
 				self.conversion_rate = self.plc_conversion_rate
-			elif self.currency == company_currency:
+			elif self.currency == self.company_currency:
 				self.conversion_rate = 1.0
 			elif not self.conversion_rate:
 				self.conversion_rate = get_exchange_rate(self.currency,
-					company_currency)
+					self.company_currency)
 
 	def set_missing_item_details(self):
 		"""set missing item values"""
@@ -218,7 +217,7 @@
 		gl_dict.update(args)
 		
 		if not account_currency:
-			account_currency = frappe.db.get_value("Account", gl_dict.account, "currency")
+			account_currency = frappe.db.get_value("Account", gl_dict.account, "account_currency")
 			
 		self.validate_account_currency(gl_dict.account, account_currency)
 		gl_dict = self.set_balance_in_account_currency(gl_dict, account_currency)
@@ -226,17 +225,23 @@
 		return gl_dict
 		
 	def validate_account_currency(self, account, account_currency=None):
-		valid_currency = list(set([self.currency, self.company_currency]))
+		if self.doctype == "Journal Entry":
+			return
+		valid_currency = [self.company_currency]
+		if self.get("currency") and self.currency != self.company_currency:
+			valid_currency.append(self.currency)
+
 		if account_currency not in valid_currency:
 			frappe.throw(_("Account {0} is invalid. Account Currency must be {1}")
 				.format(account, " or ".join(valid_currency)))
 		
 	def set_balance_in_account_currency(self, gl_dict, account_currency=None):			
-		if not self.get("conversion_rate") and account_currency!=self.company_currency:
-			frappe.throw(_("Account: {0} with currency: {1} can not be selected")
-				.format(gl_dict.account, account_currency))
+		if not (self.get("conversion_rate") or self.get("exchange_rate")) \
+			and account_currency!=self.company_currency:
+				frappe.throw(_("Account: {0} with currency: {1} can not be selected")
+					.format(gl_dict.account, account_currency))
 			
-		gl_dict["currency"] = self.company_currency if account_currency==self.company_currency \
+		gl_dict["account_currency"] = self.company_currency if account_currency==self.company_currency \
 			else account_currency
 		
 		# set debit/credit in account currency if not provided
@@ -366,9 +371,9 @@
 
 	def set_total_advance_paid(self):
 		if self.doctype == "Sales Order":
-			dr_or_cr = "credit"
+			dr_or_cr = "credit_in_account_currency"
 		else:
-			dr_or_cr = "debit"
+			dr_or_cr = "debit_in_account_currency"
 
 		advance_paid = frappe.db.sql("""
 			select
@@ -376,10 +381,9 @@
 			from
 				`tabJournal Entry Account`
 			where
-				reference_type = %s and
-				reference_name = %s and
-				docstatus = 1 and is_advance = "Yes" """.format(dr_or_cr=dr_or_cr),
-					(self.doctype, self.name))
+				reference_type = %s and reference_name = %s 
+				and docstatus = 1 and is_advance = "Yes"
+		""".format(dr_or_cr=dr_or_cr), (self.doctype, self.name))
 
 		if advance_paid:
 			advance_paid = flt(advance_paid[0][0], self.precision("advance_paid"))
@@ -421,23 +425,23 @@
 		return party_type, party
 								
 	def validate_currency(self):
-		if self.get("currency") and self.currency != self.company_currency:
+		if self.get("currency"):
 			party_type, party = self.get_party()
-			
-			existing_gle = frappe.db.get_value("GL Entry", {"party_type": party_type, 
-				"party": party, "company": self.company}, ["name", "currency"], as_dict=1)
-			currency_in_existing_entries = existing_gle.currency or self.company_currency
-			
-			if existing_gle:
-				if currency_in_existing_entries != self.company_currency \
-					and currency_in_existing_entries != self.currency:
-						frappe.throw(_("Currency must be {0} for {1} {2}")
-							.format(currency_in_existing_entries, party_type, party))
-			else:
-				party_currency = frappe.db.get_value(party_type, party, "default_currency")
-				if party_currency != self.company_currency and self.currency != party_currency:
-					frappe.throw(_("Currency must be same as {0} currency {1}")
-						.format(party_type, party_currency))
+			if party_type and party:
+				existing_gle = frappe.db.get_value("GL Entry", {"party_type": party_type, 
+					"party": party, "company": self.company}, ["name", "account_currency"], as_dict=1)
+				if existing_gle:
+					currency_in_existing_entries = existing_gle.account_currency or self.company_currency
+					if currency_in_existing_entries != self.company_currency \
+						and currency_in_existing_entries != self.currency:
+							frappe.throw(_("Accounting Entry for {0}: {1} can only be made in currency: {2}")
+								.format(party_type, party, currency_in_existing_entries), InvalidCurrency)
+				else:
+					party_currency = frappe.db.get_value(party_type, party, "default_currency") \
+						or self.company_currency
+					if party_currency != self.company_currency and self.currency != party_currency:
+						frappe.throw(_("Currency must be same as {0} currency {1}")
+							.format(party_type, party_currency), InvalidCurrency)
 				
 @frappe.whitelist()
 def get_tax_rate(account_head):
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index ccbad0d..eccceb0 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -53,7 +53,7 @@
 							"cost_center": detail.cost_center,
 							"remarks": self.get("remarks") or "Accounting Entry for Stock",
 							"debit": flt(sle.stock_value_difference, 2),
-						}, warehouse_account[sle.warehouse]["currency"]))
+						}, warehouse_account[sle.warehouse]["account_currency"]))
 
 						# to target warehouse / expense account						
 						gl_list.append(self.get_gl_dict({
@@ -338,7 +338,7 @@
 def get_warehouse_account():
 	warehouse_account = frappe._dict()
 	
-	for d in frappe.db.sql("""select warehouse, name, currency from tabAccount
+	for d in frappe.db.sql("""select warehouse, name, account_currency from tabAccount
 		where account_type = 'Warehouse' and ifnull(warehouse, '') != ''""", as_dict=1):
 			warehouse_account.setdefault(d.warehouse, d)
 	return warehouse_account
diff --git a/erpnext/patches/v6_0/multi_currency.py b/erpnext/patches/v6_0/multi_currency.py
index 21c851b..d506ab7 100644
--- a/erpnext/patches/v6_0/multi_currency.py
+++ b/erpnext/patches/v6_0/multi_currency.py
@@ -77,7 +77,7 @@
 					
 				party_account = party_gle.account or company.default_receivable_account
 				
-				party.append("party_accounts", {
+				party.append("accounts", {
 					"company": company.name,
 					"account": party_account
 				})
diff --git a/erpnext/selling/doctype/customer/customer.json b/erpnext/selling/doctype/customer/customer.json
index 105f814..952be8b 100644
--- a/erpnext/selling/doctype/customer/customer.json
+++ b/erpnext/selling/doctype/customer/customer.json
@@ -567,7 +567,7 @@
    "no_copy": 0, 
    "oldfieldname": "credit_limit", 
    "oldfieldtype": "Currency", 
-   "options": "Company:company:default_currency", 
+   "options": "", 
    "permlevel": 1, 
    "print_hide": 0, 
    "read_only": 0, 
@@ -796,7 +796,7 @@
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-08-27 16:21:57.520411", 
+ "modified": "2015-08-27 17:00:50.604869", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Customer", 
diff --git a/erpnext/selling/doctype/customer/test_records.json b/erpnext/selling/doctype/customer/test_records.json
index e076f7a..5c0bbd9 100644
--- a/erpnext/selling/doctype/customer/test_records.json
+++ b/erpnext/selling/doctype/customer/test_records.json
@@ -1,6 +1,5 @@
 [
  {
-  "company": "_Test Company",
   "customer_group": "_Test Customer Group",
   "customer_name": "_Test Customer",
   "customer_type": "Individual",
@@ -8,7 +7,6 @@
   "territory": "_Test Territory"
  },
  {
-  "company": "_Test Company",
   "customer_group": "_Test Customer Group",
   "customer_name": "_Test Customer 1",
   "customer_type": "Individual",
@@ -16,7 +14,6 @@
   "territory": "_Test Territory"
  },
  {
-  "company": "_Test Company",
   "customer_group": "_Test Customer Group",
   "customer_name": "_Test Customer 2",
   "customer_type": "Individual",
@@ -24,11 +21,22 @@
   "territory": "_Test Territory"
  },
  {
-  "company": "_Test Company",
   "customer_group": "_Test Customer Group",
   "customer_name": "_Test Customer 3",
   "customer_type": "Individual",
   "doctype": "Customer",
   "territory": "_Test Territory"
+ },
+ {
+  "customer_group": "_Test Customer Group",
+  "customer_name": "_Test Customer USD",
+  "customer_type": "Individual",
+  "doctype": "Customer",
+  "territory": "_Test Territory",
+  "default_currency": "USD",
+  "accounts": [{
+	  "company": "_Test Company",
+	  "account": "_Test Receivable USD - _TC"
+  }]
  }
 ]
diff --git a/erpnext/setup/doctype/company/test_records.json b/erpnext/setup/doctype/company/test_records.json
index 13cb03e..b6918b3 100644
--- a/erpnext/setup/doctype/company/test_records.json
+++ b/erpnext/setup/doctype/company/test_records.json
@@ -19,7 +19,7 @@
  },
  {
   "abbr": "_TC2",
-  "company_name": "_Test Company 3",
+  "company_name": "_Test Company 2",
   "default_currency": "EUR",
   "country": "Germany",
   "doctype": "Company",
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index f6649c1..85610a4 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -316,10 +316,10 @@
 						"cost_center": d.cost_center,
 						"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
 						"debit": stock_value_diff
-					}, warehouse_account[d.warehouse]["currency"]))
+					}, warehouse_account[d.warehouse]["account_currency"]))
 
 					# stock received but not billed
-					stock_rbnb_currency = frappe.db.get_value("Account", stock_rbnb, "currency")
+					stock_rbnb_currency = frappe.db.get_value("Account", stock_rbnb, "account_currency")
 					gl_entries.append(self.get_gl_dict({
 						"account": stock_rbnb,
 						"against": warehouse_account[d.warehouse]["name"],
@@ -350,14 +350,14 @@
 							"cost_center": d.cost_center,
 							"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
 							"credit": flt(d.rm_supp_cost)
-						}, warehouse_account[self.supplier_warehouse]["currency"]))
+						}, warehouse_account[self.supplier_warehouse]["account_currency"]))
 
 					# divisional loss adjustment
 					sle_valuation_amount = flt(flt(d.valuation_rate, val_rate_db_precision) * flt(d.qty) * flt(d.conversion_factor),
 							self.precision("base_net_amount", d))
 
 					distributed_amount = flt(flt(d.base_net_amount, self.precision("base_net_amount", d))) + \
-						flt(d.landed_cost_voucher_amount) + flt(d.rm_supp_cost)
+						flt(d.landed_cost_voucher_amount) + flt(d.rm_supp_cost) + flt(d.item_tax_amount)
 
 					divisional_loss = flt(distributed_amount - sle_valuation_amount, self.precision("base_net_amount", d))
 					if divisional_loss: