diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js
index 7d14d9e..2edfa9e 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.js
+++ b/erpnext/projects/doctype/timesheet/timesheet.js
@@ -1,9 +1,9 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
-cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
 
 frappe.ui.form.on("Timesheet", {
 	setup: function(frm) {
+		frm.add_fetch('employee', 'employee_name', 'employee_name');
 		frm.fields_dict.employee.get_query = function() {
 			return {
 				filters:{
@@ -51,8 +51,8 @@
 		}
 
 		if(frm.doc.per_billed > 0) {
-			cur_frm.fields_dict["time_logs"].grid.toggle_enable("billing_hours", false);
-			cur_frm.fields_dict["time_logs"].grid.toggle_enable("billable", false);
+			frm.fields_dict["time_logs"].grid.toggle_enable("billing_hours", false);
+			frm.fields_dict["time_logs"].grid.toggle_enable("billable", false);
 		}
 	},
 
@@ -77,7 +77,7 @@
 	},
 
 	from_time: function(frm, cdt, cdn) {
-		calculate_end_time(frm, cdt, cdn)
+		calculate_end_time(frm, cdt, cdn);
 	},
 
 	to_time: function(frm, cdt, cdn) {
@@ -109,18 +109,20 @@
 	},
 
 	activity_type: function(frm, cdt, cdn) {
-		var child = locals[cdt][cdn];
+		frm.script_manager.copy_from_first_row('time_logs', frm.selected_doc,
+			'project');
+
 		frappe.call({
 			method: "erpnext.projects.doctype.timesheet.timesheet.get_activity_cost",
 			args: {
 				employee: frm.doc.employee,
-				activity_type: child.activity_type
+				activity_type: frm.selected_doc.activity_type
 			},
 			callback: function(r){
 				if(r.message){
 					frappe.model.set_value(cdt, cdn, 'billing_rate', r.message['billing_rate']);
 					frappe.model.set_value(cdt, cdn, 'costing_rate', r.message['costing_rate']);
-					calculate_billing_costing_amount(frm, cdt, cdn)
+					calculate_billing_costing_amount(frm, cdt, cdn);
 				}
 			}
 		})
@@ -174,8 +176,8 @@
 		}
 	}
 
-	cur_frm.set_value("total_billable_hours", total_billing_hr);
-	cur_frm.set_value("total_hours", total_working_hr);
-	cur_frm.set_value("total_billable_amount", total_billable_amount);
-	cur_frm.set_value("total_costing_amount", total_costing_amount);
+	frm.set_value("total_billable_hours", total_billing_hr);
+	frm.set_value("total_hours", total_working_hr);
+	frm.set_value("total_billable_amount", total_billable_amount);
+	frm.set_value("total_costing_amount", total_costing_amount);
 }
\ No newline at end of file
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index ca822b1..8ad64d2 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -16,11 +16,11 @@
 					// or set discount
 					item.discount_percentage = 0;
 					item.margin_type = 'Amount';
-					item.margin_rate_or_amount = flt(item.rate - item.price_list_rate, 
+					item.margin_rate_or_amount = flt(item.rate - item.price_list_rate,
 						precision("margin_rate_or_amount", item));
 					item.rate_with_margin = item.rate;
 				} else {
-					item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0, 
+					item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0,
 						precision("discount_percentage", item));
 					item.margin_type = '';
 					item.margin_rate_or_amount = 0;
@@ -602,8 +602,10 @@
 
 	toggle_conversion_factor: function(item) {
 		// toggle read only property for conversion factor field if the uom and stock uom are same
-		this.frm.fields_dict.items.grid.toggle_enable("conversion_factor",
-			(item.uom != item.stock_uom)? true: false)
+		if(this.frm.get_field('items').grid.fields_map.conversion_factor) {
+			this.frm.fields_dict.items.grid.toggle_enable("conversion_factor",
+				(item.uom != item.stock_uom)? true: false);
+		}
 	},
 
 	qty: function(doc, cdt, cdn) {
@@ -756,7 +758,7 @@
 		if(this.frm.doc.ignore_pricing_rule) {
 			var me = this;
 			var item_list = [];
-			
+
 			$.each(this.frm.doc["items"] || [], function(i, d) {
 				if (d.item_code) {
 					item_list.push({
@@ -1144,7 +1146,7 @@
 
 		if(!item.item_code) {
 			frappe.throw(__("Please enter Item Code to get batch no"));
-		} else if (doc.doctype == "Purchase Receipt" || 
+		} else if (doc.doctype == "Purchase Receipt" ||
 			(doc.doctype == "Purchase Invoice" && doc.update_stock)) {
 
 			return {
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index 23d1fd4..3361020 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -30,11 +30,15 @@
 });
 
 frappe.ui.form.on("Material Request Item", {
-	"qty": function (frm, doctype, name) {
+	qty: function (frm, doctype, name) {
 		var d = locals[doctype][name];
 		if (flt(d.qty) < flt(d.min_order_qty)) {
 			frappe.msgprint(__("Warning: Material Requested Qty is less than Minimum Order Qty"));
 		}
+	},
+	item_code: function(frm, doctype, name) {
+		frm.script_manager.copy_from_first_row('items', frm.selected_doc,
+			'schedule_date');
 	}
 });
 
@@ -118,18 +122,6 @@
 
 	},
 
-	schedule_date: function(doc, cdt, cdn) {
-		var val = locals[cdt][cdn].schedule_date;
-		if(val) {
-			$.each((doc.items || []), function(i, d) {
-				if(!d.schedule_date) {
-					d.schedule_date = val;
-				}
-			});
-			refresh_field("items");
-		}
-	},
-
 	get_items_from_bom: function() {
 		var d = new frappe.ui.Dialog({
 			title: __("Get Items from BOM"),
