diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index 0d46318..df6eddc 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -7,6 +7,7 @@
 import frappe.defaults
 from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
 from frappe.utils import flt, add_days, nowdate
+from erpnext.stock.doctype.item.test_item import make_item
 from erpnext.buying.doctype.purchase_order.purchase_order import (make_purchase_receipt, make_purchase_invoice, make_rm_stock_entry as make_subcontract_transfer_entry)
 from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
 import json
@@ -363,6 +364,101 @@
 
 		self.assertEquals(bin11.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract)
 
+	def test_exploded_items_in_subcontracted(self):
+		item_code = "_Test Subcontracted FG Item 1"
+		make_subcontracted_item(item_code)
+
+		po = create_purchase_order(item_code=item_code, qty=1,
+			is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC")
+
+		name = frappe.db.get_value('BOM', {'item': item_code}, 'name')
+		bom = frappe.get_doc('BOM', name)
+
+		exploded_items = sorted([d.item_code for d in bom.exploded_items])
+		supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
+		self.assertEquals(exploded_items, supplied_items)
+
+		po1 = create_purchase_order(item_code=item_code, qty=1,
+			is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=0)
+
+		supplied_items1 = sorted([d.rm_item_code for d in po1.supplied_items])
+		bom_items = sorted([d.item_code for d in bom.items])
+
+		self.assertEquals(supplied_items1, bom_items)
+
+	def test_backflush_based_on_stock_entry(self):
+		item_code = "_Test Subcontracted FG Item 1"
+		make_subcontracted_item(item_code)
+
+		update_backflush_based_on("Material Transferred for Subcontract")
+		po = create_purchase_order(item_code=item_code, qty=1,
+			is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC")
+
+		make_stock_entry(target="_Test Warehouse - _TC", qty=10, basic_rate=100)
+		make_stock_entry(target="_Test Warehouse - _TC",
+			item_code="_Test Item Home Desktop 100", qty=10, basic_rate=100)
+		make_stock_entry(target="_Test Warehouse - _TC",
+			item_code = "Test Extra Item 1", qty=100, basic_rate=100)
+		make_stock_entry(target="_Test Warehouse - _TC",
+			item_code = "Test Extra Item 2", qty=10, basic_rate=100)
+
+		rm_item = [
+			{"item_code":item_code,"rm_item_code":"_Test Item","item_name":"_Test Item",
+				"qty":1,"warehouse":"_Test Warehouse - _TC","rate":100,"amount":100,"stock_uom":"Nos"},
+			{"item_code":item_code,"rm_item_code":"_Test Item Home Desktop 100","item_name":"_Test Item Home Desktop 100",
+				"qty":2,"warehouse":"_Test Warehouse - _TC","rate":100,"amount":200,"stock_uom":"Nos"},
+			{"item_code":item_code,"rm_item_code":"Test Extra Item 1","item_name":"Test Extra Item 1",
+				"qty":1,"warehouse":"_Test Warehouse - _TC","rate":100,"amount":200,"stock_uom":"Nos"}]
+
+		rm_item_string = json.dumps(rm_item)
+		se = frappe.get_doc(make_subcontract_transfer_entry(po.name, rm_item_string))
+		se.append('items', {
+			'item_code': "Test Extra Item 2",
+			"qty": 1,
+			"rate": 100,
+			"s_warehouse": "_Test Warehouse - _TC",
+			"t_warehouse": "_Test Warehouse 1 - _TC"
+		})
+		se.set_missing_values()
+		se.submit()
+
+		pr = make_purchase_receipt(po.name)
+		pr.save()
+		pr.submit()
+
+		se_items = sorted([d.item_code for d in se.get('items')])
+		supplied_items = sorted([d.rm_item_code for d in pr.get('supplied_items')])
+
+		self.assertEquals(se_items, supplied_items)
+		update_backflush_based_on("BOM")
+
+def make_subcontracted_item(item_code):
+	from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
+
+	if not frappe.db.exists('Item', item_code):
+		make_item(item_code, {
+			'is_stock_item': 1,
+			'is_sub_contracted_item': 1
+		})
+
+	if not frappe.db.exists('Item', "Test Extra Item 1"):
+		make_item("Test Extra Item 1", {
+			'is_stock_item': 1,
+		})
+
+	if not frappe.db.exists('Item', "Test Extra Item 2"):
+		make_item("Test Extra Item 2", {
+			'is_stock_item': 1,
+		})
+
+	if not frappe.db.get_value('BOM', {'item': item_code}, 'name'):
+		make_bom(item = item_code, raw_materials = ['_Test FG Item', 'Test Extra Item 1'])
+
+def update_backflush_based_on(based_on):
+	doc = frappe.get_doc('Buying Settings')
+	doc.backflush_raw_materials_of_subcontract_based_on = based_on
+	doc.save()
+
 def get_same_items():
 	return [
 		{
@@ -400,7 +496,8 @@
 		"warehouse": args.warehouse or "_Test Warehouse - _TC",
 		"qty": args.qty or 10,
 		"rate": args.rate or 500,
-		"schedule_date": add_days(nowdate(), 1)
+		"schedule_date": add_days(nowdate(), 1),
+		"include_exploded_items": args.get('include_exploded_items', 1)
 	})
 	if not args.do_not_save:
 		po.insert()
