diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java b/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java
index c73a018..3260656 100644
--- a/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java
+++ b/vid-app-common/src/main/java/org/onap/vid/controller/AsyncInstantiationController.java
@@ -36,10 +36,8 @@
 import org.onap.vid.roles.RoleProvider;
 import org.onap.vid.services.AsyncInstantiationBusinessLogic;
 import org.onap.vid.services.AuditService;
-import org.onap.vid.services.InstantiationTemplatesService;
 import org.onap.vid.utils.SystemPropertiesWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -56,7 +54,6 @@
     public static final String ASYNC_INSTANTIATION = "asyncInstantiation";
 
     protected final AsyncInstantiationBusinessLogic asyncInstantiationBL;
-    protected final InstantiationTemplatesService instantiationTemplates;
     protected final AsyncInstantiationRepository asyncInstantiationRepository;
     private final SystemPropertiesWrapper systemPropertiesWrapper;
 
@@ -68,12 +65,10 @@
 
     @Autowired
     public AsyncInstantiationController(AsyncInstantiationBusinessLogic asyncInstantiationBL,
-        InstantiationTemplatesService instantiationTemplates,
         AsyncInstantiationRepository asyncInstantiationRepository, RoleProvider roleProvider,
         FeatureManager featureManager, SystemPropertiesWrapper systemPropertiesWrapper,
         AuditService auditService) {
         this.asyncInstantiationBL = asyncInstantiationBL;
-        this.instantiationTemplates = instantiationTemplates;
         this.asyncInstantiationRepository = asyncInstantiationRepository;
         this.roleProvider = roleProvider;
         this.featureManager = featureManager;
@@ -95,7 +90,6 @@
             return  asyncInstantiationRepository.listInstantiatedServicesByServiceModelId(serviceModelId);
         }
     }
-
     @RequestMapping(value = "bulk", method = RequestMethod.POST)
     public MsoResponseWrapper2<List<String>> createBulkOfServices(@RequestBody ServiceInstantiation request, HttpServletRequest httpServletRequest) {
         //Push to DB according the model
@@ -174,11 +168,6 @@
         return new MsoResponseWrapper2(200, uuids);
     }
 
-    @GetMapping("templateTopology/{jobId}")
-    public ServiceInstantiation getTemplateTopology(HttpServletRequest request, @PathVariable(value="jobId") UUID jobId) {
-        return instantiationTemplates.getJobRequestAsTemplate(jobId);
-    }
-
     @RequestMapping(value = "/auditStatusForRetry/{trackById}", method = RequestMethod.GET)
     public JobAuditStatus getResourceAuditStatus(HttpServletRequest request, @PathVariable(value="trackById") String trackById) {
         return auditService.getResourceAuditStatus(trackById);
diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/InstantiationTemplatesController.java b/vid-app-common/src/main/java/org/onap/vid/controller/InstantiationTemplatesController.java
new file mode 100644
index 0000000..8aae3d8
--- /dev/null
+++ b/vid-app-common/src/main/java/org/onap/vid/controller/InstantiationTemplatesController.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.vid.controller;
+
+
+import java.util.UUID;
+import javax.servlet.http.HttpServletRequest;
+import org.onap.vid.dal.AsyncInstantiationRepository;
+import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
+import org.onap.vid.services.AsyncInstantiationBusinessLogic;
+import org.onap.vid.services.InstantiationTemplatesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(InstantiationTemplatesController.INSTANTIATION_TEMPLATES)
+public class InstantiationTemplatesController extends VidRestrictedBaseController {
+
+    public static final String INSTANTIATION_TEMPLATES = "instantiationTemplates";
+
+    protected final AsyncInstantiationBusinessLogic asyncInstantiationBL;
+    protected final InstantiationTemplatesService instantiationTemplates;
+    protected final AsyncInstantiationRepository asyncInstantiationRepository;
+
+
+    @Autowired
+    public InstantiationTemplatesController(AsyncInstantiationBusinessLogic asyncInstantiationBL,
+        InstantiationTemplatesService instantiationTemplates,
+        AsyncInstantiationRepository asyncInstantiationRepository) {
+        this.asyncInstantiationBL = asyncInstantiationBL;
+        this.instantiationTemplates = instantiationTemplates;
+        this.asyncInstantiationRepository = asyncInstantiationRepository;
+    }
+
+    @GetMapping("templateTopology/{jobId}")
+    public ServiceInstantiation getTemplateTopology(HttpServletRequest request, @PathVariable(value="jobId") UUID jobId) {
+        return instantiationTemplates.getJobRequestAsTemplate(jobId);
+    }
+}
diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts
index 0075dc2..bf9c018 100644
--- a/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts
@@ -152,7 +152,7 @@
     'fixture:../support/jsonBuilders/mocks/jsons/instantiationTemplates/templates__service_model.json')
   .as('serviceModel');
 
-  cy.route(`**/asyncInstantiation/${templateTopologyEndpoint}/${templateUuid}`,
+  cy.route(`**/instantiationTemplates/${templateTopologyEndpoint}/${templateUuid}`,
     'fixture:../../../vid-automation/src/test/resources/asyncInstantiation/templates__instance_template.json')
   .as('templateTopology');
 
diff --git a/vid-webpack-master/src/app/shared/utils/constants.ts b/vid-webpack-master/src/app/shared/utils/constants.ts
index 6bf5ff1..f09ab08 100644
--- a/vid-webpack-master/src/app/shared/utils/constants.ts
+++ b/vid-webpack-master/src/app/shared/utils/constants.ts
@@ -95,7 +95,7 @@
     public static SERVICES_JOB_INFO_PATH = '../../asyncInstantiation';
     public static SERVICE_MODEL_ID = 'serviceModelId';
     public static SERVICES_RETRY_TOPOLOGY = '../../asyncInstantiation/bulkForRetry';
-    public static INSTANTIATION_TEMPLATE_TOPOLOGY = '../../asyncInstantiation/templateTopology';
+    public static INSTANTIATION_TEMPLATE_TOPOLOGY = '../../instantiationTemplates/templateTopology';
     public static CONFIGURATION_PATH = '../../get_property/{name}/defaultvalue';
     public static SERVICES_JOB_AUDIT_PATH = '/auditStatus';
     public static SERVICES_PROBE_PATH = "../../probe";
