Merge branch 'develop'
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 5ba4160..7a36695 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 import frappe
 
-__version__ = '8.3.3'
+__version__ = '8.3.4'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 282425d..2dd4e7a 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -803,9 +803,10 @@
 				continue
 
 			for serial_no in item.serial_no.split("\n"):
-				sno = frappe.get_doc('Serial No', serial_no)
-				sno.sales_invoice = invoice
-				sno.db_update()
+				if serial_no and frappe.db.exists('Serial No', serial_no):
+					sno = frappe.get_doc('Serial No', serial_no)
+					sno.sales_invoice = invoice
+					sno.db_update()
 
 	def validate_serial_numbers(self):
 		"""
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index b2f3212..a988112 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -151,26 +151,28 @@
 	},
 	
 	production_item: function(frm) {
-		frappe.call({
-			method: "erpnext.manufacturing.doctype.production_order.production_order.get_item_details",
-			args: {
-				item: frm.doc.production_item,
-				project: frm.doc.project
-			},
-			callback: function(r) {
-				if(r.message) {
-					erpnext.in_production_item_onchange = true;
-					$.each(["description", "stock_uom", "project", "bom_no"], function(i, field) {
-						frm.set_value(field, r.message[field]);
-					});
+		if (frm.doc.production_item) {
+			frappe.call({
+				method: "erpnext.manufacturing.doctype.production_order.production_order.get_item_details",
+				args: {
+					item: frm.doc.production_item,
+					project: frm.doc.project
+				},
+				callback: function(r) {
+					if(r.message) {
+						erpnext.in_production_item_onchange = true;
+						$.each(["description", "stock_uom", "project", "bom_no"], function(i, field) {
+							frm.set_value(field, r.message[field]);
+						});
 
-					if(r.message["set_scrap_wh_mandatory"]){
-						frm.toggle_reqd("scrap_warehouse", true);
+						if(r.message["set_scrap_wh_mandatory"]){
+							frm.toggle_reqd("scrap_warehouse", true);
+						}
+						erpnext.in_production_item_onchange = false;
 					}
-					erpnext.in_production_item_onchange = false;
 				}
-			}
-		});
+			});
+		}
 	},
 	
 	project: function(frm) {
diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js
index ab35574..9f0c050 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.js
+++ b/erpnext/selling/doctype/installation_note/installation_note.js
@@ -30,12 +30,8 @@
 	setup_queries: function() {
 		var me = this;
 
-		this.frm.set_query("customer_address", function() {
-			return {
-				filters: {'customer': me.frm.doc.customer }
-			}
-		});
-
+		frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
+		frm.set_query('customer_address', erpnext.queries.address_query);
 		this.frm.set_query('contact_person', erpnext.queries.contact_query);
 
 		this.frm.set_query("customer", function() {