diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 525f829..773e61a 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -11,7 +11,7 @@
 from datetime import datetime, timedelta
 from frappe.model.mapper import get_mapped_doc
 from frappe.utils.user import is_website_user
-from ..service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
+from erpnext.support.doctype.service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
 from erpnext.crm.doctype.opportunity.opportunity import assign_to_user
 from frappe.email.inbox import link_communication_to_document
 
@@ -63,10 +63,10 @@
 	def update_status(self):
 		status = frappe.db.get_value("Issue", self.name, "status")
 		if self.status!="Open" and status =="Open" and not self.first_responded_on:
-			self.first_responded_on = now_datetime()
+			self.first_responded_on = frappe.flags.current_time or now_datetime()
 
 		if self.status=="Closed" and status !="Closed":
-			self.resolution_date = now_datetime()
+			self.resolution_date = frappe.flags.current_time or now_datetime()
 			if frappe.db.get_value("Issue", self.name, "agreement_fulfilled") == "Ongoing":
 				set_service_level_agreement_variance(issue=self.name)
 				self.update_agreement_status()
@@ -79,7 +79,9 @@
 		current_time = frappe.flags.current_time or now_datetime()
 
 		if self.service_level_agreement and self.agreement_fulfilled == "Ongoing":
-			if self.response_by_variance < 0 or self.resolution_by_variance < 0:
+			if frappe.db.get_value("Issue", self.name, "response_by_variance") < 0 or \
+				frappe.db.get_value("Issue", self.name, "resolution_by_variance") < 0:
+
 				self.agreement_fulfilled = "Failed"
 			else:
 				self.agreement_fulfilled = "Fulfilled"
diff --git a/erpnext/support/doctype/issue/test_issue.py b/erpnext/support/doctype/issue/test_issue.py
index 565c603..22e00c6 100644
--- a/erpnext/support/doctype/issue/test_issue.py
+++ b/erpnext/support/doctype/issue/test_issue.py
@@ -4,7 +4,7 @@
 
 import frappe
 import unittest
-from erpnext.support.doctype.service_level_agreement.test_service_level_agreement import make_service_level_agreement
+from erpnext.support.doctype.service_level_agreement.test_service_level_agreement import create_service_level_agreements_for_issues
 from frappe.utils import now_datetime
 import datetime
 from datetime import timedelta
@@ -18,15 +18,30 @@
 
 
 	def test_response_time_and_resolution_time_based_on_different_sla(self):
-		make_service_level_agreement()
+		create_service_level_agreements_for_issues()
 
 		creation = "2019-03-04 12:00:00"
 
 		# make issue with customer specific SLA
-		issue = make_issue(creation, '_Test Customer')
+		customer = create_customer("_Test Customer", "__Test SLA Customer Group", "__Test SLA Territory")
+		issue = make_issue(creation, "_Test Customer")
 
-		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 7, 18, 0))
-		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 9, 18, 0))
+		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
+		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
+
+		# make issue with customer_group specific SLA
+		customer = create_customer("__Test Customer", "_Test SLA Customer Group", "__Test SLA Territory")
+		issue = make_issue(creation, "__Test Customer")
+
+		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
+		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
+
+		# make issue with territory specific SLA
+		customer = create_customer("___Test Customer", "__Test SLA Customer Group", "_Test SLA Territory")
+		issue = make_issue(creation, "___Test Customer")
+
+		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
+		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
 
 		# make issue with default SLA
 		issue = make_issue(creation)
@@ -41,7 +56,7 @@
 		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 18, 0))
 		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 6, 12, 0))
 
-		frappe.flags.current_time = datetime.datetime(2019, 3, 3, 12, 0)
+		frappe.flags.current_time = datetime.datetime(2019, 3, 4, 15, 0)
 
 		issue.status = 'Closed'
 		issue.save()
@@ -52,10 +67,39 @@
 
 	issue = frappe.get_doc({
 		"doctype": "Issue",
-		"subject": "Issue 1",
+		"subject": "Service Level Agreement Issue",
 		"customer": customer,
 		"raised_by": "test@example.com",
 		"creation": creation
 	}).insert(ignore_permissions=True)
 
