diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 04a0fb6..dfb54a2 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -54,17 +54,15 @@
 				self.project_type = template.project_type
 
 			# create tasks from template
+			project_tasks = []
 			for task in template.tasks:
 				template_task_details = frappe.get_doc("Task", task.task)
-				project_task = self.create_task_from_template(template_task_details)
+				project_tasks.append(self.create_task_from_template(template_task_details))
 				
-				if template_task_details.depends_on:
-					for child_task in template_task_details.depends_on:
-						child_task_details = frappe.get_doc("Task",child_task.task)
-						self.create_task_from_template(child_task_details, project_task)
+			#self.dependency_mapping(template.tasks, project_tasks)
 
-	def create_task_from_template(self, task_details, project_task=None):
-		doc = frappe.get_doc(dict(
+	def create_task_from_template(self, task_details):
+		return frappe.get_doc(dict(
 				doctype = 'Task',
 				subject = task_details.subject,
 				project = self.name,
@@ -75,14 +73,21 @@
 				task_weight = task_details.task_weight,
 				type = task_details.type,
 				issue = task_details.issue,
-				is_group = task_details.is_group
-			))
-		if task_details.parent_task and project_task:
-			doc.parent_task = project_task.name
-		if not task_details.is_group:
-			doc.depends_on = task_details.depends_on
-		doc.insert()
-		return doc
+				is_group = task_details.is_group,
+				start = task_details.start,
+				duration = task_details.duration
+			)).insert()
+
+	""" def dependency_mapping(self, template_tasks, project_tasks):
+		for tmp_task in template_tasks:
+			for prj_task in project_tasks:
+				if tmp_task.subject == prj_task.subject:
+					if tmp_task.depends_on and not prj_task.depends_on:
+						for child_task in tmp_task.depends_on:
+							child_task_detai
+						prj_task.depends_on = tmp_task.depends_on
+					 """
+
 
 	def is_row_updated(self, row, existing_task_data, fields):
 		if self.get("__islocal") or not existing_task_data: return True
diff --git a/erpnext/projects/doctype/project/test_project.py b/erpnext/projects/doctype/project/test_project.py
index 52f877b..f9bb1b3 100644
--- a/erpnext/projects/doctype/project/test_project.py
+++ b/erpnext/projects/doctype/project/test_project.py
@@ -20,15 +20,16 @@
 		frappe.db.sql('delete from tabTask where project = "Test Project with Templ - no parent and dependend tasks"')
 		frappe.delete_doc('Project', 'Test Project with Templ - no parent and dependend tasks')
 
-		if not frappe.db.exists("Task", "Test Temp Task with no parent and dependency"):
-			task1 = create_task(subject="Test Temp Task with no parent and dependency", is_template=1, begin=0, duration=3)
+		task1 = task_exists("Test Temp Task with no parent and dependency")
+		if not task1:
+			task1 = create_task(subject="Test Temp Task with no parent and dependency", is_template=1, begin=5, duration=3)
 
 		template = make_project_template("Test Project Template - no parent and dependend tasks", [task1])
 		project = get_project("Test Project with Templ - no parent and dependend tasks", template)
 		tasks = frappe.get_all('Task', '*', dict(project=project.name), order_by='creation asc')
 
 		self.assertEqual(tasks[0].subject, 'Test Temp Task with no parent and dependency')
-		self.assertEqual(getdate(tasks[0].exp_end_date), add_days(nowdate() + 0 + 3))
+		self.assertEqual(getdate(tasks[0].exp_end_date), calculate_end_date(project, tasks[0]))
 		self.assertEqual(len(tasks), 1)
 
 	def test_project_template_having_parent_child_tasks(self):
@@ -36,28 +37,31 @@
 		frappe.db.sql('delete from tabTask where project = "Test Project with Templ - tasks with parent-child"')
 		frappe.delete_doc('Project', 'Test Project with Templ - tasks with parent-child')
 
