diff --git a/erpnext/accounts/GL Mapper/Journal Voucher/Journal Voucher.txt b/erpnext/accounts/GL Mapper/Journal Voucher/Journal Voucher.txt
index b4a8cf6..fac3831 100644
--- a/erpnext/accounts/GL Mapper/Journal Voucher/Journal Voucher.txt
+++ b/erpnext/accounts/GL Mapper/Journal Voucher/Journal Voucher.txt
@@ -1 +1 @@
-[{'doc_type': 'Journal Voucher', 'modified_by': 'nabin@webnotestech.com', 'name': 'Journal Voucher', 'parent': None, 'creation': '2009-03-12 12:09:24', 'modified': '2010-04-30 17:56:41', 'module': 'Accounts', 'doctype': 'GL Mapper', 'idx': None, 'parenttype': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'parent:doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': 'cost_center', 'voucher_no': 'parent:name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': "value:d.against_voucher or d.against_invoice or ''", 'table_field': 'entries', 'transaction_date': 'parent:voucher_date', 'debit': 'debit', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'parent:company', 'aging_date': 'parent:aging_date', 'fiscal_year': 'parent:fiscal_year', 'is_advance': 'is_advance', 'remarks': 'parent:remark', 'account': 'account', 'name': 'GLMDetail00001', 'idx': 1, 'against_voucher_type': "value:(d.against_voucher and 'Payable Voucher') or (d.against_invoice and 'Receivable Voucher') or ''", 'modified': '2010-04-30 17:56:41', 'against': 'against_account', 'credit': 'credit', 'parenttype': 'GL Mapper', 'is_opening': 'parent:is_opening', 'posting_date': 'parent:posting_date', 'parentfield': 'fields'}, {'creation': '2009-06-11 11:09:11', 'voucher_type': 'doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': '', 'voucher_no': 'name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': '', 'table_field': '', 'transaction_date': 'voucher_date', 'debit': 'value:0', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'company', 'aging_date': 'aging_date', 'fiscal_year': 'fiscal_year', 'is_advance': '', 'remarks': 'remark', 'account': 'tax_code', 'name': 'GLMDetail00009', 'idx': 2, 'against_voucher_type': None, 'modified': '2010-04-30 17:56:41', 'against': 'supplier_account', 'credit': 'ded_amount', 'parenttype': 'GL Mapper', 'is_opening': 'is_opening', 'posting_date': 'posting_date', 'parentfield': 'fields'}]
\ No newline at end of file
+[{'doc_type': 'Journal Voucher', 'modified_by': 'nabin@webnotestech.com', 'name': 'Journal Voucher', 'parent': None, 'creation': '2009-03-12 12:09:24', 'modified': '2010-04-30 17:56:41', 'module': 'Accounts', 'doctype': 'GL Mapper', 'idx': None, 'parenttype': None, 'owner': 'Administrator', 'docstatus': 0, 'parentfield': None}, {'creation': '2009-03-12 12:09:24', 'voucher_type': 'parent:doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': 'cost_center', 'voucher_no': 'parent:name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': "value:d.against_voucher or d.against_invoice or d.against_jv or ''", 'table_field': 'entries', 'transaction_date': 'parent:voucher_date', 'debit': 'debit', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'parent:company', 'aging_date': 'parent:aging_date', 'fiscal_year': 'parent:fiscal_year', 'is_advance': 'is_advance', 'remarks': 'parent:remark', 'account': 'account', 'name': 'GLMDetail00001', 'idx': 1, 'against_voucher_type': "value:(d.against_voucher and 'Payable Voucher') or (d.against_invoice and 'Receivable Voucher') or (d.against_jv and 'Journal Voucher') or ''", 'modified': '2010-04-30 17:56:41', 'against': 'against_account', 'credit': 'credit', 'parenttype': 'GL Mapper', 'is_opening': 'parent:is_opening', 'posting_date': 'parent:posting_date', 'parentfield': 'fields'}, {'creation': '2009-06-11 11:09:11', 'voucher_type': 'doctype', 'doctype': 'GL Mapper Detail', 'owner': 'Administrator', 'cost_center': '', 'voucher_no': 'name', 'modified_by': 'nabin@webnotestech.com', 'against_voucher': '', 'table_field': '', 'transaction_date': 'voucher_date', 'debit': 'value:0', 'docstatus': 0, 'parent': 'Journal Voucher', 'company': 'company', 'aging_date': 'aging_date', 'fiscal_year': 'fiscal_year', 'is_advance': '', 'remarks': 'remark', 'account': 'tax_code', 'name': 'GLMDetail00009', 'idx': 2, 'against_voucher_type': None, 'modified': '2010-04-30 17:56:41', 'against': 'supplier_account', 'credit': 'ded_amount', 'parenttype': 'GL Mapper', 'is_opening': 'is_opening', 'posting_date': 'posting_date', 'parentfield': 'fields'}]
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py
index 9e4baa1..536bb6d 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py
@@ -645,30 +645,36 @@
 
 ########################################################################
 # Repair Outstanding
-#######################################################################
+
 	def repair_rv_outstanding(self):
 		get_obj(dt = 'GL Control').repair_voucher_outstanding(self)
 
+
+	#-------------------------------------------------------------------------------------
 	def on_update_after_submit(self):
 		self.convert_into_recurring()
 		
 
 	def convert_into_recurring(self):
 		if self.doc.convert_into_recurring_invoice:
-			event = 'accounts.doctype.gl_control.gl_control.manage_recurring_invoices'
 			self.set_next_date()
 			if not self.doc.recurring_id:
 				set(self.doc, 'recurring_id', make_autoname('RECINV/.#####'))