-	return issue
\ No newline at end of file
+	return issue
+
+def create_customer(name, customer_group, territory):
+
+	create_customer_group(customer_group)
+	create_territory(territory)
+
+	if not frappe.db.exists("Customer", {"customer_name": name}):
+		frappe.get_doc({
+			"doctype": "Customer",
+			"customer_name": name,
+			"customer_group": customer_group,
+			"territory": territory
+		}).insert(ignore_permissions=True)
+
+def create_customer_group(customer_group):
+
+	if not frappe.db.exists("Customer Group", {"customer_group_name": customer_group}):
+		frappe.get_doc({
+			"doctype": "Customer Group",
+			"customer_group_name": customer_group
+		}).insert(ignore_permissions=True)
+
+def create_territory(territory):
+
+	if not frappe.db.exists("Territory", {"territory_name": territory}):
+		frappe.get_doc({
+			"doctype": "Territory",
+			"territory_name": territory,
+		}).insert(ignore_permissions=True)
diff --git a/erpnext/support/doctype/service_level/test_service_level.py b/erpnext/support/doctype/service_level/test_service_level.py
index 9131d80..09577df 100644
--- a/erpnext/support/doctype/service_level/test_service_level.py
+++ b/erpnext/support/doctype/service_level/test_service_level.py
@@ -4,9 +4,6 @@
 from __future__ import unicode_literals
 from erpnext.hr.doctype.employee_group.test_employee_group import make_employee_group
 from erpnext.support.doctype.issue_priority.test_issue_priority import make_priorities
-from frappe.utils import now_datetime
-import datetime
-from datetime import timedelta
 
 import frappe
 import unittest
@@ -14,45 +11,54 @@
 class TestServiceLevel(unittest.TestCase):
 
 	def test_service_level(self):
-		test_make_service_level = make_service_level()
-		get_make_service_level = get_service_level()
+		employee_group = make_employee_group()
+		make_holiday_list()
+		make_priorities()
+
+		# Default Service Level
+		test_make_service_level = create_service_level("__Test Service Level", "__Test Holiday List", employee_group, 4, 6)
+		get_make_service_level = get_service_level("__Test Service Level")
 
 		self.assertEqual(test_make_service_level.name, get_make_service_level.name)
 		self.assertEqual(test_make_service_level.holiday_list, get_make_service_level.holiday_list)
 		self.assertEqual(test_make_service_level.employee_group, get_make_service_level.employee_group)
 
-def make_service_level():
-	employee_group = make_employee_group()
-	make_holiday_list()
-	make_priorities()
+		# Service Level
+		test_make_service_level = create_service_level("_Test Service Level", "__Test Holiday List", employee_group, 2, 3)
+		get_make_service_level = get_service_level("_Test Service Level")
 
