diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 85166a6..561d20e 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -379,60 +379,6 @@
 	}
 }
 
-cur_frm.cscript.item_code = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn];
-	if(d.item_code) {
-		args = {
-			'item_code'			: d.item_code,
-			'warehouse'			: cstr(d.s_warehouse) || cstr(d.t_warehouse),
-			'transfer_qty'		: d.transfer_qty,
-			'serial_no	'		: d.serial_no,
-			'bom_no'			: d.bom_no,
-			'expense_account'	: d.expense_account,
-			'cost_center'		: d.cost_center,
-			'company'			: cur_frm.doc.company
-		};
-		return frappe.call({
-			doc: cur_frm.doc,
-			method: "get_item_details",
-			args: args,
-			callback: function(r) {
-				if(r.message) {
-					var d = locals[cdt][cdn];
-					$.each(r.message, function(k, v) {
-						d[k] = v;
-					});
-					refresh_field("items");
-				}
-			}
-		});
-	}
-}
-
-cur_frm.cscript.barcode = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn];
-	if (d.barcode) {
-		frappe.call({
-			method: "erpnext.stock.get_item_details.get_item_code",
-			args: {"barcode": d.barcode },
-			callback: function(r) {
-				if (!r.exe){
-					frappe.model.set_value(cdt, cdn, "item_code", r.message);
-				}
-			}
-		});
-	}
-}
-
-cur_frm.cscript.uom = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn];
-	if(d.uom && d.item_code){
-		var arg = {'item_code':d.item_code, 'uom':d.uom, 'qty':d.qty}
-		return get_server_fields('get_uom_details', JSON.stringify(arg),
-			'items', doc, cdt, cdn, 1);
-	}
-}
-
 cur_frm.cscript.validate = function(doc, cdt, cdn) {
 	cur_frm.cscript.validate_items(doc);
 }
@@ -453,18 +399,100 @@
 	erpnext.utils.copy_value_in_all_row(doc, cdt, cdn, "items", "cost_center");
 }
 
-cur_frm.cscript.company = function(doc, cdt, cdn) {
-	if(doc.company) {
-		var company_doc = frappe.get_doc(":Company", doc.company);
-		if(company_doc.default_letter_head) {
-			cur_frm.set_value("letter_head", company_doc.default_letter_head);
-		}
-	}
-}
-
 
 frappe.ui.form.on('Landed Cost Taxes and Charges', {
 	amount: function(frm) {
 		frm.cscript.calculate_amount();
 	}
 })