-
-			if sql("select name from `tabReceivable Voucher` where ifnull(convert_into_recurring_invoice, 0) = 1 and next_date <= end_date"):
-				if not self.check_event_exists(event):
-					set_event(event,  interval = 60*60, recurring = 1)
-			else:
-				cancel_event(event)
-
 		elif self.doc.recurring_id:
 			sql("""update `tabReceivable Voucher` set convert_into_recurring_invoice = 0 where recurring_id = %s""", self.doc.recurring_id)
 
+		self.manage_scheduler()
+
+	def manage_scheduler(self):
+		""" set/cancel event in scheduler """
+		event = 'accounts.doctype.gl_control.gl_control.manage_recurring_invoices'
+
+		if sql("select name from `tabReceivable Voucher` where ifnull(convert_into_recurring_invoice, 0) = 1 and next_date <= end_date"):
+			if not self.check_event_exists(event):
+				set_event(event,  interval = 60*60, recurring = 1)
+		else:
+			cancel_event(event)
+
 
 	def check_event_exists(self, event):
 		try:
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
index 497c99f..c194e7c 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2010-08-08 17:09:18',
 		'docstatus': 0,
-		'modified': '2011-12-20 18:23:36',
+		'modified': '2011-12-22 19:04:07',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -34,13 +34,12 @@
 		'server_code_error': ' ',
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s worth %(currency)s %(grand_total_export)s due on %(due_date)s | %(outstanding_amount)s outstanding',
-		'version': 391
+		'version': 392
 	},
 
 	# These values are common for all DocFormat
 	{
 		'doctype': 'DocFormat',
-		'format': 'POS Invoice',
 		'name': '__common__',
 		'parent': 'Receivable Voucher',
 		'parentfield': 'formats',
@@ -126,7 +125,32 @@
 
 	# DocFormat
 	{
-		'doctype': 'DocFormat'
+		'doctype': 'DocFormat',
+		'format': 'POS Invoice'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'POS Invoice'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Sales Invoice Classic'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Sales Invoice Modern'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Sales Invoice Spartan'
 	},
 
 	# DocField
@@ -477,6 +501,7 @@
 		'label': 'Price List Currency',
 		'options': 'link:Currency',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
@@ -489,6 +514,7 @@
 		'fieldtype': 'Currency',
 		'label': 'Price List Currency Conversion Rate',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 7612c19..84bfffb 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -248,7 +248,7 @@
 					raise Exception
 			
 			# list criteria that should not repeat if item is stock item
-			e = [d.schedule_date, d.item_code, d.warehouse, d.uom, d.fields.has_key('prevdoc_docname') and d.prevdoc_docname or '', d.fields.has_key('prevdoc_detail_docname') and d.prevdoc_detail_docname or '', d.fields.has_key('batch_no') and d.batch_no or '']
+			e = [d.schedule_date, d.item_code, d.description, d.warehouse, d.uom, d.fields.has_key('prevdoc_docname') and d.prevdoc_docname or '', d.fields.has_key('prevdoc_detail_docname') and d.prevdoc_detail_docname or '', d.fields.has_key('batch_no') and d.batch_no or '']
 			
 			# if is not stock item
 			f = [d.schedule_date, d.item_code, d.description]
@@ -258,16 +258,16 @@
 			if ch and ch[0][0] == 'Yes':			
 				# check for same items
 				if e in check_list:
-					msgprint("Item %s has been entered more than once with same schedule date, warehouse and uom." % d.item_code)
-					raise Exception
+					msgprint("""Item %s has been entered more than once with same description, schedule date, warehouse and uom.\n 
+						Please change any of the field value to enter the item twice""" % d.item_code, raise_exception = 1)
 				else:
 					check_list.append(e)
 					
 			elif ch and ch[0][0] == 'No':
 				# check for same items
 				if f in chk_dupl_itm:
-					msgprint("Item %s has been entered more than once." % d.item_code)
-					raise Exception
+					msgprint("""Item %s has been entered more than once with same description, schedule date.\n 
+						Please change any of the field value to enter the item twice.""" % d.item_code, raise_exception = 1)
 				else:
 					chk_dupl_itm.append(f)
 
diff --git a/erpnext/patches/print_hide_price_list.py b/erpnext/patches/print_hide_price_list.py
new file mode 100644
index 0000000..833ab98
--- /dev/null
+++ b/erpnext/patches/print_hide_price_list.py
@@ -0,0 +1,3 @@
+def execute():
+	import webnotes
+	webnotes.conn.sql("update `tabDocField` set print_hide = 1 where fieldname in ('price_list_currency', 'plc_conversion_rate')")
diff --git a/erpnext/patches/reload_gl_mapper.py b/erpnext/patches/reload_gl_mapper.py
new file mode 100644
index 0000000..edb00bc
--- /dev/null
+++ b/erpnext/patches/reload_gl_mapper.py
@@ -0,0 +1,6 @@
+def execute():
+	import webnotes
+	from webnotes.modules.module_manager import reload_doc
+	
+	# reload jv gl mapper
+	reload_doc('accounts', 'GL Mapper', 'Journal Voucher')
diff --git a/erpnext/patches/update_gle_against_voucher_for_jv.py b/erpnext/patches/update_gle_against_voucher_for_jv.py
new file mode 100644
index 0000000..5a03ec7
--- /dev/null
+++ b/erpnext/patches/update_gle_against_voucher_for_jv.py
@@ -0,0 +1,15 @@
+def execute():
+	import webnotes
+	from webnotes.model.code import get_obj
+	
+	# select jv where against_jv exists
+	jv = webnotes.conn.sql("select distinct parent from `tabJournal Voucher Detail` where docstatus = 1 and ifnull(against_jv, '') != ''")
+
+	for d in jv:
+		jv_obj = get_obj('Journal Voucher', d[0], with_children=1)
+
+		# cancel
+		get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =1, adv_adj = 1)
+
+		#re-submit
+		get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =0, adv_adj = 1)
diff --git a/erpnext/projects/doctype/project_control/project_control.py b/erpnext/projects/doctype/project_control/project_control.py
index 82cb1c7..4b382a5 100644
--- a/erpnext/projects/doctype/project_control/project_control.py
+++ b/erpnext/projects/doctype/project_control/project_control.py
@@ -1,13 +1,13 @@
 # Please edit this list and import only required elements
 import webnotes
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, set_default, str_esc_quote, user_format, validate_email_add, add_days
 from webnotes.model import db_exists
 from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
 from webnotes.model.doclist import getlist, copy_doclist
 from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
 from webnotes import session, form, is_testing, msgprint, errprint