-	# Default Service Level Agreement
-	default_service_level = frappe.get_doc({
+		self.assertEqual(test_make_service_level.name, get_make_service_level.name)
+		self.assertEqual(test_make_service_level.holiday_list, get_make_service_level.holiday_list)
+		self.assertEqual(test_make_service_level.employee_group, get_make_service_level.employee_group)
+
+
+def create_service_level(service_level, holiday_list, employee_group, response_time, resolution_time):
+	sl = frappe.get_doc({
 		"doctype": "Service Level",
-		"service_level": "__Test Service Level",
-		"holiday_list": "__Test Holiday List",
+		"service_level": service_level,
+		"holiday_list": holiday_list,
 		"employee_group": employee_group,
 		"priorities": [
 			{
 				"priority": "Low",
-				"response_time": 4,
+				"response_time": response_time,
 				"response_time_period": "Hour",
-				"resolution_time": 6,
+				"resolution_time": resolution_time,
 				"resolution_time_period": "Hour",
 			},
 			{
 				"priority": "Medium",
-				"response_time": 4,
+				"response_time": response_time,
 				"default_priority": 1,
 				"response_time_period": "Hour",
-				"resolution_time": 6,
+				"resolution_time": resolution_time,
 				"resolution_time_period": "Hour",
 			},
 			{
 				"priority": "High",
-				"response_time": 4,
+				"response_time": response_time,
 				"response_time_period": "Hour",
-				"resolution_time": 6,
+				"resolution_time": resolution_time,
 				"resolution_time_period": "Hour",
 			}
 		],
@@ -95,92 +101,21 @@
 		]
 	})
 
-	default_service_level_exists = frappe.db.exists("Service Level", "__Test Service Level")
-	if not default_service_level_exists:
-		default_service_level.insert()
+	sl_exists = frappe.db.exists("Service Level", {"service_level": service_level})
 
-	service_level = frappe.get_doc({
-		"doctype": "Service Level",
-		"service_level": "_Test Service Level",
-		"holiday_list": "__Test Holiday List",
-		"employee_group": employee_group,
-		"priorities": [
-			{
-				"priority": "Low",
-				"response_time": 2,
-				"response_time_period": "Day",
-				"resolution_time": 3,
-				"resolution_time_period": "Day",
-			},
-			{
-				"priority": "Medium",
-				"response_time": 2,
-				"default_priority": 1,
-				"response_time_period": "Day",
-				"resolution_time": 3,
-				"resolution_time_period": "Day",
-			},
-			{
-				"priority": "High",
-				"response_time": 2,
-				"response_time_period": "Day",
-				"resolution_time": 3,
-				"resolution_time_period": "Day",
-			}
-		],
-		"support_and_resolution": [
-			{
-				"workday": "Monday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			},
-			{
-				"workday": "Tuesday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			},
-			{
-				"workday": "Wednesday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			},
-			{
-				"workday": "Thursday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			},
-			{
-				"workday": "Friday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			},
-			{
-				"workday": "Saturday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			},
-			{
-				"workday": "Sunday",
-				"start_time": "10:00:00",
-				"end_time": "18:00:00",
-			}
-		]
-	})
-	service_level_exist = frappe.db.exists("Service Level", {"service_level": "_Test Service Level"})
-
-	if not service_level_exist:
-		service_level.insert()
-		return service_level
+	if not sl_exists:
+		sl.insert()
+		return sl
 	else:
-		return frappe.get_doc("Service Level", "_Test Service Level")
+		return frappe.get_doc("Service Level", {"service_level": service_level})
 
-def get_service_level():
-	return frappe.get_doc("Service Level", "_Test Service Level")
+def get_service_level(service_level):
+	return frappe.get_doc("Service Level", service_level)
 
 def make_holiday_list():
 	holiday_list = frappe.db.exists("Holiday List", "__Test Holiday List")
 	if not holiday_list:
-		now = datetime.datetime.now()
+		now = frappe.utils.now_datetime()
 		holiday_list = frappe.get_doc({
 			"doctype": "Holiday List",
 			"holiday_list_name": "__Test Holiday List",
@@ -200,4 +135,15 @@
 					"holiday_date": "2019-02-11"
 				},
 			]
-		}).insert()
\ No newline at end of file
+		}).insert()
+
+def create_service_level_for_sla():
+	employee_group = make_employee_group()
+	make_holiday_list()
+	make_priorities()
+
+	# Default Service Level
+	create_service_level("__Test Service Level", "__Test Holiday List", employee_group, 4, 6)
+
+	# Service Level
+	create_service_level("_Test Service Level", "__Test Holiday List", employee_group, 2, 3)
diff --git a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
index ccc287b..aeeb86d 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
@@ -62,7 +62,7 @@
 	or_filters.append(["Service Level Agreement", "default_service_level_agreement", "=", 1])
 
 	agreement = frappe.get_list("Service Level Agreement", filters=filters, or_filters=or_filters,
-		fields=["name", "default_priority"], debug=True)
+		fields=["name", "default_priority"])
 
 	return agreement[0] if agreement else None
 
diff --git a/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py b/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py
index 214fe4b..e04265f 100644
--- a/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py
+++ b/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py
@@ -5,12 +5,12 @@
 
 import frappe
 import unittest
-from erpnext.support.doctype.service_level.test_service_level import make_service_level
+from erpnext.support.doctype.service_level.test_service_level import create_service_level_for_sla
 
 class TestServiceLevelAgreement(unittest.TestCase):
 
 	def test_service_level_agreement(self):
-		make_service_level()
+		create_service_level_for_sla()
 
 		# Default Service Level Agreement
 		create_default_service_level_agreement = create_service_level_agreement(default_service_level_agreement=1,
@@ -26,7 +26,7 @@
 		# Service Level Agreement for Customer
 		customer = create_customer()
 		create_customer_service_level_agreement = create_service_level_agreement(default_service_level_agreement=0,
-			service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+			service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
 			apply_to="Customer", entity=customer, response_time=2, resolution_time=3)
 		get_customer_service_level_agreement = get_service_level_agreement(apply_to="Customer", entity=customer)
 
@@ -38,8 +38,8 @@
 		# Service Level Agreement for Customer Group
 		customer_group = create_customer_group()
 		create_customer_group_service_level_agreement = create_service_level_agreement(default_service_level_agreement=0,
-			service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
-			apply_to="Customer Group", entity=customer_group, response_time=4, resolution_time=6)
+			service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+			apply_to="Customer Group", entity=customer_group, response_time=2, resolution_time=3)
 		get_customer_group_service_level_agreement = get_service_level_agreement(apply_to="Customer Group", entity=customer_group)
 
 		self.assertEqual(create_customer_group_service_level_agreement.name, get_customer_group_service_level_agreement.name)
@@ -50,7 +50,7 @@
 		# Service Level Agreement for Territory
 		territory = create_territory()
 		create_territory_service_level_agreement = create_service_level_agreement(default_service_level_agreement=0,
-			service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+			service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
 			apply_to="Territory", entity=territory, response_time=2, resolution_time=3)
 		get_territory_service_level_agreement = get_service_level_agreement(apply_to="Territory", entity=territory)
 
@@ -67,7 +67,6 @@
 		filters = {"apply_to": apply_to, "entity": entity}
 
 	service_level_agreement = frappe.get_doc("Service Level Agreement", filters)
-	print(service_level_agreement)
 	return service_level_agreement
 
 def create_service_level_agreement(default_service_level_agreement, service_level, holiday_list, employee_group,
@@ -146,13 +145,24 @@
 		]
 	})
 
