diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
index ca16b44..ba8bee2 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
@@ -12,19 +12,31 @@
 class TestLandedCostVoucher(unittest.TestCase):
 	def test_landed_cost_voucher(self):
 		set_perpetual_inventory(1)
-		pr = self.submit_pr()
+		pr = frappe.copy_doc(pr_test_records[0])
+		pr.submit()
+
+		bin_details = frappe.db.get_value("Bin", {"warehouse": "_Test Warehouse - _TC",
+			"item_code": "_Test Item"},	["actual_qty", "stock_value"], as_dict=1)
+
 		self.submit_landed_cost_voucher(pr)
-		
+
 		pr_lc_value = frappe.db.get_value("Purchase Receipt Item", {"parent": pr.name}, "landed_cost_voucher_amount")
 		self.assertEquals(pr_lc_value, 25.0)
-		
+
+		bin_details_after_lcv = frappe.db.get_value("Bin", {"warehouse": "_Test Warehouse - _TC",
+			"item_code": "_Test Item"},	["actual_qty", "stock_value"], as_dict=1)
+
+		self.assertEqual(bin_details.actual_qty, bin_details_after_lcv.actual_qty)
+
+		self.assertEqual(bin_details_after_lcv.stock_value - bin_details.stock_value, 25.0)
+
 		gl_entries = get_gl_entries("Purchase Receipt", pr.name)
 
 		self.assertTrue(gl_entries)
 
 		stock_in_hand_account = pr.get("purchase_receipt_details")[0].warehouse
 		fixed_asset_account = pr.get("purchase_receipt_details")[1].warehouse
-		
+
 
 		expected_values = {
 			stock_in_hand_account: [400.0, 0.0],
@@ -38,7 +50,27 @@
 			self.assertEquals(expected_values[gle.account][1], gle.credit)
 
 		set_perpetual_inventory(0)
-		
+
+	def test_landed_cost_voucher_for_serialized_item(self):
+		set_perpetual_inventory(1)
+		frappe.db.sql("delete from `tabSerial No` where name in ('SN001', 'SN002', 'SN003', 'SN004', 'SN005')")
+
+		pr = frappe.copy_doc(pr_test_records[0])
+		pr.purchase_receipt_details[0].item_code = "_Test Serialized Item"
+		pr.purchase_receipt_details[0].serial_no = "SN001\nSN002\nSN003\nSN004\nSN005"
+		pr.submit()
+
+		self.submit_landed_cost_voucher(pr)
+
+		serial_no = frappe.db.get_value("Serial No", "SN001",
+			["status", "warehouse", "purchase_rate"], as_dict=1)
+
+		self.assertEquals(serial_no.status, "Available")
+		self.assertEquals(serial_no.purchase_rate, 80.0)
+		self.assertEquals(serial_no.warehouse, "_Test Warehouse - _TC")
+
+		set_perpetual_inventory(0)
+
 	def submit_landed_cost_voucher(self, pr):
 		lcv = frappe.new_doc("Landed Cost Voucher")
 		lcv.company = "_Test Company"
@@ -53,15 +85,9 @@
 			"account": "_Test Account Insurance Charges - _TC",
 			"amount": 50.0
 		}])
-		
+
 		lcv.insert()
 		lcv.submit()
-		
-	def submit_pr(self):
-		pr = frappe.copy_doc(pr_test_records[0])
-		pr.submit()
-		return pr
-		
-	
 
-test_records = frappe.get_test_records('Landed Cost Voucher')
\ No newline at end of file
+
+test_records = frappe.get_test_records('Landed Cost Voucher')