-
+from webnotes.utils.email_lib import sendmail
 set = webnotes.conn.set
 sql = webnotes.conn.sql
 get_value = webnotes.conn.get_value
@@ -18,99 +18,127 @@
 
 
 class DocType:
-  def __init__(self,d,dl):
-    self.doc, self.doclist = d,dl
-  
-  def get_projects(self, arg):
-    # project list
-    pl=[]
-    status={}
-    if arg == 'Open':
-      pl = [p[0] for p in sql("select name from `tabProject` where status = 'Open' order by creation desc limit 20")]
-      for p1 in pl:
-        status[p1] = 'Open'
-    elif arg == 'Completed':
-      pl = [p[0] for p in sql("select name from `tabProject` where status = 'Completed' order by creation desc limit 20")]
-      for p2 in pl:
-        status[p2] = 'Completed'
-    elif arg == 'Cancelled':
-      pl = [p[0] for p in sql("select name from `tabProject` where status = 'Cancelled' order by creation desc limit 20")]
-      for p3 in pl:
-        status[p3] = 'Cancelled'
-    else:
-      #pl = [p[0] for p in sql("select name from `tabProject` order by creation desc limit 20")]
-      pl1 = sql("select name, status from `tabProject` order by creation desc limit 20", as_dict=1)
-      for p4 in pl1:
-        status[p4['name']] = p4['status']
-        pl.append(p4['name'])
-    
-    # milestones in the next 7 days for active projects
-    ml = convert_to_lists(sql("select t1.milestone_date, t1.milestone, t1.parent from `tabProject Milestone` t1, tabProject t2 where t1.parent = t2.name and t2.status='Open' and DATEDIFF(t1.milestone_date, CURDATE()) BETWEEN 0 AND 7 ORDER BY t1.milestone_date ASC"))
+	def __init__(self,d,dl):		
+		self.doc, self.doclist = d,dl
+	
+	def get_projects(self, arg):
+	# project list
+		pl=[]
+		status={}
+		if arg == 'Open':
+			pl = [p[0] for p in sql("select name from `tabProject` where status = 'Open' order by creation desc limit 20")]
+			for p1 in pl:
+				status[p1] = 'Open'
+		elif arg == 'Completed':
+			pl = [p[0] for p in sql("select name from `tabProject` where status = 'Completed' order by creation desc limit 20")]
+			for p2 in pl:
+				status[p2] = 'Completed'
+		elif arg == 'Cancelled':
+			pl = [p[0] for p in sql("select name from `tabProject` where status = 'Cancelled' order by creation desc limit 20")]
+			for p3 in pl:
+				status[p3] = 'Cancelled'
+		else:
+			#pl = [p[0] for p in sql("select name from `tabProject` order by creation desc limit 20")]
+			pl1 = sql("select name, status from `tabProject` order by creation desc limit 20", as_dict=1)
+			for p4 in pl1:
+				status[p4['name']] = p4['status']
+				pl.append(p4['name'])
+		
+		# milestones in the next 7 days for active projects
+		ml = convert_to_lists(sql("select t1.milestone_date, t1.milestone, t1.parent from `tabProject Milestone` t1, tabProject t2 where t1.parent = t2.name and t2.status='Open' and DATEDIFF(t1.milestone_date, CURDATE()) BETWEEN 0 AND 7 ORDER BY t1.milestone_date ASC"))
 
-    # percent of activity completed per project
-    comp = {}
-    n_tasks = {}
-    
-    for p in pl:
-      t1 = sql('select count(*) from tabTicket where project=%s and docstatus!=2', p)[0][0]
-      n_tasks[p] = t1 or 0
-      if t1:
-        t2 = sql('select count(*) from tabTicket where project=%s and docstatus!=2 and status="Closed"', p)[0][0]
-        comp[p] = cint(flt(t2)*100/t1)
-    
-    return {'pl':pl, 'ml':ml, 'comp':comp, 'n_tasks':n_tasks, 'status':status}
-    
-  def get_resources(self):
-    ret = {}
+		# percent of activity completed per project
+		comp = {}
+		n_tasks = {}
+		
+		for p in pl:
+			t1 = sql('select count(*) from tabTicket where project=%s and docstatus!=2', p)[0][0]
+			n_tasks[p] = t1 or 0
+			if t1:
+				t2 = sql('select count(*) from tabTicket where project=%s and docstatus!=2 and status="Closed"', p)[0][0]
+				comp[p] = cint(flt(t2)*100/t1)
+		
+		return {'pl':pl, 'ml':ml, 'comp':comp, 'n_tasks':n_tasks, 'status':status}
+		
+	def get_resources(self):
+		ret = {}
 
-    # resource list
-    rl = sql("select distinct allocated_to, assignee_email from tabTicket")
+		# resource list
+		rl = sql("select distinct allocated_to, assignee_email from tabTicket")
 