-		if not frappe.db.exists("Task", "Test Temp Task parent"):
+		task1 = task_exists("Test Temp Task parent")
+		if not task1:
 			task1 = create_task(subject="Test Temp Task parent", is_group=1, is_template=1, begin=1, duration=1)
 
-		if not frappe.db.exists("Task", "Test Temp Task child 1"):
+		task2 = task_exists("Test Temp Task child 1")
+		if not task2:
 			task2 = create_task(subject="Test Temp Task child 1", parent_task=task1.name, is_template=1, begin=1, duration=3)
 		
-		if not frappe.db.exists("Task", "Test Temp Task child 2"):
+		task3 = task_exists("Test Temp Task child 2")
+		if not task3:
 			task3 = create_task(subject="Test Temp Task child 2", parent_task=task1.name, is_template=1, begin=2, duration=3)
 
-		template = make_project_template("Test Project Template  - tasks with parent-child", [task1, task2, task3])
+		template = make_project_template("Test Project Template  - tasks with parent-child", [task1])
 		project = get_project("Test Project with Templ - tasks with parent-child", template)
 		tasks = frappe.get_all('Task', '*', dict(project=project.name), order_by='creation asc')
-		print(tasks, type(tasks), len(tasks))
+		print(tasks[0].duration)
 		self.assertEqual(tasks[0].subject, 'Test Temp Task parent')
-		self.assertEqual(getdate(tasks[0].exp_end_date), add_days(nowdate()+ 1 + 1))
+		self.assertEqual(getdate(tasks[0].exp_end_date), calculate_end_date(project, tasks[0]))
 
 		self.assertEqual(tasks[1].subject, 'Test Temp Task child 1')
-		self.assertEqual(getdate(tasks[1].exp_end_date), add_days(nowdate()+ 1 + 3))
+		self.assertEqual(getdate(tasks[1].exp_end_date), calculate_end_date(project, tasks[1]))
 		self.assertEqual(tasks[1].parent_task, tasks[0].name)
 
 		self.assertEqual(tasks[2].subject, 'Test Temp Task child 2')
-		self.assertEqual(getdate(tasks[2].exp_end_date), add_days(nowdate()+ 2 + 3))
+		self.assertEqual(getdate(tasks[2].exp_end_date), calculate_end_date(project, tasks[2]))
 		self.assertEqual(tasks[2].parent_task, tasks[0].name)
 
 		self.assertEqual(len(tasks), 3)
@@ -67,22 +71,24 @@
 		frappe.db.sql('delete from tabTask where project = "Test Project with Templ - dependent tasks"')
 		frappe.delete_doc('Project', 'Test Project with Templ - dependent tasks')
 
-		if not frappe.db.exists("Task", "Test Temp Task for dependency"):
+		task1 = task_exists("Test Temp Task for dependency")
+		if not task1:
 			task1 = create_task(subject="Test Temp Task for dependency", is_template=1, begin=3, duration=1)
 
-		if not frappe.db.exists("Task", "Test Temp Task with dependency"):
+		task2 = task_exists("Test Temp Task with dependency")
+		if not task2:
 			task2 = create_task(subject="Test Temp Task with dependency", depends_on=task1.name, is_template=1, begin=2, duration=2)
 		
-		template = make_project_template("Test Project Template  - tasks with parent-child", [task1, task2])
+		template = make_project_template("Test Project with Templ - dependent tasks", [task2])
 		project = get_project("Test Project with Templ - tasks with parent-child", template)
 		tasks = frappe.get_all('Task', '*', dict(project=project.name), order_by='creation asc')
 
-		self.assertEqual(tasks[0].subject, 'Test Temp Task for dependency')
-		self.assertEqual(getdate(tasks[0].exp_end_date), add_days(nowdate()+ 3 + 1))
+		self.assertEqual(tasks[0].subject, 'Test Temp Task with dependency')
+		self.assertEqual(getdate(tasks[0].exp_end_date), calculate_end_date(project, tasks[0]))
+		self.assertEqual(tasks[0].depends_on, tasks[1].name)
 
