diff --git a/erpnext/demo/user/accounts.py b/erpnext/demo/user/accounts.py
index a12933b..1885504 100644
--- a/erpnext/demo/user/accounts.py
+++ b/erpnext/demo/user/accounts.py
@@ -56,7 +56,7 @@
 	if random.random() < 0.5:
 		make_payment_entries("Purchase Invoice", "Accounts Payable")
 
-	if random.random() < 0.1:
+	if random.random() < 0.4:
 		#make payment request against sales invoice
 		sales_invoice_name = get_random("Sales Invoice", filters={"docstatus": 1})
 		if sales_invoice_name:
diff --git a/erpnext/demo/user/projects.py b/erpnext/demo/user/projects.py
index 9802447..ee87199 100644
--- a/erpnext/demo/user/projects.py
+++ b/erpnext/demo/user/projects.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 
-import frappe
+import frappe, erpnext
 from frappe.utils import flt
 from frappe.utils.make_random import get_random
 from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
@@ -19,7 +19,7 @@
 def make_timesheet_for_projects(current_date	):
 	for data in frappe.get_all("Task", ["name", "project"], {"status": "Open", "exp_end_date": ("<", current_date)}):
 		employee = get_random("Employee")
-		ts = make_timesheet(employee, simulate = True, billable = 1,
+		ts = make_timesheet(employee, simulate = True, billable = 1, company = erpnext.get_default_company(),
 			activity_type=get_random("Activity Type"), project=data.project, task =data.name)
 
 		if flt(ts.total_billable_amount) > 0.0:
diff --git a/erpnext/demo/user/purchase.py b/erpnext/demo/user/purchase.py
index a9a603c..4796bf3 100644
--- a/erpnext/demo/user/purchase.py
+++ b/erpnext/demo/user/purchase.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 
-import frappe, random
+import frappe, random, json
 from frappe.utils.make_random import how_many, get_random
 from frappe.desk import query_report
 from erpnext.setup.utils import get_exchange_rate
@@ -16,14 +16,14 @@
 def work():
 	frappe.set_user(frappe.db.get_global('demo_purchase_user'))
 
-	if random.random() < 0.3:
+	if random.random() < 0.6:
 		report = "Items To Be Requested"
 		for row in query_report.run(report)["result"][:random.randint(1, 5)]:
 			item_code, qty = row[0], abs(row[-1])
 
 			mr = make_material_request(item_code, qty)
 
-	if random.random() < 0.3:
+	if random.random() < 0.6:
 		for mr in frappe.get_all('Material Request',
 			filters={'material_request_type': 'Purchase', 'status': 'Open'},
 			limit=random.randint(1,6)):
@@ -36,7 +36,7 @@
 				rfq.submit()
 
 	# Make suppier quotation from RFQ against each supplier.
-	if random.random() < 0.3:
+	if random.random() < 0.6:
 		for rfq in frappe.get_all('Request for Quotation',
 			filters={'status': 'Open'}, limit=random.randint(1, 6)):
 			if not frappe.get_all('Supplier Quotation',
@@ -59,7 +59,7 @@
 		exchange_rate = get_exchange_rate(party_account_currency, company_currency, args="for_buying")
 
 	# make supplier quotations
-	if random.random() < 0.2:
+	if random.random() < 0.5:
 		from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
 
 		report = "Material Requests for which Supplier Quotations are not created"
@@ -89,7 +89,7 @@
 				po.submit()
 				frappe.db.commit()
 
-	if random.random() < 0.2:
+	if random.random() < 0.5:
 		make_subcontract()
 
 def make_material_request(item_code, qty):
@@ -129,6 +129,7 @@
 		po = frappe.new_doc("Purchase Order")
 		po.is_subcontracted = "Yes"
 		po.supplier = get_random("Supplier")
+		po.transaction_date = frappe.flags.current_date # added
 		po.schedule_date = frappe.utils.add_days(frappe.flags.current_date, 7)
 
 		item_code = get_random("Item", {"is_sub_contracted_item": 1})
@@ -150,7 +151,7 @@
 		make_material_request(po.items[0].item_code, po.items[0].qty)
 
 		# transfer material for sub-contract
-		stock_entry = frappe.get_doc(make_rm_stock_entry(po.name, po.items[0].item_code))
+		stock_entry = frappe.get_doc(make_rm_stock_entry(po.name, frappe.as_json(po.items)))
 		stock_entry.from_warehouse = "Stores - WPL"
 		stock_entry.to_warehouse = "Supplier - WPL"
 		stock_entry.insert()
diff --git a/erpnext/demo/user/sales.py b/erpnext/demo/user/sales.py
index 65d7f55..304576a 100644
--- a/erpnext/demo/user/sales.py
+++ b/erpnext/demo/user/sales.py
@@ -12,12 +12,13 @@
 
 def work():
 	frappe.set_user(frappe.db.get_global('demo_sales_user_2'))
-	if random.random() < 0.5:
-		for i in range(random.randint(1,7)):
+
+	for i in range(random.randint(1,7)):
+		if random.random() < 0.5:
 			make_opportunity()
 
-	if random.random() < 0.5:
-		for i in range(random.randint(1,3)):
+	for i in range(random.randint(1,3)):
+		if random.random() < 0.5:
 			make_quotation()
 
 	# lost quotations / inquiries
@@ -32,11 +33,11 @@
 			if opportunity and opportunity.status in ('Open', 'Replied'):
 				opportunity.declare_enquiry_lost('Did not ask')
 
-	if random.random() < 0.3:
-		for i in range(random.randint(1,3)):
+	for i in range(random.randint(1,3)):
+		if random.random() < 0.3:
 			make_sales_order()
 
-	if random.random() < 0.1:
+	if random.random() < 0.5:
 		#make payment request against Sales Order
 		sales_order_name = get_random("Sales Order", filters={"docstatus": 1})
 		if sales_order_name:
@@ -115,8 +116,8 @@
 def make_sales_order():
 	q = get_random("Quotation", {"status": "Submitted"})
 	if q:
-		from erpnext.selling.doctype.quotation.quotation import make_sales_order
-		so = frappe.get_doc(make_sales_order(q))
+		from erpnext.selling.doctype.quotation.quotation import make_sales_order as mso
+		so = frappe.get_doc(mso(q))
 		so.transaction_date = frappe.flags.current_date
 		so.delivery_date = frappe.utils.add_days(frappe.flags.current_date, 10)
 		so.insert()
diff --git a/erpnext/demo/user/stock.py b/erpnext/demo/user/stock.py
index a6b0e00..50257dc 100644
--- a/erpnext/demo/user/stock.py
+++ b/erpnext/demo/user/stock.py
@@ -3,7 +3,7 @@
 
 from __future__ import print_function, unicode_literals
 
-import frappe, random
+import frappe, random, erpnext
 from frappe.desk import query_report
 from erpnext.stock.stock_ledger import NegativeStockError
 from erpnext.stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError
@@ -45,7 +45,7 @@
 	# make purchase requests
 
 	# make delivery notes (if possible)
-	if random.random() < 0.3:
+	if random.random() < 0.6:
 		from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
 		report = "Ordered Items To Be Delivered"
 		for so in list(set([r[0] for r in query_report.run(report)["result"]
@@ -68,9 +68,10 @@
 	from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation \
 		import OpeningEntryAccountError, EmptyStockReconciliationItemsError
 
-	if random.random() < 0.1:
+	if random.random() < 0.4:
 		stock_reco = frappe.new_doc("Stock Reconciliation")
 		stock_reco.posting_date = frappe.flags.current_date
+		stock_reco.company = erpnext.get_default_company()
 		stock_reco.get_items_for("Stores - WP")
 		if stock_reco.items:
 			for item in stock_reco.items:
@@ -87,7 +88,7 @@
 
 def submit_draft_stock_entries():
 	from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, \
-		DuplicateEntryForProductionOrderError, OperationsNotCompleteError
+		DuplicateEntryForWorkOrderError, OperationsNotCompleteError
 
 	# try posting older drafts (if exists)
 	frappe.db.commit()
@@ -98,7 +99,7 @@
 			ste.save()
 			ste.submit()
 			frappe.db.commit()
-		except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForProductionOrderError,
+		except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForWorkOrderError,
 			OperationsNotCompleteError):
 			frappe.db.rollback()
 
