diff --git a/erpnext/demo/user/manufacturing.py b/erpnext/demo/user/manufacturing.py
index 128ca1a..612dc49 100644
--- a/erpnext/demo/user/manufacturing.py
+++ b/erpnext/demo/user/manufacturing.py
@@ -4,13 +4,17 @@
 from __future__ import unicode_literals
 
 import frappe, random, erpnext
+from datetime import datetime, timedelta
 from frappe.utils.make_random import how_many
 from frappe.desk import query_report
 from erpnext.manufacturing.doctype.workstation.workstation import WorkstationHolidayError
 from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record
 
 def work():
+	if random.random() < 0.3: return
+
 	frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
+	if not frappe.get_all('Sales Order'): return
 
 	from erpnext.projects.doctype.timesheet.timesheet import OverlapError
 
@@ -20,6 +24,7 @@
 	ppt.get_items_from = "Sales Order"
 	# ppt.purchase_request_for_warehouse = "Stores - WPL" # refactored
 	ppt.run_method("get_open_sales_orders")
+	if not ppt.get("sales_orders"): return
 	ppt.run_method("get_items")
 	ppt.run_method("raise_material_requests")
 	ppt.save()
@@ -41,12 +46,12 @@
 		frappe.db.commit()
 
 	# stores -> wip
-	if random.random() < 0.3:
+	if random.random() < 0.4:
 		for pro in query_report.run("Open Work Orders")["result"][:how_many("Stock Entry for WIP")]:
 			make_stock_entry_from_pro(pro[0], "Material Transfer for Manufacture")
 
 	# wip -> fg
-	if random.random() < 0.3:
+	if random.random() < 0.4:
 		for pro in query_report.run("Work Orders in Progress")["result"][:how_many("Stock Entry for FG")]:
 			make_stock_entry_from_pro(pro[0], "Manufacture")
 
@@ -57,17 +62,9 @@
 			stock_uom = frappe.db.get_value('Item', bom.item, 'stock_uom'),
 			planned_start_date = frappe.flags.current_date)
 
-	# submit time logs
-	for timesheet in frappe.get_all("Timesheet", ["name"], {"docstatus": 0,
-		"work_order": ("!=", ""), "to_time": ("<", frappe.flags.current_date)}):
-		timesheet = frappe.get_doc("Timesheet", timesheet.name)
-		try:
-			timesheet.submit()
-			frappe.db.commit()
-		except OverlapError:
-			pass
-		except WorkstationHolidayError:
-			pass
+	# submit job card
+	if random.random() < 0.4:
+		submit_job_cards()
 
 def make_stock_entry_from_pro(pro_id, purpose):
 	from erpnext.manufacturing.doctype.work_order.work_order import make_stock_entry
@@ -88,3 +85,27 @@
 	except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForWorkOrderError,
 		OperationsNotCompleteError):
 		frappe.db.rollback()
+
+def submit_job_cards():
+	work_orders = frappe.get_all("Work Order", ["name", "creation"], {"docstatus": 1, "status": "Not Started"})
+	work_order = random.choice(work_orders)
+	# for work_order in work_orders:
+	start_date = work_order.creation
+	work_order = frappe.get_doc("Work Order", work_order.name)
+	job = frappe.get_all("Job Card", ["name", "operation", "work_order"],
+		{"docstatus": 0, "work_order": work_order.name})
+
+	if not job: return
+	job_map = {}
+	for d in job:
+		job_map[d.operation] = frappe.get_doc("Job Card", d.name)
+
+	for operation in work_order.operations:
+		job = job_map[operation.operation]
+		job.actual_start_date = start_date
+		minutes = operation.get("time_in_mins")
+		random_minutes = random.randint(int(minutes/2), minutes)
+		job.actual_end_date = job.actual_start_date + timedelta(minutes=random_minutes)
+		start_date = job.actual_end_date
+		job.save()
+		job.submit()
