diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 1535575..7fed736 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -197,9 +197,9 @@
 		sl_dict.update(args)
 		return sl_dict
 
-	def make_sl_entries(self, sl_entries, is_amended=None):
+	def make_sl_entries(self, sl_entries, is_amended=None, allow_negative_stock=False):
 		from erpnext.stock.stock_ledger import make_sl_entries
-		make_sl_entries(sl_entries, is_amended)
+		make_sl_entries(sl_entries, is_amended, allow_negative_stock)
 
 	def make_gl_entries_on_cancel(self):
 		if frappe.db.sql("""select name from `tabGL Entry` where voucher_type=%s
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 7fda960..2773d69 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -91,3 +91,4 @@
 execute:frappe.delete_doc("DocType", "Contact Control")
 erpnext.patches.v4_2.recalculate_bom_costs
 erpnext.patches.v4_2.discount_amount
+erpnext.patches.v4_2.update_landed_cost_voucher
diff --git a/erpnext/patches/v4_2/update_landed_cost_voucher.py b/erpnext/patches/v4_2/update_landed_cost_voucher.py
new file mode 100644
index 0000000..6563b7b
--- /dev/null
+++ b/erpnext/patches/v4_2/update_landed_cost_voucher.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.reload_doc("stock", "doctype", "landed_cost_voucher")
+	frappe.db.sql("""update `tabLanded Cost Voucher` set distribute_charges_based_on = 'Amount'
+		where docstatus=1""")
diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json
index 9af5029..9029670 100644
--- a/erpnext/selling/doctype/quotation/quotation.json
+++ b/erpnext/selling/doctype/quotation/quotation.json
@@ -723,7 +723,7 @@
    "no_copy": 1, 
    "oldfieldname": "status", 
    "oldfieldtype": "Select", 
-   "options": "Draft\nSubmitted\nOrdered\nLost\nCancelled", 
+   "options": "Draft\nSubmitted\nOrdered\nLost\nCancelled\nOpen\nReplied", 
    "permlevel": 0, 
    "print_hide": 1, 
    "read_only": 1, 
@@ -842,7 +842,7 @@
  "idx": 1, 
  "is_submittable": 1, 
  "max_attachments": 1, 
- "modified": "2015-01-12 16:57:14.706270", 
+ "modified": "2015-01-21 11:24:08.210880", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Quotation", 
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index e3269e8..1fb1e2d 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -23,7 +23,7 @@
 			if (not getattr(self, f, None)) or (not self.get(f)):
 				self.set(f, 0.0)
 
-	def update_stock(self, args):
+	def update_stock(self, args, allow_negative_stock=False):
 		self.update_qty(args)
 
 		if args.get("actual_qty") or args.get("voucher_type") == "Stock Reconciliation":
@@ -38,7 +38,7 @@
 				"warehouse": self.warehouse,
 				"posting_date": args.get("posting_date"),
 				"posting_time": args.get("posting_time")
-			})
+			}, allow_negative_stock=allow_negative_stock)
 
 	def update_qty(self, args):
 		# update the stock values (for current quantities)
diff --git a/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
index f183b33..9ea9150 100644
--- a/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
+++ b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
@@ -19,17 +19,6 @@
    "width": "50%"
   }, 
   {
-   "fieldname": "account", 
-   "fieldtype": "Link", 
-   "in_list_view": 1, 
-   "label": "Account", 
-   "options": "Account", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "read_only": 0, 
-   "reqd": 1
-  }, 
-  {
    "fieldname": "amount", 
    "fieldtype": "Currency", 
    "in_list_view": 1, 
@@ -40,7 +29,7 @@
   }
  ], 
  "istable": 1, 
- "modified": "2014-08-08 13:12:02.594698", 
+ "modified": "2015-01-21 11:51:33.964438", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Landed Cost Taxes and Charges", 
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
index 042011a..ea469f0 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
@@ -5,10 +5,10 @@
 frappe.provide("erpnext.stock");
 frappe.require("assets/erpnext/js/controllers/stock_controller.js");
 
-erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({		
+erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
 	setup: function() {
 		var me = this;
-		this.frm.fields_dict.landed_cost_purchase_receipts.grid.get_field('purchase_receipt').get_query = 
+		this.frm.fields_dict.landed_cost_purchase_receipts.grid.get_field('purchase_receipt').get_query =
 			function() {
 				if(!me.frm.doc.company) msgprint(__("Please enter company first"));
 				return {
@@ -18,53 +18,44 @@
 					]
 				}
 		};
-	
-		this.frm.fields_dict.landed_cost_taxes_and_charges.grid.get_field('account').get_query = function() {
-				if(!me.frm.doc.company) msgprint(__("Please enter company first"));
-				return {
-					filters:[
-						['Account', 'group_or_ledger', '=', 'Ledger'],
-						['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Expense Account']],
-						['Account', 'company', '=', me.frm.doc.company]
-					]
-				}
-		};
-		
+
 		this.frm.add_fetch("purchase_receipt", "supplier", "supplier");
 		this.frm.add_fetch("purchase_receipt", "posting_date", "posting_date");
 		this.frm.add_fetch("purchase_receipt", "grand_total", "grand_total");
-		
-	}, 
-	
+
+	},
+
 	refresh: function() {
-		var help_content = ['<table class="table table-bordered" style="background-color: #f9f9f9;">',
-			'<tr><td>',
-				'<h4><i class="icon-hand-right"></i> ',
-					__('Notes'),
-				':</h4>',
-				'<ul>',
-					'<li>',
-						__("Charges will be distributed proportionately based on item amount"),
-					'</li>',
-					'<li>',
-						__("Remove item if charges is not applicable to that item"),
-					'</li>',
-					'<li>',
-						__("Charges are updated in Purchase Receipt against each item"),
-					'</li>',
-					'<li>',
-						__("Item valuation rate is recalculated considering landed cost voucher amount"),
-					'</li>',
-					'<li>',
-						__("Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts"),
-					'</li>',
-				'</ul>',
-			'</td></tr>',
-		'</table>'].join("\n");
+		var help_content = [
+			'<br><br>',
+			'<table class="table table-bordered" style="background-color: #f9f9f9;">',
+				'<tr><td>',
+					'<h4><i class="icon-hand-right"></i> ',
+						__('Notes'),
+					':</h4>',
+					'<ul>',
+						'<li>',
+							__("Charges will be distributed proportionately based on item qty or amount, as per your selection"),
+						'</li>',
+						'<li>',
+							__("Remove item if charges is not applicable to that item"),
+						'</li>',
+						'<li>',
+							__("Charges are updated in Purchase Receipt against each item"),
+						'</li>',
+						'<li>',
+							__("Item valuation rate is recalculated considering landed cost voucher amount"),
+						'</li>',
+						'<li>',
+							__("Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts"),
+						'</li>',
+					'</ul>',
+				'</td></tr>',
+			'</table>'].join("\n");
 
 		set_field_options("landed_cost_help", help_content);
 	},
-	
+
 	get_items_from_purchase_receipts: function() {
 		var me = this;
 		if(!this.frm.doc.landed_cost_purchase_receipts.length) {
@@ -75,13 +66,13 @@
 				method: "get_items_from_purchase_receipts"
 			});
 		}
-	}, 
-	
+	},
+
 	amount: function() {
 		this.set_total_taxes_and_charges();
 		this.set_applicable_charges_for_item();
 	},
-	
+
 	set_total_taxes_and_charges: function() {
 		total_taxes_and_charges = 0.0;
 		$.each(this.frm.doc.landed_cost_taxes_and_charges, function(i, d) {
@@ -89,7 +80,7 @@
 		});
 		cur_frm.set_value("total_taxes_and_charges", total_taxes_and_charges);
 	},
-	
+
 	set_applicable_charges_for_item: function() {
 		var me = this;
 		if(this.frm.doc.landed_cost_taxes_and_charges.length) {
@@ -97,14 +88,14 @@
 			$.each(this.frm.doc.landed_cost_items, function(i, d) {
 				total_item_cost += flt(d.amount)
 			});
-			
+
 			$.each(this.frm.doc.landed_cost_items, function(i, item) {
 				item.applicable_charges = flt(item.amount) *  flt(me.frm.doc.total_taxes_and_charges) / flt(total_item_cost)
 			});
 			refresh_field("landed_cost_items");
 		}
 	}
-	
+
 });
 
-cur_frm.script_manager.make(erpnext.stock.LandedCostVoucher);
\ No newline at end of file
+cur_frm.script_manager.make(erpnext.stock.LandedCostVoucher);
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json
index 682a16b..3425d9d 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json
@@ -45,6 +45,13 @@
    "permlevel": 0
   }, 
   {
+   "fieldname": "sec_break1", 
+   "fieldtype": "Section Break", 
+   "options": "Simple", 
+   "permlevel": 0, 
+   "precision": ""
+  }, 
+  {
    "fieldname": "total_taxes_and_charges", 
    "fieldtype": "Currency", 
    "label": "Total Taxes and Charges", 
@@ -54,13 +61,6 @@
    "reqd": 1
   }, 
   {
-   "fieldname": "landed_cost_help", 
-   "fieldtype": "HTML", 
-   "label": "Landed Cost Help", 
-   "options": "", 
-   "permlevel": 0
-  }, 
-  {
    "fieldname": "amended_from", 
    "fieldtype": "Link", 
    "label": "Amended From", 
@@ -69,11 +69,40 @@
    "permlevel": 0, 
    "print_hide": 1, 
    "read_only": 1
+  }, 
+  {
+   "fieldname": "col_break1", 
+   "fieldtype": "Column Break", 
+   "permlevel": 0, 
+   "precision": ""
+  }, 
+  {
+   "default": "Amount", 
+   "fieldname": "distribute_charges_based_on", 
+   "fieldtype": "Select", 
+   "label": "Distribute Charges Based On", 
+   "options": "\nQty\nAmount", 
+   "permlevel": 0, 
+   "precision": "", 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "sec_break2", 
+   "fieldtype": "Section Break", 
+   "permlevel": 0, 
+   "precision": ""
+  }, 
+  {
+   "fieldname": "landed_cost_help", 
+   "fieldtype": "HTML", 
+   "label": "Landed Cost Help", 
+   "options": "", 
+   "permlevel": 0
   }
  ], 
  "icon": "icon-usd", 
  "is_submittable": 1, 
- "modified": "2014-09-01 12:05:46.834513", 
+ "modified": "2015-01-21 11:56:37.698326", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Landed Cost Voucher", 
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
index 3046c5e..16f0f1c 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -7,9 +7,6 @@
 from frappe.utils import flt
 from frappe.model.document import Document
 
-from erpnext.stock.utils import get_valuation_method
-from erpnext.stock.stock_ledger import get_previous_sle
-
 class LandedCostVoucher(Document):
 	def get_items_from_purchase_receipts(self):
 		self.set("landed_cost_items", [])
@@ -69,10 +66,11 @@
 		self.total_taxes_and_charges = sum([flt(d.amount) for d in self.get("landed_cost_taxes_and_charges")])
 
 	def set_applicable_charges_for_item(self):
-		total_item_cost = sum([flt(d.amount) for d in self.get("landed_cost_items")])
+		based_on = self.distribute_charges_based_on.lower()
+		total = sum([flt(d.get(based_on)) for d in self.get("landed_cost_items")])
 
 		for item in self.get("landed_cost_items"):
-			item.applicable_charges = flt(item.amount) *  flt(self.total_taxes_and_charges) / flt(total_item_cost)
+			item.applicable_charges = flt(item.get(based_on)) *  flt(self.total_taxes_and_charges) / flt(total)
 
 	def on_submit(self):
 		self.update_landed_cost()
@@ -92,12 +90,12 @@
 			pr.update_valuation_rate("purchase_receipt_details")
 
 			# save will update landed_cost_voucher_amount and voucher_amount in PR,
-			# as those fields are ellowed to edit after submit
+			# as those fields are allowed to edit after submit
 			pr.save()
 
 			# update stock & gl entries for cancelled state of PR
 			pr.docstatus = 2
-			pr.update_stock_ledger()
+			pr.update_stock_ledger(allow_negative_stock=True)
 			pr.make_gl_entries_on_cancel()
 
 			# update stock & gl entries for submit state of PR
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index f38ee5d..e04abbb 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -129,7 +129,7 @@
 				 if not d.prevdoc_docname:
 					 frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code))
 
-	def update_stock_ledger(self):
+	def update_stock_ledger(self, allow_negative_stock=False):
 		sl_entries = []
 		stock_items = self.get_stock_items()
 
@@ -153,7 +153,7 @@
 					}))
 
 		self.bk_flush_supp_wh(sl_entries)
-		self.make_sl_entries(sl_entries)
+		self.make_sl_entries(sl_entries, allow_negative_stock=allow_negative_stock)
 
 	def update_ordered_qty(self):
 		po_map = {}
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index eae1bf6..7bbf8fc 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -14,7 +14,7 @@
 _exceptions = frappe.local('stockledger_exceptions')
 # _exceptions = []
 
-def make_sl_entries(sl_entries, is_amended=None):
+def make_sl_entries(sl_entries, is_amended=None, allow_negative_stock=False):
 	if sl_entries:
 		from erpnext.stock.utils import update_bin
 
@@ -35,7 +35,7 @@
 				"sle_id": sle_id,
 				"is_amended": is_amended
 			})
-			update_bin(args)
+			update_bin(args, allow_negative_stock)
 
 		if cancel:
 			delete_cancelled_entry(sl_entries[0].get('voucher_type'), sl_entries[0].get('voucher_no'))
@@ -58,7 +58,7 @@
 	frappe.db.sql("""delete from `tabStock Ledger Entry`
 		where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
 
-def update_entries_after(args, allow_zero_rate=False, verbose=1):
+def update_entries_after(args, allow_zero_rate=False, allow_negative_stock=False, verbose=1):
 	"""
 		update valution rate and qty after transaction
 		from the current time-bucket onwards
@@ -73,6 +73,9 @@
 	if not _exceptions:
 		frappe.local.stockledger_exceptions = []
 
+	if not allow_negative_stock:
+		allow_negative_stock = cint(frappe.db.get_default("allow_negative_stock"))
+
 	previous_sle = get_sle_before_datetime(args)
 
 	qty_after_transaction = flt(previous_sle.get("qty_after_transaction"))
@@ -87,7 +90,7 @@
 	stock_value_difference = 0.0
 
 	for sle in entries_to_fix:
-		if sle.serial_no or not cint(frappe.db.get_default("allow_negative_stock")):
+		if sle.serial_no or not allow_negative_stock:
 			# validate negative stock for serialized items, fifo valuation
 			# or when negative stock is not allowed for moving average
 			if not validate_negative_stock(qty_after_transaction, sle):
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 889c30c..c08ed7d 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -52,11 +52,11 @@
 	bin_obj.ignore_permissions = True
 	return bin_obj
 
-def update_bin(args):
+def update_bin(args, allow_negative_stock=False):
 	is_stock_item = frappe.db.get_value('Item', args.get("item_code"), 'is_stock_item')
 	if is_stock_item == 'Yes':
 		bin = get_bin(args.get("item_code"), args.get("warehouse"))
-		bin.update_stock(args)
+		bin.update_stock(args, allow_negative_stock)
 		return bin
 	else:
 		frappe.msgprint(_("Item {0} ignored since it is not a stock item").format(args.get("item_code")))