+
+frappe.ui.form.on('Stock Entry Detail', {
+	qty: function(frm, cdt, cdn) {
+		frm.events.set_serial_no(frm, cdt, cdn);
+	},
+
+	s_warehouse: function(frm, cdt, cdn) {
+		frm.events.set_serial_no(frm, cdt, cdn);
+	},
+	barcode: function(doc, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		if (d.barcode) {
+			frappe.call({
+				method: "erpnext.stock.get_item_details.get_item_code",
+				args: {"barcode": d.barcode },
+				callback: function(r) {
+					if (!r.exe){
+						frappe.model.set_value(cdt, cdn, "item_code", r.message);
+					}
+				}
+			});
+		}
+	},
+	uom: function(doc, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		if(d.uom && d.item_code){
+			var arg = {'item_code':d.item_code, 'uom':d.uom, 'qty':d.qty}
+			return get_server_fields('get_uom_details', JSON.stringify(arg),
+				'items', doc, cdt, cdn, 1);
+		}
+	},
+	item_code: function(doc, cdt, cdn) {
+		var d = locals[cdt][cdn];
+		if(d.item_code) {
+			args = {
+				'item_code'			: d.item_code,
+				'warehouse'			: cstr(d.s_warehouse) || cstr(d.t_warehouse),
+				'transfer_qty'		: d.transfer_qty,
+				'serial_no	'		: d.serial_no,
+				'bom_no'			: d.bom_no,
+				'expense_account'	: d.expense_account,
+				'cost_center'		: d.cost_center,
+				'company'			: cur_frm.doc.company,
+				'qty'				: d.qty
+			};
+			return frappe.call({
+				doc: cur_frm.doc,
+				method: "get_item_details",
+				args: args,
+				callback: function(r) {
+					if(r.message) {
+						var d = locals[cdt][cdn];
+						$.each(r.message, function(k, v) {
+							d[k] = v;
+						});
+						refresh_field("items");
+					}
+				}
+			});
+		}
+	}
+})
+
+frappe.ui.form.on('Stock Entry', {
+	company: function(doc, cdt, cdn) {
+		if(doc.company) {
+			var company_doc = frappe.get_doc(":Company", doc.company);
+			if(company_doc.default_letter_head) {
+				cur_frm.set_value("letter_head", company_doc.default_letter_head);
+			}
+		}
+	},
+	set_serial_no: function(doc, cdt, cdn) {
+		var d = frappe.model.get_doc(cdt, cdn);
+		if(!d.item_code && !d.s_warehouse && !d.qty) return;
+		var	args = {
+				'item_code'	: d.item_code,
+				'warehouse'	: cstr(d.s_warehouse),
+				'qty'		: d.qty
+			};
+			frappe.call({
+				method: "erpnext.stock.doctype.stock_entry.stock_entry.get_serial_no",
+				args: {"args": args},
+				callback: function(r) {
+					if (!r.exe){
+						frappe.model.set_value(cdt, cdn, "serial_no", r.message);
+					}
+				}
+			});
+		},
+})
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index cf3d604..a60e945 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -8,7 +8,7 @@
 from frappe.utils import cstr, cint, flt, comma_or, getdate, nowdate, formatdate, format_time
 from erpnext.stock.utils import get_incoming_rate
 from erpnext.stock.stock_ledger import get_previous_sle, NegativeStockError
-from erpnext.stock.get_item_details import get_bin_details, get_default_cost_center, get_conversion_factor
+from erpnext.stock.get_item_details import get_bin_details, get_default_cost_center, get_conversion_factor, process_args, get_serial_nos_by_fifo
 from erpnext.manufacturing.doctype.bom.bom import validate_bom_no
 import json
 
@@ -486,7 +486,8 @@
 			'conversion_factor'		: 1,
 			'batch_no'				: '',
 			'actual_qty'			: 0,
-			'basic_rate'			: 0
+			'basic_rate'			: 0,
+			'serial_no'				: ''
 		}
 		for d in [["Account", "expense_account", "default_expense_account"],
 			["Cost Center", "cost_center", "cost_center"]]:
@@ -867,3 +868,16 @@
 		}
 
 	return ret
+
+@frappe.whitelist()
+def get_serial_no(args):
+	if isinstance(args, basestring):
+		args = json.loads(args)
+	args = frappe._dict(args)
+
+	if args.get('warehouse'):
+		if frappe.get_value('Item', {'item_code': args.item_code}, "has_serial_no") == 1:
+			args = json.dumps({"item_code": args.get('item_code'),"warehouse": args.get('warehouse'),"qty": args.get('qty')})
+			args = process_args(args)
+			serial_no = get_serial_nos_by_fifo(args)
+			return serial_no
\ No newline at end of file
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index e5dd735..f8410af 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -75,7 +75,7 @@
 
 	if args.get("doctype") in ("Sales Invoice", "Delivery Note"):
 		if item_doc.has_serial_no == 1 and not args.serial_no:
-			out.serial_no = get_serial_nos_by_fifo(args, item_doc)
+			out.serial_no = get_serial_nos_by_fifo(args)
 
 	if args.transaction_date and item.lead_time_days:
 		out.schedule_date = out.lead_time_date = add_days(args.transaction_date,
@@ -339,7 +339,7 @@
 	return pos_profile and pos_profile[0] or None
 
 
-def get_serial_nos_by_fifo(args, item_doc):
+def get_serial_nos_by_fifo(args):
 	if frappe.db.get_single_value("Stock Settings", "automatically_set_serial_nos_based_on_fifo"):
 		return "\n".join(frappe.db.sql_list("""select name from `tabSerial No`
 			where item_code=%(item_code)s and warehouse=%(warehouse)s