-		self.assertEqual(tasks[1].subject, 'Test Temp Task with dependency')
-		self.assertEqual(getdate(tasks[1].exp_end_date), add_days(nowdate()+ 2 + 2))
-		self.assertEqual(tasks[1].depends_on, tasks[0].name)
+		self.assertEqual(tasks[1].subject, 'Test Temp Task for dependency')
+		self.assertEqual(getdate(tasks[1].exp_end_date), calculate_end_date(project, tasks[1]) )
 
 		self.assertEqual(len(tasks), 2)
 
@@ -93,7 +99,7 @@
 		project_name = name,
 		status = 'Open',
 		project_template = template.name,
-		expected_start_date = '2019-01-01'
+		expected_start_date = nowdate()
 	)).insert()
 
 	return project
@@ -114,4 +120,13 @@
 	if not frappe.db.exists("Project", args.project_name):
 		project.insert()
 
-	return project
\ No newline at end of file
+	return project
+
+def task_exists(subject):
+	result = frappe.db.get_list("Task", filters={"subject": subject},fields=["name"])
+	if not len(result):
+		return False
+	return frappe.get_doc("Task", result[0].name)
+
+def calculate_end_date(project, task):
+	return getdate(add_days(project.expected_start_date, task.start + task.duration))
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project_template/test_project_template.py b/erpnext/projects/doctype/project_template/test_project_template.py
index 379365f..6c6b783 100644
--- a/erpnext/projects/doctype/project_template/test_project_template.py
+++ b/erpnext/projects/doctype/project_template/test_project_template.py
@@ -17,9 +17,7 @@
 			name = project_template_name,
 			tasks = project_tasks or [
 				create_task(subject="_Test Template Task 1", is_template=1, begin=0, duration=3),
-				create_task(subject="_Test Template Task 2", is_template=1, begin=0, duration=2),
-				create_task(subject="_Test Template Task 3", is_template=1, begin=2, duration=4),
-				create_task(subject="_Test Template Task 4", is_template=1, begin=3, duration=2),
+				create_task(subject="_Test Template Task 2", is_template=1, begin=0, duration=2)
 			]
 		)).insert()
 
@@ -27,13 +25,18 @@
 
 def make_project_template(project_template_name, project_tasks=[]):
 	if not frappe.db.exists('Project Template', project_template_name):
-		frappe.get_doc(dict(
-			doctype = 'Project Template',
-			name = project_template_name,
-			tasks = project_tasks or [
+		project_tasks = project_tasks or [
 				create_task(subject="_Test Template Task 1", is_template=1, begin=0, duration=3),
 				create_task(subject="_Test Template Task 2", is_template=1, begin=0, duration=2),
 			]
-		)).insert()
+		doc = frappe.get_doc(dict(
+			doctype = 'Project Template',
+			name = project_template_name
+		))
+		for task in project_tasks:
+			doc.append("tasks",{
+				"task": task.name
+			})
+		doc.insert()
 
 	return frappe.get_doc('Project Template', project_template_name)
\ No newline at end of file
diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py
index 181a2dc..d43d132 100644
--- a/erpnext/projects/doctype/task/test_task.py
+++ b/erpnext/projects/doctype/task/test_task.py
@@ -104,11 +104,12 @@
 		task.subject = subject
 		task.exp_start_date = start or nowdate()
 		task.exp_end_date = end or nowdate()
-		task.project = project or "_Test Project"
-		task.is_template = is_template,
+		task.project = project
+		task.is_template = is_template
 		task.start = begin
-		task.duration = duration,
+		task.duration = duration
 		task.is_group = is_group
+		task.parent_task = parent_task
 		if save:
 			task.save()
 	else:
@@ -120,5 +121,4 @@
 		})
 		if save:
 			task.save()
-
 	return task
