diff --git a/erpnext/patches/install_print_formats.py b/erpnext/patches/install_print_formats.py
new file mode 100644
index 0000000..af9756b
--- /dev/null
+++ b/erpnext/patches/install_print_formats.py
@@ -0,0 +1,80 @@
+import os, sys
+
+path_to_file = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + ['print_formats'])
+
+def prepare_pf_dict(args_list):
+	"""
+
+	"""
+	pf_list = []
+	for a in args_list:
+		for pf_type in ['Classic', 'Modern', 'Spartan']:
+			pf = {}
+			pf['name'] = " ".join([a['name'], pf_type])
+			pf['file'] = os.sep.join([path_to_file, "".join(pf['name'].split(" ")) + ".html"])
+			pf['module'] = a['module']
+			pf['doc_type'] = a['doc_type']
+			pf['standard'] = 'Yes'
+			pf_list += [pf]
+	return pf_list
+
+
+pf_to_install = prepare_pf_dict([
+	{
+		'name' : 'Sales Invoice',
+		'doc_type' : 'Receivable Voucher',
+		'module' : 'Accounts'
+	},
+	{
+		'name' : 'Sales Order',
+		'doc_type' : 'Sales Order',
+		'module' : 'Selling'
+	},
+	{
+		'name' : 'Quotation',
+		'doc_type' : 'Quotation',
+		'module' : 'Selling'
+	},
+	{
+		'name' : 'Delivery Note',
+		'doc_type' : 'Delivery Note',
+		'module' : 'Stock'
+	},
+	{
+		'name' : 'Purchase Order',
+		'doc_type' : 'Purchase Order',
+		'module' : 'Buying'
+	}
+])
+
+def execute():
+	"""
+		Install print formats
+	"""
+	global pf_to_install
+	print pf_to_install
+	for pf in pf_to_install:
+		install_print_format(pf)
+		print "Installed PF: " + pf['name']
+
+
+def install_print_format(args):
+	"""
+		Installs print format
+		args is a dict consisting of following keys:
+			* name
+			* module
+			* doctype
+			* standard = "Yes"/"No"
+			* file
+	"""
+	from webnotes.model.doc import Document
+	d = Document('Print Format')
+	d.name = args.name
+	f = open(args.file)
+	d.html = f.read()
+	f.close()
+	d.module = args.module
+	d.doc_type = args.doc_type
+	d.standard = args.standard
+	d.save(1)
diff --git a/erpnext/patches/print_formats/DeliveryNoteClassic.html b/erpnext/patches/print_formats/DeliveryNoteClassic.html
new file mode 100644
index 0000000..0db80b9
--- /dev/null
+++ b/erpnext/patches/print_formats/DeliveryNoteClassic.html
@@ -0,0 +1,279 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Delivery Note',
+				doc.name,
+				'delivery_note_details',
+				'Delivery Note Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				],
+				null,
+				null,
+				{
+					'description' : function(data_row) {
+						if(data_row.serial_no) {
+							return (
+								data_row.description + 
+								'<div style="padding-left: 15px;"><i>Serial No.:' + 
+								((data_row.serial_no.indexOf('\n')>-1)?'<br />':'&nbsp;') + 
+								data_row.serial_no + '</i></div>'
+							);
+						} else {
+							return data_row.description;
+						}
+					}
+				}
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Delivery Note</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Delivery Note Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Sales Order No.</b></td>
+						<td>
+							<script>doc.sales_order_no</script><br />
+							<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>
+						</td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/DeliveryNoteModern.html b/erpnext/patches/print_formats/DeliveryNoteModern.html
new file mode 100644
index 0000000..634bea0
--- /dev/null
+++ b/erpnext/patches/print_formats/DeliveryNoteModern.html
@@ -0,0 +1,306 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Delivery Note',
+				doc.name,
+				'delivery_note_details',
+				'Delivery Note Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				],
+				null,
+				null,
+				{
+					'description' : function(data_row) {
+						if(data_row.serial_no) {
+							return (
+								data_row.description + 
+								'<div style="padding-left: 15px;"><i>Serial No.:' + 
+								((data_row.serial_no.indexOf('\n')>-1)?'<br />':'&nbsp;') + 
+								data_row.serial_no + '</i></div>'
+							);
+						} else {
+							return data_row.description;
+						}
+					}
+				}
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Delivery Note</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Delivery Note No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Delivery Note Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Sales Order No.</b></td>
+						<td>
+							<script>doc.sales_order_no</script><br />
+							<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>
+						</td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/DeliveryNoteSpartan.html b/erpnext/patches/print_formats/DeliveryNoteSpartan.html
new file mode 100644
index 0000000..10ca9dd
--- /dev/null
+++ b/erpnext/patches/print_formats/DeliveryNoteSpartan.html
@@ -0,0 +1,302 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 0.5px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Delivery Note',
+				doc.name,
+				'delivery_note_details',
+				'Delivery Note Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				],
+				null,
+				null,
+				{
+					'description' : function(data_row) {
+						if(data_row.serial_no) {
+							return (
+								data_row.description + 
+								'<div style="padding-left: 15px;"><i>Serial No.:' + 
+								((data_row.serial_no.indexOf('\n')>-1)?'<br />':'&nbsp;') + 
+								data_row.serial_no + '</i></div>'
+							);
+						} else {
+							return data_row.description;
+						}
+					}
+				}
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Delivery Note</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Delivery Note Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Sales Order No.</b></td>
+						<td>
+							<script>doc.sales_order_no</script><br />
+							<i>(<script>date.str_to_user(doc.posting_date)</script>)</i>
+						</td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/PurchaseOrderClassic.html b/erpnext/patches/print_formats/PurchaseOrderClassic.html
new file mode 100644
index 0000000..0e51c61
--- /dev/null
+++ b/erpnext/patches/print_formats/PurchaseOrderClassic.html
@@ -0,0 +1,249 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Purchase Order',
+				doc.name,
+				'po_details',
+				'PO Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'import_rate', 'import_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('Purchase Tax Detail', doc.name, 'purchase_tax_details');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Purchase Order</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.supplier_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Purchase Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total_import)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr style='font-weight: bold'>
+							<td>Grand Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.grand_total_import)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_import</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/PurchaseOrderModern.html b/erpnext/patches/print_formats/PurchaseOrderModern.html
new file mode 100644
index 0000000..b159242
--- /dev/null
+++ b/erpnext/patches/print_formats/PurchaseOrderModern.html
@@ -0,0 +1,276 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Purchase Order',
+				doc.name,
+				'po_details',
+				'PO Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'import_rate', 'import_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('Purchase Tax Detail', doc.name, 'purchase_tax_details');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Purchase Order</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.supplier_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Purchase Order No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Purchase Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total_import)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Grand Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.grand_total_import)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_import</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/PurchaseOrderSpartan.html b/erpnext/patches/print_formats/PurchaseOrderSpartan.html
new file mode 100644
index 0000000..ac4fc02
--- /dev/null
+++ b/erpnext/patches/print_formats/PurchaseOrderSpartan.html
@@ -0,0 +1,272 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 0.5px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Purchase Order',
+				doc.name,
+				'po_details',
+				'PO Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'import_rate', 'import_amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('Purchase Tax Detail', doc.name, 'purchase_tax_details');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount / (doc.conversion_rate || 1)) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Purchase Order</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=22%><b>Name</b></td>
+						<td><script>doc.supplier_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Purchase Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total_import)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr style='font-weight: bold'>
+							<td>Grand Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.grand_total_import)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_import</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/QuotationClassic.html b/erpnext/patches/print_formats/QuotationClassic.html
new file mode 100644
index 0000000..5672fe9
--- /dev/null
+++ b/erpnext/patches/print_formats/QuotationClassic.html
@@ -0,0 +1,256 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Quotation',
+				doc.name,
+				'quotation_details',
+				'Quotation Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Quotation</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.lead_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Quotation Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/QuotationModern.html b/erpnext/patches/print_formats/QuotationModern.html
new file mode 100644
index 0000000..fadecf2
--- /dev/null
+++ b/erpnext/patches/print_formats/QuotationModern.html
@@ -0,0 +1,283 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Quotation',
+				doc.name,
+				'quotation_details',
+				'Quotation Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Quotation</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.lead_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Quotation No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Quotation Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/QuotationSpartan.html b/erpnext/patches/print_formats/QuotationSpartan.html
new file mode 100644
index 0000000..bf51880
--- /dev/null
+++ b/erpnext/patches/print_formats/QuotationSpartan.html
@@ -0,0 +1,279 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 0.5px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Quotation',
+				doc.name,
+				'quotation_details',
+				'Quotation Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '10%', '15%', '32%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Quotation</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.lead_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Quotation Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/SalesInvoiceClassic.html b/erpnext/patches/print_formats/SalesInvoiceClassic.html
new file mode 100644
index 0000000..f7eddcb
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesInvoiceClassic.html
@@ -0,0 +1,261 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Receivable Voucher',
+				doc.name,
+				'entries',
+				'RV Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			console.log(parent);
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Invoice</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=40%><b>Invoice Date</b></td>
+						<td><script>date.str_to_user(doc.voucher_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Due Date</b></td>
+						<td><script>date.str_to_user(doc.due_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesInvoiceModern.html b/erpnext/patches/print_formats/SalesInvoiceModern.html
new file mode 100644
index 0000000..f5d4d7c
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesInvoiceModern.html
@@ -0,0 +1,288 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Receivable Voucher',
+				doc.name,
+				'entries',
+				'RV Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			console.log(parent);
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Invoice</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Invoice No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=40%><b>Invoice Date</b></td>
+						<td><script>date.str_to_user(doc.voucher_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Due Date</b></td>
+						<td><script>date.str_to_user(doc.due_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesInvoiceSpartan.html b/erpnext/patches/print_formats/SalesInvoiceSpartan.html
new file mode 100644
index 0000000..d25bc1a
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesInvoiceSpartan.html
@@ -0,0 +1,284 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 0.5px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Receivable Voucher',
+				doc.name,
+				'entries',
+				'RV Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_name', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Name', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			console.log(parent);
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Invoice</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=40%><b>Invoice Date</b></td>
+						<td><script>date.str_to_user(doc.voucher_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Due Date</b></td>
+						<td><script>date.str_to_user(doc.due_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/erpnext/patches/print_formats/SalesOrderClassic.html b/erpnext/patches/print_formats/SalesOrderClassic.html
new file mode 100644
index 0000000..fcf104e
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesOrderClassic.html
@@ -0,0 +1,260 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Georgia", serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Georgia", serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table thead {
+		border-bottom: 1px solid black;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px 0px;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Sales Order',
+				doc.name,
+				'sales_order_details',
+				'Sales Order Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td><h1>Sales Order</h1></td></tr>
+			<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Sales Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Delivery Date</b></td>
+						<td><script>date.str_to_user(doc.delivery_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesOrderModern.html b/erpnext/patches/print_formats/SalesOrderModern.html
new file mode 100644
index 0000000..7013e5d
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesOrderModern.html
@@ -0,0 +1,287 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Helvetica", "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Helvetica", "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 10px 0px;
+	}
+
+	table {
+		border-collapse: collapse;
+		width: 100%;
+		vertical-align: top;
+		border-style: none !important;
+	}
+
+	table td {
+		padding: 2px 0px;
+		border-style: none !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h1 {
+		text-transform: uppercase;
+		color: white;
+		font-size: 55px;
+		font-style: italic;
+	}
+
+	table.header-table thead tr:nth-child(1) div {
+		height: 24px;
+		background-color: #696969;
+		vertical-align: middle;
+		padding: 12px 0px 0px 0px;
+		width: 100%;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body table tr td {
+		background-color: #DCDCDC !important;
+	}
+
+	div.page-body table tr:nth-child(1) td {
+		background-color: #696969 !important;
+		color: white !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+
+	table.footer-table tfoot td {
+		background-color: #696969;
+		height: 10px;
+	}
+
+	.imp-details {
+		background-color: #DCDCDC;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Sales Order',
+				doc.name,
+				'sales_order_details',
+				'Sales Order Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><div><h1>Sales Order</h1></div></td></tr>
+			<tr><td colspan=2><div style="height:15px"></div></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr class='imp-details'>
+						<td><b>Sales Order No.</b></td>
+						<td><script>cur_frm.docname</script></td>
+					</tr>
+					<tr>
+						<td width=63%><b>Sales Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Delivery Date</b></td>
+						<td><script>date.str_to_user(doc.delivery_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold' class='imp-details'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+			<tr><td colspan=2><div></div></td><tr>
+		</tfoot>
+	</table>
+</div>
+
diff --git a/erpnext/patches/print_formats/SalesOrderSpartan.html b/erpnext/patches/print_formats/SalesOrderSpartan.html
new file mode 100644
index 0000000..0352154
--- /dev/null
+++ b/erpnext/patches/print_formats/SalesOrderSpartan.html
@@ -0,0 +1,283 @@
+<!--
+	Sample Print Format for ERPNext
+	Please use at your own discretion
+	For suggestions and contributions:
+		https://github.com/webnotes/erpnext-print-templates
+
+	Freely usable under MIT license
+-->
+
+<!-- Style Settings -->
+<style>
+	/*
+		common style for whole page
+		This should include:
+		+ page size related settings
+		+ font family settings
+		+ line spacing settings
+	*/
+	@media screen {
+		body {
+			width: 8.3in;
+		}
+	}
+
+	html, body, div, span, td {
+		font-family: "Arial", sans-serif;
+		font-size: 12px;
+	}
+
+	body {
+		padding: 10px;
+		margin: auto;
+		font-size: 12px;
+		line-height: 150%;
+	}
+
+	.common {
+		font-family: "Arial", sans-serif !important;
+		font-size: 12px;
+		padding: 0px;
+	}
+
+	table {
+		width: 100% !important;
+		vertical-align: top;
+	}
+
+	table td {
+		padding: 2px 0px;
+	}
+
+	table, td {
+		border-collapse: collapse !important;
+		padding: 0px;
+		margin: 0px !important;
+	}
+	
+	table h1, h2, h3, h4, h5, h6 {
+		padding: 0px;
+		margin: 0px;
+	}
+
+	table.header-table td {
+		vertical-align: top;
+	}
+
+	table.header-table h3 {
+		color: gray;
+	}
+
+	table.header-table thead td {
+		padding: 5px;
+	}
+
+	table.header-table > thead,
+	table.header-table > tbody > tr > td,
+	table.footer-table > tbody > tr > td {
+		border: 1px solid black;
+		padding: 5px;
+	}
+
+	table.footer-table > tbody,
+	table.header-table > thead {
+		border-bottom: 3px solid black;
+	}
+
+	table.header-table > thead {
+		border-top: 3px solid black;
+	}
+
+	div.page-body table td:nth-child(6),
+	div.page-body table td:nth-child(7) {
+		text-align: right;
+	}
+
+	div.page-body td {
+		background-color: white !important;
+		border: 0.5px solid black !important;
+	}
+
+	table.footer-table td {
+		vertical-align: top;
+	}
+
+	table.footer-table td table td:nth-child(2),
+	table.footer-table td table td:nth-child(3) {
+		text-align: right;
+	}
+</style>
+
+
+<!-- Javascript -->
+<script>
+	si_std = {
+		print_item_table: function() {
+			var table = print_table(
+				'Sales Order',
+				doc.name,
+				'sales_order_details',
+				'Sales Order Detail',
+				[// Here specify the table columns to be displayed
+					'SR', 'item_code', 'description', 'qty', 'stock_uom',
+					'basic_rate', 'amount'
+				],
+				[// Here specify the labels of column headings
+					'Sr', 'Item Code', 'Description', 'Qty',
+					'UoM', 'Basic Rate', 'Amount'
+				],
+				[// Here specify the column widths
+					'3%', '20%', '37%', '5%',
+					'5%', '15%', '15%'
+				]
+			);
+
+			// This code takes care of page breaks
+			if(table.appendChild) {
+				out = table.innerHTML;
+			} else {
+				out = '';
+				for(var i=0; i < (table.length-1); i++) {
+					out += table[i].innerHTML + 
+						'<div style = "page-break-after: always;" \
+						class = "page_break"></div>\
+						<div class="page-settings"></div>';
+				}
+				out += table[table.length-1].innerHTML;
+			}
+			return out;
+		},
+
+
+		print_other_charges: function(parent) {
+			var oc = getchildren('RV Tax Detail', doc.name, 'other_charges');
+			var rows = '<table width=100%>\n';
+			for(var i=0; i<oc.length; i++) {
+				rows +=
+					'<tr>\n' +
+						'\t<td>' + oc[i].description + '</td>\n' +
+						'\t<td></td>\n' +
+						'\t<td width=38%>' + fmt_money(oc[i].tax_amount) + '</td>\n' +
+					'</tr>\n';
+			}
+			return rows + '</table>\n';
+		}
+	};
+</script>
+
+
+<!-- Page Layout Settings -->
+<div class='common page-header'>
+	<!-- 
+		Page Header will contain
+			+ table 1
+				+ table 1a
+					- Name
+					- Address
+					- Contact
+					- Mobile No
+				+ table 1b
+					- Voucher Date
+					- Due Date
+	-->
+	<table class='header-table' cellspacing=0>
+		<thead>
+			<tr><td colspan=2><h1>Sales Order</h1></td></tr>
+			<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60%><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=39%><b>Name</b></td>
+						<td><script>doc.customer_name</script></td>
+					</tr>
+					<tr>
+						<td><b>Address</b></td>
+						<td><script>replace_newlines(doc.address_display)</script></td>
+					</tr>
+					<tr>
+						<td><b>Contact</b></td>
+						<td><script>doc.contact_display</script></td>
+					</tr>
+				</tbody></table></td>
+				<td><table width=100% cellspacing=0><tbody>
+					<tr>
+						<td width=63%><b>Sales Order Date</b></td>
+						<td><script>date.str_to_user(doc.transaction_date)</script></td>
+					<tr>					
+					<tr>
+						<td><b>Delivery Date</b></td>
+						<td><script>date.str_to_user(doc.delivery_date)</script></td>
+					<tr>					
+				</tbody></table></td>
+			</tr>
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+<div class='common page-body'>
+	<!-- 
+		Page Body will contain
+			+ table 2
+				- Sales Invoice Data
+	-->
+	<script>si_std.print_item_table()</script>
+</div>
+<div class='common page-footer'>
+	<!-- 
+		Page Footer will contain
+			+ table 3
+				- Terms and Conditions
+				- Total Rounded Amount Calculation
+				- Total Rounded Amount in Words
+	-->
+	<table class='footer-table' width=100% cellspacing=0>
+		<thead>
+			
+		</thead>
+		<tbody>
+			<tr>
+				<td width=60% style='padding-right: 10px;'>
+					<b>Terms, Conditions &amp; Other Information:</b><br />
+					<script>doc.terms</script>
+				</td>
+				<td>
+					<table cellspacing=0 width=100%><tbody>
+						<tr>
+							<td>Net Total</td>
+							<td></td>
+							<td width=38%><script>
+								fmt_money(doc.net_total)
+							</script></td>
+						</tr>
+						<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>
+						<tr>
+							<td>Grand Total</td>
+							<td></td>
+							<td><script>
+								fmt_money(doc.grand_total_export)
+							</script></td>
+						</tr>
+						<tr style='font-weight: bold'>
+							<td>Rounded Total</td>
+							<td><script>doc.currency</script></td>
+							<td><script>
+								fmt_money(doc.rounded_total_export)
+							</script></td>
+						</tr>
+					</tbody></table>
+					<br /><b>In Words</b><br />
+					<i><script>doc.in_words_export</script></i>
+				</td>
+			</tr>		
+		</tbody>
+		<tfoot>
+		
+		</tfoot>
+	</table>
+</div>
+
+
diff --git a/index.html b/index.html
index 315fe8a..c28b0aa 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
 	<meta charset="utf-8">
 	<title>ERPNext</title>
 	<meta name="author" content="">
-	<script type="text/javascript">window._version_number="67"
+	<script type="text/javascript">window._version_number="325"
 
 wn={}
 wn.provide=function(namespace){var nsl=namespace.split('.');var l=nsl.length;var parent=window;for(var i=0;i<l;i++){var n=nsl[i];if(!parent[n]){parent[n]={}}
@@ -79,4 +79,4 @@
 	</div>
 	<script>wn.require('js/app.js');</script>
 	<div id="dialog_back"></div>
-</body>
\ No newline at end of file
+</body>
diff --git a/versions-master.db b/versions-master.db
index 6628a89..5707243 100644
--- a/versions-master.db
+++ b/versions-master.db
Binary files differ