-	service_level_agreement_exists = frappe.db.exists("Service Level Agreement", service_level_agreement.name)
+	filters = {
+		"default_service_level_agreement": service_level_agreement.default_service_level_agreement,
+		"service_level": service_level_agreement.service_level
+	}
+
+	if not default_service_level_agreement:
+		filters.update({
+			"apply_to": apply_to,
+			"entity": entity
+		})
+
+	service_level_agreement_exists = frappe.db.exists("Service Level Agreement", filters)
 
 	if not service_level_agreement_exists:
 		service_level_agreement.insert(ignore_permissions=True)
 		return service_level_agreement
 	else:
-		return frappe.get_doc("Service Level Agreement", service_level_agreement.name)
+		return frappe.get_doc("Service Level Agreement", service_level_agreement_exists)
 
 def create_customer():
 	customer = frappe.get_doc({
@@ -190,4 +200,26 @@
 		territory.insert()
 		return territory.name
 	else:
-		return frappe.db.exists("Territory", {"territory_name": "_Test SLA Territory"})
\ No newline at end of file
+		return frappe.db.exists("Territory", {"territory_name": "_Test SLA Territory"})
+
+def create_service_level_agreements_for_issues():
+	create_service_level_for_sla()
+
+	create_service_level_agreement(default_service_level_agreement=1,
+		service_level="__Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+		apply_to=None, entity=None, response_time=4, resolution_time=6)
+
+	create_customer()
+	create_service_level_agreement(default_service_level_agreement=0,
+		service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+		apply_to="Customer", entity="_Test Customer", response_time=2, resolution_time=3)
+
+	create_customer_group()
+	create_service_level_agreement(default_service_level_agreement=0,
+		service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+		apply_to="Customer Group", entity="_Test SLA Customer Group", response_time=2, resolution_time=3)
+
+	create_territory()
+	create_service_level_agreement(default_service_level_agreement=0,
+		service_level="_Test Service Level", holiday_list="__Test Holiday List", employee_group="_Test Employee Group",
+		apply_to="Territory", entity="_Test SLA Territory", response_time=2, resolution_time=3)