-    # get open & closed tickets
-    for r in rl:
-      if r[0]:
-        ret[r[1]] = {}
-        ret[r[1]]['id'] = r[0]
-        ret[r[1]]['Total'] = sql("select count(*) from tabTicket where allocated_to=%s and docstatus!=2", r[0])[0][0]
-        ret[r[1]]['Closed'] = sql("select count(*) from tabTicket where allocated_to=%s and status='Closed' and docstatus!=2", r[0])[0][0]
-        ret[r[1]]['percent'] = cint(flt(ret[r[1]]['Closed']) * 100 / ret[r[1]]['Total'])
+		# get open & closed tickets
+		for r in rl:
+			if r[0]:
+				ret[r[1]] = {}
+				ret[r[1]]['id'] = r[0]
+				ret[r[1]]['Total'] = sql("select count(*) from tabTicket where allocated_to=%s and docstatus!=2", r[0])[0][0]
+				ret[r[1]]['Closed'] = sql("select count(*) from tabTicket where allocated_to=%s and status='Closed' and docstatus!=2", r[0])[0][0]
+				ret[r[1]]['percent'] = cint(flt(ret[r[1]]['Closed']) * 100 / ret[r[1]]['Total'])
 
-    return ret
+		return ret
 
-  # --------------------------------------------------------------
-  # for Gantt Chart
+	# --------------------------------------------------------------
+	# for Gantt Chart
 
-  def get_init_data(self, arg=''):
-    pl = [p[0] for p in sql('select name from tabProject where docstatus != 2')]
-    rl = [p[0] for p in sql('select distinct allocated_to from tabTicket where docstatus != 2 and ifnull(allocated_to,"") != ""')]
-    return {'pl':pl, 'rl':rl}
+	def get_init_data(self, arg=''):
+		pl = [p[0] for p in sql('select name from tabProject where docstatus != 2')]
+		rl = [p[0] for p in sql('select distinct allocated_to from tabTicket where docstatus != 2 and ifnull(allocated_to,"") != ""')]
+		return {'pl':pl, 'rl':rl}
 
-  def get_tasks(self, arg):
-    start_date, end_date, project, resource = arg.split('~~~')
+	def get_tasks(self, arg):
+		start_date, end_date, project, resource = arg.split('~~~')
 
-    cl = ''
-    if project and project != 'All':
-      cl = " and ifnull(project,'') = '%s'" % project
+		cl = ''
+		if project and project != 'All':
+			cl = " and ifnull(project,'') = '%s'" % project
 
-    if resource and resource != 'All':
-      cl = " and ifnull(allocated_to,'') = '%s'" % resource
+		if resource and resource != 'All':
+			cl = " and ifnull(allocated_to,'') = '%s'" % resource
 
-    tl = sql("""
-      select subject, allocated_to, project, exp_start_date, exp_end_date, priority, status, name
-      from tabTicket 
-      where 
-        ((exp_start_date between '%(st)s' and '%(end)s') or 
-        (exp_end_date between '%(st)s' and '%(end)s') or 
-        (exp_start_date < '%(st)s' and exp_end_date > '%(end)s')) %(cond)s order by exp_start_date limit 100""" % {'st': start_date, 'end': end_date, 'cond':cl})
+		tl = sql("""
+			select subject, allocated_to, project, exp_start_date, exp_end_date, priority, status, name
+			from tabTicket 
+			where 
+				((exp_start_date between '%(st)s' and '%(end)s') or 
+				(exp_end_date between '%(st)s' and '%(end)s') or 
+				(exp_start_date < '%(st)s' and exp_end_date > '%(end)s')) %(cond)s order by exp_start_date limit 100""" % {'st': start_date, 'end': end_date, 'cond':cl})
 
-    return convert_to_lists(tl)
-  
-  def declare_proj_completed(self, arg):
-    chk = sql("select name from `tabTicket` where project=%s and status='Open'", arg)
-    if chk:
-      chk_lst = [x[0] for x in chk]
-      msgprint("Task(s) "+','.join(chk_lst)+" has staus 'Open'. Please submit all tasks against this project before closing the project.")
-      return cstr('false')
-    else:
-      sql("update `tabProject` set status = 'Completed' where name = %s", arg)
-      return cstr('true')
\ No newline at end of file
+		return convert_to_lists(tl)
+	
+	def declare_proj_completed(self, arg):
+		chk = sql("select name from `tabTicket` where project=%s and status='Open'", arg)
+		if chk:
+			chk_lst = [x[0] for x in chk]
+			msgprint("Task(s) "+','.join(chk_lst)+" has staus 'Open'. Please submit all tasks against this project before closing the project.")
+			return cstr('false')
+		else:
+			sql("update `tabProject` set status = 'Completed' where name = %s", arg)
+			return cstr('true')
+			
+			
+def sent_reminder_task():
+	task_list = sql("""
+		select subject, allocated_to, project, exp_start_date, exp_end_date,
+			priority, status, name, senders_name, opening_date, review_date, description 
+		from tabTicket
+		where task_email_notify=1 
+			and sent_reminder=0 
+			and status='Open' 
+			and exp_start_date is not null""",as_dict=1)
+	for i in task_list:		
+		if date_diff(i['exp_start_date'],nowdate()) ==2:
+			msg2="""<h2>Two days to complete: %(name)s</h2>
+			<p>This is a reminder for the task %(name)s has been assigned to you 
+				by %(senders_name)s on %(opening_date)s</p>
+			<p><b>Project:</b> %(project)s</p>
+			<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
+			<p><b>Expected End Date:</b> %(exp_end_date)s</p>
+			<p><b>Review Date:</b> %(review_date)s</p>
+			<p><b>Details:</b> %(description)s</p>
+			<p>If you have already completed this task, please update the system</p>
+			<p>Good Luck!</p>
+			<p>(This notification is autogenerated)</p>""" % i
+			sendmail(i['allocated_to'], sender='automail@webnotestech.com', msg=msg2,send_now=1, \
+				subject='A task has been assigned')
+			sql("update `tabTicket` set sent_reminder='1' where name='%(name)s' and allocated_to= '%(allocated_to)s'" % i)	
+	
diff --git a/erpnext/projects/doctype/ticket/ticket.py b/erpnext/projects/doctype/ticket/ticket.py
index 4d3e988..4dbcfe7 100644
--- a/erpnext/projects/doctype/ticket/ticket.py
+++ b/erpnext/projects/doctype/ticket/ticket.py
@@ -1,12 +1,14 @@
 # Please edit this list and import only required elements
 import webnotes
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, set_default, str_esc_quote, user_format, validate_email_add
+from webnotes.utils.email_lib import sendmail
 from webnotes.model import db_exists
 from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
 from webnotes.model.doclist import getlist, copy_doclist
 from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
 from webnotes import session, form, is_testing, msgprint, errprint
