diff --git a/catalog-ui/src/app/models/components/component.ts b/catalog-ui/src/app/models/components/component.ts
index be92f76..a60d7be 100644
--- a/catalog-ui/src/app/models/components/component.ts
+++ b/catalog-ui/src/app/models/components/component.ts
@@ -146,6 +146,7 @@
     public categorySpecificMetadata: Metadata = new Metadata();
     public derivedFromGenericType: string;
     public derivedFromGenericVersion: string;
+    public model: Model;
 
     constructor(componentService:IComponentService, protected $q:ng.IQService, component?:Component) {
         if (component) {
@@ -210,6 +211,7 @@
 
             this.derivedFromGenericType = component.derivedFromGenericType;
             this.derivedFromGenericVersion = component.derivedFromGenericVersion;
+            this.model = component.model;
         }
 
         //custom properties
diff --git a/catalog-ui/src/app/models/model.ts b/catalog-ui/src/app/models/model.ts
new file mode 100644
index 0000000..239d86e
--- /dev/null
+++ b/catalog-ui/src/app/models/model.ts
@@ -0,0 +1,22 @@
+/*
+* ============LICENSE_START=======================================================
+*  Copyright (C) 2021 Nordix Foundation. 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.
+*
+*  SPDX-License-Identifier: Apache-2.0
+*  ============LICENSE_END=========================================================
+*/
+
+interface Model {
+  name:string;
+}
diff --git a/catalog-ui/src/app/modules/service-module.ts b/catalog-ui/src/app/modules/service-module.ts
index 38cd272..de62091 100644
--- a/catalog-ui/src/app/modules/service-module.ts
+++ b/catalog-ui/src/app/modules/service-module.ts
@@ -44,6 +44,7 @@
 import { ModalService } from '../ng2/services/modal.service';
 import { OnboardingService } from '../ng2/services/onboarding.service';
 import { ElementService } from '../ng2/services/element.service';
+import { ModelService } from '../ng2/services/model.service';
 import { PluginsService } from '../ng2/services/plugins.service';
 import { PoliciesService as PoliciesServiceNg2 } from '../ng2/services/policies.service';
 import { SharingService } from '../ng2/services/sharing.service';
@@ -128,4 +129,5 @@
 serviceModule.factory('NodesFactory', downgradeInjectable(NodesFactory));
 serviceModule.service('OnboardingService', downgradeInjectable(OnboardingService));
 serviceModule.service('ElementService', downgradeInjectable(ElementService));
+serviceModule.service('ModelService', downgradeInjectable(ModelService));
 serviceModule.service('ImportVSPService', downgradeInjectable(ImportVSPService));
diff --git a/catalog-ui/src/app/ng2/app.module.ts b/catalog-ui/src/app/ng2/app.module.ts
index 88a5610..bb11199 100644
--- a/catalog-ui/src/app/ng2/app.module.ts
+++ b/catalog-ui/src/app/ng2/app.module.ts
@@ -100,6 +100,7 @@
 import {InterfaceOperationHandlerModule} from "./pages/composition/interface-operatons/operation-creator/interface-operation-handler.module";
 import {AttributesOutputsModule} from "./pages/attributes-outputs/attributes-outputs.module";
 import { ElementService } from "./services/element.service";
+import { ModelService } from "./services/model.service";
 
 
 declare const __ENV__: string;
@@ -199,6 +200,7 @@
     ImportVSPService,
     OnboardingService,
     ElementService,
+    ModelService,
     ServiceServiceNg2,
     AutomatedUpgradeService,
     WorkflowServiceNg2,
diff --git a/catalog-ui/src/app/ng2/services/model.service.ts b/catalog-ui/src/app/ng2/services/model.service.ts
new file mode 100644
index 0000000..33d5729
--- /dev/null
+++ b/catalog-ui/src/app/ng2/services/model.service.ts
@@ -0,0 +1,37 @@
+/*
+* ============LICENSE_START=======================================================
+*  Copyright (C) 2021 Nordix Foundation. 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.
+*
+*  SPDX-License-Identifier: Apache-2.0
+*  ============LICENSE_END=========================================================
+*/
+import { HttpClient } from '@angular/common/http';
+import { Inject, Injectable } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { ISdcConfig, SdcConfigToken } from '../config/sdc-config.config';
+
+@Injectable()
+export class ModelService {
+
+  protected baseUrl;
+
+  constructor(protected http: HttpClient, @Inject(SdcConfigToken) sdcConfig: ISdcConfig) {
+    this.baseUrl = sdcConfig.api.root;
+  }
+
+  getModels():Observable<Model[]> {
+    return this.http.get<Model[]>(this.baseUrl + "/v1/catalog/model");
+  }
+
+}
diff --git a/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts b/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts
index 6011aab..96a2126 100644
--- a/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts
+++ b/catalog-ui/src/app/ng2/services/responses/component-generic-response.ts
@@ -61,6 +61,7 @@
     public substitutionFilters: any;
     public derivedFromGenericType;
     public derivedFromGenericVersion;
+    public model:Model;
 
     deserialize (response): ComponentGenericResponse {
 
@@ -138,6 +139,9 @@
         if(response.derivedFromGenericVersion) {
             this.derivedFromGenericVersion = response.derivedFromGenericVersion;
         }
+        if(response.model) {
+            this.model = response.model;
+        }
         return this;
     }
 }
