diff --git a/catalog-ui/src/app/ng2/app.module.ts b/catalog-ui/src/app/ng2/app.module.ts
index 3f43feb..b3c12a5 100644
--- a/catalog-ui/src/app/ng2/app.module.ts
+++ b/catalog-ui/src/app/ng2/app.module.ts
@@ -72,6 +72,7 @@
 import {WorkspaceModule} from './pages/workspace/workspace.module';
 import { ModalsModule } from './components/modals/modals.module';
 import { SharingService, CacheService, HomeService } from 'app/services-ng2';
+import { ArtifactConfigService } from "./services/artifact-config.service";
 import { IUserProperties } from 'app/models';
 import { PluginsModule } from './pages/plugins/plugins-module';
 import {WorkspaceNg1BridgeService} from './pages/workspace/workspace-ng1-bridge-service';
@@ -173,6 +174,7 @@
         SharingService,
         CacheService,
         HomeService,
+        ArtifactConfigService,
         ComponentFactoryProvider,
         CookieServiceProvider,
         StateServiceFactory,
diff --git a/catalog-ui/src/app/ng2/components/forms/artifacts-form/__snapshots__/artifact-form.component.spec.ts.snap b/catalog-ui/src/app/ng2/components/forms/artifacts-form/__snapshots__/artifact-form.component.spec.ts.snap
index 8cd085e..440dc74 100644
--- a/catalog-ui/src/app/ng2/components/forms/artifacts-form/__snapshots__/artifact-form.component.spec.ts.snap
+++ b/catalog-ui/src/app/ng2/components/forms/artifacts-form/__snapshots__/artifact-form.component.spec.ts.snap
@@ -2,6 +2,7 @@
 
 exports[`artifact form component should match current snapshot of artifact form component 1`] = `
 <artifact-form
+  artifactConfigService={[Function Object]}
   artifactTypesOptions={[Function Array]}
   cacheService={[Function Object]}
   initArtifactTypes={[Function Function]}
diff --git a/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.spec.ts b/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.spec.ts
index fc69509..49a06b2 100644
--- a/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.spec.ts
+++ b/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.spec.ts
@@ -7,32 +7,37 @@
 import {TranslateService} from "../../../shared/translator/translate.service";
 import {ArtifactModel} from "../../../../models/artifacts";
 import {IDropDownOption} from "onap-ui-angular/dist/form-elements/dropdown/dropdown-models";
-import {Observable, Subject} from "rxjs";
-import {getValue} from "@ngxs/store";
+import {Subject} from "rxjs";
+import {ArtifactConfigService} from "../../../services/artifact-config.service";
+import {ArtifactType, ComponentType} from "../../../../utils/constants";
 
 
 describe('artifact form component', () => {
 
     let fixture: ComponentFixture<ArtifactFormComponent>;
     let cacheServiceMock: Partial<CacheService>;
+    let artifactConfigService: Partial<ArtifactConfigService>;
     let onValidationChangeMock: Partial<Subject<boolean>>;
 
     let artifactModel = new ArtifactModel();
 
+    artifactConfigService = {
+        findAllTypeBy: jest.fn()
+    };
 
     beforeEach(
         async(() => {
 
             onValidationChangeMock = {
                 next: jest.fn()
-            }
+            };
 
             cacheServiceMock = {
                 contains: jest.fn(),
                 remove: jest.fn(),
                 set: jest.fn(),
                 get: jest.fn()
-            }
+            };
 
             const configure: ConfigureFn = testBed => {
                 testBed.configureTestingModule({
@@ -41,6 +46,7 @@
                     schemas: [NO_ERRORS_SCHEMA],
                     providers: [
                         {provide: CacheService, useValue: cacheServiceMock},
+                        {provide: ArtifactConfigService, useValue: artifactConfigService},
                         {provide: TranslateService, useValue: {}}
                     ],
                 });
@@ -55,91 +61,73 @@
 
     it('should verify initArtifactTypes for DEPLOYMENT and ArtifactType = HEAT_ENV', () =>{
 
-        cacheServiceMock.get.mockImplementation(() =>{
-            return {
-                artifacts: {
-                    deployment:{
-                        resourceInstanceDeploymentArtifacts: [{name: "Dummy Value Returned from ui api"}],
-                    }
-                }
+        artifactConfigService.findAllTypeBy.mockImplementation((artifactType, componentType, resourceType) => {
+            if (artifactType == 'DEPLOYMENT' && componentType == ComponentType.RESOURCE_INSTANCE && resourceType == 'VF') {
+                return ['Val1', 'Val2', 'Val3', ArtifactType.HEAT_ENV];
             }
         });
 
         fixture.componentInstance.artifactType = 'DEPLOYMENT';
+        fixture.componentInstance.resourceType = 'VF';
         fixture.componentInstance.artifact = artifactModel;
-        fixture.componentInstance.artifact.artifactType = 'HEAT_ENV';
+        fixture.componentInstance.artifact.artifactType = ArtifactType.HEAT_ENV;
 
         fixture.componentInstance.initArtifactTypes();
 
-        expect(fixture.componentInstance.selectedFileType).toEqual(undefined);
+        expect(fixture.componentInstance.selectedFileType).toEqual({"label": ArtifactType.HEAT_ENV, "value": ArtifactType.HEAT_ENV});
 
     });
 
-    it('should verify initArtifactTypes for DEPLOYMENT and ComponentType = RESOURCE', () =>{
+    it('should verify initArtifactTypes for DEPLOYMENT and ComponentType = RESOURCE', () => {
 
-        cacheServiceMock.get.mockImplementation(() =>{
-            return {
-                artifacts: {
-                    deployment:{
-                        resourceDeploymentArtifacts: [{name: "Dummy Value Returned from ui api"}],
-                    }
-                }
+        const expectedSelectedValue = 'Val3';
+        const artifactType = 'DEPLOYMENT';
+        const resourceType = 'VF';
+        artifactConfigService.findAllTypeBy.mockImplementation((artifactType1, componentType1, resourceType1) => {
+            if (artifactType1 == artifactType && componentType1 == ComponentType.RESOURCE && resourceType1 == resourceType) {
+                return ['Val1', 'Val2', expectedSelectedValue, 'Val4'];
             }
+
+            return [];
         });
 
-        fixture.componentInstance.artifactType = 'DEPLOYMENT';
+        fixture.componentInstance.artifactType = artifactType;
         fixture.componentInstance.artifact = artifactModel;
-        fixture.componentInstance.componentType = 'RESOURCE';
+        fixture.componentInstance.resourceType = resourceType;
+        fixture.componentInstance.componentType = ComponentType.RESOURCE;
+        fixture.componentInstance.artifact.artifactType = expectedSelectedValue;
 
         fixture.componentInstance.initArtifactTypes();
 
-        expect(fixture.componentInstance.selectedFileType).toEqual(undefined);
+        expect(fixture.componentInstance.selectedFileType).toEqual({'label': expectedSelectedValue, 'value': expectedSelectedValue});
 
     });
 
-    it('should verify initArtifactTypes for DEPLOYMENT and NOT ComponentType = RESOURCE OR NOT ArtifactType = HEAT_ENV', () =>{
+    it('should verify initArtifactTypes for INFORMATIONAL', () => {
 
-        cacheServiceMock.get.mockImplementation(() =>{
-            return {
-                artifacts: {
-                    deployment:{
-                        serviceDeploymentArtifacts: [{name: "Dummy Value Returned from ui api"}],
-                    }
-                }
+        const expectedSelectedValue = 'Val3';
+        const artifactType = 'INFORMATIONAL';
+        const resourceType = null;
+        artifactConfigService.findAllTypeBy.mockImplementation((artifactType1, componentType1, resourceType1) => {
+            if (artifactType1 == artifactType && componentType1 == ComponentType.SERVICE && resourceType1 == resourceType) {
+                return ['Val1', 'Val2', expectedSelectedValue, 'Val4'];
             }
+
+            return [];
         });
 
-        fixture.componentInstance.artifactType = 'DEPLOYMENT';
+        fixture.componentInstance.artifactType = artifactType;
         fixture.componentInstance.artifact = artifactModel;
-        // fixture.componentInstance.componentType = 'RESOURCE';
+        fixture.componentInstance.resourceType = resourceType;
+        fixture.componentInstance.componentType = ComponentType.SERVICE;
+        fixture.componentInstance.artifact.artifactType = expectedSelectedValue;
 
         fixture.componentInstance.initArtifactTypes();
 
-        expect(fixture.componentInstance.selectedFileType).toEqual(undefined);
+        expect(fixture.componentInstance.selectedFileType).toEqual({'label': expectedSelectedValue, 'value': expectedSelectedValue});
 
     });
 
-    it('should verify initArtifactTypes for INFORMATION', () =>{
-
-        cacheServiceMock.get.mockImplementation(() =>{
-            return {
-                artifacts: {
-                    other: [{name: "Val1"}, {name: "ExpectedValToBeSelected"}, {name: "Val3"}]
-                }
-            }
-        });
-
-        fixture.componentInstance.artifactType = 'INFORMATIONAL';
-        fixture.componentInstance.artifact = artifactModel;
-        fixture.componentInstance.artifact.artifactType = 'ExpectedValToBeSelected';
-
-        fixture.componentInstance.initArtifactTypes();
-
-        expect(fixture.componentInstance.selectedFileType).toEqual({"label": "ExpectedValToBeSelected", "value": "ExpectedValToBeSelected"});
-
-    });
-
-
     it('should match current snapshot of artifact form component', () => {
         expect(fixture).toMatchSnapshot();
     });
@@ -147,7 +135,7 @@
     it('should verify onUploadFile -> file gets file name', () => {
         let file = {
             filename:'dummyFileName'
-        }
+        };
 
         fixture.componentInstance.verifyTypeAndFileWereFilled = jest.fn();
         fixture.componentInstance.artifact = artifactModel;
diff --git a/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.ts b/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.ts
index 905d1a2..f7dbf09 100644
--- a/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.ts
+++ b/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifact-form.component.ts
@@ -9,6 +9,7 @@
 import { ArtifactType, ComponentType } from '../../../../utils';
 import { Dictionary } from '../../../../utils/dictionary/dictionary';
 import { CacheService } from '../../../services/cache.service';
+import { ArtifactConfigService } from '../../../services/artifact-config.service';
 
 @Component({
     selector: 'artifact-form',
@@ -20,6 +21,7 @@
     @Input() artifact: ArtifactModel;
     @Input() artifactType: ArtifactType;
     @Input() componentType: string;
+    @Input() resourceType: string;
     @Input() instanceId: string;
     @Input() isViewOnly: boolean;
 
@@ -31,7 +33,8 @@
     private descriptionIsValid: boolean;
     private labelIsValid: boolean;
 
-    constructor(private cacheService: CacheService) {
+    constructor(private cacheService: CacheService,
+                private artifactConfigService: ArtifactConfigService) {
     }
 
     ngOnInit(): void {
@@ -44,7 +47,7 @@
     public onTypeChange = (selectedFileType: IDropDownOption) => {
         this.artifact.artifactType = selectedFileType.value;
         this.verifyTypeAndFileWereFilled();
-    }
+    };
 
     public onUploadFile = (file) => {
         if (file) {
@@ -55,34 +58,24 @@
             this.artifact.artifactName = null;
         }
         this.verifyTypeAndFileWereFilled();
-    }
+    };
 
     private initArtifactTypes = (): void => {
-        const artifactTypes: any = this.cacheService.get('UIConfiguration');
-        let validExtensions: string[];
         let artifactTypesList: string[];
-
         switch (this.artifactType) {
             case ArtifactType.DEPLOYMENT:
                 if (this.artifact.artifactType === ArtifactType.HEAT_ENV || this.instanceId) {
-                    validExtensions = artifactTypes.artifacts.deployment.resourceInstanceDeploymentArtifacts;
-                } else if (this.componentType === ComponentType.RESOURCE) {
-                    validExtensions = artifactTypes.artifacts.deployment.resourceDeploymentArtifacts;
+                    artifactTypesList = this.artifactConfigService.findAllTypeBy(this.artifactType, ComponentType.RESOURCE_INSTANCE, this.resourceType);
                 } else {
-                    validExtensions = artifactTypes.artifacts.deployment.serviceDeploymentArtifacts;
-                }
-                if (validExtensions) {
-                    artifactTypesList = Object.keys(validExtensions);
+                    artifactTypesList = this.artifactConfigService.findAllTypeBy(this.artifactType, this.componentType, this.resourceType);
                 }
                 break;
             case ArtifactType.INFORMATION:
-                artifactTypesList = artifactTypes.artifacts.other.map((element: any) => {
-                    return element.name;
-                });
-                _.remove(artifactTypesList, (item: string) => {
-                    return _.has(ArtifactType.THIRD_PARTY_RESERVED_TYPES, item) ||
-                        _.has(ArtifactType.TOSCA, item);
-                });
+                if (this.instanceId) {
+                    artifactTypesList = this.artifactConfigService.findAllTypeBy(this.artifactType, ComponentType.RESOURCE_INSTANCE, this.resourceType);
+                } else {
+                    artifactTypesList = this.artifactConfigService.findAllTypeBy(this.artifactType, this.componentType, this.resourceType);
+                }
                 break;
         }
 
@@ -94,7 +87,7 @@
             return artifactType.value === this.artifact.artifactType;
         });
 
-    }
+    };
 
     // Verify that the Type and the Name (file) are filled in the Modal
     // For Description and Label - I used this.descriptionIsValid:boolean & this.labelIsValid:boolean as part of the sdc-validation Element
@@ -116,17 +109,17 @@
                 this.onValidationChange.next(false);
             }
         }
-    }
+    };
 
     // sdc-validation for Description
     private onDescriptionChange = (isValid: boolean): void => {
         this.descriptionIsValid = isValid;
         this.onValidationChange.next(isValid) && this.verifyTypeAndFileWereFilled();
-    }
+    };
 
     // sdc-validation for Label
     private onLabelChange = (isValid: boolean): void => {
         this.labelIsValid = isValid;
         this.onValidationChange.next(isValid) && this.verifyTypeAndFileWereFilled();
-    }
+    };
 }
diff --git a/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifacts.service.ts b/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifacts.service.ts
index f9400e9..ead85a6 100644
--- a/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifacts.service.ts
+++ b/catalog-ui/src/app/ng2/components/forms/artifacts-form/artifacts.service.ts
@@ -25,12 +25,13 @@
                 private store: Store) {
     }
 
-    public dispatchArtifactAction = (componentId: string, componentType: string, artifact: ArtifactModel, artifactType: ArtifactGroupType, instanceId: string) => {
+    public dispatchArtifactAction = (componentId: string, componentType: string, artifact: ArtifactModel, artifactType: ArtifactGroupType, instanceId: string, resourceType?: string) => {
         const artifactObj = {
             componentType,
             componentId,
             instanceId,
-            artifact
+            artifact,
+            resourceType
         };
 
         // Create or update instance artifact
@@ -48,14 +49,14 @@
         }
     }
 
-    public openArtifactModal = (componentId: string, componentType: string, artifact: ArtifactModel, artifactType: ArtifactGroupType, isViewOnly?: boolean, instanceId?: string) => {
+    public openArtifactModal = (componentId: string, componentType: string, artifact: ArtifactModel, artifactType: ArtifactGroupType, isViewOnly?: boolean, instanceId?: string, resourceType?: string) => {
 
         let modalInstance;
 
         const onOkPressed = () => {
             const updatedArtifact = modalInstance.innerModalContent.instance.artifact;
             this.serviceLoader.activate();
-            this.dispatchArtifactAction(componentId, componentType, updatedArtifact, artifactType, instanceId)
+            this.dispatchArtifactAction(componentId, componentType, updatedArtifact, artifactType, instanceId, resourceType)
                     .subscribe().add(() => this.serviceLoader.deactivate());
         };
 
@@ -82,6 +83,7 @@
             artifactType,
             instanceId,
             componentType,
+            resourceType: resourceType,
             isViewOnly
         });
 
diff --git a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifact-tab.component.spec.ts b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifact-tab.component.spec.ts
index 258f229..9df3e38 100644
--- a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifact-tab.component.spec.ts
+++ b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifact-tab.component.spec.ts
@@ -220,7 +220,7 @@
         fixture.componentInstance.addOrUpdate(artifact);
 
 
-        expect(artifactsServiceMockService.openArtifactModal).toHaveBeenCalledWith(topologyTemplateId, topologyTemplateType, artifact, type, isViewOnly, component.uniqueId);
+        expect(artifactsServiceMockService.openArtifactModal).toHaveBeenCalledWith(topologyTemplateId, topologyTemplateType, artifact, type, isViewOnly, component.uniqueId, undefined);
     });
 
     it ('on addOrUpdate -> openArtifactModal is being called from artifactService when isComponentInstanceSelected = false', () => {
diff --git a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifacts-tab.component.ts b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifacts-tab.component.ts
index 53a6c26..91664ce 100644
--- a/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifacts-tab.component.ts
+++ b/catalog-ui/src/app/ng2/pages/composition/panel/panel-tabs/artifacts-tab/artifacts-tab.component.ts
@@ -64,7 +64,7 @@
 
     public addOrUpdate = (artifact: ArtifactModel): void => {
         if (this.isComponentInstanceSelected) {
-            this.artifactService.openArtifactModal(this.topologyTemplateId, this.topologyTemplateType, artifact, this.type, this.isViewOnly, this.component.uniqueId);
+            this.artifactService.openArtifactModal(this.topologyTemplateId, this.topologyTemplateType, artifact, this.type, this.isViewOnly, this.component.uniqueId, this.resourceType);
         } else {
             this.artifactService.openArtifactModal(this.topologyTemplateId, this.topologyTemplateType, artifact, this.type, this.isViewOnly);
         }
diff --git a/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.html b/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.html
index 1df318e..3ed2173 100644
--- a/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.html
+++ b/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.html
@@ -16,11 +16,16 @@
                      <div class="env-artifact"></div>
                 </div>
                 <span sdc-tooltip [tooltip-text]="row.artifactDisplayName" [tooltip-placement]="3" [attr.data-tests-id]="'artifactDisplayName_' + row.artifactDisplayName">{{row.artifactDisplayName}}</span>
-                <span *ngIf="row.description.length > 0" class="info">
+                <span *ngIf="row.description && row.description.length > 0" class="info">
                     <svg-icon [clickable]="true" [name]="'comment'" [mode]="'primary2'" (click)="openPopOver('Description',row.description,{x:$event.pageX , y:$event.pageY },'bottom')"></svg-icon>
                 </span>
             </ng-template>
         </ngx-datatable-column>
+        <ngx-datatable-column [resizeable]="false" name="Filename" [flexGrow]="1">
+            <ng-template ngx-datatable-cell-template let-row="row">
+                <span sdc-tooltip [tooltip-text]="row.artifactName" [tooltip-placement]="3" [attr.data-tests-id]="'artifactName_' + row.artifactName">{{row.artifactName}}</span>
+            </ng-template>
+        </ngx-datatable-column>
         <ngx-datatable-column [resizeable]="false" name="Type" [flexGrow]="0.6">
             <ng-template ngx-datatable-cell-template let-row="row">
                 <span sdc-tooltip [tooltip-text]="row.artifactType" [tooltip-placement]="3" [attr.data-tests-id]="'artifactType_' + row.artifactDisplayName">{{row.artifactType}}</span>
diff --git a/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.ts b/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.ts
index 53b21b3..ec30cd1 100644
--- a/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.ts
+++ b/catalog-ui/src/app/ng2/pages/workspace/deployment-artifacts/deployment-artifacts-page.component.ts
@@ -1,23 +1,22 @@
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { Select, Store } from '@ngxs/store';
-import { ArtifactModel } from 'app/models';
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {Select, Store} from '@ngxs/store';
+import {ArtifactModel} from 'app/models';
 import * as _ from 'lodash';
-import { SdcUiCommon, SdcUiComponents, SdcUiServices } from 'onap-ui-angular';
-import { Observable } from 'rxjs/index';
-import { map } from 'rxjs/operators';
-import { GabConfig } from '../../../../models/gab-config';
-import { PathsAndNamesDefinition } from '../../../../models/paths-and-names';
-import { GenericArtifactBrowserComponent } from '../../../../ng2/components/logic/generic-artifact-browser/generic-artifact-browser.component';
-import { ArtifactGroupType, ArtifactType } from '../../../../utils/constants';
-import { ArtifactsService } from '../../../components/forms/artifacts-form/artifacts.service';
-import { PopoverContentComponent } from '../../../components/ui/popover/popover-content.component';
-import { CacheService } from '../../../services/cache.service';
-import { TranslateService } from '../../../shared/translator/translate.service';
-import { GetArtifactsByTypeAction } from '../../../store/actions/artifacts.action';
-import { ArtifactsState } from '../../../store/states/artifacts.state';
-import { WorkspaceState, WorkspaceStateModel } from '../../../store/states/workspace.state';
-import { WorkspaceService } from '../workspace.service';
-import { ModalService } from 'app/ng2/services/modal.service';
+import {SdcUiCommon, SdcUiServices} from 'onap-ui-angular';
+import {Observable} from 'rxjs';
+import {map} from 'rxjs/operators';
+import {GabConfig} from '../../../../models/gab-config';
+import {PathsAndNamesDefinition} from '../../../../models/paths-and-names';
+import {GenericArtifactBrowserComponent} from '../../../components/logic/generic-artifact-browser/generic-artifact-browser.component';
+import {ArtifactGroupType, ArtifactType} from '../../../../utils/constants';
+import {ArtifactsService} from '../../../components/forms/artifacts-form/artifacts.service';
+import {PopoverContentComponent} from '../../../components/ui/popover/popover-content.component';
+import {CacheService} from '../../../services/cache.service';
+import {TranslateService} from '../../../shared/translator/translate.service';
+import {GetArtifactsByTypeAction} from '../../../store/actions/artifacts.action';
+import {ArtifactsState} from '../../../store/states/artifacts.state';
+import {WorkspaceState, WorkspaceStateModel} from '../../../store/states/workspace.state';
+import {WorkspaceService} from '../workspace.service';
 
 export interface IPoint {
     x: number;
@@ -33,6 +32,7 @@
 
     public componentId: string;
     public componentType: string;
+    public resourceType: string;
     public deploymentArtifacts$: Observable<ArtifactModel[]>;
     public isComponentInstanceSelected: boolean;
 
@@ -68,11 +68,12 @@
             }
         });
         return sortedArtifacts;
-    })
+    });
 
     ngOnInit(): void {
         this.componentId = this.workspaceService.metadata.uniqueId;
         this.componentType = this.workspaceService.metadata.componentType;
+        this.resourceType = this.workspaceService.metadata.resourceType;
 
         this.store.dispatch(new GetArtifactsByTypeAction({
             componentType: this.componentType,
@@ -91,8 +92,8 @@
     }
 
     public addOrUpdateArtifact = (artifact: ArtifactModel, isViewOnly: boolean) => {
-        this.artifactsService.openArtifactModal(this.componentId, this.componentType, artifact, ArtifactGroupType.DEPLOYMENT, isViewOnly);
-    }
+        this.artifactsService.openArtifactModal(this.componentId, this.componentType, artifact, ArtifactGroupType.DEPLOYMENT, isViewOnly, null, this.resourceType);
+    };
 
     public deleteArtifact = (artifactToDelete) => {
         this.artifactsService.deleteArtifact(this.componentType, this.componentId, artifactToDelete);
diff --git a/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.html b/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.html
index cff3325..b1f610a 100644
--- a/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.html
+++ b/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.html
@@ -28,6 +28,11 @@
                 </div>
             </ng-template>
         </ngx-datatable-column>
+        <ngx-datatable-column [resizeable]="false" name="Filename" [flexGrow]="1">
+            <ng-template ngx-datatable-cell-template let-row="row">
+                <span sdc-tooltip [tooltip-text]="row.artifactName" [tooltip-placement]="3" [attr.data-tests-id]="'artifactName_' + row.artifactName">{{row.artifactName}}</span>
+            </ng-template>
+        </ngx-datatable-column>
         <ngx-datatable-column [resizeable]="false" name="Type" [flexGrow]="1">
             <ng-template ngx-datatable-cell-template let-row="row">
                 {{row.artifactType}}
diff --git a/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.ts b/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.ts
index a6804a4..981e00b 100644
--- a/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.ts
+++ b/catalog-ui/src/app/ng2/pages/workspace/information-artifact/information-artifact-page.component.ts
@@ -1,13 +1,11 @@
 import {Component, OnInit, ViewChild} from "@angular/core";
 import {WorkspaceService} from "../workspace.service";
-import {SdcUiCommon, SdcUiComponents, SdcUiServices} from "onap-ui-angular";
-import {TopologyTemplateService} from "../../../services/component-services/topology-template.service";
 import * as _ from "lodash";
 import {ArtifactGroupType, ArtifactType} from "../../../../utils/constants";
 import {ArtifactsService} from "../../../components/forms/artifacts-form/artifacts.service";
-import {DeleteArtifactAction, GetArtifactsByTypeAction} from "../../../store/actions/artifacts.action";
+import {GetArtifactsByTypeAction} from "../../../store/actions/artifacts.action";
 import {Select, Store} from "@ngxs/store";
-import {Observable} from "rxjs/index";
+import {Observable} from "rxjs";
 import {ArtifactsState} from "../../../store/states/artifacts.state";
 import {map} from "rxjs/operators";
 import {WorkspaceState} from "../../../store/states/workspace.state";
@@ -22,6 +20,7 @@
 
     public componentId: string;
     public componentType: string;
+    public resourceType: string;
     public informationArtifacts$: Observable<ArtifactModel[]>;
     public informationArtifactsAsButtons$: Observable<ArtifactModel[]>;
     @Select(WorkspaceState.isViewOnly) isViewOnly$: boolean;
@@ -35,6 +34,7 @@
     ngOnInit(): void {
         this.componentId = this.workspaceService.metadata.uniqueId;
         this.componentType = this.workspaceService.metadata.componentType;
+        this.resourceType = this.workspaceService.metadata.resourceType;
 
         this.store.dispatch(new GetArtifactsByTypeAction({
             componentType: this.componentType,
@@ -59,11 +59,11 @@
     }
 
     public addOrUpdateArtifact = (artifact: ArtifactModel, isViewOnly?: boolean) => {
-        this.artifactsService.openArtifactModal(this.componentId, this.componentType, artifact, ArtifactGroupType.INFORMATION, isViewOnly);
-    }
+        this.artifactsService.openArtifactModal(this.componentId, this.componentType, artifact, ArtifactGroupType.INFORMATION, isViewOnly, null, this.resourceType);
+    };
 
     public deleteArtifact = (artifactToDelete) => {
       this.artifactsService.deleteArtifact(this.componentType, this.componentId, artifactToDelete)
-    }
+    };
 
 }
\ No newline at end of file
diff --git a/catalog-ui/src/app/ng2/services/artifact-config.service.spec.ts b/catalog-ui/src/app/ng2/services/artifact-config.service.spec.ts
new file mode 100644
index 0000000..bbbd387
--- /dev/null
+++ b/catalog-ui/src/app/ng2/services/artifact-config.service.spec.ts
@@ -0,0 +1,23 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { ArtifactConfigService } from './artifact-config.service';
+import {CacheService} from "./cache.service";
+
+describe('ArtifactConfigService', () => {
+  beforeEach(() => {
+    const cacheServiceMock = {
+      get: jest.fn(() => {
+        return {
+          artifact: null
+        }
+      })
+    };
+    TestBed.configureTestingModule({
+      providers: [ArtifactConfigService, {provide: CacheService, useValue: cacheServiceMock}]
+    });
+  });
+
+  it('should be created', inject([ArtifactConfigService], (service: ArtifactConfigService) => {
+    expect(service).toBeTruthy();
+  }));
+});
diff --git a/catalog-ui/src/app/ng2/services/artifact-config.service.ts b/catalog-ui/src/app/ng2/services/artifact-config.service.ts
new file mode 100644
index 0000000..e3f914f
--- /dev/null
+++ b/catalog-ui/src/app/ng2/services/artifact-config.service.ts
@@ -0,0 +1,50 @@
+import {Injectable} from '@angular/core';
+import {CacheService} from './cache.service';
+import {ArtifactType} from "../../utils/constants";
+
+@Injectable()
+export class ArtifactConfigService {
+
+  artifactConfigList:Array<object>;
+
+  constructor(private cacheService: CacheService) {
+    const uiConfiguration = cacheService.get('UIConfiguration');
+    this.artifactConfigList = uiConfiguration.artifact;
+  }
+
+  public getConfig() {
+    return this.artifactConfigList;
+  }
+
+  public findAllBy(artifactType?:ArtifactType, componentType?:string, resourceType?:string):Array<object> {
+    return this.artifactConfigList.filter((artifactConfig:any) => {
+      let hasCategory = true;
+      if (artifactType) {
+        hasCategory = artifactConfig.categories && artifactConfig.categories.some(value => value == artifactType);
+      }
+      let hasComponentType = true;
+      if (componentType) {
+        hasComponentType = artifactConfig.componentTypes && artifactConfig.componentTypes.some(value => value == componentType);
+      }
+      let hasResourceType = true;
+      //resourceTypes are not restrictive, if it was not configured all resources are accepted.
+      if (resourceType && artifactConfig.resourceTypes) {
+        hasResourceType = artifactConfig.resourceTypes.some(value => value == resourceType);
+      }
+      return hasCategory && hasComponentType && hasResourceType;
+    });
+  }
+
+
+  public findAllTypeBy(artifactType?:ArtifactType, componentType?:string, resourceType?:string):Array<string> {
+    const artifactConfigList = this.findAllBy(artifactType, componentType, resourceType);
+    if (artifactConfigList) {
+      return artifactConfigList.map((element: any) => {
+        return element.type;
+      });
+    }
+
+    return [];
+  }
+
+}
diff --git a/catalog-ui/src/app/ng2/store/actions/instance-artifacts.actions.ts b/catalog-ui/src/app/ng2/store/actions/instance-artifacts.actions.ts
index 0f1df78..d762b17 100644
--- a/catalog-ui/src/app/ng2/store/actions/instance-artifacts.actions.ts
+++ b/catalog-ui/src/app/ng2/store/actions/instance-artifacts.actions.ts
@@ -13,14 +13,14 @@
 export class CreateInstanceArtifactAction {
     static readonly type = '[INSTANCE_ARTIFACTS] CreateInstanceArtifactAction';
 
-    constructor(public payload: { componentType: string, componentId: string, instanceId: string, artifact: ArtifactModel }) {
+    constructor(public payload: { componentType: string, componentId: string, instanceId: string, artifact: ArtifactModel, resourceType: string }) {
     }
 }
 
 export class UpdateInstanceArtifactAction {
     static readonly type = '[INSTANCE_ARTIFACTS] UpdateInstanceArtifactAction';
 
-    constructor(public payload: { componentType: string, componentId: string, instanceId: string, artifact: ArtifactModel }) {
+    constructor(public payload: { componentType: string, componentId: string, instanceId: string, artifact: ArtifactModel, resourceType: string }) {
     }
 }
 
diff --git a/catalog-ui/src/app/utils/constants.ts b/catalog-ui/src/app/utils/constants.ts
index 738b4d1..f2efc42 100644
--- a/catalog-ui/src/app/utils/constants.ts
+++ b/catalog-ui/src/app/utils/constants.ts
@@ -37,6 +37,7 @@
 export class ComponentType {
     static SERVICE = 'SERVICE';
     static RESOURCE = 'RESOURCE';
+    static RESOURCE_INSTANCE = 'RESOURCE_INSTANCE';
     static SERVICE_PROXY = 'ServiceProxy'
 }
 