+
 sql = webnotes.conn.sql
 set = webnotes.conn.set
 get_value = webnotes.conn.get_value
@@ -15,161 +17,210 @@
 
 
 class DocType:
-  def __init__(self,doc,doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-  
-  def get_project_details(self):
-    cust = sql("select customer, customer_name from `tabProject` where name = %s", self.doc.project)
-    if cust:
-      ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''}
-      return ret
-  
-  def get_customer_details(self):
-    cust = sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer)
-    if cust:
-      ret = {'customer_name': cust and cust[0][0] or ''}
-      return ret
-  
-  def get_allocated_to_name(self):
-    as_em = sql("select first_name, last_name from `tabProfile` where name=%s",str(self.doc.allocated_to))
-    ret = { 'allocated_to_name' : as_em and (as_em[0][0] + ' ' + as_em[0][1]) or ''}
-    return ret
+	def __init__(self,doc,doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
+	
+	def get_project_details(self):
+		cust = sql("select customer, customer_name from `tabProject` where name = %s", self.doc.project)
+		if cust:
+			ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''}
+			return ret
+	
+	def get_customer_details(self):
+		cust = sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer)
+		if cust:
+			ret = {'customer_name': cust and cust[0][0] or ''}
+			return ret
+	
+	def get_allocated_to_name(self):
+		as_em = sql("select first_name, last_name from `tabProfile` where name=%s",str(self.doc.allocated_to))
+		ret = { 'allocated_to_name' : as_em and (as_em[0][0] + ' ' + as_em[0][1]) or ''}
+		return ret
 
-  # validate
-  #--------------------------------------------   
+	# validate
+	#--------------------------------------------	 
 
 
-  def validate(self):
-    if not self.doc.opening_date:
-      msgprint("Please enter Opening Date.")
-      raise Exception
-    elif getdate(self.doc.opening_date) > getdate(nowdate()):
-      msgprint("Opening date can not be future date")
-      raise Exception
-    
-    if self.doc.exp_start_date and self.doc.exp_end_date and getdate(self.doc.exp_start_date) > getdate(self.doc.exp_end_date):
-      msgprint("'Expected Start Date' can not be greater than 'Expected End Date'")
-      raise Exception
-    
-    if self.doc.act_start_date and self.doc.act_end_date and getdate(self.doc.act_start_date) > getdate(self.doc.act_end_date):
-      msgprint("'Actual Start Date' can not be greater than 'Actual End Date'")
-      raise Exception
-    
-    if self.doc.opening_date and self.doc.review_date and getdate(self.doc.opening_date) > getdate(self.doc.review_date):
-      msgprint("Review Date should be greater than or equal to Opening Date ")
-      raise Exception
-    
-    if self.doc.closing_date and self.doc.review_date and getdate(self.doc.closing_date) < getdate(self.doc.review_date):
-      msgprint("Closing Date should be greater than or equal to Review Date ")
-      raise Exception
+	def validate(self):
+		if not self.doc.opening_date:
+			msgprint("Please enter Opening Date.")
+			raise Exception
+		elif getdate(self.doc.opening_date) > getdate(nowdate()):
+			msgprint("Opening date can not be future date")
+			raise Exception
+		
+		if self.doc.exp_start_date and self.doc.exp_end_date and getdate(self.doc.exp_start_date) > getdate(self.doc.exp_end_date):
+			msgprint("'Expected Start Date' can not be greater than 'Expected End Date'")
+			raise Exception
+		
+		if self.doc.act_start_date and self.doc.act_end_date and getdate(self.doc.act_start_date) > getdate(self.doc.act_end_date):
+			msgprint("'Actual Start Date' can not be greater than 'Actual End Date'")
+			raise Exception
+		
+		if self.doc.opening_date and self.doc.review_date and getdate(self.doc.opening_date) > getdate(self.doc.review_date):
+			msgprint("Review Date should be greater than or equal to Opening Date ")
+			raise Exception
+		
+		if self.doc.closing_date and self.doc.review_date and getdate(self.doc.closing_date) < getdate(self.doc.review_date):
+			msgprint("Closing Date should be greater than or equal to Review Date ")
+			raise Exception
 
