import static java.util.Collections.emptyMap;
 import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.toList;
 
+import java.util.Collection;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 import javax.inject.Inject;
+import org.onap.vid.asdc.beans.Service;
 import org.onap.vid.dal.AsyncInstantiationRepository;
 import org.onap.vid.model.ModelUtil;
 import org.onap.vid.model.serviceInstantiation.BaseResource;
 import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
 import org.onap.vid.model.serviceInstantiation.ServiceInstantiationTemplate;
+import org.onap.vid.properties.Features;
 import org.springframework.stereotype.Component;
+import org.togglz.core.manager.FeatureManager;
 
 @Component
 public class InstantiationTemplatesService {
 
     private final ModelUtil modelUtil;
     private final AsyncInstantiationRepository asyncInstantiationRepository;
+    private FeatureManager featureManager;
+
 
     @Inject
     public InstantiationTemplatesService(ModelUtil modelUtil,
-        AsyncInstantiationRepository asyncInstantiationRepository) {
+        AsyncInstantiationRepository asyncInstantiationRepository,
+        FeatureManager featureManager) {
         this.modelUtil = modelUtil;
         this.asyncInstantiationRepository = asyncInstantiationRepository;
+        this.featureManager = featureManager;
     }
 
     public ServiceInstantiationTemplate getJobRequestAsTemplate(UUID jobId) {
         );
     }
 
+    public Collection<Service> setOnEachServiceIsTemplateExists(Collection<Service> services){
+        if (!featureManager.isActive(Features.FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE)){
+            return services;
+        }
+
+        Set<String> serviceModelIdsFromDB  = asyncInstantiationRepository.getAllTemplatesServiceModelIds();
+
+        return services.stream().map(it -> setTemplateExistForService(it, serviceModelIdsFromDB)).collect(toList());
+    }
+
+    protected Service setTemplateExistForService(Service service, Set<String> serviceModelIdsFromDb) {
+
+        service.setIsInstantiationTemplateExists(serviceModelIdsFromDb.contains(service.getUuid()));
+        return service;
+    }
 }
 
 
 package org.onap.vid.services;
 
+import static java.lang.Boolean.FALSE;
+import static java.lang.Boolean.TRUE;
 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.anEmptyMap;
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.nullValue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
 import java.util.Map;
 import java.util.UUID;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.onap.vid.asdc.beans.Service;
 import org.onap.vid.dal.AsyncInstantiationRepository;
 import org.onap.vid.model.ModelUtil;
 import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
 import org.onap.vid.model.serviceInstantiation.ServiceInstantiationTemplate;
 import org.onap.vid.model.serviceInstantiation.Vnf;
+import org.onap.vid.properties.Features;
 import org.onap.vid.testUtils.TestUtils;
+import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
+import org.togglz.core.manager.FeatureManager;
 
 public class InstantiationTemplatesServiceTest {
 
     @Mock
     private ModelUtil modelUtil;
 
+    @Mock
+    private FeatureManager featureManager;
+
     @InjectMocks
     private InstantiationTemplatesService instantiationTemplatesService;
 
         TestUtils.initMockitoMocks(this);
     }
 
+    @AfterMethod
+    public void resetMocks() {
+        reset(featureManager);
+    }
+
     @Test
     public void getJobRequestAsTemplate_whenIsCalled_asyncInstantiationRepositoryGetJobRequestIsInvoked() {
         UUID jobId = UUID.randomUUID();
         assertThat(result, hasProperty("existingVRFCounterMap", anEmptyMap()));
     }
 
+    @DataProvider
+    public static Object[][] isTemplatesExistsByGivenServiceUuid() {
+        return new Object[][]{{"1",TRUE},
+                              {"3",FALSE}};
+    }
+
+    @Test(dataProvider = "isTemplatesExistsByGivenServiceUuid")
+    public void setInServicesTemplateValue_givenServiceWithServiceModelId_thenIsTemplateExistsIsEatherTrueOrFalse(String givenUuid, Boolean expectedTemplatesExist){
+
+        Service service = new Service();
+        service.setUuid(givenUuid);
+
+        Service newService = instantiationTemplatesService.setTemplateExistForService(service, ImmutableSet.of("1", "2"));
+        assertThat(newService.getIsInstantiationTemplateExists(), is(expectedTemplatesExist));
+    }
+
+    @Test
+    public void setTemplatesExistance_givenCollection__flagIsActive_thenSameCollectionReturnedWithTemplateExistsProperty(){
+        when(featureManager.isActive(Features.FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE)).thenReturn(true);
+        when(asyncInstantiationRepository.getAllTemplatesServiceModelIds()).thenReturn(ImmutableSet.of("1", "2"));
+        Collection<Service> actualCollection = instantiationTemplatesService.setOnEachServiceIsTemplateExists(createGivenCollection());
+        assertThat(actualCollection, containsInAnyOrder(
+            allOf(hasProperty("uuid", is("1")), hasProperty("isInstantiationTemplateExists", is(true))),
+            allOf(hasProperty("uuid", is("3")), hasProperty("isInstantiationTemplateExists", is(false)))
+        ));
+    }
+
+    @Test
+    public void setTemplatesExistance_givenCollection_flagIsNotActive_thenTemplatesExistNotAdded(){
+        when(featureManager.isActive(Features.FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE)).thenReturn(false);
+        Collection<Service> actualCollection = instantiationTemplatesService.setOnEachServiceIsTemplateExists(createGivenCollection());
+        assertThat("was " + actualCollection, actualCollection, containsInAnyOrder(
+            allOf(hasProperty("uuid", is("1")), hasProperty("isInstantiationTemplateExists", nullValue())),
+            allOf(hasProperty("uuid", is("3")), hasProperty("isInstantiationTemplateExists", nullValue()))
+        ));
+    }
+
+    private Collection<Service> createGivenCollection(){
+        Service service1 = new Service();
+        Service service2 = new Service();
+        service1.setUuid("1");
+        service2.setUuid("3");
+        return ImmutableList.of(service1, service2);
+    }
+
 }