diff --git a/public/js/controllers/stock_controller.js b/public/js/controllers/stock_controller.js
index e4b0319..de18fe0 100644
--- a/public/js/controllers/stock_controller.js
+++ b/public/js/controllers/stock_controller.js
@@ -18,6 +18,7 @@
 		}
 		
 	},
+
 	show_general_ledger: function() {
 		var me = this;
 		if(this.frm.doc.docstatus===1 && cint(wn.defaults.get_default("auto_accounting_for_stock"))) { 
@@ -30,5 +31,16 @@
 				wn.set_route("general-ledger");
 			});
 		}
+	},
+
+	copy_account_in_all_row: function(doc, dt, dn, fieldname) {
+		var d = locals[dt][dn];
+		if(d[fieldname]){
+			var cl = getchildren(this.frm.cscript.tname, doc.name, this.frm.cscript.fname, doc.doctype);
+			for(var i = 0; i < cl.length; i++) {
+				if(!cl[i][fieldname]) cl[i][fieldname] = d[fieldname];
+			}
+		}
+		refresh_field(this.frm.cscript.fname);
 	}
 });
\ No newline at end of file
diff --git a/public/js/transaction.js b/public/js/transaction.js
index 79ea536..2886e1c 100644
--- a/public/js/transaction.js
+++ b/public/js/transaction.js
@@ -24,11 +24,9 @@
 			}, function(fieldname, value) {
 				if(me.frm.fields_dict[fieldname] && !me.frm.doc[fieldname])
 					me.frm.set_value(fieldname, value);
-			});
-			
-			me.frm.script_manager.trigger("company");
+			});			
 		}
-		
+
 		if(this.other_fname) {
 			this[this.other_fname + "_remove"] = this.calculate_taxes_and_totals;
 		}
@@ -39,9 +37,9 @@
 	},
 	
 	onload_post_render: function() {
-		if(this.frm.doc.__islocal && this.frm.doc.company && 
-			!this.frm.doc.customer && !this.frm.doc.is_pos) {
-				var me = this;
+		var me = this;
+		if(this.frm.doc.__islocal && this.frm.doc.company && !this.frm.doc.is_pos) {
+			if(!this.frm.doc.customer || !this.frm.doc.supplier) {
 				return this.frm.call({
 					doc: this.frm.doc,
 					method: "onload_post_render",
@@ -50,8 +48,12 @@
 						// remove this call when using client side mapper
 						me.set_default_values();
 						me.set_dynamic_labels();
+						me.calculate_taxes_and_totals();
 					}
 				});
+			} else {
+				this.calculate_taxes_and_totals();
+			}
 		}
 	},
 	
@@ -169,12 +171,12 @@
 	conversion_rate: function() {
 		if(this.frm.doc.currency === this.get_company_currency()) {
 			this.frm.set_value("conversion_rate", 1.0);
-		} else if(this.frm.doc.currency === this.frm.doc.price_list_currency &&
+		}
+		if(this.frm.doc.currency === this.frm.doc.price_list_currency &&
 			this.frm.doc.plc_conversion_rate !== this.frm.doc.conversion_rate) {
 				this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
 		}
-
-		this.calculate_taxes_and_totals();
+		if(flt(this.frm.doc.conversion_rate)>0.0) this.calculate_taxes_and_totals();
 	},
 	
 	get_price_list_currency: function(buying_or_selling) {
@@ -224,7 +226,8 @@
 	plc_conversion_rate: function() {
 		if(this.frm.doc.price_list_currency === this.get_company_currency()) {
 			this.frm.set_value("plc_conversion_rate", 1.0);
-		} else if(this.frm.doc.price_list_currency === this.frm.doc.currency) {
+		}
+		if(this.frm.doc.price_list_currency === this.frm.doc.currency) {
 			this.frm.set_value("conversion_rate", this.frm.doc.plc_conversion_rate);
 			this.calculate_taxes_and_totals();
 		}