-  # on update
-  #--------------------------------------------   
-  
-  def on_update(self):
-    if (self.doc.status =='Open') and (self.doc.task_email_notify==1):
-       	msg2= 'A task %s has been assigned to you by %s on %s <br/> \
-       	Project:%s <br/> Review Date:%s <br /> Closing Date:%s <br /> Details  %s' \
-       	%(self.doc.name,self.doc.senders_name,self.doc.opening_date,self.doc.project, \
-       	self.doc.review_date,self.doc.closing_date,self.doc.description)
-    	sendmail(self.doc.allocated_to, sender='automail@webnotestech.com', \
-    	subject='A task has been assigned', parts=[['text/plain',msg2]])
-    pass
-        
-  #validate before sending for approval
-  def validate_for_pending_review(self):
-    if not self.doc.allocated_to:
-      msgprint("Please enter allocated_to.")
-      raise Exception
-    self.validate_with_timesheet_dates()
-  
-  #validate before closing task
-  def validate_for_closed(self):
-    self.check_non_submitted_timesheets()
-    self.get_actual_total_hrs()
-  
-  def check_non_submitted_timesheets(self):
-    chk = sql("select t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent=t1.name and t2.task_id=%s and t1.status='Draft'", self.doc.name)
-    if chk:
-      chk_lst = [x[0] for x in chk]
-      msgprint("Please submit timesheet(s) : "+','.join(chk_lst)+" before declaring this task as completed. As details of this task present in timesheet(s)")
-      raise Exception
-  
-  #calculate actual total hours taken to complete task from timesheets
-  def get_actual_total_hrs(self):
-    import datetime
-    import time
-    chk = sql("select t2.act_total_hrs from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status = 'Submitted' and ifnull(t2.act_total_hrs, '')!='' order by t1.timesheet_date asc", self.doc.name)
-    if chk:
-      chk_lst = [x[0] for x in chk]
-      actual_total = total =0
-      
-      for m in chk_lst:
-        m1, m2=[], 0
-        m1 = m.split(":")
-        m2 = (datetime.timedelta(minutes=cint(m1[1]), hours=cint(m1[0]))).seconds
-        total = total + m2
-      
-      actual_total = time.strftime("%H:%M", time.gmtime(total))
-      set(self.doc, 'act_total_hrs', actual_total)
-  
-  # validate and fetch actual start and end date
-  def validate_with_timesheet_dates(self):
-    chk = sql("select t1.name, t1.timesheet_date from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status = 'Submitted' order by t1.timesheet_date asc", self.doc.name, as_dict=1)
-    if chk:
-      if self.doc.act_start_date:
-        if chk[0]['timesheet_date'] > getdate(self.doc.act_start_date) or chk[0]['timesheet_date'] < getdate(self.doc.act_start_date):
-          msgprint("Actual start date of this task is "+cstr(chk[0]['timesheet_date'])+" as per timesheet "+cstr(chk[0]['name']))
-          raise Exception
-      else:
-        self.doc.act_start_date = chk[0]['timesheet_date']
-      
-      if self.doc.act_end_date:
-        if chk[len(chk)-1]['timesheet_date'] < getdate(self.doc.act_end_date) or chk[len(chk)-1]['timesheet_date'] > getdate(self.doc.act_end_date):
-          msgprint("Actual end date of this task is "+cstr(chk[len(chk)-1]['timesheet_date'])+" as per timesheet "+cstr(chk[len(chk)-1]['name']))
-          raise Exception
-      else:
-        self.doc.act_end_date = chk[len(chk)-1]['timesheet_date']
-  
-  def set_for_review(self):
-    self.check_non_submitted_timesheets()
-    self.validate_for_pending_review()
-    self.get_actual_total_hrs()
-    self.doc.review_date = nowdate()
-    set(self.doc, 'status', 'Pending Review')
-    self.doc.save()
-    return cstr('true')
-  
-  def reopen_task(self):
-    set(self.doc, 'status', 'Open')
-    self.doc.save()
-    return cstr('true')
-  
-  def declare_completed(self):
-    if self.doc.status == 'Open':
-      self.validate_for_pending_review()
-      self.doc.review_date = nowdate()
-    else:
-      self.validate_with_timesheet_dates()
-    self.validate_for_closed()
-    self.doc.closing_date = nowdate()
-    set(self.doc, 'status', 'Closed')
-    set(self.doc, 'docstatus', 1)
-    self.doc.save()
-    return cstr('true')
-  
-  def cancel_task(self):
-    chk = sql("select distinct t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status!='Cancelled'", self.doc.name)
-    if chk:
-      chk_lst = [x[0] for x in chk]
-      msgprint("Timesheet(s) "+','.join(chk_lst)+" created against this task. Thus can not be cancelled")
-      raise Exception
-    else:
-      set(self.doc, 'status', 'Cancelled')
-      set(self.doc, 'docstatus', 2)
-    self.doc.save()
-    return cstr('true')
-  
-  def on_cancel(self):
-    self.cancel_task()
+	# on update
+	#--------------------------------------------	 
+	
+	def on_update(self):
+		if self.doc.status =='Open' and self.doc.allocated_to:
+			if self.doc.task_email_notify and (self.doc.allocated_to != self.doc.allocated_to_old):
+				self.doc.sent_reminder = 0
+				self.doc.allocated_to_old = self.doc.allocated_to
+				self.sent_notification()
+			if self.doc.exp_start_date:
+				sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
+				self.add_calendar_event()
+			else:
+				msgprint("An Expeted start date has not been set for this task.Please set a, 'Expected Start date'\
+				to add an event to allocated persons calender.You can save a task without this also.")
+			
+			
+	def validate_for_pending_review(self):
+		if not self.doc.allocated_to:
+			msgprint("Please enter allocated_to.")
+			raise Exception
+		self.validate_with_timesheet_dates()
+		
+	#Sent Notification
+	def sent_notification(self):
+		i = {
+			'name' : self.doc.name,
+			'senders_name': self.doc.allocated_to,
+			'opening_date': self.doc.opening_date,
+			'exp_start_date': self.doc.exp_start_date,
+			'exp_end_date' : self.doc.exp_end_date,
+			'project': self.doc.project,
+			'review_date': self.doc.review_date,
+			'description': self.doc.description
+		}
+
+		msg2="""<h2>%(name)s</h2>
+			<p>This is a Notification for the task %(name)s that has been assigned to you 
+				by %(senders_name)s on %(opening_date)s</p>
+			<p><b>Project:</b> %(project)s</p>
+			<p><b>Review Date:</b> %(review_date)s</p>
+			<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
+			<p><b>Expected End Date:</b> %(exp_end_date)s</p>
+			<p><b>Details:</b> %(description)s</p>
+			<p>You will also recieve another reminder 2 days before the commencement of the task</p>
+			<p>Good Luck!</p>
+			<p>(This notification is autogenerated)</p>""" % i
+		sendmail(self.doc.allocated_to, sender='automail@webnotestech.com', msg=msg2,send_now=1,\
+			subject='A task has been assigned')
+
+
+	
+	#validate before closing task
+	def validate_for_closed(self):
+		self.check_non_submitted_timesheets()
+		self.get_actual_total_hrs()
+	
+	def check_non_submitted_timesheets(self):
+		chk = sql("select t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent=t1.name and t2.task_id=%s and t1.status='Draft'", self.doc.name)
+		if chk:
+			chk_lst = [x[0] for x in chk]
+			msgprint("Please submit timesheet(s) : "+','.join(chk_lst)+" before declaring this task as completed. As details of this task present in timesheet(s)")
+			raise Exception
+	
+	#calculate actual total hours taken to complete task from timesheets
+	def get_actual_total_hrs(self):
+		import datetime
+		import time
+		chk = sql("select t2.act_total_hrs from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status = 'Submitted' and ifnull(t2.act_total_hrs, '')!='' order by t1.timesheet_date asc", self.doc.name)
+		if chk:
+			chk_lst = [x[0] for x in chk]
+			actual_total = total =0
+			
+			for m in chk_lst:
+				m1, m2=[], 0
+				m1 = m.split(":")
+				m2 = (datetime.timedelta(minutes=cint(m1[1]), hours=cint(m1[0]))).seconds
+				total = total + m2
+			
+			actual_total = time.strftime("%H:%M", time.gmtime(total))
+			set(self.doc, 'act_total_hrs', actual_total)
+	
+	# validate and fetch actual start and end date
+	def validate_with_timesheet_dates(self):
+		chk = sql("select t1.name, t1.timesheet_date from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status = 'Submitted' order by t1.timesheet_date asc", self.doc.name, as_dict=1)
+		if chk:
+			if self.doc.act_start_date:
+				if chk[0]['timesheet_date'] > getdate(self.doc.act_start_date) or chk[0]['timesheet_date'] < getdate(self.doc.act_start_date):
+					msgprint("Actual start date of this task is "+cstr(chk[0]['timesheet_date'])+" as per timesheet "+cstr(chk[0]['name']))
+					raise Exception
+			else:
+				self.doc.act_start_date = chk[0]['timesheet_date']
+			
+			if self.doc.act_end_date:
+				if chk[len(chk)-1]['timesheet_date'] < getdate(self.doc.act_end_date) or chk[len(chk)-1]['timesheet_date'] > getdate(self.doc.act_end_date):
+					msgprint("Actual end date of this task is "+cstr(chk[len(chk)-1]['timesheet_date'])+" as per timesheet "+cstr(chk[len(chk)-1]['name']))
+					raise Exception
+			else:
+				self.doc.act_end_date = chk[len(chk)-1]['timesheet_date']
+	
+	def set_for_review(self):
+		self.check_non_submitted_timesheets()
+		self.validate_for_pending_review()
+		self.get_actual_total_hrs()
+		self.doc.review_date = nowdate()
+		self.doc.status = 'Pending Review'
+		self.doc.save()
+		return cstr('true')
+	
+	def reopen_task(self):
+		self.doc.status = 'Open'
+		self.doc.save()
+		return cstr('true')
+	
+	def declare_completed(self):
+		if self.doc.status == 'Open':
+			self.validate_for_pending_review()
+			self.doc.review_date = nowdate()
+		else:
+			self.validate_with_timesheet_dates()
+		self.validate_for_closed()
+
+		self.doc.closing_date = nowdate()
+		self.doc.status = 'Closed'
+		self.doc.docstatus = 1
+		self.doc.save()
+
+		self.remove_event_from_calender()
+		return cstr('true')
+		
+	def remove_event_from_calender(self):
+		sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
+		
+	def cancel_task(self):
+		chk = sql("select distinct t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status!='Cancelled'", self.doc.name)
+		if chk:
+			chk_lst = [x[0] for x in chk]
+			msgprint("Timesheet(s) "+','.join(chk_lst)+" created against this task. Thus can not be cancelled")
+			raise Exception
+		else:
+			self.doc.status = 'Cancelled'
+			self.doc.docstatus = 2
+			self.remove_event_from_calender()
+		self.doc.save()
+		return cstr('true')
+
+	
+	def add_calendar_event(self):
+		""" Add calendar event for task in calendar of Allocated person"""
+		event = Document('Event')
+		event.owner = self.doc.allocated_to
+		event.description = self.doc.name 
+		event.event_date = self.doc.exp_start_date and self.doc.exp_start_date or ''
+		event.event_hour =  self.doc.event_hour and self.doc.event_hour or '10:00'
+		event.event_type = 'Private'
+		event.ref_type = 'Task'
+		event.ref_name = self.doc.name
+		event.save(1)
diff --git a/erpnext/projects/doctype/ticket/ticket.txt b/erpnext/projects/doctype/ticket/ticket.txt
index cd984ac..5b8da14 100644
--- a/erpnext/projects/doctype/ticket/ticket.txt
+++ b/erpnext/projects/doctype/ticket/ticket.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2011-01-28 17:52:35',
 		'docstatus': 0,
