diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 3eb69fd..561aa4d 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -16,4 +16,5 @@
 execute:webnotes.reload_doc('accounts', 'doctype', 'pos_setting') # 2014-01-29
 execute:webnotes.reload_doc('selling', 'doctype', 'customer') # 2014-01-29
 execute:webnotes.reload_doc('buying', 'doctype', 'supplier') # 2014-01-29
-erpnext.patches.4_0.map_charge_to_taxes_and_charges
\ No newline at end of file
+erpnext.patches.4_0.map_charge_to_taxes_and_charges
+execute:webnotes.reload_doc('support', 'doctype', 'newsletter') # 2014-01-31
\ No newline at end of file
diff --git a/erpnext/setup/doctype/naming_series/naming_series.js b/erpnext/setup/doctype/naming_series/naming_series.js
index e59756b..4f6a4c9 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.js
+++ b/erpnext/setup/doctype/naming_series/naming_series.js
@@ -1,8 +1,7 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-// Settings
-cur_frm.cscript.onload_post_render = function(doc, cdt, cdn){
+cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
 	return cur_frm.call({
 		doc: cur_frm.doc,
 		method: 'get_transactions',
@@ -10,7 +9,7 @@
 			cur_frm.cscript.update_selects(r);
 			cur_frm.cscript.select_doc_for_series(doc, cdt, cdn);
 		}
-	})
+	});
 }
 
 cur_frm.cscript.update_selects = function(r) {
@@ -18,29 +17,27 @@
 	set_field_options('prefix', r.message.prefixes);
 }
 
-
 cur_frm.cscript.select_doc_for_series = function(doc, cdt, cdn) {
 	cur_frm.toggle_display(['help_html','set_options', 'user_must_always_select', 'update'], 
-		doc.select_doc_for_series)
+		doc.select_doc_for_series);
 
 	var callback = function(r, rt){
 		locals[cdt][cdn].set_options = r.message;
 		refresh_field('set_options');
-		if(r.message && r.message.split('\n')[0]=='') {
-			cur_frm.set_value('user_must_always_select', 1)
-		}
+		if(r.message && r.message.split('\n')[0]=='')
+			cur_frm.set_value('user_must_always_select', 1);
 	}
 
 	if(doc.select_doc_for_series)
-		return $c_obj(make_doclist(doc.doctype, doc.name),'get_options','',callback)
+		return $c_obj(make_doclist(doc.doctype, doc.name),'get_options','',callback);
 }
 
 cur_frm.cscript.update = function() {
-	return cur_frm.call_server('update_series', '', cur_frm.cscript.update_selects)
+	return cur_frm.call_server('update_series', '', cur_frm.cscript.update_selects);
 }
 
 cur_frm.cscript.prefix = function(doc, dt, dn) {
 	return cur_frm.call_server('get_current', '', function(r) {
 		refresh_field('current_value');
-	})
-}
+	});
+}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index 092de20..10cdac2 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -5,10 +5,9 @@
 import webnotes
 
 from webnotes.utils import cstr
-from webnotes import msgprint
+from webnotes import msgprint, throw, _
 import webnotes.model.doctype
 
-
 class DocType:
 	def __init__(self, d, dl):
 		self.doc, self.doclist = d, dl
@@ -24,7 +23,7 @@
 			"prefixes": "\n".join([''] + [i[0] for i in 
 				webnotes.conn.sql("""select name from tabSeries order by name""")])
 		}
-	
+
 	def scrub_options_list(self, ol):
 		options = filter(lambda x: x, [cstr(n.upper()).strip() for n in ol])
 		return options
@@ -33,29 +32,29 @@
 		"""update series list"""
 		self.check_duplicate()
 		series_list = self.doc.set_options.split("\n")
-		
+
 		# set in doctype
 		self.set_series_for(self.doc.select_doc_for_series, series_list)
-		
+
 		# create series
 		map(self.insert_series, [d.split('.')[0] for d in series_list])
-		
-		msgprint('Series Updated')
-		
+
+		msgprint(_("Series Updated"))
+
 		return self.get_transactions()
-	
+
 	def set_series_for(self, doctype, ol):
 		options = self.scrub_options_list(ol)
-		
+
 		# validate names
 		for i in options: self.validate_series_name(i)
