diff --git a/erpnext/setup/doctype/email_settings/email_settings.py b/erpnext/setup/doctype/email_settings/email_settings.py
index 88a1900..ed8134a 100644
--- a/erpnext/setup/doctype/email_settings/email_settings.py
+++ b/erpnext/setup/doctype/email_settings/email_settings.py
@@ -37,20 +37,20 @@
 			Checks incoming email settings
 		"""
 		if self.doc.outgoing_mail_server:
-			from webnotes.utils import cint
+			from webnotes.utils import cint, get_encoded_string
 			import _socket
 			from webnotes.utils.email_lib.send import EMail
 			import smtplib
 			out_email = EMail()
-			out_email.server = self.doc.outgoing_mail_server.encode('utf-8')
+			out_email.server = get_encoded_string(self.doc.outgoing_mail_server)
 			out_email.port = cint(self.doc.mail_port)
 			out_email.use_ssl = self.doc.use_ssl
 			try:
 				err_msg = "Login Id or Mail Password missing. Please enter and try again."
 				if not (self.doc.mail_login and self.doc.mail_password):
 					raise AttributeError, err_msg
-				out_email.login = self.doc.mail_login.encode('utf-8')
-				out_email.password =  self.doc.mail_password.encode('utf-8')
+				out_email.login = get_encoded_string(self.doc.mail_login)
+				out_email.password =  get_encoded_string(self.doc.mail_password)
 			except AttributeError, e:
 				webnotes.msgprint(err_msg)
 				raise e
@@ -72,15 +72,17 @@
 			from webnotes.utils.email_lib.receive import POP3Mailbox
 			from webnotes.model.doc import Document
 			import _socket, poplib
+			from webnotes.utils import get_encoded_string
+			
 			inc_email = Document('Incoming Email Settings')
-			inc_email.host = self.doc.support_host.encode('utf-8')
+			inc_email.host = get_encoded_string(self.doc.support_host)
 			inc_email.use_ssl = self.doc.support_use_ssl
 			try:
 				err_msg = 'User Name or Support Password missing. Please enter and try again.'
 				if not (self.doc.support_username and self.doc.support_password):
 					raise AttributeError, err_msg
-				inc_email.username = self.doc.support_username.encode('utf-8')
-				inc_email.password = self.doc.support_password.encode('utf-8')
+				inc_email.username = get_encoded_string(self.doc.support_username)
+				inc_email.password = get_encoded_string(self.doc.support_password)
 			except AttributeError, e:
 				webnotes.msgprint(err_msg)
 				raise e
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 572a790..0a255d1 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -35,8 +35,8 @@
 
 cur_frm.cscript.hide_website_fields = function(doc) {
 	var website_fields_list = ['page_name', 'website_image', 'web_short_description',
-								'web_long_description']
-	if (cint(doc.show_in_website)) {
+								'web_long_description'];
+	if (doc && cint(doc.show_in_website)) {
 		unhide_field(website_fields_list);
 	} else {
 		hide_field(website_fields_list);
diff --git a/public/js/all-app.js b/public/js/all-app.js
index 817bef8..6be9a41 100644
--- a/public/js/all-app.js
+++ b/public/js/all-app.js
@@ -1844,7 +1844,7 @@
 this.copy_doc(fn,1);}
 _f.get_value=function(dt,dn,fn){if(locals[dt]&&locals[dt][dn])
 return locals[dt][dn][fn];}
-_f.Frm.prototype.set_value_in_locals=function(dt,dn,fn,v){var d=locals[dt][dn];var changed=d[fn]!=v;if(changed&&(d[fn]==null||v==null)&&(cstr(d[fn])==cstr(v)))
+_f.Frm.prototype.set_value_in_locals=function(dt,dn,fn,v){var d=locals[dt][dn];if(!d)return;var changed=d[fn]!=v;if(changed&&(d[fn]==null||v==null)&&(cstr(d[fn])==cstr(v)))
 changed=false;if(changed){d[fn]=v;if(d.parenttype)
 d.__unsaved=1;this.set_unsaved();}}
 _f.Frm.prototype.set_unsaved=function(){if(cur_frm.doc.__unsaved)return;cur_frm.doc.__unsaved=1;cur_frm.frm_head.refresh_labels()}
diff --git a/public/server.py b/public/server.py
index 2b5e238..497346c 100755
--- a/public/server.py
+++ b/public/server.py
@@ -39,12 +39,14 @@
 import webnotes.handler
 import webnotes.auth
 
+from webnotes.utils import cstr
+
 def init():
 	# make the form_dict
 	webnotes.form = cgi.FieldStorage(keep_blank_values=True)
 	for key in webnotes.form.keys():
-		webnotes.form_dict[key] = webnotes.form.getvalue(key)
-
+		webnotes.form_dict[key] = cstr(webnotes.form.getvalue(key))
+	
 	# init request
 	try:
 		webnotes.http_request = webnotes.auth.HTTPRequest()
diff --git a/public/web.py b/public/web.py
index ed0441f..4696ebe 100755
--- a/public/web.py
+++ b/public/web.py
@@ -41,6 +41,7 @@
 
 def respond():
 	import webnotes
+	from webnotes.utils import get_encoded_string
 	try:
 		if 'page' in webnotes.form_dict:
 			html = get_html(webnotes.form_dict['page'])
@@ -52,7 +53,7 @@
 
 	print "Content-Type: text/html"
 	print
-	print html.encode('utf-8')
+	print get_encoded_string(html)
 
 def get_html(page_name):
 	import website.utils