-		'modified': '2011-12-21 16:32:30',
+		'modified': '2011-12-26 11:56:35',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1324394580',
+		'_last_update': '1324880734',
 		'allow_trash': 1,
 		'autoname': 'TIC/.####',
 		'colour': 'White:FFF',
@@ -26,7 +26,7 @@
 		'show_in_menu': 0,
 		'subject': '%(subject)s',
 		'tag_fields': 'status',
-		'version': 247
+		'version': 254
 	},
 
 	# These values are common for all DocField
@@ -140,15 +140,6 @@
 	# DocField
 	{
 		'doctype': 'DocField',
-		'fieldname': 'task_email_notify',
-		'fieldtype': 'Check',
-		'label': 'Sent Mail Notification',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': 'DocField',
 		'fieldname': 'opening_date',
 		'fieldtype': 'Date',
 		'label': 'Creation Date',
@@ -251,6 +242,17 @@
 
 	# DocField
 	{
+		'doctype': 'DocField',
+		'fieldname': 'allocated_to_old',
+		'fieldtype': 'Link',
+		'hidden': 1,
+		'label': 'Allocated To Old',
+		'no_copy': 1,
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldname': 'allocated_to',
@@ -266,6 +268,15 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'task_email_notify',
+		'fieldtype': 'Check',
+		'label': 'Sent Mail Notification',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'allocated_to_name',
 		'fieldtype': 'Data',
 		'hidden': 1,
@@ -278,6 +289,17 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'sent_reminder',
+		'fieldtype': 'Data',
+		'hidden': 1,
+		'label': 'Sent Reminder',
+		'no_copy': 1,
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'senders_name',
 		'fieldtype': 'Data',
 		'in_filter': 1,
diff --git a/erpnext/selling/doctype/quotation/quotation.txt b/erpnext/selling/doctype/quotation/quotation.txt
index 86b7b5f..ac58dc4 100644
--- a/erpnext/selling/doctype/quotation/quotation.txt
+++ b/erpnext/selling/doctype/quotation/quotation.txt
@@ -5,11 +5,20 @@
 	{
 		'creation': '2010-08-08 17:09:17',
 		'docstatus': 0,
-		'modified': '2011-12-20 14:01:09',
+		'modified': '2011-12-22 19:03:04',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Quotation',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
 	# These values are common for all DocType
 	{
 		'_last_update': '1322549700',
@@ -32,15 +41,15 @@
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s',
 		'tag_fields': 'status',
-		'version': 597
+		'version': 598
 	},
 
-	# These values are common for all DocField
+	# These values are common for all DocFormat
 	{
-		'doctype': 'DocField',
+		'doctype': 'DocFormat',
 		'name': '__common__',
 		'parent': 'Quotation',
-		'parentfield': 'fields',
+		'parentfield': 'formats',
 		'parenttype': 'DocType'
 	},
 
@@ -169,6 +178,24 @@
 		'role': 'Maintenance User'
 	},
 
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Quotation Classic'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Quotation Modern'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Quotation Spartan'
+	},
+
 	# DocField
 	{
 		'colour': 'White:FFF',
@@ -568,6 +595,7 @@
 		'label': 'Price List Currency',
 		'options': 'link:Currency',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
@@ -580,6 +608,7 @@
 		'fieldtype': 'Currency',
 		'label': 'Price List Currency Conversion Rate',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.txt b/erpnext/selling/doctype/sales_order/sales_order.txt
index d59f236..2e6ea99 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.txt
+++ b/erpnext/selling/doctype/sales_order/sales_order.txt
@@ -5,11 +5,20 @@
 	{
 		'creation': '2010-08-08 17:09:21',
 		'docstatus': 0,
-		'modified': '2011-12-20 12:55:02',
+		'modified': '2011-12-22 19:03:25',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Sales Order',
+		'parentfield': 'fields',
+		'parenttype': 'DocType'
+	},
+
 	# These values are common for all DocType
 	{
 		'_last_update': '1324295218',
@@ -29,15 +38,15 @@
 		'show_in_menu': 0,
 		'subject': 'From %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s | %(per_delivered)s% delivered | %(per_billed)s% billed',
 		'tag_fields': 'delivery_status,billing_status',
-		'version': 608
+		'version': 609
 	},
 
-	# These values are common for all DocField
+	# These values are common for all DocFormat
 	{
-		'doctype': 'DocField',
+		'doctype': 'DocFormat',
 		'name': '__common__',
 		'parent': 'Sales Order',
-		'parentfield': 'fields',
+		'parentfield': 'formats',
 		'parenttype': 'DocType'
 	},
 
@@ -166,6 +175,24 @@
 		'role': 'Maintenance User'
 	},
 
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Sales Order Classic'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Sales Order Modern'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Sales Order Spartan'
+	},
+
 	# DocField
 	{
 		'colour': 'White:FFF',
@@ -581,6 +608,7 @@
 		'label': 'Price List Currency',
 		'options': 'link:Currency',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
@@ -593,6 +621,7 @@
 		'fieldtype': 'Currency',
 		'label': 'Price List Currency Conversion Rate',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.txt b/erpnext/stock/doctype/delivery_note/delivery_note.txt
index dc905f5..5340955 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.txt
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2011-04-18 15:58:20',
 		'docstatus': 0,
-		'modified': '2011-12-20 13:23:33',
+		'modified': '2011-12-22 19:03:44',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -37,13 +37,12 @@
 		'show_in_menu': 0,
 		'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
 		'tag_fields': 'billing_status',
-		'version': 459
+		'version': 460
 	},
 
 	# These values are common for all DocFormat
 	{
 		'doctype': 'DocFormat',
-		'format': 'Delivery Note Packing List Wise',
 		'name': '__common__',
 		'parent': 'Delivery Note',
 		'parentfield': 'formats',
@@ -143,7 +142,26 @@
 
 	# DocFormat
 	{
-		'doctype': 'DocFormat'
+		'doctype': 'DocFormat',
+		'format': 'Delivery Note Packing List Wise'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Delivery Note Classic'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Delivery Note Modern'
+	},
+
+	# DocFormat
+	{
+		'doctype': 'DocFormat',
+		'format': 'Delivery Note Spartan'
 	},
 
 	# DocField
@@ -567,6 +585,7 @@
 		'label': 'Price List Currency',
 		'options': 'link:Currency',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
@@ -579,6 +598,7 @@
 		'fieldtype': 'Currency',
 		'label': 'Price List Currency Conversion Rate',
 		'permlevel': 0,
+		'print_hide': 1,
 		'reqd': 1
 	},
 