-		
+
 		if self.doc.user_must_always_select:
 			options = [''] + options
 			default = ''
 		else:
 			default = options[0]
-		
+
 		# update in property setter
 		from webnotes.model.doc import Document
 		prop_dict = {'options': "\n".join(options), 'default': default}
@@ -81,11 +80,11 @@
 		self.doc.set_options = "\n".join(options)
 
 		webnotes.clear_cache(doctype=doctype)
-			
+
 	def check_duplicate(self):
 		from webnotes.core.doctype.doctype.doctype import DocType
 		dt = DocType()
-	
+
 		parent = list(set(
 			webnotes.conn.sql_list("""select dt.name 
 				from `tabDocField` df, `tabDocType` dt 
@@ -105,15 +104,20 @@
 				if i[0]:
 					existing_series = [d.split('.')[0] for d in i[0].split("\n")]
 					if series.split(".")[0] in existing_series:
-						msgprint("Oops! Series name %s is already in use in %s. \
-							Please select a new one" % (series, i[1]), raise_exception=1)
-			
+						throw("{oops}! {sr} {series} {msg} {existing_series}. {select}".format(**{
+							"oops": _("Oops"),
+							"sr": _("Series Name"),
+							"series": series,
+							"msg": _("is already in use in"),
+							"existing_series": i[1],
+							"select": _("Please select a new one")
+						}))
+
 	def validate_series_name(self, n):
 		import re
 		if not re.match("^[a-zA-Z0-9-/.#]*$", n):
-			msgprint('Special Characters except "-" and "/" not allowed in naming series',
-				raise_exception=True)
-		
+			throw('Special Characters except "-" and "/" not allowed in naming series')
+
 	def get_options(self, arg=''):
 		sr = webnotes.model.doctype.get_property(self.doc.select_doc_for_series, 
 			'options', 'naming_series')
@@ -121,14 +125,14 @@
 
 	def get_current(self, arg=None):
 		"""get series current"""
-		self.doc.current_value = webnotes.conn.get_value("Series", 
-			self.doc.prefix.split('.')[0], "current")
+		if self.doc.prefix:
+			self.doc.current_value = webnotes.conn.get_value("Series", 
+				self.doc.prefix.split('.')[0], "current")
 
 	def insert_series(self, series):
 		"""insert series if missing"""
 		if not webnotes.conn.exists('Series', series):
-			webnotes.conn.sql("insert into tabSeries (name, current) values (%s, 0)", 
-				(series))			
+			webnotes.conn.sql("insert into tabSeries (name, current) values (%s, 0)", (series))
 
 	def update_series_start(self):
 		if self.doc.prefix:
@@ -136,9 +140,9 @@
 			self.insert_series(prefix)
 			webnotes.conn.sql("update `tabSeries` set current = %s where name = %s", 
 				(self.doc.current_value, prefix))
-			msgprint("Series Updated Successfully")
+			msgprint(_("Series Updated Successfully"))
 		else:
-			msgprint("Please select prefix first")
+			msgprint(_("Please select prefix first"))
 
 def set_by_naming_series(doctype, fieldname, naming_series, hide_name_field=True):
 	from webnotes.core.doctype.property_setter.property_setter import make_property_setter
@@ -148,7 +152,8 @@
 
 		# set values for mandatory
 		webnotes.conn.sql("""update `tab{doctype}` set naming_series={s} where 
-			ifnull(naming_series, '')=''""".format(doctype=doctype, s="%s"), get_default_naming_series(doctype))
+			ifnull(naming_series, '')=''""".format(doctype=doctype, s="%s"), 
+			get_default_naming_series(doctype))
 
 		if hide_name_field:
 			make_property_setter(doctype, fieldname, "reqd", 0, "Check")
@@ -160,13 +165,13 @@
 		if hide_name_field:
 			make_property_setter(doctype, fieldname, "hidden", 0, "Check")
 			make_property_setter(doctype, fieldname, "reqd", 1, "Check")
-			
+
 			# set values for mandatory
 			webnotes.conn.sql("""update `tab{doctype}` set `{fieldname}`=`name` where 
 				ifnull({fieldname}, '')=''""".format(doctype=doctype, fieldname=fieldname))
-		
+
 def get_default_naming_series(doctype):
 	from webnotes.model.doctype import get_property
 	naming_series = get_property(doctype, "options", "naming_series")
 	naming_series = naming_series.split("\n")
-	return naming_series[0] or naming_series[1]	
\ No newline at end of file
+	return naming_series[0] or naming_series[1]
\ No newline at end of file
diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/support/doctype/newsletter/newsletter.py
index 164d7df..021d908 100644
--- a/erpnext/support/doctype/newsletter/newsletter.py
+++ b/erpnext/support/doctype/newsletter/newsletter.py
@@ -6,7 +6,7 @@
 import webnotes
 import webnotes.utils
 from webnotes.utils import cstr
-from webnotes import _
+from webnotes import msgprint, throw, _
 
 class DocType():
 	def __init__(self, d, dl):
@@ -22,18 +22,24 @@
 		self.recipients = self.doc.test_email_id.split(",")
 		self.send_to_doctype = "Lead"
 		self.send_bulk()
-		webnotes.msgprint("""Scheduled to send to %s""" % self.doc.test_email_id)
+		msgprint("{send} {email}".format**{
+			"send": _("Scheduled to send to"),
+			"email": self.doc.test_email_id
+		})
 
 	def send_emails(self):
 		"""send emails to leads and customers"""
 		if self.doc.email_sent:
-			webnotes.msgprint("""Newsletter has already been sent""", raise_exception=1)
+			throw(_("Newsletter has already been sent"))
 
 		self.recipients = self.get_recipients()
 		self.send_bulk()
 		
-		webnotes.msgprint("""Scheduled to send to %d %s(s)""" % (len(self.recipients), 
-			self.send_to_doctype))
+		msgprint("{send} {recipients} {doctype}(s)".format(**{
+			"send": _("Scheduled to send to"),
+			"recipients": len(self.recipients),
+			"doctype": self.send_to_doctype
+		}))
 
 		webnotes.conn.set(self.doc, "email_sent", 1)
 	
@@ -62,6 +68,12 @@
 			return webnotes.conn.sql_list("""select email_id from tabLead 
 				where ifnull(email_id, '') != '' %s""" % (conditions or ""))
 
+		elif self.doc.send_to_type=="Employee":
+			self.send_to_doctype = "Employee"
+			return webnotes.conn.sql_list("""select 
+				if(ifnull(company_email, '')!='', company_email, personal_email) as email_id 
+				from `tabEmployee` where status='Active'""")
+
 		elif self.doc.email_list:
 			email_list = [cstr(email).strip() for email in self.doc.email_list.split(",")]
 			for email in email_list:
@@ -90,13 +102,12 @@
 
 	def validate_send(self):
 		if self.doc.fields.get("__islocal"):
-			webnotes.msgprint(_("""Please save the Newsletter before sending."""),
-				raise_exception=1)
+			throw(_("Please save the Newsletter before sending."))
 
 		from webnotes import conf
 		if (conf.get("status") or None) == "Trial":
-			webnotes.msgprint(_("""Sending newsletters is not allowed for Trial users, \
-				to prevent abuse of this feature."""), raise_exception=1)
+			throw(_("Sending newsletters is not allowed for Trial users, \
+				to prevent abuse of this feature."))
 
 @webnotes.whitelist()
 def get_lead_options():
diff --git a/erpnext/support/doctype/newsletter/newsletter.txt b/erpnext/support/doctype/newsletter/newsletter.txt
index 7cf149a..db231be 100644
--- a/erpnext/support/doctype/newsletter/newsletter.txt
+++ b/erpnext/support/doctype/newsletter/newsletter.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-01-10 16:34:31", 
   "docstatus": 0, 
-  "modified": "2014-01-31 17:32:47", 
+  "modified": "2014-01-31 18:47:03", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -66,7 +66,7 @@
   "fieldname": "send_to_type", 
   "fieldtype": "Select", 
   "label": "Send To Type", 
-  "options": "Lead\nContact\nCustom"
+  "options": "Lead\nContact\nEmployee\nCustom"
  }, 
  {
   "doctype": "DocField", 
@@ -93,7 +93,7 @@
   "fieldname": "contact_type", 
   "fieldtype": "Select", 
   "label": "Contact Type", 
-  "options": "Customer\nSupplier\nCustom"
+  "options": "Customer\nSupplier"
  }, 
  {
   "depends_on": "eval:doc.send_to_type==\"Custom\"", 