diff --git a/catalog-ui/src/app/services-ng2.ts b/catalog-ui/src/app/services-ng2.ts
index 119f2e3..3d52e00 100644
--- a/catalog-ui/src/app/services-ng2.ts
+++ b/catalog-ui/src/app/services-ng2.ts
@@ -17,6 +17,7 @@
 export * from './ng2/services/event-bus.service';
 export * from './ng2/services/groups.service';
 export * from './ng2/services/element.service';
+export * from './ng2/services/model.service';
 
 export * from './ng2/services/component-services/component.service';
 export * from './ng2/services/component-services/component.service.factory';
diff --git a/catalog-ui/src/app/utils/component-factory.ts b/catalog-ui/src/app/utils/component-factory.ts
index 667c6bc..2ff2af9 100644
--- a/catalog-ui/src/app/utils/component-factory.ts
+++ b/catalog-ui/src/app/utils/component-factory.ts
@@ -199,6 +199,7 @@
             component.setComponentMetadata(response.metadata);
             component.derivedFromGenericType = response.derivedFromGenericType;
             component.derivedFromGenericVersion = response.derivedFromGenericVersion;
+            component.model = response.model;
             deferred.resolve(component);
         });
         return deferred.promise;
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts b/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
index b456bec..9b7a92b 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
+++ b/catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
@@ -33,7 +33,7 @@
     ValidationUtils
 } from "app/utils";
 import {EventListenerService, ProgressService} from "app/services";
-import {CacheService, ElementService, ImportVSPService, OnboardingService} from "app/services-ng2";
+import {CacheService, ElementService, ModelService, ImportVSPService, OnboardingService} from "app/services-ng2";
 import {Component, IAppConfigurtaion, ICsarComponent, IMainCategory, IMetadataKey, ISubCategory, IValidate, Resource, Service} from "app/models";
 import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
 import {CATEGORY_SERVICE_METADATA_KEYS, PREVIOUS_CSAR_COMPONENT} from "../../../../utils/constants";
@@ -53,6 +53,10 @@
     selectedCategory:string;
 }
 
+export class componentModel {
+    selectedModel:string;
+}
+
 export interface IEnvironmentContext {
     defaultValue:string;
     validValues:Array<string>;
@@ -73,6 +77,7 @@
     importCsarProProgressKey:string;
     browseFileLabel:string;
     componentCategories:componentCategories;
+    componentModel:componentModel;
     instantiationTypes:Array<instantiationType>;
     isHiddenCategorySelected: boolean;
 
@@ -95,6 +100,7 @@
     onInstantiationTypeChange():void;
     updateIcon():void;
     possibleToUpdateIcon():boolean;
+    initModel():void;
 }
 
 // tslint:disable-next-line:max-classes-per-file
@@ -124,6 +130,7 @@
         'ComponentFactory',
         'ImportVSPService',
         'ElementService',
+        'ModelService',
         '$stateParams'
     ];
 
@@ -150,6 +157,7 @@
                 private ComponentFactory:ComponentFactory,
                 private importVSPService: ImportVSPService,
                 private elementService: ElementService,
+                private modelService: ModelService,
                 private $stateParams: any) {
 
         this.initScopeValidation();
@@ -270,6 +278,7 @@
             // Init Instantiation types
             this.$scope.initInstantiationTypes();
             this.$scope.initBaseTypes();
+            this.$scope.initModel();
         }
 
         if (this.cacheService.get(PREVIOUS_CSAR_COMPONENT)) { //keep the old component in the cache until checkout, so we dont need to pass it around
@@ -451,6 +460,15 @@
             }
         };
 
+        this.$scope.initModel = ():void => {
+            if (this.$scope.componentType === ComponentType.SERVICE) {
+                this.$scope.models = new Array();
+                this.modelService.getModels().subscribe((modelsFound: Model[]) => {
+                    modelsFound.forEach(model => {this.$scope.models.push(model.name)});})
+                this.$scope.models.filter(model => model.name === (<Service>this.$scope.component).model);
+            }
+        };
+
         this.$scope.initEnvironmentContext = ():void => {
             if (this.$scope.componentType === ComponentType.SERVICE) {
                 this.$scope.environmentContextObj = this.cacheService.get('UIConfiguration').environmentContext;
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/general/general-view.html b/catalog-ui/src/app/view-models/workspace/tabs/general/general-view.html
index d598e17..d2529f9 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/general/general-view.html
+++ b/catalog-ui/src/app/view-models/workspace/tabs/general/general-view.html
@@ -607,7 +607,22 @@
                 		</div>
                 	</div>
 
-                    <!--------------------- Instantiation Type -------------------->
+                    <!--------------------- Base Type -------------------->
+
+                  <!--------------------- Model -------------------->
+                  <div class="i-sdc-form-item" data-ng-if="component.isService()">
+                    <label class="i-sdc-form-label">Model</label>
+                    <select class="i-sdc-form-select"
+                            name="modelName"
+                            data-ng-class="{'view-mode': isViewMode()}"
+                            data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
+                            data-ng-model="component.model"
+                            data-tests-id="modelName">
+                      <option value="">SDC AID</option>
+                      <option ng-repeat="model in models | orderBy:[name]">{{model}}</option>
+                    </select>
+                  </div>
+                  <!--------------------- Model -------------------->
 
                     <div class="meta-data" data-ng-if="component.creationDate">
                         <div>
