diff --git a/vnfmarket-be/deployment/docker/docker-postgres/pom.xml b/vnfmarket-be/deployment/docker/docker-postgres/pom.xml
index b274e01..eb0b88c 100644
--- a/vnfmarket-be/deployment/docker/docker-postgres/pom.xml
+++ b/vnfmarket-be/deployment/docker/docker-postgres/pom.xml
@@ -31,7 +31,7 @@
     <packaging>pom</packaging>
 
   <properties>    
-        <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
+        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
         <docker.push.registry></docker.push.registry>
         <skip.docker.build>true</skip.docker.build>
         <skip.docker.tag>true</skip.docker.tag>
@@ -57,7 +57,7 @@
                      <skipDocker>${docker.skip}</skipDocker>
                      <images>
                          <image>
-                           <name>onap/refrepo/postgres</name>
+                           <name>onap/vnfsdk/refrepo/postgres</name>
                            <alias>postgres</alias>
                            <build>
                                  <cleanup>try</cleanup>
@@ -77,7 +77,7 @@
                                 </goals>
                                 <configuration>
                                      <removeAll>true</removeAll>
-                                      <image>onap/refrepo/postgres</image>                                      
+                                      <image>onap/vnfsdk/refrepo/postgres</image>                                      
                                  </configuration>
                               </execution>
 
@@ -99,7 +99,7 @@
                                         <goal>push</goal>
                                   </goals>
                                   <configuration>
-                                     <image>onap/refrepo/postgres</image>
+                                     <image>onap/vnfsdk/refrepo/postgres</image>
                                   </configuration>
                                </execution>                               
                 </executions>
diff --git a/vnfmarket-be/deployment/docker/docker-refrepo/pom.xml b/vnfmarket-be/deployment/docker/docker-refrepo/pom.xml
index a6ca68e..fb8f274 100644
--- a/vnfmarket-be/deployment/docker/docker-refrepo/pom.xml
+++ b/vnfmarket-be/deployment/docker/docker-refrepo/pom.xml
@@ -31,7 +31,7 @@
     <packaging>pom</packaging>
 
   <properties>    
-        <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
+        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
         <docker.push.registry></docker.push.registry>
         <skip.docker.build>true</skip.docker.build>
         <skip.docker.tag>true</skip.docker.tag>
@@ -48,7 +48,7 @@
                 <version>1.0.0</version>
                 <configuration>
                     <verbose>true</verbose>
-                    <imageName>onap/refrepo</imageName>
+                    <imageName>onap/vnfsdk/refrepo</imageName>
                     <serverId>docker-hub</serverId>
                     <dockerDirectory>${basedir}/src/main/docker</dockerDirectory>
                     <resources>
@@ -80,8 +80,8 @@
                             <goal>tag</goal>
                         </goals>
                         <configuration>
-                            <image>onap/refrepo</image>
-                            <newName>${docker.push.registry}/onap/refrepo:${project.version}-${maven.build.timestamp}</newName>
+                            <image>onap/vnfsdk/refrepo</image>
+                            <newName>${docker.push.registry}/onap/vnfsdk/refrepo:${project.version}-${maven.build.timestamp}</newName>
                             <pushImage>${skip.docker.push}</pushImage>
                             <skipDockerTag>${skip.docker.tag}</skipDockerTag>
                         </configuration>
@@ -93,8 +93,8 @@
                             <goal>tag</goal>
                         </goals>
                         <configuration>
-                            <image>onap/refrepo</image>
-                            <newName>${docker.push.registry}/onap/refrepo:latest</newName>
+                            <image>onap/vnfsdk/refrepo</image>
+                            <newName>${docker.push.registry}/onap/vnfsdk/refrepo:latest</newName>
                             <pushImage>${skip.docker.push}</pushImage>
                             <skipDockerTag>${skip.docker.tag}</skipDockerTag>
                         </configuration>
diff --git a/vnfmarket-be/deployment/install/docker-compose.yml b/vnfmarket-be/deployment/install/docker-compose.yml
index 75f31c2..00e26fb 100644
--- a/vnfmarket-be/deployment/install/docker-compose.yml
+++ b/vnfmarket-be/deployment/install/docker-compose.yml
@@ -9,7 +9,7 @@
     postgres:
         container_name: "postgres"
         restart: "always"
-        image: "${NEXUS_REPO}/onap/refrepo/postgres:${POSTGRES_TAG}"
+        image: "${NEXUS_REPO}/onap/vnfsdk/refrepo/postgres:${POSTGRES_TAG}"
         mem_limit: "1g"
         memswap_limit: "1g"
         ports:
@@ -18,7 +18,7 @@
     refrepo:
         container_name: "refrepo"
         restart: "always"
-        image: "${NEXUS_REPO}/onap/refrepo:${REFREPO_TAG}"
+        image: "${NEXUS_REPO}/onap/vnfsdk/refrepo:${REFREPO_TAG}"
         ports:
             - "8702-8703:8702-8703"
             - "8000:8000"
diff --git a/vnfmarket-be/deployment/install/vnfsdk_vm_init.sh b/vnfmarket-be/deployment/install/vnfsdk_vm_init.sh
index e1db6b5..a3bcba8 100755
--- a/vnfmarket-be/deployment/install/vnfsdk_vm_init.sh
+++ b/vnfmarket-be/deployment/install/vnfsdk_vm_init.sh
@@ -22,8 +22,8 @@
 
 # Refresh images
 docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO
-docker pull $NEXUS_DOCKER_REPO/onap/refrepo:${REFREPO_TAG}
-docker pull $NEXUS_DOCKER_REPO/onap/refrepo:${POSTGRES_TAG}
+docker pull $NEXUS_DOCKER_REPO/onap/vnfsdk/refrepo:${REFREPO_TAG}
+docker pull $NEXUS_DOCKER_REPO/onap/vnfsdk/refrepo:${POSTGRES_TAG}
 
 
 # docker-compose is not in /usr/bin
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/app.config.js b/vnfmarket/src/main/webapp/vnfmarket/app/app.config.js
index ffe6e11..25c1521 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/app.config.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/app.config.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -65,16 +65,16 @@
             'A200': '#E1E4E5',
             'A400': '#858CA8',
             'A700': '#FFFFFF'
-            });
+        });
 
-            $mdThemingProvider.theme('default')
-            .primaryPalette('amazingPaletteName',{
-                'default' : 'A400',
-                'hue-1' : "A700",
-                'hue-2' : "100",
-                'hue-3' : "A200"
+        $mdThemingProvider.theme('default')
+            .primaryPalette('amazingPaletteName', {
+                'default': 'A400',
+                'hue-1': "A700",
+                'hue-2': "100",
+                'hue-3': "A200"
             }).accentPalette('amazingPaletteName', {
-            'hue-1' : 'A400'
+                'hue-1': 'A400'
             })
 
         $locationProvider.hashPrefix('!');
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/app.js b/vnfmarket/src/main/webapp/vnfmarket/app/app.js
index b582b62..95fa107 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/app.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/app.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home-test.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home-test.js
index a182a9b..40c09c2 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home-test.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home-test.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -24,19 +24,19 @@
      * Test of the app
      */
 
-    describe('Home - Marketplace', function() {
+    describe('Home - Marketplace', function () {
         var controller = null,
             $scope = null,
             $location, service, httpBackend, config, state;
 
-        beforeEach(function() {
+        beforeEach(function () {
             module('vnfmarket');
         });
         beforeEach(module('ui.router'));
         beforeEach(module('md.data.table'));
         beforeEach(module('pascalprecht.translate'));
 
-        beforeEach(inject(function($controller, $rootScope, _$location_, homeService, $httpBackend, vnfConfig, $state) {
+        beforeEach(inject(function ($controller, $rootScope, _$location_, homeService, $httpBackend, vnfConfig, $state) {
             $scope = $rootScope.$new();
             $location = _$location_;
             service = homeService;
@@ -48,11 +48,11 @@
             });
         }));
 
-        it('Should HomeCtrl must be defined', function() {
+        it('Should HomeCtrl must be defined', function () {
             expect(controller).toBeDefined();
         });
 
-        it('Service List response should be of type array', function() {
+        it('Service List response should be of type array', function () {
             var data = [{
                 "csarId": "26b4d6c4-a157-43c0-8ebc-9d6af1d6c40c",
                 "name": "clearwater_vnf",
@@ -75,28 +75,28 @@
             var returnData = {};
             httpBackend.expectGET(config.common.baseUrl + config.api.home.getFeaturesList.url).respond(returnData);
 
-            service.getFeaturesList().then(function(response) {
+            service.getFeaturesList().then(function (response) {
                 expect(response.data).toBeDefined();
                 expect(Array.isArray(response.data)).toBeTruthy();
             });
             httpBackend.flush();
         });
 
-        it('Service List response is not of array type', function() {
+        it('Service List response is not of array type', function () {
             var data = {};
             httpBackend.whenGET(config.common.baseUrl + config.api.home.getFeaturesList.url).respond(200, data);
 
             var returnData = {};
             httpBackend.expectGET(config.common.baseUrl + config.api.home.getFeaturesList.url).respond(returnData);
 
-            service.getFeaturesList().then(function(response) {
+            service.getFeaturesList().then(function (response) {
                 expect(response.data).toBeDefined();
                 expect(Array.isArray(response.data)).toBeFalsy();
             });
             httpBackend.flush();
         });
 
-        it('Service List response should contain service details', function() {
+        it('Service List response should contain service details', function () {
             var returnData = {};
             var data = [{
                 "csarId": "26b4d6c4-a157-43c0-8ebc-9d6af1d6c40c",
@@ -118,7 +118,7 @@
             httpBackend.whenGET(config.common.baseUrl + config.api.home.getFeaturesList.url).respond(200, data);
 
             httpBackend.expectGET(config.common.baseUrl + config.api.home.getFeaturesList.url).respond(returnData);
-            service.getFeaturesList().then(function(response) {
+            service.getFeaturesList().then(function (response) {
                 expect(response.data).toBeDefined();
                 var serviceDetails = response.data[0];
                 expect(serviceDetails.csarId).toBeDefined();
@@ -140,24 +140,24 @@
             httpBackend.flush();
         });
 
-        it('Should match the path Module name', function() {
+        it('Should match the path Module name', function () {
             $location.path('/marketplace');
             expect($location.path()).toBe('/marketplace');
         });
 
-        it('Path to the state home has to be defined', function() {
+        it('Path to the state home has to be defined', function () {
             expect(state.href("home")).toBe('#!');
         });
 
-        it('Path to the state home.marketplace has to be defined', function() {
+        it('Path to the state home.marketplace has to be defined', function () {
             expect(state.href("home.marketplace")).toBe('#!/marketplace');
         });
 
-        it('Path to the state home.serviceDetails has to be defined', function() {
+        it('Path to the state home.serviceDetails has to be defined', function () {
             expect(state.href("home.serviceDetails")).toBe('#!/serviceDetails');
         });
 
-        it('When a state is invalid', function() {
+        it('When a state is invalid', function () {
             expect(state.href("blah")).toBeNull('/marketplace');
         });
     });
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home.html
index da8fdc3..692e727 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/home.html
@@ -13,17 +13,18 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<md-sidenav layout="column" class="md-sidenav-left md-whiteframe-z1" md-component-id="left" md-is-locked-open="$mdMedia('gt-md')" id="sideNav">
+<md-sidenav layout="column" class="md-sidenav-left md-whiteframe-z1" md-component-id="left" md-is-locked-open="$mdMedia('gt-md')"
+    id="sideNav">
     <div ng-controller="SidenavCtrl as vm" ng-cloak>
         <md-toolbar class="md-tall md-hue-1">
             <div class="image">
-                <img src="/onapui/vnfmarket/common/images/logo.png" align="middle" >
+                <img src="/onapui/vnfmarket/common/images/logo.png" align="middle">
             </div>
             <div layout="column" class="md-toolbar-tools-bottom inset">
             </div>
         </md-toolbar>
         <md-list>
-            <md-list-item ui-sref="home.marketplace"  ui-sref-opts="{reload: true}">
+            <md-list-item ui-sref="home.marketplace" ui-sref-opts="{reload: true}">
                 <div class="inset">
                     <!--<ng-md-icon icon="apps"></ng-md-icon>-->
                     <i>
@@ -43,7 +44,8 @@
     </div>
 </md-sidenav>
 
-<div layout="column" class="relative md-whiteframe-23dp verticalBar" layout-fill role="main" ng-controller="LayoutCtrl as layout" ng-cloak>
+<div layout="column" class="relative md-whiteframe-23dp verticalBar" layout-fill role="main" ng-controller="LayoutCtrl as layout"
+    ng-cloak>
     <md-toolbar class="md-hue-2  md-whiteframe-z2">
         <div class="md-toolbar-tools">
             <md-button ng-click="layout.toggleSidenav('left')" hide-gt-md aria-label="Menu">
@@ -52,7 +54,7 @@
             <h3 class="headTitle">{{ 'module.marketplace.main.headerTitle' | translate}}</h3>
         </div>
     </md-toolbar>
-    <div class="PageIndicator" ></div>
+    <div class="PageIndicator"></div>
     <md-content layout="column" class="contentBackground" flex md-scroll-y>
         <div ui-view></div>
     </md-content>
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeCtrl.js
index 8555bad..0b5e681 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -57,7 +57,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.services.length ? vm.services.length : 0;
             }
         }];
@@ -80,9 +80,9 @@
             pageSelect: true
         };
 
-        vm.getFeatureList = function() {
+        vm.getFeatureList = function () {
             vm.SpinClass = "fa-spin"
-            homeService.getFeaturesList().then(function(response) {
+            homeService.getFeaturesList().then(function (response) {
                 for (var i = 0; i < response.data.length; i++) {
                     response.data[i].createTime = new Date(response.data[i].createTime);
                     response.data[i].modifyTime = new Date(response.data[i].modifyTime);
@@ -92,35 +92,35 @@
             });
         }
 
-        vm.downloadService = function(csarId) {
-			homeService.updateDownloadCount(csarId).then(function(response){
-				homeService.downloadServiceFile(csarId);
+        vm.downloadService = function (csarId) {
+            homeService.updateDownloadCount(csarId).then(function (response) {
+                homeService.downloadServiceFile(csarId);
                 vm.getFeatureList();
-			});
-            
+            });
+
         }
 
-        vm.changeView = function(viewType) {
+        vm.changeView = function (viewType) {
             vm.hasGridView = !vm.hasGridView;
             localStorage.setItem('viewType', viewType);
         }
 
-        vm.showDetails = function(serviceDetails) {
+        vm.showDetails = function (serviceDetails) {
             $state.go('home.serviceDetails', {
                 serviceDetails: serviceDetails
             });
         }
 
-        vm.serviceUpload = function(isUpload, csarId) {
-			homeService.openUploadDialog(vm.getFeatureList, isUpload, csarId);
+        vm.serviceUpload = function (isUpload, csarId) {
+            homeService.openUploadDialog(vm.getFeatureList, isUpload, csarId);
         };
-		
 
-        vm.onDeleteCompletion = function() {
+
+        vm.onDeleteCompletion = function () {
             vm.getFeatureList();
         }
 
-        vm.serviceDelete = function(serviceDetails) {
+        vm.serviceDelete = function (serviceDetails) {
             homeService.openDeleteDialog(serviceDetails, vm.onDeleteCompletion);
         };
 
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeModule.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeModule.js
index acf0516..ec89764 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeModule.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeModule.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeRoute.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeRoute.js
index bcd7906..d6c9ace 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeRoute.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeRoute.js
@@ -24,7 +24,7 @@
  */
 
 angular.module('vnfmarket')
-    .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider, vnfConfig) {
+    .config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider, vnfConfig) {
 
         var homePath = '/onapui/vnfmarket/app/modules/home';
         $stateProvider
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeService.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeService.js
index 750c171..ccf3478 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/homeService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -34,8 +34,8 @@
             getFeaturesList: getFeaturesList,
             downloadServiceFile: downloadServiceFile,
             openDeleteDialog: openDeleteDialog,
-			updateDownloadCount:updateDownloadCount,
-			openUploadDialog:openUploadDialog
+            updateDownloadCount: updateDownloadCount,
+            openUploadDialog: openUploadDialog
         };
 
         function getFeaturesList() {
@@ -44,23 +44,23 @@
 
             var defer = $q.defer()
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
         }
-		
-		function updateDownloadCount(csarId) {
+
+        function updateDownloadCount(csarId) {
             var url = vnfConfig.api.home.updateDownloadCount.url;
-			var method = vnfConfig.api.home.updateDownloadCount.method;
-			url = url.replace(":csarId", csarId)
+            var method = vnfConfig.api.home.updateDownloadCount.method;
+            url = url.replace(":csarId", csarId)
             var defer = $q.defer()
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
@@ -74,34 +74,34 @@
 
         function openDeleteDialog(serviceDetails, callbackFunction) {
             $mdDialog.show({
-                    controller: 'serviceDeleteCtrl',
-                    templateUrl: vnfConfig.modulePath.home + '/serviceDelete/serviceDelete.html',
-                    serviceDetails: serviceDetails,
-                    controllerAs: 'vm'
-                })
-                .then(function(answer) {
+                controller: 'serviceDeleteCtrl',
+                templateUrl: vnfConfig.modulePath.home + '/serviceDelete/serviceDelete.html',
+                serviceDetails: serviceDetails,
+                controllerAs: 'vm'
+            })
+                .then(function (answer) {
                     //vm.status = 'You said the information was "' + answer + '".';
                     callbackFunction();
-                }, function() {
+                }, function () {
                     //vm.status = 'You cancelled the dialog.';
                 });
         }
-		
-		function openUploadDialog(callbackFunction,isUpload ,csarId) {
+
+        function openUploadDialog(callbackFunction, isUpload, csarId) {
             $mdDialog.show({
-				controller: 'serviceUploadCtrl',
-				templateUrl: vnfConfig.modulePath.home + '/serviceUpload/serviceUpload.html',
-				controllerAs: 'vm',
-				isUpload: isUpload,
-				csarId: csarId ? csarId : null
-			})
-			.then(function(answer) {
-				if(callbackFunction)
-					callbackFunction();
-				// vm.status = 'You said the information was "' + answer + '".';
-			}, function() {
-				// vm.status = 'You cancelled the dialog.';
-			});
+                controller: 'serviceUploadCtrl',
+                templateUrl: vnfConfig.modulePath.home + '/serviceUpload/serviceUpload.html',
+                controllerAs: 'vm',
+                isUpload: isUpload,
+                csarId: csarId ? csarId : null
+            })
+                .then(function (answer) {
+                    if (callbackFunction)
+                        callbackFunction();
+                    // vm.status = 'You said the information was "' + answer + '".';
+                }, function () {
+                    // vm.status = 'You cancelled the dialog.';
+                });
         }
 
     }
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/marketplace.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/marketplace.html
index c9c4a31..64a3f39 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/marketplace.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/marketplace.html
@@ -16,14 +16,14 @@
 <div class="md-padding nomargin nopadding" flex layout-sm="column">
     <md-card class="nomargin">
         <md-card-content class="nopadding">
-            <img src="/onapui/vnfmarket/common/images/productioncardtype.png"  style="width:100%;">
+            <img src="/onapui/vnfmarket/common/images/productioncardtype.png" style="width:100%;">
         </md-card-content>
     </md-card>
     <!-- Start About Page -->
     <md-card class="sortbar">
         <md-toolbar id="homeToolbar" class="md-hue-3">
             <div class="md-toolbar-tools">
-                <label  ng-if="vm.services.length > 0" class="md-title fontSize marginAuto selectLblAlignment">{{'module.marketplace.main.sortBy.label' | translate}}</label>
+                <label ng-if="vm.services.length > 0" class="md-title fontSize marginAuto selectLblAlignment">{{'module.marketplace.main.sortBy.label' | translate}}</label>
                 <select ng-model="sortBy" class="md-no-underline noMargin iconMargin md-title fontSize" id="sortByLabel" ng-if="vm.services.length > 0">
                     <option class="md-title fontSize " value="" disabled selected>{{'module.marketplace.main.sortBy.title' | translate}}</option>
                     <option class="md-title fontSize " value="{{'module.marketplace.main.sortBy.options.name.value' | translate}}">{{'module.marketplace.main.sortBy.options.name.key' | translate}}</option>
@@ -32,18 +32,22 @@
                 </select>
                 <form flex name="vm.filter.name" class="iconMargin">
                     <md-input-container md-no-float class="md-block" id="searchFieldContainer" ng-if="!vm.showSearch">
-                        <input class="md-title fontSize" ng-model="vm.filter.search" type="text" id="searchField" placeholder="{{'module.marketplace.main.search.placeholder' | translate}}" autofocus>
+                        <input class="md-title fontSize" ng-model="vm.filter.search" type="text" id="searchField" placeholder="{{'module.marketplace.main.search.placeholder' | translate}}"
+                            autofocus>
                     </md-input-container>
                 </form>
 
-                <md-icon class="md-icon iconAlignment defaultColor" aria-label="{{'common.actions.close' | translate}}" ng-click="vm.showSearch = !vm.showSearch; vm.filter.search = '';" ng-if="!vm.showSearch"  id="cancelSearch">
+                <md-icon class="md-icon iconAlignment defaultColor" aria-label="{{'common.actions.close' | translate}}" ng-click="vm.showSearch = !vm.showSearch; vm.filter.search = '';"
+                    ng-if="!vm.showSearch" id="cancelSearch">
                     <md-tooltip md-direction="top">{{'common.actions.close' | translate}}</md-tooltip>
                     <i class="fa fa-close" aria-hidden="true"></i>
                 </md-icon>
-                <md-icon class="md-icon iconAlignment defaultColor" aria-label="{{'module.marketplace.main.search.label' | translate}}" ng-if="!vm.showSearch" id="searchIcon">
+                <md-icon class="md-icon iconAlignment defaultColor" aria-label="{{'module.marketplace.main.search.label' | translate}}" ng-if="!vm.showSearch"
+                    id="searchIcon">
                     <i class="fa fa-search searchIconColor" aria-hidden="true"></i>
                 </md-icon>
-                <md-icon class="md-icon iconMargin iconAlignment defaultColor" aria-label="{{'common.actions.search' | translate}}" ng-if="vm.showSearch && vm.services.length > 0" ng-click="vm.showSearch = !vm.showSearch;">
+                <md-icon class="md-icon iconMargin iconAlignment defaultColor" aria-label="{{'common.actions.search' | translate}}" ng-if="vm.showSearch && vm.services.length > 0"
+                    ng-click="vm.showSearch = !vm.showSearch;">
                     <md-tooltip md-direction="top">{{'common.actions.search' | translate}}</md-tooltip>
                     <i class="fa fa-search" aria-hidden="true"></i>
                 </md-icon>
@@ -52,21 +56,24 @@
 
                 <span ng-if="vm.services.length > 0" class="iconMargin btn-toolbar">
                     <div class="btn-group-xs" role="group" aria-label="Basic example">
-                    <button class="btn btnDefault gridViewType" aria-label="{{'module.marketplace.main.listView.label' | translate}}" ng-click="vm.changeView('list')"  ng-disabled="!vm.hasGridView">
-                        <md-icon class="md-icon ">
-                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.label' | translate}}</md-tooltip>
-                            <i class="fa fa-list viewIconPosition" aria-hidden="true"></i>
-                        </md-icon>
-                    </button>
-                    <button class="btn btnDefault gridViewType "  aria-label="{{'module.marketplace.main.gridView.label' | translate}}"  ng-click="vm.changeView('grid')" ng-disabled="vm.hasGridView">
-                        <md-icon class="md-icon">
-                            <md-tooltip md-direction="top">{{'module.marketplace.main.gridView.label' | translate}}</md-tooltip>
-                            <i class="fa fa-th viewIconPosition" aria-hidden="true"></i>
-                        </md-icon>
-                    </button>
+                        <button class="btn btnDefault gridViewType" aria-label="{{'module.marketplace.main.listView.label' | translate}}" ng-click="vm.changeView('list')"
+                            ng-disabled="!vm.hasGridView">
+                            <md-icon class="md-icon ">
+                                <md-tooltip md-direction="top">{{'module.marketplace.main.listView.label' | translate}}</md-tooltip>
+                                <i class="fa fa-list viewIconPosition" aria-hidden="true"></i>
+                            </md-icon>
+                        </button>
+                        <button class="btn btnDefault gridViewType " aria-label="{{'module.marketplace.main.gridView.label' | translate}}" ng-click="vm.changeView('grid')"
+                            ng-disabled="vm.hasGridView">
+                            <md-icon class="md-icon">
+                                <md-tooltip md-direction="top">{{'module.marketplace.main.gridView.label' | translate}}</md-tooltip>
+                                <i class="fa fa-th viewIconPosition" aria-hidden="true"></i>
+                            </md-icon>
+                        </button>
                     </div>
                 </span>
-                <md-icon class="md-icon iconAlignment defaultColor" aria-label="{{'module.marketplace.main.refresh.label' | translate}}" ng-click="vm.getFeatureList()">
+                <md-icon class="md-icon iconAlignment defaultColor" aria-label="{{'module.marketplace.main.refresh.label' | translate}}"
+                    ng-click="vm.getFeatureList()">
                     <md-tooltip md-direction="top">{{'module.marketplace.main.refresh.label' | translate}}</md-tooltip>
                     <i class="fa fa-refresh" ng-class="vm.SpinClass" aria-hidden="true"></i>
                 </md-icon>
@@ -75,13 +82,17 @@
         </md-toolbar>
     </md-card>
     <div class="md-padding" layout-xs="column" layout="row" layout-wrap ng-if="vm.hasGridView && vm.services.length > 0" id="gridView">
-        <md-card class="gridViewMargin md-padding tiles flex-md-100 flex-gt-md-30 flex-lt-md-100" ng-repeat="service in vm.services | filter: vm.filter.search| orderBy:sortBy" layout-wrap>
+        <md-card class="gridViewMargin md-padding tiles flex-md-100 flex-gt-md-30 flex-lt-md-100" ng-repeat="service in vm.services | filter: vm.filter.search| orderBy:sortBy"
+            layout-wrap>
             <md-card-header class="nopadding">
                 <md-card-header-text>
                     <md-toolbar class="md-menu-toolbar gridToolbarHeight">
                         <div class="md-toolbar-tools nopadding gridTitleHeight">
-                        <span class="md-title fontSize gridServiceTitle"><md-tooltip md-direction="top">{{'common.message.viewDetails' | translate}} </md-tooltip> <a class="pointerClick" ng-click="vm.showDetails(service)">{{service.name}}</a></span>
-                        <span flex></span>
+                            <span class="md-title fontSize gridServiceTitle">
+                                <md-tooltip md-direction="top">{{'common.message.viewDetails' | translate}} </md-tooltip>
+                                <a class="pointerClick" ng-click="vm.showDetails(service)">{{service.name}}</a>
+                            </span>
+                            <span flex></span>
                         </div>
                     </md-toolbar>
                 </md-card-header-text>
@@ -93,14 +104,14 @@
                 <md-toolbar class="md-menu-toolbar">
                     <div class="md-toolbar-tools nopadding">
                         <button class="btn btnDefault iconMargin" ng-click="vm.serviceUpload(false, service.csarId)">
-                          <md-tooltip md-direction="top">{{'common.actions.update' | translate}}</md-tooltip>
+                            <md-tooltip md-direction="top">{{'common.actions.update' | translate}}</md-tooltip>
                             <i>
                                 <img src="/onapui/vnfmarket/common/images/reupload.png" class="btnIconSpacing">
                             </i>
-                          {{'common.actions.update' | translate}}
+                            {{'common.actions.update' | translate}}
                         </button>
                         <button class="btn btnDefault iconMargin deletebutton" ng-click="vm.serviceDelete(service)">
-                          <md-tooltip md-direction="top">{{'common.actions.delete' | translate}}</md-tooltip>
+                            <md-tooltip md-direction="top">{{'common.actions.delete' | translate}}</md-tooltip>
                             <i>
                                 <img src="/onapui/vnfmarket/common/images/delete.png" class="btnIconSpacing">
                             </i>
@@ -108,11 +119,11 @@
                         </button>
                         <span flex></span>
                         <button class="btn btnPrimary downloadIcon" ng-click="vm.downloadService(service.csarId)" ng-disabled="service.downloadCount == -1">
-                          <md-tooltip md-direction="top">{{'common.actions.download' | translate}} </md-tooltip>
+                            <md-tooltip md-direction="top">{{'common.actions.download' | translate}} </md-tooltip>
                             <i>
                                 <img src="/onapui/vnfmarket/common/images/download.png" class="btnIconSpacing">
                             </i>
-                          {{'common.actions.download' | translate}}
+                            {{'common.actions.download' | translate}}
                         </button>
                     </div>
                 </md-toolbar>
@@ -120,9 +131,11 @@
             <span class="gridUnderline"></span>
             <md-toolbar class="md-menu-toolbar gridBottomeHeight">
                 <div class="md-toolbar-tools nopadding gridBottomeHeight">
-                <span class="md-subhead gridBottomFonts"> {{'module.marketplace.main.gridView.serviceType.label' | translate}} : {{service.type }}</span>
-                <span flex></span>
-                <span class="md-subhead gridBottomFonts"> {{'module.marketplace.main.gridView.downloads.label' | translate}} : <span class="md-title fontSize ">{{service.downloadCount != -1 ?service.downloadCount : 0 }}</span></span>
+                    <span class="md-subhead gridBottomFonts"> {{'module.marketplace.main.gridView.serviceType.label' | translate}} : {{service.type }}</span>
+                    <span flex></span>
+                    <span class="md-subhead gridBottomFonts"> {{'module.marketplace.main.gridView.downloads.label' | translate}} :
+                        <span class="md-title fontSize ">{{service.downloadCount != -1 ?service.downloadCount : 0 }}</span>
+                    </span>
                 </div>
             </md-toolbar>
         </md-card>
@@ -133,92 +146,110 @@
                 <thead md-head md-order="sortBy">
                     <tr md-row>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.name' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.name' | translate}} 
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.name' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.name'
+                            | translate}}
                         </th>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.provider' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.provider' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.provider' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.provider'
+                            | translate}}</th>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.description' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.description' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.description' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.description'
+                            | translate}}</th>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.type' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.type' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.type' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.type'
+                            | translate}}</th>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.size' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.size' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.size' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.size'
+                            | translate}}</th>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.createdAt' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.createdAt' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.createdAt' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.createdAt'
+                            | translate}}</th>
                         <th md-column class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.lastModified' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.lastModified' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.lastModified' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.lastModified'
+                            | translate}}</th>
                         <th md-column md-numeric class="text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.donwloads' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.donwloads' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.donwloads' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.donwloads'
+                            | translate}}</th>
                         <th md-column md-numeric class=" actionWidth text-center fontSize">
-                        <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.actions' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.actions' | translate}}</th>
+                            <md-tooltip md-direction="top">{{'module.marketplace.main.listView.headers.actions' | translate}}</md-tooltip>{{'module.marketplace.main.listView.headers.actions'
+                            | translate}}</th>
                     </tr>
                 </thead>
                 <tbody md-body>
                     <tr md-row md-select="dessert" md-select-id="name" md-auto-select ng-repeat="service in vm.services | filter: vm.filter.search | orderBy:sortBy | limitTo: vm.paginationQuery.limit: (vm.paginationQuery.page - 1) * vm.paginationQuery.limit">
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.name}}</md-tooltip>
-                        <a  class="pointerClick" ng-click="vm.showDetails(service)">{{service.name}}</a></td>
+                            <md-tooltip md-direction="top">{{service.name}}</md-tooltip>
+                            <a class="pointerClick" ng-click="vm.showDetails(service)">{{service.name}}</a>
+                        </td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.provider}}</md-tooltip>
-                        {{service.provider}}</td>
+                            <md-tooltip md-direction="top">{{service.provider}}</md-tooltip>
+                            {{service.provider}}</td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.shortDesc}}</md-tooltip>
-                        {{service.shortDesc | limitTo:50 }}<span ng-if="service.shortDesc.length > 50">...<span></td>
+                            <md-tooltip md-direction="top">{{service.shortDesc}}</md-tooltip>
+                            {{service.shortDesc | limitTo:50 }}
+                            <span ng-if="service.shortDesc.length > 50">...
+                                <span>
+                        </td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.type}}</md-tooltip>
-                        {{service.type}}</td>
+                            <md-tooltip md-direction="top">{{service.type}}</md-tooltip>
+                            {{service.type}}</td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.size}}</md-tooltip>
-                        {{service.size}}</td>
+                            <md-tooltip md-direction="top">{{service.size}}</md-tooltip>
+                            {{service.size}}</td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.createTime | date:'yyyy-MM-dd h:mm a'}}</md-tooltip>
-                        {{service.createTime | date:'yyyy-MM-dd h:mm a'}}</td>
+                            <md-tooltip md-direction="top">{{service.createTime | date:'yyyy-MM-dd h:mm a'}}</md-tooltip>
+                            {{service.createTime | date:'yyyy-MM-dd h:mm a'}}</td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top">{{service.modifyTime | date:'yyyy-MM-dd h:mm a'}}</md-tooltip>
-                        {{service.modifyTime | date:'yyyy-MM-dd h:mm a'}}</td>
+                            <md-tooltip md-direction="top">{{service.modifyTime | date:'yyyy-MM-dd h:mm a'}}</md-tooltip>
+                            {{service.modifyTime | date:'yyyy-MM-dd h:mm a'}}</td>
                         <td md-cell class="text-center">
-                        <md-tooltip md-direction="top" >{{service.downloadCount ?service.downloadCount : 0 }}</md-tooltip>
-                        {{service.downloadCount != -1?service.downloadCount : 0 }}</td>
+                            <md-tooltip md-direction="top">{{service.downloadCount ?service.downloadCount : 0 }}</md-tooltip>
+                            {{service.downloadCount != -1?service.downloadCount : 0 }}</td>
                         <td md-cell>
                             <span class="pull-right">
                                 <md-icon class="md-icon" aria-label="{{'common.actions.update' | translate}}" ng-click="vm.serviceUpload(false, service.csarId)">
-                                <md-tooltip md-direction="top">{{'common.actions.update' | translate}}</md-tooltip>
-                                <i>
-                                <img src="/onapui/vnfmarket/common/images/reupload.png" class="btnIconSpacing">
-                            </i>
+                                    <md-tooltip md-direction="top">{{'common.actions.update' | translate}}</md-tooltip>
+                                    <i>
+                                        <img src="/onapui/vnfmarket/common/images/reupload.png" class="btnIconSpacing">
+                                    </i>
                                     <!-- <i class="material-icons materialIconAdjustment" aria-hidden="true">{{'common.actions.fileUpload' | translate}}</i> -->
                                 </md-icon>
-                                <md-icon class="md-icon" aria-label="{{'common.actions.download' | translate}}" ng-click="vm.downloadService(service.csarId)" ng-if="service.downloadCount != -1">
-                                <md-tooltip md-direction="top">{{'common.actions.download' | translate}}</md-tooltip>
+                                <md-icon class="md-icon" aria-label="{{'common.actions.download' | translate}}" ng-click="vm.downloadService(service.csarId)"
+                                    ng-if="service.downloadCount != -1">
+                                    <md-tooltip md-direction="top">{{'common.actions.download' | translate}}</md-tooltip>
                                     <!-- <i class="material-icons materialIconAdjustment" aria-hidden="true">{{'common.actions.getApp' | translate}}</i> -->
                                     <i>
-                                <img src="/onapui/vnfmarket/common/images/download.png" class="btnIconSpacing primaryColor">
-                            </i>
+                                        <img src="/onapui/vnfmarket/common/images/download.png" class="btnIconSpacing primaryColor">
+                                    </i>
                                 </md-icon>
-                                <md-icon class="md-icon" aria-label="{{'common.actions.delete' | translate}}"  ng-click="vm.serviceDelete(service)">
-                                <md-tooltip md-direction="top">{{'common.actions.delete' | translate}}</md-tooltip>
-                                <i>
-                                <img src="/onapui/vnfmarket/common/images/delete.png" class="btnIconSpacing">
-                            </i>
+                                <md-icon class="md-icon" aria-label="{{'common.actions.delete' | translate}}" ng-click="vm.serviceDelete(service)">
+                                    <md-tooltip md-direction="top">{{'common.actions.delete' | translate}}</md-tooltip>
+                                    <i>
+                                        <img src="/onapui/vnfmarket/common/images/delete.png" class="btnIconSpacing">
+                                    </i>
                                     <!-- <i class="fa fa-trash-o icon-red fa-sm" aria-hidden="true"></i> -->
 
                                 </md-icon>
-                                <md-icon class="md-icon" aria-label="Delete service" >
+                                <md-icon class="md-icon" aria-label="Delete service">
                             </span>
                         </td>
                     </tr>
                 </tbody>
             </table>
         </md-table-container>
-        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page" md-total="{{vm.services.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink" md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
+        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page"
+            md-total="{{vm.services.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink"
+            md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
     </md-card>
     <div ng-if="vm.services.length == 0">
-    <div class="content emptyPage">
-        <div class="imageContainer">
-            <img src="/onapui/vnfmarket/common/images/empty.png" class="btnIconSpacing">
+        <div class="content emptyPage">
+            <div class="imageContainer">
+                <img src="/onapui/vnfmarket/common/images/empty.png" class="btnIconSpacing">
+            </div>
+            <h3>{{'module.marketplace.main.emptyList.label' | translate}}
+                <a ng-click="vm.serviceUpload(true)">{{'module.marketplace.main.emptyList.anchor' | translate}}</a> {{'module.marketplace.main.emptyList.labelContinued'
+                | translate}}</h3>
         </div>
-        <h3>{{'module.marketplace.main.emptyList.label' | translate}} <a ng-click="vm.serviceUpload(true)">{{'module.marketplace.main.emptyList.anchor' | translate}}</a> {{'module.marketplace.main.emptyList.labelContinued' | translate}}</h3>
     </div>
 </div>
-</div>
 </div>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete-test.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete-test.js
index 2fb828a..05bb366 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete-test.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete-test.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -23,39 +23,39 @@
      * # homeTest
      * Test of the app
      */
-     angular
-            .module('vnfmarket')
-            .constant("serviceDetails", {
-                "csarId": "26b4d6c4-a157-43c0-8ebc-9d6af1d6c40c",
-                "name": "clearwater_vnf",
-                "downloadUri": "null/files/catalog-http/NFAR/Canonical/clearwater_vnf/v1.0/clearwater_vnf.csar",
-                "report": "/Demo/reports/b3232e0c-3843-4df8-88e7-734cf2d7a97c/report.html",
-                "size": "1.8 MB",
-                "version": "v1.0",
-                "provider": "Canonical",
-                "type": "NFAR",
-                "format": "yaml",
-                "deletionPending": false,
-                "createTime": "2017-02-22 08:59:06",
-                "modifyTime": "2017-02-22 08:59:06",
-                "shortDesc": "",
-                "details": "",
-                "remarks": ""
-            })
+    angular
+        .module('vnfmarket')
+        .constant("serviceDetails", {
+            "csarId": "26b4d6c4-a157-43c0-8ebc-9d6af1d6c40c",
+            "name": "clearwater_vnf",
+            "downloadUri": "null/files/catalog-http/NFAR/Canonical/clearwater_vnf/v1.0/clearwater_vnf.csar",
+            "report": "/Demo/reports/b3232e0c-3843-4df8-88e7-734cf2d7a97c/report.html",
+            "size": "1.8 MB",
+            "version": "v1.0",
+            "provider": "Canonical",
+            "type": "NFAR",
+            "format": "yaml",
+            "deletionPending": false,
+            "createTime": "2017-02-22 08:59:06",
+            "modifyTime": "2017-02-22 08:59:06",
+            "shortDesc": "",
+            "details": "",
+            "remarks": ""
+        })
 
-    describe('Home - serviceDeleteCtrl', function() {
+    describe('Home - serviceDeleteCtrl', function () {
         var controller = null,
             $scope = null,
             $location, service, httpBackend, config, state, blah;
 
-        beforeEach(function() {
+        beforeEach(function () {
             module('vnfmarket');
         });
         beforeEach(module('ui.router'));
         beforeEach(module('md.data.table'));
         beforeEach(module('pascalprecht.translate'));
 
-        beforeEach(inject(function($controller, $rootScope, serviceDeleteService, $httpBackend, vnfConfig, serviceDetails) {
+        beforeEach(inject(function ($controller, $rootScope, serviceDeleteService, $httpBackend, vnfConfig, serviceDetails) {
             $scope = $rootScope.$new();
             service = serviceDeleteService;
             httpBackend = $httpBackend;
@@ -66,11 +66,11 @@
             });
         }));
 
-        it('Should serviceDeleteCtrl must be defined', function() {
+        it('Should serviceDeleteCtrl must be defined', function () {
             expect(controller).toBeDefined();
         });
 
-        it('Delete service for a valid scenario', function() {
+        it('Delete service for a valid scenario', function () {
             var csarId = "26b4d6c4-a157-43c0-8ebc-9d6af1d6c40c", url = config.common.baseUrl + config.api.home.serviceDelete.url;
             url = url.replace(":csarId", csarId);
             httpBackend.whenDELETE(url).respond(200, {});
@@ -78,7 +78,7 @@
             var returnData = {};
             httpBackend.expectDELETE(url).respond(returnData);
 
-            service.serviceDelete(csarId).then(function(response) {
+            service.serviceDelete(csarId).then(function (response) {
                 expect(response.status).toBeDefined();
                 expect(response.status).toBe(200);
             });
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete.html
index 29e2782..aede2b0 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDelete.html
@@ -27,12 +27,13 @@
 
         <md-dialog-content>
             <div class="md-dialog-content">
-                    <div class="fullWidth center">
-                        <div class="row">
-                            <div class="col-xs-2 col-sm-2 col-md-1 col-lg-1 deleteIconSize glyphicon glyphicon-warning-sign icon_warning"></div>
-                            <div class="msg col-xs-10 col-sm-10 col-md-11 col-lg-11" style="text-align:left;vertical-align: middle;">{{'module.marketplace.serviceDelete.confirmationMesaage' | translate}} "{{ vm.serviceDetails.name }}"?</div>
-                        </div>
+                <div class="fullWidth center">
+                    <div class="row">
+                        <div class="col-xs-2 col-sm-2 col-md-1 col-lg-1 deleteIconSize glyphicon glyphicon-warning-sign icon_warning"></div>
+                        <div class="msg col-xs-10 col-sm-10 col-md-11 col-lg-11" style="text-align:left;vertical-align: middle;">{{'module.marketplace.serviceDelete.confirmationMesaage' | translate}} "{{ vm.serviceDetails.name
+                            }}"?</div>
                     </div>
+                </div>
         </md-dialog-content>
 
         <md-dialog-actions layout="row" class="row deleteAction">
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteCtrl.js
index 5eafe9e..3fd1a29 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -40,24 +40,24 @@
         var vm = this;
         vm.serviceDetails = serviceDetails;
 
-        vm.hide = function() {
+        vm.hide = function () {
             $mdDialog.hide();
         };
 
-        vm.cancel = function() {
+        vm.cancel = function () {
             $mdDialog.cancel();
         };
 
-        vm.answer = function(answer) {
+        vm.answer = function (answer) {
             serviceDeleteService.serviceDelete(vm.serviceDetails.csarId)
-                .then(function(response) {
+                .then(function (response) {
                     $mdDialog.hide(response);
                     $mdToast.show(
                         $mdToast.simple()
-                        .textContent('Service deleted successfully')
-                        .position("bottom right")
-                        .action('Ok')
-                        .theme('success-toast')
+                            .textContent('Service deleted successfully')
+                            .position("bottom right")
+                            .action('Ok')
+                            .theme('success-toast')
                     );
                 });
         };
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteService.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteService.js
index cf58d8a..3d12cb0 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDelete/serviceDeleteService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -40,9 +40,9 @@
             url = url.replace(":csarId", csarId)
             var defer = $q.defer()
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestCtrl.js
index ec08f3d..fc49d11 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('functionalTestCtrl', functionalTest);
 
-    functionalTest.$inject = [ 'vnfConfig', 'baseUrlConfig', 'functionalTestService', '$stateParams'];
+    functionalTest.$inject = ['vnfConfig', 'baseUrlConfig', 'functionalTestService', '$stateParams'];
 
     /*
      * recommend
@@ -36,10 +36,10 @@
      * and bindable members up top.
      */
 
-    function functionalTest(vnfConfig, baseUrlConfig, functionalTestService,$stateParams) {
+    function functionalTest(vnfConfig, baseUrlConfig, functionalTestService, $stateParams) {
         var vm = this;
         vm.validations = [];
-		vm.csarId = $stateParams.csarId;
+        vm.csarId = $stateParams.csarId;
         console.log("functionalTest")
         vm.filter = {
             "search": '',
@@ -52,7 +52,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.validations.length ? vm.validations.length : 0;
             }
         }];
@@ -74,16 +74,16 @@
             limitSelect: true,
             pageSelect: true
         };
-        vm.getvalidations = function(){
+        vm.getvalidations = function () {
             console.log(vm.functionalTests)
         }
-		
-		vm.getFunctionTestDetails = function() {
-			functionalTestService.getFunctionTestDetails(vm.csarId).then(function(response){
-				vm.validations = response.data;
-			})
-		}
-		
-		vm.getFunctionTestDetails();
+
+        vm.getFunctionTestDetails = function () {
+            functionalTestService.getFunctionTestDetails(vm.csarId).then(function (response) {
+                vm.validations = response.data;
+            })
+        }
+
+        vm.getFunctionTestDetails();
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestService.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestService.js
index 1c66de0..e0c5ad7 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/functionalTest/functionalTestService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -42,9 +42,9 @@
 
             var defer = $q.defer()
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/lifeCycleCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/lifeCycleCtrl.js
index 2a31393..af6c960 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/lifeCycleCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/lifeCycleCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('lifeCycleCtrl', lifeCycle);
 
-    lifeCycle.$inject = [ 'vnfConfig', 'baseUrlConfig'];
+    lifeCycle.$inject = ['vnfConfig', 'baseUrlConfig'];
 
     /*
      * recommend
@@ -51,7 +51,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.lifeCycleTests.length ? vm.lifeCycleTests.length : 0;
             }
         }];
@@ -73,23 +73,23 @@
             limitSelect: true,
             pageSelect: true
         };
-        vm.getTests = function(){
+        vm.getTests = function () {
             console.log(vm.lifeCycleTests)
         }
 
-        vm.lifeCycleTests =  [{
-                "step" : "Lifecycle step-1",
-                "parameter" : "Lifecycle Parameter1",
-                "result" : "pass"
-            },
-            {
-                "step" : "Lifecycle step-2",
-                "parameter" : "Lifecycle Parameter2",
-                "result" : "pass"
-            },{
-                "step" : "Lifecycle step-3",
-                "parameter" : "Parameter3",
-                "result" : "pass"
-            }]
+        vm.lifeCycleTests = [{
+            "step": "Lifecycle step-1",
+            "parameter": "Lifecycle Parameter1",
+            "result": "pass"
+        },
+        {
+            "step": "Lifecycle step-2",
+            "parameter": "Lifecycle Parameter2",
+            "result": "pass"
+        }, {
+            "step": "Lifecycle step-3",
+            "parameter": "Parameter3",
+            "result": "pass"
+        }]
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/view.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/view.html
index 5759ceb..c767a05 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/view.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/lifeCycle/view.html
@@ -1,42 +1,44 @@
 <div class="">
 
-<md-card flex="100" class="nomargin">
+    <md-card flex="100" class="nomargin">
         <md-table-container>
             <table md-table>
                 <thead md-head md-order="vm.filter.name" md-on-reorder="vm.getTests">
                     <tr md-row>
-                        <th md-column class="fontSize"  md-order-by="step">
-                        	<md-tooltip md-direction="top">{{'common.tabs.validation.stepTHead' | translate}}</md-tooltip>
+                        <th md-column class="fontSize" md-order-by="step">
+                            <md-tooltip md-direction="top">{{'common.tabs.validation.stepTHead' | translate}}</md-tooltip>
                             {{'common.tabs.validation.stepTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"   md-order-by="parameter">
-                        	<md-tooltip md-direction="top">{{'common.tabs.validation.ParamTHead' | translate}}</md-tooltip>
+                        <th md-column class="fontSize" md-order-by="parameter">
+                            <md-tooltip md-direction="top">{{'common.tabs.validation.ParamTHead' | translate}}</md-tooltip>
                             {{'common.tabs.validation.ParamTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"    md-order-by="result">
-                        	<md-tooltip md-direction="top">{{'common.tabs.validation.ResultTHead' | translate}}</md-tooltip>
+                        <th md-column class="fontSize" md-order-by="result">
+                            <md-tooltip md-direction="top">{{'common.tabs.validation.ResultTHead' | translate}}</md-tooltip>
                             {{'common.tabs.validation.ResultTHead' | translate}}
                         </th>
-                        
+
                     </tr>
                 </thead>
                 <tbody md-body>
                     <tr md-row md-select="dessert" md-select-id="name" md-auto-select ng-repeat="test in vm.lifeCycleTests | orderBy: vm.filter.name |
                      limitTo: vm.paginationQuery.limit: (vm.paginationQuery.page - 1) * vm.paginationQuery.limit track by $index">
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{test.step}}</md-tooltip>{{test.step}}
+                            <md-tooltip md-direction="top">{{test.step}}</md-tooltip>{{test.step}}
                         </td>
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{test.parameter}}</md-tooltip>{{test.parameter}}
+                            <md-tooltip md-direction="top">{{test.parameter}}</md-tooltip>{{test.parameter}}
                         </td>
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{test.result}}</md-tooltip>{{test.result}}
+                            <md-tooltip md-direction="top">{{test.result}}</md-tooltip>{{test.result}}
                         </td>
-                        
+
                     </tr>
                 </tbody>
             </table>
         </md-table-container>
-        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page" md-total="{{vm.lifeCycleTests.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink" md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
-</md-card>
-</div>
+        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page"
+            md-total="{{vm.lifeCycleTests.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink"
+            md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
+    </md-card>
+</div>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails-test.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails-test.js
index 0c6edc2..d5c0038 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails-test.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails-test.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -24,7 +24,7 @@
      * Test of the app
      */
 
-    describe('Home - serviceDetailsCtrl', function() {
+    describe('Home - serviceDetailsCtrl', function () {
         var controller = null,
             $scope = null,
             $location, stateParams, httpBackend, config, state, blah;
@@ -46,14 +46,14 @@
             "remarks": ""
         };
 
-        beforeEach(function() {
+        beforeEach(function () {
             module('vnfmarket');
         });
         beforeEach(module('ui.router'));
         beforeEach(module('md.data.table'));
         beforeEach(module('pascalprecht.translate'));
 
-        beforeEach(inject(function($controller, $rootScope, $stateParams, $httpBackend, vnfConfig) {
+        beforeEach(inject(function ($controller, $rootScope, $stateParams, $httpBackend, vnfConfig) {
             $scope = $rootScope.$new();
             stateParams = $stateParams;
             httpBackend = $httpBackend;
@@ -64,26 +64,26 @@
             });
         }));
 
-        it('Should serviceDetailsCtrl must be defined', function() {
+        it('Should serviceDetailsCtrl must be defined', function () {
             expect(controller).toBeDefined();
         });
 
-        it('Receving state param service details', function() {
-                expect(stateParams.serviceDetails.csarId).toBeDefined();
-                expect(stateParams.serviceDetails.name).toBeDefined();
-                expect(stateParams.serviceDetails.downloadUri).toBeDefined();
-                expect(stateParams.serviceDetails.report).toBeDefined();
-                expect(stateParams.serviceDetails.size).toBeDefined();
-                expect(stateParams.serviceDetails.version).toBeDefined();
-                expect(stateParams.serviceDetails.provider).toBeDefined();
-                expect(stateParams.serviceDetails.type).toBeDefined();
-                expect(stateParams.serviceDetails.format).toBeDefined();
-                expect(stateParams.serviceDetails.deletionPending).toBeDefined();
-                expect(stateParams.serviceDetails.createTime).toBeDefined();
-                expect(stateParams.serviceDetails.modifyTime).toBeDefined();
-                expect(stateParams.serviceDetails.shortDesc).toBeDefined();
-                expect(stateParams.serviceDetails.details).toBeDefined();
-                expect(stateParams.serviceDetails.remarks).toBeDefined();
+        it('Receving state param service details', function () {
+            expect(stateParams.serviceDetails.csarId).toBeDefined();
+            expect(stateParams.serviceDetails.name).toBeDefined();
+            expect(stateParams.serviceDetails.downloadUri).toBeDefined();
+            expect(stateParams.serviceDetails.report).toBeDefined();
+            expect(stateParams.serviceDetails.size).toBeDefined();
+            expect(stateParams.serviceDetails.version).toBeDefined();
+            expect(stateParams.serviceDetails.provider).toBeDefined();
+            expect(stateParams.serviceDetails.type).toBeDefined();
+            expect(stateParams.serviceDetails.format).toBeDefined();
+            expect(stateParams.serviceDetails.deletionPending).toBeDefined();
+            expect(stateParams.serviceDetails.createTime).toBeDefined();
+            expect(stateParams.serviceDetails.modifyTime).toBeDefined();
+            expect(stateParams.serviceDetails.shortDesc).toBeDefined();
+            expect(stateParams.serviceDetails.details).toBeDefined();
+            expect(stateParams.serviceDetails.remarks).toBeDefined();
         });
     });
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails.html
index e44dfbe..e21c3cd 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetails.html
@@ -19,23 +19,29 @@
         <div class=" md-padding layout-row">
             <div class="flex-50">
                 <div class="md-title fontSize md-padding gridServiceTitle">{{vm.service.name}}</div>
-                  <div class="md-padding">{{vm.service.details}}</div>
+                <div class="md-padding">{{vm.service.details}}</div>
             </div>
 
-                <div class="flex-50">
-                    <div class=" md-padding layout-row" id="rightFlex">
-                        <div class="flex-70" id="childLeftFlex">
-                            <span class="md-subhead gridBottomFonts ng-binding">{{'module.marketplace.serviceDetails.info.typeLbl' | translate}} :</span><br>
-                            <span class="md-subhead gridBottomFonts ng-binding">{{'module.marketplace.serviceDetails.info.createLbl' | translate}} :</span><br>
-                            <span class="md-subhead gridBottomFonts ng-binding">{{'module.marketplace.serviceDetails.info.modLbl' | translate}} :</span><br>
-                        </div>
-                        <div class="flex-30" id="childRightFlex">
-                            <span class="md-padding">{{vm.service.type}}</span><br>
-                            <span class="md-padding">{{vm.service.createTime | date:'yyyy-MM-dd h:mm a'}}</span><br>
-                            <span class="md-padding">{{vm.service.modifyTime | date:'yyyy-MM-dd h:mm a'}}</span><br>
-                        </div>
+            <div class="flex-50">
+                <div class=" md-padding layout-row" id="rightFlex">
+                    <div class="flex-70" id="childLeftFlex">
+                        <span class="md-subhead gridBottomFonts ng-binding">{{'module.marketplace.serviceDetails.info.typeLbl' | translate}} :</span>
+                        <br>
+                        <span class="md-subhead gridBottomFonts ng-binding">{{'module.marketplace.serviceDetails.info.createLbl' | translate}} :</span>
+                        <br>
+                        <span class="md-subhead gridBottomFonts ng-binding">{{'module.marketplace.serviceDetails.info.modLbl' | translate}} :</span>
+                        <br>
+                    </div>
+                    <div class="flex-30" id="childRightFlex">
+                        <span class="md-padding">{{vm.service.type}}</span>
+                        <br>
+                        <span class="md-padding">{{vm.service.createTime | date:'yyyy-MM-dd h:mm a'}}</span>
+                        <br>
+                        <span class="md-padding">{{vm.service.modifyTime | date:'yyyy-MM-dd h:mm a'}}</span>
+                        <br>
                     </div>
                 </div>
+            </div>
         </div>
 
         <div class="md-toolbar-tools  flex-md-50 flex-sm-100" id="buttonsbar">
@@ -69,18 +75,20 @@
 
     </main>
     <md-content class="md-padding backgroundWhite">
-      <div class="md-padding">
-        <div class="md-title fontSize paddingBottom">{{'module.marketplace.serviceDetails.info.reportTitle' | translate}}</div>
-        <nav class="navbar nomargin" id="detailsTabs">
-            <div class="container-fluid nopadding">
-                <ul class="nav navbar-nav">
-                    <li ui-sref-active="active " class="fontSize  md-title" ng-class="vm.active == 'validation'? 'active' : ''"><a ng-click="vm.navigateValidation()">{{'module.marketplace.serviceDetails.tabs.validationTabTitle' | translate}}</a></li>
-                    <!--<li ui-sref-active="active "  class=" fontSize  md-title" ng-class="vm.active == 'lifeCycle'? 'active' : ''"><a  ng-click="vm.navigateLifecycle()">{{'module.marketplace.serviceDetails.tabs.lifecycleTabTitle' | translate}}</a></li>
+        <div class="md-padding">
+            <div class="md-title fontSize paddingBottom">{{'module.marketplace.serviceDetails.info.reportTitle' | translate}}</div>
+            <nav class="navbar nomargin" id="detailsTabs">
+                <div class="container-fluid nopadding">
+                    <ul class="nav navbar-nav">
+                        <li ui-sref-active="active " class="fontSize  md-title" ng-class="vm.active == 'validation'? 'active' : ''">
+                            <a ng-click="vm.navigateValidation()">{{'module.marketplace.serviceDetails.tabs.validationTabTitle' | translate}}</a>
+                        </li>
+                        <!--<li ui-sref-active="active "  class=" fontSize  md-title" ng-class="vm.active == 'lifeCycle'? 'active' : ''"><a  ng-click="vm.navigateLifecycle()">{{'module.marketplace.serviceDetails.tabs.lifecycleTabTitle' | translate}}</a></li>
                     <li ui-sref-active="active "  class=" fontSize  md-title" ng-class="vm.active == 'functionalTest'? 'active' : ''"><a ng-click="vm.navigationFunctionalTest()">{{'module.marketplace.serviceDetails.tabs.functionalTabTitle' | translate}}</a></li>-->
-                </ul>
-            </div>
-        </nav>
-        <ui-view></ui-view>
-      </div>
+                    </ul>
+                </div>
+            </nav>
+            <ui-view></ui-view>
+        </div>
     </md-content>
 </md-card>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsCtrl.js
index 466ab41..2a739a0 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -39,68 +39,68 @@
     function ServiceDetail(serviceDetailsService, $state, $stateParams, vnfConfig, homeService, baseUrlConfig) {
         var vm = this;
         vm.index = 0;
-		vm.active = 'validation';
+        vm.active = 'validation';
         if (!$stateParams.serviceDetails) {
             $state.go('home.marketplace');
             return;
         }
 
         vm.service = $stateParams.serviceDetails;
-      //ses  vm.service.funcTestReportUrl = baseUrlConfig.common.ip + ":" + baseUrlConfig.common.port + vm.service.report;
-	    vm.service.funcTestReportUrl =  vm.service.report;
+        //ses  vm.service.funcTestReportUrl = baseUrlConfig.common.ip + ":" + baseUrlConfig.common.port + vm.service.report;
+        vm.service.funcTestReportUrl = vm.service.report;
 
-        vm.downloadService = function(csarId) {
-            homeService.updateDownloadCount(csarId).then(function(response){
+        vm.downloadService = function (csarId) {
+            homeService.updateDownloadCount(csarId).then(function (response) {
                 homeService.downloadServiceFile(csarId);
             })
         }
 
-        vm.onDeleteCompletion = function() {
+        vm.onDeleteCompletion = function () {
             $state.go('home.marketplace', {}, {
                 reload: true
             });
         }
 
-        vm.serviceDelete = function(serviceDetails) {
+        vm.serviceDelete = function (serviceDetails) {
             homeService.openDeleteDialog(serviceDetails, vm.onDeleteCompletion);
         };
-		
-		vm.navigateValidation = function() {
-			vm.active = 'validation';
+
+        vm.navigateValidation = function () {
+            vm.active = 'validation';
             $state.go('home.serviceDetails.validation');
         };
-		
-		vm.navigateLifecycle = function() {
-			vm.active = 'lifeCycle';
+
+        vm.navigateLifecycle = function () {
+            vm.active = 'lifeCycle';
             $state.go('home.serviceDetails.lifeCycle');
         };
-		
-		vm.navigationFunctionalTest = function() {
-			vm.active = 'functionTest';
+
+        vm.navigationFunctionalTest = function () {
+            vm.active = 'functionTest';
             $state.go('home.serviceDetails.functionTest', {
-				csarId: vm.service.csarId
-			});
+                csarId: vm.service.csarId
+            });
         };
 
-        vm.navigateTab = function(sref, index) {
+        vm.navigateTab = function (sref, index) {
             $state.go(sref);
             vm.index = index;
         };
-		
-		vm.reupload = function(isUpload, csarId){
-			homeService.openUploadDialog(null, isUpload, csarId);
-		}
 
-        if(!$state.current.name.startsWith("home.serviceDetails.")){
-			$state.go('home.serviceDetails.validation');
-		} else {
-			if($state.current.name.endsWith("validation")){
-				vm.active = 'validation';
-			} else if ($state.current.name.endsWith("lifeCycle")){
-				vm.active = 'lifeCycle';
-			} else if($state.current.name.endsWith("functionTest")){
-				vm.active = 'functionalTest';
-			}
-		}
+        vm.reupload = function (isUpload, csarId) {
+            homeService.openUploadDialog(null, isUpload, csarId);
+        }
+
+        if (!$state.current.name.startsWith("home.serviceDetails.")) {
+            $state.go('home.serviceDetails.validation');
+        } else {
+            if ($state.current.name.endsWith("validation")) {
+                vm.active = 'validation';
+            } else if ($state.current.name.endsWith("lifeCycle")) {
+                vm.active = 'lifeCycle';
+            } else if ($state.current.name.endsWith("functionTest")) {
+                vm.active = 'functionalTest';
+            }
+        }
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsService.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsService.js
index e59ef49..a0ee1d2 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/serviceDetailsService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -42,9 +42,9 @@
 
             var defer = $q.defer()
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/validationCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/validationCtrl.js
index 978e6ae..0483916 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/validationCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/validationCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('validationCtrl', validation);
 
-    validation.$inject = [ 'vnfConfig', 'baseUrlConfig'];
+    validation.$inject = ['vnfConfig', 'baseUrlConfig'];
 
     /*
      * recommend
@@ -51,7 +51,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.validations.length ? vm.validations.length : 0;
             }
         }];
@@ -73,23 +73,23 @@
             limitSelect: true,
             pageSelect: true
         };
-        vm.getValidations = function(){
+        vm.getValidations = function () {
             console.log(vm.validations)
         }
 
-        vm.validations =  [{
-                "step" : "Validation step-1",
-                "parameter" : "Validation Parameter1",
-                "result" : "pass"
-            },
-            {
-                "step" : "Validation step-2",
-                "parameter" : "Validation Parameter2",
-                "result" : "pass"
-            },{
-                "step" : "Validation step-3",
-                "parameter" : "Validation Parameter3",
-                "result" : "pass"
-            }];
+        vm.validations = [{
+            "step": "Validation step-1",
+            "parameter": "Validation Parameter1",
+            "result": "pass"
+        },
+        {
+            "step": "Validation step-2",
+            "parameter": "Validation Parameter2",
+            "result": "pass"
+        }, {
+            "step": "Validation step-3",
+            "parameter": "Validation Parameter3",
+            "result": "pass"
+        }];
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/view.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/view.html
index a90e111..5a3d45f 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/view.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceDetails/validation/view.html
@@ -1,42 +1,44 @@
 <div class="">
 
-<md-card flex="100" class="nomargin">
+    <md-card flex="100" class="nomargin">
         <md-table-container>
             <table md-table>
                 <thead md-head md-order="vm.filter.name" md-on-reorder="vm.getValidations">
                     <tr md-row>
-                        <th md-column class="fontSize"  md-order-by="step">
+                        <th md-column class="fontSize" md-order-by="step">
                             <md-tooltip md-direction="top">{{'common.tabs.validation.stepTHead' | translate}}</md-tooltip>
                             {{'common.tabs.validation.stepTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"   md-order-by="parameter">
+                        <th md-column class="fontSize" md-order-by="parameter">
                             <md-tooltip md-direction="top">{{'common.tabs.validation.ParamTHead' | translate}}</md-tooltip>
                             {{'common.tabs.validation.ParamTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"    md-order-by="result">
+                        <th md-column class="fontSize" md-order-by="result">
                             <md-tooltip md-direction="top">{{'common.tabs.validation.ResultTHead' | translate}}</md-tooltip>
                             {{'common.tabs.validation.ResultTHead' | translate}}
                         </th>
-                        
+
                     </tr>
                 </thead>
                 <tbody md-body>
                     <tr md-row md-select="dessert" md-select-id="name" md-auto-select ng-repeat="validation in vm.validations | orderBy: vm.filter.name |
                      limitTo: vm.paginationQuery.limit: (vm.paginationQuery.page - 1) * vm.paginationQuery.limit track by $index">
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{validation.step}}</md-tooltip>{{validation.step}}
+                            <md-tooltip md-direction="top">{{validation.step}}</md-tooltip>{{validation.step}}
                         </td>
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{validation.parameter}}</md-tooltip>{{validation.parameter}}
+                            <md-tooltip md-direction="top">{{validation.parameter}}</md-tooltip>{{validation.parameter}}
                         </td>
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{validation.result}}</md-tooltip>{{validation.result}}
+                            <md-tooltip md-direction="top">{{validation.result}}</md-tooltip>{{validation.result}}
                         </td>
-                        
+
                     </tr>
                 </tbody>
             </table>
         </md-table-container>
-        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page" md-total="{{vm.validations.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink" md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
-</md-card>
-</div>
+        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page"
+            md-total="{{vm.validations.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink"
+            md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
+    </md-card>
+</div>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/functionalTestCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/functionalTestCtrl.js
index a9d12db..709ceb2 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/functionalTestCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/functionalTestCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -24,11 +24,9 @@
      * Controller of the app
      */
 
-    angular
-        .module('vnfmarket')
-        .controller('functionalTestOnboardingCtrl', functionalTest);
+    angular.module('vnfmarket').controller('functionalTestOnboardingCtrl', functionalTest);
 
-    functionalTest.$inject = [ 'vnfConfig', 'baseUrlConfig', '$mdDialog', 'functionalTestService', '$stateParams'];
+    functionalTest.$inject = ['vnfConfig', 'baseUrlConfig', '$mdDialog', 'functionalTestService', '$stateParams'];
 
     /*
      * recommend
@@ -36,9 +34,9 @@
      * and bindable members up top.
      */
 
-    function functionalTest(vnfConfig, baseUrlConfig, $mdDialog, functionalTestService,$stateParams) {
+    function functionalTest(vnfConfig, baseUrlConfig, $mdDialog, functionalTestService, $stateParams) {
         var vm = this;
-		vm.csarId = $stateParams.csarId;
+        vm.csarId = $stateParams.csarId;
         console.log("functionalTest")
         vm.filter = {
             "search": '',
@@ -51,7 +49,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.validations.length ? vm.validations.length : 0;
             }
         }];
@@ -73,26 +71,26 @@
             limitSelect: true,
             pageSelect: true
         };
-        vm.getvalidations = function(){
+        vm.getvalidations = function () {
             console.log(vm.functionalTests)
         }
-		
-		
-		vm.hide = function(answer) {
+
+
+        vm.hide = function (answer) {
             $mdDialog.hide(answer);
         };
 
-        
 
-        vm.getFunctionTestDetails = function() {
-			functionalTestService.getFunctionTestDetails(vm.csarId).then(function(response){
-				vm.validations = response.data;
-			})
-		}
-		
-		vm.getFunctionTestDetails();
-	    
-	vm.cancel = function() {
+
+        vm.getFunctionTestDetails = function () {
+            functionalTestService.getFunctionTestDetails(vm.csarId).then(function (response) {
+                vm.validations = response.data;
+            })
+        }
+
+        vm.getFunctionTestDetails();
+
+        vm.cancel = function () {
             $mdDialog.cancel();
         };
     }
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/view.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/view.html
index 7a626ff..b251f2a 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/view.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/functionalTest/view.html
@@ -4,24 +4,24 @@
             <h2>{{'common.tabs.functionTest.title' | translate}}</h2>
             <span flex></span>
             <button class="btnTransparency" ng-click="vm.cancel()">
-                    <i class="fa fa-close fa-sm" aria-hidden="true"></i>
+                <i class="fa fa-close fa-sm" aria-hidden="true"></i>
             </button>
         </div>
     </md-toolbar>
 
     <br>
     <div>
-       <!-- <img src="../../../../../common/images/floating-layer-function.png">-->
+        <!-- <img src="../../../../../common/images/floating-layer-function.png">-->
         <img src="/onapui/vnfmarket/common/images/floating_layer_function.png" width="100%" height="40%">
 
     </div>
     <br>
-<md-card flex="100" class="nomargin  md-padding">
+    <md-card flex="100" class="nomargin  md-padding">
         <md-table-container>
             <table md-table>
                 <thead md-head md-order="vm.filter.name" md-on-reorder="vm.getValidations">
                     <tr md-row>
-                        <th md-column class="fontSize"  md-order-by="testCase">
+                        <th md-column class="fontSize" md-order-by="testCase">
                             <md-tooltip md-direction="top">{{'common.tabs.functionTest.testTHead' | translate}} </md-tooltip>
                             {{'common.tabs.functionTest.testTHead' | translate}}
                         </th>
@@ -29,15 +29,15 @@
                             <md-tooltip md-direction="top">{{'common.tabs.functionTest.descTHead' | translate}} </md-tooltip>
                             {{'common.tabs.functionTest.descTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"   md-order-by="testResult">
+                        <th md-column class="fontSize" md-order-by="testResult">
                             <md-tooltip md-direction="top">{{'common.tabs.functionTest.resultTHead' | translate}} </md-tooltip>
                             {{'common.tabs.functionTest.resultTHead' | translate}}
                         </th>
-                        
+
                     </tr>
                 </thead>
                 <tbody md-body>
-                    <tr md-row  ng-repeat="validation in vm.validations | orderBy: vm.filter.name |
+                    <tr md-row ng-repeat="validation in vm.validations | orderBy: vm.filter.name |
                      limitTo: vm.paginationQuery.limit: (vm.paginationQuery.page - 1) * vm.paginationQuery.limit track by $index">
                         <td md-cell class="">
                             <md-tooltip md-direction="top">{{validation.name}}</md-tooltip>{{validation.name}}
@@ -49,11 +49,13 @@
                         <td md-cell class="">
                             <md-tooltip md-direction="top">{{validation.status}}</md-tooltip>{{validation.status}}
                         </td>
-                        
+
                     </tr>
                 </tbody>
             </table>
         </md-table-container>
-        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page" md-total="{{vm.validations.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink" md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
-</md-card>
+        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page"
+            md-total="{{vm.validations.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink"
+            md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
+    </md-card>
 </md-dialog>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/lifeCycleCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/lifeCycleCtrl.js
index 60f9e3f..715ca31 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/lifeCycleCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/lifeCycleCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('lifeCycleOnboardingCtrl', lifeCycle);
 
-    lifeCycle.$inject = [ 'vnfConfig', 'baseUrlConfig', '$mdDialog'];
+    lifeCycle.$inject = ['vnfConfig', 'baseUrlConfig', '$mdDialog'];
 
     /*
      * recommend
@@ -36,7 +36,7 @@
      * and bindable members up top.
      */
 
-    function lifeCycle(vnfConfig, baseUrlConfig,$mdDialog) {
+    function lifeCycle(vnfConfig, baseUrlConfig, $mdDialog) {
         var vm = this;
         console.log("functionalTest")
         vm.filter = {
@@ -50,7 +50,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.lifeCycleTests.length ? vm.lifeCycleTests.length : 0;
             }
         }];
@@ -72,32 +72,32 @@
             limitSelect: true,
             pageSelect: true
         };
-        vm.getTests = function(){
+        vm.getTests = function () {
             console.log(vm.lifeCycleTests)
         }
-		
-		
-		vm.hide = function(answer) {
+
+
+        vm.hide = function (answer) {
             $mdDialog.hide(answer);
         };
 
-        vm.cancel = function() {
+        vm.cancel = function () {
             $mdDialog.cancel();
         };
 
-        vm.lifeCycleTests =  [{
-                "step" : "Lifecycle step-1",
-                "parameter" : "Lifecycle Parameter1",
-                "result" : "pass"
-            },
-            {
-                "step" : "Lifecycle step-2",
-                "parameter" : "Lifecycle Parameter2",
-                "result" : "pass"
-            },{
-                "step" : "Lifecycle step-3",
-                "parameter" : "Parameter3",
-                "result" : "pass"
-            }]
+        vm.lifeCycleTests = [{
+            "step": "Lifecycle step-1",
+            "parameter": "Lifecycle Parameter1",
+            "result": "pass"
+        },
+        {
+            "step": "Lifecycle step-2",
+            "parameter": "Lifecycle Parameter2",
+            "result": "pass"
+        }, {
+            "step": "Lifecycle step-3",
+            "parameter": "Parameter3",
+            "result": "pass"
+        }]
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/view.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/view.html
index e74436f..692e78e 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/view.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/lifeCycle/view.html
@@ -4,48 +4,50 @@
             <h2>{{'common.tabs.lifeCycle.title' | translate}}</h2>
             <span flex></span>
             <button class="btnTransparency" ng-click="vm.cancel()">
-                    <i class="fa fa-close fa-sm" aria-hidden="true"></i>
+                <i class="fa fa-close fa-sm" aria-hidden="true"></i>
             </button>
         </div>
     </md-toolbar>
-	
-<md-card flex="100" class="nomargin md-padding">
+
+    <md-card flex="100" class="nomargin md-padding">
         <md-table-container>
             <table md-table>
                 <thead md-head md-order="vm.filter.name" md-on-reorder="vm.getTests">
                     <tr md-row>
-                        <th md-column class="fontSize"  md-order-by="step">
-                        	<md-tooltip md-direction="top">{{'common.tabs.lifeCycle.stepTHead' | translate}}</md-tooltip>
+                        <th md-column class="fontSize" md-order-by="step">
+                            <md-tooltip md-direction="top">{{'common.tabs.lifeCycle.stepTHead' | translate}}</md-tooltip>
                             {{'common.tabs.lifeCycle.stepTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"   md-order-by="parameter">
-                        	<md-tooltip md-direction="top">{{'common.tabs.lifeCycle.ParamTHead' | translate}}</md-tooltip>
+                        <th md-column class="fontSize" md-order-by="parameter">
+                            <md-tooltip md-direction="top">{{'common.tabs.lifeCycle.ParamTHead' | translate}}</md-tooltip>
                             {{'common.tabs.lifeCycle.ParamTHead' | translate}}
                         </th>
-                        <th md-column class="fontSize"    md-order-by="result">
-                        	<md-tooltip md-direction="top">{{'common.tabs.lifeCycle.ResultTHead' | translate}}</md-tooltip>
+                        <th md-column class="fontSize" md-order-by="result">
+                            <md-tooltip md-direction="top">{{'common.tabs.lifeCycle.ResultTHead' | translate}}</md-tooltip>
                             {{'common.tabs.lifeCycle.ResultTHead' | translate}}
                         </th>
-                        
+
                     </tr>
                 </thead>
                 <tbody md-body>
                     <tr md-row md-select="dessert" md-select-id="name" md-auto-select ng-repeat="test in vm.lifeCycleTests | orderBy: vm.filter.name |
                      limitTo: vm.paginationQuery.limit: (vm.paginationQuery.page - 1) * vm.paginationQuery.limit track by $index">
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{test.step}}</md-tooltip>{{test.step}}
+                            <md-tooltip md-direction="top">{{test.step}}</md-tooltip>{{test.step}}
                         </td>
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{test.parameter}}</md-tooltip>{{test.parameter}}
+                            <md-tooltip md-direction="top">{{test.parameter}}</md-tooltip>{{test.parameter}}
                         </td>
                         <td md-cell>
-	                        <md-tooltip md-direction="top">{{test.result}}</md-tooltip>{{test.result}}
+                            <md-tooltip md-direction="top">{{test.result}}</md-tooltip>{{test.result}}
                         </td>
-                        
+
                     </tr>
                 </tbody>
             </table>
         </md-table-container>
-        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page" md-total="{{vm.lifeCycleTests.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink" md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
-</md-card>
+        <md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page"
+            md-total="{{vm.lifeCycleTests.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink"
+            md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
+    </md-card>
 </md-dialog>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onBoardingService.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onBoardingService.js
index b73cd5a..abc788c 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onBoardingService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onBoardingService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -40,8 +40,8 @@
                 method = vnfConfig.api.home.getFunctionalList.method;
 
             url = url.replace(":csarId", csarId);
-            url += "?operTypeId="+operTypeId;
-            url += "&operId="+operId;
+            url += "?operTypeId=" + operTypeId;
+            url += "&operId=" + operId;
 
 
             /*var response =
@@ -73,9 +73,9 @@
             //defer.resolve(response);
 
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
@@ -144,9 +144,9 @@
 
 
             httpService.apiRequest(url, method)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.html
index 57e6545..040b2e4 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.html
@@ -7,7 +7,9 @@
     <div class="layout-row onboardProgress">
         <div class="flex-100 progress1">
             <div class="progressDiv"></div>
-            <div class="roundProg"><span>1</span></div>
+            <div class="roundProg">
+                <span>1</span>
+            </div>
         </div>
         <!-- <div class="flex-33 progress2">
             <div class="progressDiv"></div>
@@ -23,7 +25,7 @@
             <div class="onbdContent">
                 <div class="onboarddiv">
                     <div class="btnOuter">
-                        <div class="onboardBtn btnImage1" type="button" aria-label="Eat cake"  ng-click="vm.displayValidationDialog()">
+                        <div class="onboardBtn btnImage1" type="button" aria-label="Eat cake" ng-click="vm.displayValidationDialog()">
 
                         </div>
                     </div>
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.js
index c2c735b..1d69084 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboarding.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('onBoardingCtrl', onBoarding);
 
-    onBoarding.$inject = [ 'vnfConfig', 'baseUrlConfig', '$interval', '$timeout', '$state', '$mdDialog', '$stateParams', 'onBoardingService'];
+    onBoarding.$inject = ['vnfConfig', 'baseUrlConfig', '$interval', '$timeout', '$state', '$mdDialog', '$stateParams', 'onBoardingService'];
 
     /*
      * recommend
@@ -50,36 +50,36 @@
 
         $(".onboardProgress .progress3 .progressDiv").removeClass("progressed");
         $(".onboardProgress .progress3 .roundProg").removeClass("progressed");
-	var fileName = $stateParams.csarName
-		
-	vm.mainTitle = fileName.slice(0, fileName.lastIndexOf("."));
+        var fileName = $stateParams.csarName;
+
+        vm.mainTitle = fileName ? fileName.slice(0, fileName.lastIndexOf(".")) : '';
 
         //vm.mainTitle = $stateParams.csarName;//"clearwater_ns";
         var csarId = $stateParams.csarId;
-        if(!csarId) {
+        if (!csarId) {
             $state.go("home.marketplace", {});
-			return;
+            return;
         }
 
         /*onBoardingService.getFunctionalList(csarId).then(function(response) {
             vm.functionalDataList = response.data;
         });*/
 
-        vm.getIconClass = function(status) {
+        vm.getIconClass = function (status) {
             var classIcon = "";
-            if(status == undefined || status == 1) {
+            if (status == undefined || status == 1) {
                 //classIcon = "fa fa-clock-o";
                 classIcon = "clock-icon";
             }
-            else if(status == 2) {
+            else if (status == 2) {
                 //classIcon = "fa fa-spinner fa-spin";
                 classIcon = "progress-icon fa-spin";
             }
-            else if(status == 0) {
+            else if (status == 0) {
                 //classIcon = "fa fa-check-circle";
                 classIcon = "success-icon";
             }
-            else if(status == -1) {
+            else if (status == -1) {
                 classIcon = "failed-icon fa fa-exclamation";
             }
             return classIcon;
@@ -90,11 +90,11 @@
         vm.functional = [];
         var currentIteration = {};
 
-        onBoardingService.getOnBoardingSteps().then(function(response) {
+        onBoardingService.getOnBoardingSteps().then(function (response) {
 
             var operTypeList = response.data.operTypeList;
-            for(var i = 0; i < operTypeList.length; i++) {
-                
+            for (var i = 0; i < operTypeList.length; i++) {
+
                 switch (operTypeList[i].operTypeId) {
                     case "validation":
                         vm.validation = operTypeList[i];
@@ -110,13 +110,13 @@
                         break;
                 }
             }
-            currentIteration = {"list":vm.validation, "item":0};
+            currentIteration = { "list": vm.validation, "item": 0 };
 
             updateStepStatus();
         });
 
         function addDefaultStatus(listArr) {
-            for(var index = 0; index < listArr.oper.length; index++) {
+            for (var index = 0; index < listArr.oper.length; index++) {
                 listArr.oper[index].status = 1;
             }
         }
@@ -132,7 +132,7 @@
             var operTypeId = currentIteration.list["operTypeId"];
             var operId = currentIteration.list.oper[currentIteration.item].operId;
 
-            if(operTypeId == "validation" || operTypeId == "lifecycletest") {
+            if (operTypeId == "validation" || operTypeId == "lifecycletest") {
                 updateView(0);
             }
             else {
@@ -150,15 +150,15 @@
 
         function updateView(stepStatus) {
             var listIterFinished = false;
-            if(stepStatus == 0) {
+            if (stepStatus == 0) {
                 currentIteration.list.oper[currentIteration.item].status = stepStatus;
                 //Success, go to next step
-                if(currentIteration.list.oper.length - 1 > currentIteration.item) {
+                if (currentIteration.list.oper.length - 1 > currentIteration.item) {
                     currentIteration.item++;
                 }
                 else {
                     //Choose next list
-                    if(currentIteration.list == vm.validation){
+                    if (currentIteration.list == vm.validation) {
                         //First list is completed
                         $(".onboardProgress .progress1 .progressDiv").addClass("progressed");
                         $(".onboardProgress .progress1 .roundProg").addClass("progressed");
@@ -166,7 +166,7 @@
                         currentIteration.item = 0*/
 
                         listIterFinished = true;
-                        $state.go('home.onboardingSuccess', {"csarId": csarId});
+                        $state.go('home.onboardingSuccess', { "csarId": csarId });
                     }
                     /*else if(currentIteration.list == vm.lifeCycle){
                         //Second list is completed
@@ -185,55 +185,55 @@
                     }*/
                 }
             }
-            else if(stepStatus == -1) {
+            else if (stepStatus == -1) {
                 //Failed case
                 currentIteration.list.oper[currentIteration.item].status = stepStatus;
                 listIterFinished = true;
             }
 
-            if(!listIterFinished) {
+            if (!listIterFinished) {
                 updateStepStatus();
             }
         }
 
-		vm.displayValidationDialog = function(){
-			$mdDialog.show({
-				controller: 'validationOnboardingCtrl',
-				templateUrl: vnfConfig.modulePath.home + '/serviceUpload/onboarding/validation/view.html',
-				controllerAs: 'vm'
-			})
-			.then(function(answer) {
-				vm.getFeatureList();
-				// vm.status = 'You said the information was "' + answer + '".';
-			}, function() {
-				// vm.status = 'You cancelled the dialog.';
-			});
-		}
-		vm.displayLifecycleDialog = function(){
-			$mdDialog.show({
-				controller: 'lifeCycleOnboardingCtrl',
-				templateUrl: vnfConfig.modulePath.home + '/serviceUpload/onboarding/lifeCycle/view.html',
-				controllerAs: 'vm'
-			})
-			.then(function(answer) {
-				vm.getFeatureList();
-				// vm.status = 'You said the information was "' + answer + '".';
-			}, function() {
-				// vm.status = 'You cancelled the dialog.';
-			});
-		}
-		vm.displayFunctionalTestDialog  = function(){
-			$mdDialog.show({
-				controller: 'functionalTestOnboardingCtrl',
-				templateUrl: vnfConfig.modulePath.home + '/serviceUpload/onboarding/functionalTest/view.html',
-				controllerAs: 'vm'
-			})
-			.then(function(answer) {
-				vm.getFeatureList();
-				// vm.status = 'You said the information was "' + answer + '".';
-			}, function() {
-				// vm.status = 'You cancelled the dialog.';
-			});
-		}
+        vm.displayValidationDialog = function () {
+            $mdDialog.show({
+                controller: 'validationOnboardingCtrl',
+                templateUrl: vnfConfig.modulePath.home + '/serviceUpload/onboarding/validation/view.html',
+                controllerAs: 'vm'
+            })
+                .then(function (answer) {
+                    vm.getFeatureList();
+                    // vm.status = 'You said the information was "' + answer + '".';
+                }, function () {
+                    // vm.status = 'You cancelled the dialog.';
+                });
+        }
+        vm.displayLifecycleDialog = function () {
+            $mdDialog.show({
+                controller: 'lifeCycleOnboardingCtrl',
+                templateUrl: vnfConfig.modulePath.home + '/serviceUpload/onboarding/lifeCycle/view.html',
+                controllerAs: 'vm'
+            })
+                .then(function (answer) {
+                    vm.getFeatureList();
+                    // vm.status = 'You said the information was "' + answer + '".';
+                }, function () {
+                    // vm.status = 'You cancelled the dialog.';
+                });
+        }
+        vm.displayFunctionalTestDialog = function () {
+            $mdDialog.show({
+                controller: 'functionalTestOnboardingCtrl',
+                templateUrl: vnfConfig.modulePath.home + '/serviceUpload/onboarding/functionalTest/view.html',
+                controllerAs: 'vm'
+            })
+                .then(function (answer) {
+                    vm.getFeatureList();
+                    // vm.status = 'You said the information was "' + answer + '".';
+                }, function () {
+                    // vm.status = 'You cancelled the dialog.';
+                });
+        }
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.html
index 0769f5b..92fc87e 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.html
@@ -15,7 +15,7 @@
             </button>
         </div>
         <div>
-            <a class="backLink" ng-click="vm.return()">{{'common.actions.backToList' | translate}}</a>
+            <a class="vnflink" ng-click="vm.return()">{{'common.actions.backToList' | translate}}</a>
         </div>
     </div>
 </div>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.js
index 584237f..4741499 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/onboardingSuccess.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('onBoardingSuccessCtrl', onBoardingSuccess);
 
-    onBoardingSuccess.$inject = [ 'vnfConfig', 'baseUrlConfig', 'homeService', '$state', '$stateParams'];
+    onBoardingSuccess.$inject = ['vnfConfig', 'baseUrlConfig', 'homeService', '$state', '$stateParams'];
 
     /*
      * recommend
@@ -39,36 +39,36 @@
     function onBoardingSuccess(vnfConfig, baseUrlConfig, homeService, $state, $stateParams) {
         var vm = this;
         console.log("onBoardingSuccess");
-        vm.services= [], vm.serviceDetails;
+        vm.services = [], vm.serviceDetails;
 
         var csarId = $stateParams.csarId;
-        if(!csarId) {
+        if (!csarId) {
             $state.go("home.marketplace", {});
-			return;
+            return;
         }
 
-        vm.return = function() {
+        vm.return = function () {
             $state.go('home.marketplace', {}, {
                 reload: true
             });
         }
-        vm.showDetailPage = function() {
-            homeService.getFeaturesList().then(function(response) {
+        vm.showDetailPage = function () {
+            homeService.getFeaturesList().then(function (response) {
                 for (var i = 0; i < response.data.length; i++) {
                     response.data[i].createTime = new Date(response.data[i].createTime);
                     response.data[i].modifyTime = new Date(response.data[i].modifyTime);
                 }
                 vm.services = response.data;
 
-                for(var j = 0; j < response.data.length; j++) {
-                    if(response.data[j].csarId == csarId) {
+                for (var j = 0; j < response.data.length; j++) {
+                    if (response.data[j].csarId == csarId) {
                         vm.serviceDetails = response.data[j];
                         break;
                     }
                 }
 
                 $state.go("home.serviceDetails.validation", {
-                    serviceDetails : vm.serviceDetails
+                    serviceDetails: vm.serviceDetails
                 });
             });
         }
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/validationCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/validationCtrl.js
index 6eb746e..6937239 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/validationCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/validationCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,7 +28,7 @@
         .module('vnfmarket')
         .controller('validationOnboardingCtrl', validation);
 
-    validation.$inject = [ 'vnfConfig', 'baseUrlConfig', '$mdDialog'];
+    validation.$inject = ['vnfConfig', 'baseUrlConfig', '$mdDialog'];
 
     /*
      * recommend
@@ -50,7 +50,7 @@
 
         vm.pagination = [5, 10, 15, {
             label: 'All',
-            value: function() {
+            value: function () {
                 return vm.validations.length ? vm.validations.length : 0;
             }
         }];
@@ -72,32 +72,32 @@
             limitSelect: true,
             pageSelect: true
         };
-        vm.getValidations = function(){
+        vm.getValidations = function () {
             console.log(vm.validations)
         }
-		
-		
-		vm.hide = function(answer) {
+
+
+        vm.hide = function (answer) {
             $mdDialog.hide(answer);
         };
 
-        vm.cancel = function() {
+        vm.cancel = function () {
             $mdDialog.cancel();
         };
 
-        vm.validations =  [{
-                "step" : "Validation step-1",
-                "parameter" : "Validation Parameter1",
-                "result" : "pass"
-            },
-            {
-                "step" : "Validation step-2",
-                "parameter" : "Validation Parameter2",
-                "result" : "pass"
-            },{
-                "step" : "Validation step-3",
-                "parameter" : "Validation Parameter3",
-                "result" : "pass"
-            }];
+        vm.validations = [{
+            "step": "Validation step-1",
+            "parameter": "Validation Parameter1",
+            "result": "pass"
+        },
+        {
+            "step": "Validation step-2",
+            "parameter": "Validation Parameter2",
+            "result": "pass"
+        }, {
+            "step": "Validation step-3",
+            "parameter": "Validation Parameter3",
+            "result": "pass"
+        }];
     }
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/view.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/view.html
index 0411b07..6cc2c75 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/view.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/onboarding/validation/view.html
@@ -1,51 +1,53 @@
 <md-dialog aria-label="Upload Service dialog" flex="80" id="uploadDialog" ng-cloak>
-    <md-toolbar class="md-hue-3 dialogHeader">
-        <div class="md-toolbar-tools">
-            <h2>{{'common.tabs.validation.title' | translate}}</h2>
-            <span flex></span>
-            <button class="btnTransparency" ng-click="vm.cancel()">
-                    <i class="fa fa-close fa-sm" aria-hidden="true"></i>
-            </button>
-        </div>
-    </md-toolbar>
+	<md-toolbar class="md-hue-3 dialogHeader">
+		<div class="md-toolbar-tools">
+			<h2>{{'common.tabs.validation.title' | translate}}</h2>
+			<span flex></span>
+			<button class="btnTransparency" ng-click="vm.cancel()">
+				<i class="fa fa-close fa-sm" aria-hidden="true"></i>
+			</button>
+		</div>
+	</md-toolbar>
 
 	<md-card flex="100" class="nomargin md-padding">
-			<md-table-container>
-				<table md-table>
-					<thead md-head md-order="vm.filter.name" md-on-reorder="vm.getValidations">
-						<tr md-row>
-							<th md-column class="fontSize"  md-order-by="step">
-								<md-tooltip md-direction="top">{{'common.tabs.validation.stepTHead' | translate}}</md-tooltip>
-                                {{'common.tabs.validation.stepTHead' | translate}}
-							</th>
-							<th md-column class="fontSize"   md-order-by="parameter">
-								<md-tooltip md-direction="top">{{'common.tabs.validation.ParamTHead' | translate}}</md-tooltip>
-								{{'common.tabs.validation.ParamTHead' | translate}}
-							</th>
-							<th md-column class="fontSize"    md-order-by="result">
-								<md-tooltip md-direction="top">{{'common.tabs.validation.ResultTHead' | translate}}</md-tooltip>
-								{{'common.tabs.validation.ResultTHead' | translate}}
-							</th>
-							
-						</tr>
-					</thead>
-					<tbody md-body>
-						<tr md-row md-select="dessert" md-select-id="name" md-auto-select ng-repeat="validation in vm.validations | orderBy: vm.filter.name |
+		<md-table-container>
+			<table md-table>
+				<thead md-head md-order="vm.filter.name" md-on-reorder="vm.getValidations">
+					<tr md-row>
+						<th md-column class="fontSize" md-order-by="step">
+							<md-tooltip md-direction="top">{{'common.tabs.validation.stepTHead' | translate}}</md-tooltip>
+							{{'common.tabs.validation.stepTHead' | translate}}
+						</th>
+						<th md-column class="fontSize" md-order-by="parameter">
+							<md-tooltip md-direction="top">{{'common.tabs.validation.ParamTHead' | translate}}</md-tooltip>
+							{{'common.tabs.validation.ParamTHead' | translate}}
+						</th>
+						<th md-column class="fontSize" md-order-by="result">
+							<md-tooltip md-direction="top">{{'common.tabs.validation.ResultTHead' | translate}}</md-tooltip>
+							{{'common.tabs.validation.ResultTHead' | translate}}
+						</th>
+
+					</tr>
+				</thead>
+				<tbody md-body>
+					<tr md-row md-select="dessert" md-select-id="name" md-auto-select ng-repeat="validation in vm.validations | orderBy: vm.filter.name |
 						 limitTo: vm.paginationQuery.limit: (vm.paginationQuery.page - 1) * vm.paginationQuery.limit track by $index">
-							<td md-cell>
-								<md-tooltip md-direction="top">{{validation.step}}</md-tooltip>{{validation.step}}
-							</td>
-							<td md-cell>
-								<md-tooltip md-direction="top">{{validation.parameter}}</md-tooltip>{{validation.parameter}}
-							</td>
-							<td md-cell>
-								<md-tooltip md-direction="top">{{validation.result}}</md-tooltip>{{validation.result}}
-							</td>
-							
-						</tr>
-					</tbody>
-				</table>
-			</md-table-container>
-			<md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page" md-total="{{vm.validations.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink" md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
+						<td md-cell>
+							<md-tooltip md-direction="top">{{validation.step}}</md-tooltip>{{validation.step}}
+						</td>
+						<td md-cell>
+							<md-tooltip md-direction="top">{{validation.parameter}}</md-tooltip>{{validation.parameter}}
+						</td>
+						<td md-cell>
+							<md-tooltip md-direction="top">{{validation.result}}</md-tooltip>{{validation.result}}
+						</td>
+
+					</tr>
+				</tbody>
+			</table>
+		</md-table-container>
+		<md-table-pagination class="pagination-class" md-limit="vm.paginationQuery.limit" md-limit-options="vm.pagination" md-page="vm.paginationQuery.page"
+		 md-total="{{vm.validations.length}}" md-page-select="vm.paginationOptions.pageSelect" md-boundary-links="vm.paginationOptions.boundaryLink"
+		 md-label="{ page : 'Page', RowPerPage:'row per page', of:'of'}"></md-table-pagination>
 	</md-card>
 </md-dialog>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUpload.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUpload.html
index 2c813fb..9c864f0 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUpload.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUpload.html
@@ -17,11 +17,11 @@
 
     <md-toolbar class="md-hue-3 dialogHeader">
         <div class="md-toolbar-tools" id="uploadStyle">
-            <h2  ng-if="vm.isUpload" >{{'module.marketplace.serviceUpload.title' | translate}}</h2>
-			<h2  ng-if="!vm.isUpload" >{{'module.marketplace.serviceUpload.updateTitle' | translate}}</h2>
+            <h2 ng-if="vm.isUpload">{{'module.marketplace.serviceUpload.title' | translate}}</h2>
+            <h2 ng-if="!vm.isUpload">{{'module.marketplace.serviceUpload.updateTitle' | translate}}</h2>
             <span flex></span>
             <button class="btnTransparency" ng-click="vm.cancel()" ng-hide="vm.status == 'progress'">
-                    <i class="fa fa-close fa-sm" aria-hidden="true"></i>
+                <i class="fa fa-close fa-sm" aria-hidden="true"></i>
             </button>
         </div>
     </md-toolbar>
@@ -35,7 +35,7 @@
                         <label for="file" class="btn btnDefault"> {{'common.actions.add' | translate}} </label>
                         <label>
                             <span ng-if="!vm.service.file"> {{'module.marketplace.serviceUpload.fields.fileUpload.noFileSelected' | translate}}</span>
-                            <span ng-if="vm.service.file">  {{ vm.service.file.name}}</span>
+                            <span ng-if="vm.service.file"> {{ vm.service.file.name}}</span>
                         </label>
                     </div>
                     <input class="hidden" id="file" type="file" file-upload="vm.service.file" md-asterisk accept=".csar">
@@ -43,18 +43,18 @@
                 </div>
 
                 <div>
-                        <label for="shortDesc" class="labels">{{'module.marketplace.serviceUpload.fields.shortDescription.placeholder' | translate}}</label>
-                        <input ng-model="vm.service.shortDesc" type="text" id="shortDesc" name="shortDesc">
+                    <label for="shortDesc" class="labels">{{'module.marketplace.serviceUpload.fields.shortDescription.placeholder' | translate}}</label>
+                    <input ng-model="vm.service.shortDesc" type="text" id="shortDesc" name="shortDesc">
                 </div>
                 <div>
-                    
-                        <label class="labels">{{'module.marketplace.serviceUpload.fields.details.placeholder' | translate}}</label>
-                        <textarea name="details" ng-model="vm.service.details" maxlength="150" rows="3" md-select-on-focus></textarea>
+
+                    <label class="labels">{{'module.marketplace.serviceUpload.fields.details.placeholder' | translate}}</label>
+                    <textarea name="details" ng-model="vm.service.details" maxlength="150" rows="3" md-select-on-focus></textarea>
                 </div>
                 <div>
-                   
-                        <label for="remarks" class="labels">{{'module.marketplace.serviceUpload.fields.remarks.placeholder' | translate}}</label>
-                        <input ng-model="vm.service.remarks" type="text" id="remarks" name="remarks">
+
+                    <label for="remarks" class="labels">{{'module.marketplace.serviceUpload.fields.remarks.placeholder' | translate}}</label>
+                    <input ng-model="vm.service.remarks" type="text" id="remarks" name="remarks">
                 </div>
             </div>
         </md-dialog-content>
@@ -76,7 +76,10 @@
                     </div>
                     <md-progress-linear md-mode="determinate" value="{{vm.apiInfo}}"></md-progress-linear>
                     <h4 class="text-center"> {{vm.apiInfo}} % </h4>
-                    <span class="text-center" ng-if="vm.status == 'success'">{{'module.marketplace.serviceUpload.fields.funcTestReport.label' | translate}} <a href="{{vm.funcTestReportUrl}}" target="_blank">{{'common.actions.clickHere' | translate}}</a></span>
+                    <span class="text-center" ng-if="vm.status == 'success'">{{'module.marketplace.serviceUpload.fields.funcTestReport.label' | translate}}
+                        <a href="{{vm.funcTestReportUrl}}"
+                            target="_blank">{{'common.actions.clickHere' | translate}}</a>
+                    </span>
                 </div>
                 <div flex="25" layout="column">
                 </div>
@@ -88,19 +91,21 @@
 
     <md-dialog-actions layout="row" ng-show="vm.status == 'Idle'" class="marginAuto">
         <!-- <span flex></span> -->
-        
-		<button ng-if="!vm.isUpload" class="md-raised btn btnPrimary btnPrimaryPadding btnSpacing" ng-click="vm.answer('Uploaded')" ng-disabled="!vm.service.file">
+
+        <button ng-if="!vm.isUpload" class="md-raised btn btnPrimary btnPrimaryPadding btnSpacing" ng-click="vm.answer('Uploaded')"
+            ng-disabled="!vm.service.file">
             {{'common.actions.update' | translate}}
         </button>
-		
-        <button ng-if="vm.isUpload" class="md-raised btn btnPrimary btnPrimaryPadding btnSpacing" ng-click="vm.answer('Uploaded')" ng-disabled="!vm.service.file">
+
+        <button ng-if="vm.isUpload" class="md-raised btn btnPrimary btnPrimaryPadding btnSpacing" ng-click="vm.answer('Uploaded')"
+            ng-disabled="!vm.service.file">
             {{'common.actions.upload' | translate}}
         </button>
 
         <button class="md-raised btn btnDefault btnPrimaryPadding btnSpacing" ng-click="vm.cancel()">
             {{'common.actions.close' | translate}}
         </button>
-       
+
 
     </md-dialog-actions>
     <md-dialog-actions class="marginAuto" layout="row" ng-show="vm.status == 'success'">
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadCtrl.js
index 7a2fdaa..6d141ce 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -36,24 +36,24 @@
      * and bindable members up top.
      */
 
-    function ServiceUpload(serviceUploadService, $scope, vnfConfig, $mdDialog, $mdToast, $rootScope, $interval, baseUrlConfig,$state, isUpload, csarId) {
+    function ServiceUpload(serviceUploadService, $scope, vnfConfig, $mdDialog, $mdToast, $rootScope, $interval, baseUrlConfig, $state, isUpload, csarId) {
         var vm = this;
-		vm.isUpload = isUpload;
-		vm.csarId = csarId
+        vm.isUpload = isUpload;
+        vm.csarId = csarId
         vm.apiInfo = 0;
         vm.status = "Idle";
         vm.promise = null;
         vm.service = {};
 
-        vm.hide = function(answer) {
+        vm.hide = function (answer) {
             $mdDialog.hide(answer);
         };
 
-        vm.cancel = function() {
+        vm.cancel = function () {
             $mdDialog.cancel();
         };
 
-        vm.answer = function(answer) {
+        vm.answer = function (answer) {
             vm.status = "progress";
             var dataObj = vm.service,
                 file = vm.service.file,
@@ -70,31 +70,31 @@
                 "Content-Type": undefined
             }
 
-            vm.promise = $interval(function() {
+            vm.promise = $interval(function () {
                 if ($rootScope.progressBar >= 80 && vm.status !== "success") {
                     vm.apiInfo = 80;
                 } else {
                     vm.apiInfo = parseInt($rootScope.progressBar, 10);
                 }
             }, 500);
-			
-			if(vm.isUpload){
-				var filename = vm.service.file.name;
-				serviceUploadService.postServiceUpload(fd, headers)
-					.then(function(response) {
-						vm.hide("Uploading")
-						$state.go('home.onboarding', {"csarId": response.data.csarId, "csarName": filename});
-					});
-			} else {
-				serviceUploadService.repostServiceUpload(fd, headers, vm.csarId)
-					.then(function(response) {
-						vm.hide("Uploading")
-						$state.go('home.onboarding', {"csarId": response.data.csarId, "csarName": filename});
-					});
-			}
+
+            if (vm.isUpload) {
+                var filename = vm.service.file.name;
+                serviceUploadService.postServiceUpload(fd, headers)
+                    .then(function (response) {
+                        vm.hide("Uploading")
+                        $state.go('home.onboarding', { "csarId": response.data.csarId, "csarName": filename });
+                    });
+            } else {
+                serviceUploadService.repostServiceUpload(fd, headers, vm.csarId)
+                    .then(function (response) {
+                        vm.hide("Uploading")
+                        $state.go('home.onboarding', { "csarId": response.data.csarId, "csarName": filename });
+                    });
+            }
         };
 
-        $scope.$on("$destroy", function() {
+        $scope.$on("$destroy", function () {
             if (vm.promise) {
                 $interval.cancel(vm.promise);
             }
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadService.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadService.js
index a938c09..458a98b 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/home/serviceUpload/serviceUploadService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -32,7 +32,7 @@
     function serviceUpload($q, vnfConfig, httpService) {
         return {
             postServiceUpload: postServiceUpload,
-			repostServiceUpload: repostServiceUpload
+            repostServiceUpload: repostServiceUpload
         };
 
         function postServiceUpload(data, headers) {
@@ -42,25 +42,25 @@
 
             var defer = $q.defer()
             httpService.apiRequestWithProgress(url, method, apiData, headers)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
         }
-		
-		function repostServiceUpload(data, headers, csarId) {
+
+        function repostServiceUpload(data, headers, csarId) {
             var url = vnfConfig.api.home.repostServiceUpload.url,
                 method = vnfConfig.api.home.repostServiceUpload.method,
                 apiData = data;
-			url = url.replace(":csarId", csarId)
+            url = url.replace(":csarId", csarId)
 
             var defer = $q.defer()
             httpService.apiRequestWithProgress(url, method, apiData, headers)
-                .then(function(response) {
+                .then(function (response) {
                     defer.resolve(response);
-                }, function(error) {
+                }, function (error) {
                     defer.reject(error);
                 });
             return defer.promise;
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/main-page.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/main-page.html
index 57920a1..4821524 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/main-page.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/main-page.html
@@ -13,64 +13,64 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-    <md-toolbar ng-show="!showSearch">
-        <div class="md-toolbar-tools">
-            <md-button ng-click="layout.toggleSidenav('left')" hide-gt-md aria-label="Menu">
-                <ng-md-icon icon="menu"></ng-md-icon>
+<md-toolbar ng-show="!showSearch">
+    <div class="md-toolbar-tools">
+        <md-button ng-click="layout.toggleSidenav('left')" hide-gt-md aria-label="Menu">
+            <ng-md-icon icon="menu"></ng-md-icon>
+        </md-button>
+        <h3>
+            <a href="/">vnfmarket</a>
+        </h3>
+        <span flex></span>
+        <md-button aria-label="Search" ng-click="showSearch = !showSearch">
+            <ng-md-icon icon="search"></ng-md-icon>
+        </md-button>
+        <md-menu>
+            <md-button aria-label="Open Settings" ng-click="layout.openMenu($mdOpenMenu, $event)">
+                <md-icon> more_vert </md-icon>
             </md-button>
-            <h3>
-                <a href="/">vnfmarket</a>
-            </h3>
-            <span flex></span>
-            <md-button aria-label="Search" ng-click="showSearch = !showSearch">
-                <ng-md-icon icon="search"></ng-md-icon>
-            </md-button>
-            <md-menu>
-                <md-button aria-label="Open Settings" ng-click="layout.openMenu($mdOpenMenu, $event)">
-                            <md-icon> more_vert </md-icon>
-                </md-button>
-                <md-menu-content width="4">
-                    <md-menu-item>
-                        <md-button ng-click="layout.changeProfile($event)">
-                            <md-icon>face</md-icon>
-                            Profile
-                        </md-button>
-                    </md-menu-item>
-                    <md-menu-item>
-                        <md-button ng-click="layout.changePassword()">
-                            <md-icon>lock</md-icon>
-                            Password
-                        </md-button>
-                    </md-menu-item>
-                    <md-menu-divider></md-menu-divider>
-                    <md-menu-item>
-                        <md-button ng-click="layout.logOut()">
-                            <md-icon>power_settings_new</md-icon>
-                            Logout
-                        </md-button>
-                    </md-menu-item>
-                </md-menu-content>
-            </md-menu>
-        </div>
-    </md-toolbar>
-    <md-toolbar class="md-hue-1" ng-show="showSearch">
-        <div class="md-toolbar-tools">
-            <md-button ng-click="showSearch = !showSearch" aria-label="Back">
-                <ng-md-icon icon="arrow_back"></ng-md-icon>
-            </md-button>
-            <h3 flex="10">
-                Back
-            </h3>
-            <md-input-container md-theme="input" flex>
-                <label>&nbsp;</label>
-                <input ng-model="search.who" placeholder="Search ...">
-            </md-input-container>
+            <md-menu-content width="4">
+                <md-menu-item>
+                    <md-button ng-click="layout.changeProfile($event)">
+                        <md-icon>face</md-icon>
+                        Profile
+                    </md-button>
+                </md-menu-item>
+                <md-menu-item>
+                    <md-button ng-click="layout.changePassword()">
+                        <md-icon>lock</md-icon>
+                        Password
+                    </md-button>
+                </md-menu-item>
+                <md-menu-divider></md-menu-divider>
+                <md-menu-item>
+                    <md-button ng-click="layout.logOut()">
+                        <md-icon>power_settings_new</md-icon>
+                        Logout
+                    </md-button>
+                </md-menu-item>
+            </md-menu-content>
+        </md-menu>
+    </div>
+</md-toolbar>
+<md-toolbar class="md-hue-1" ng-show="showSearch">
+    <div class="md-toolbar-tools">
+        <md-button ng-click="showSearch = !showSearch" aria-label="Back">
+            <ng-md-icon icon="arrow_back"></ng-md-icon>
+        </md-button>
+        <h3 flex="10">
+            Back
+        </h3>
+        <md-input-container md-theme="input" flex>
+            <label>&nbsp;</label>
+            <input ng-model="search.who" placeholder="Search ...">
+        </md-input-container>
 
-        </div>
-    </md-toolbar>
-    <md-content class="md-blue-grey-theme" flex md-scroll-y>
-        <ui-view layout="column" layout-fill layout-padding>
+    </div>
+</md-toolbar>
+<md-content class="md-blue-grey-theme" flex md-scroll-y>
+    <ui-view layout="column" layout-fill layout-padding>
 
 
-        </ui-view>
-    </md-content>
+    </ui-view>
+</md-content>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/mainPageCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/mainPageCtrl.js
index c1430ff..d82ce46 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/mainPageCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/main-page/mainPageCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- (function () {
+(function () {
 	'use strict';
 
 	/**
@@ -36,7 +36,7 @@
 	* and bindable members up top.
 	*/
 
-	function Layout($mdSidenav, $cookies, $state, $mdToast, $mdDialog ) {
+	function Layout($mdSidenav, $cookies, $state, $mdToast, $mdDialog) {
 		/*jshint validthis: true */
 		var vm = this;
 
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenav.html b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenav.html
index 36aebb6..99c3032 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenav.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenav.html
@@ -13,34 +13,32 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-        <md-toolbar class="md-tall md-hue-2">
-            <div layout="column" class="md-toolbar-tools-bottom inset">
-                <div layout="row">
-                    <div flex="20">
-                        <img style="width: 36px; height: 36px; border-radius: 50%"
-                             actual-src="data:image/jpeg;base64,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"
-                             showloader="" loader-class="preload" loader-src="app/assets/images/loader.gif"
-                             src="data:image/jpeg;base64,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">
-                    </div>
-                    <div flex="80" style="margin-top: 10px;font-size: 1em;">
-                        <div></div>
-                    </div>
-                </div>
+<md-toolbar class="md-tall md-hue-2">
+    <div layout="column" class="md-toolbar-tools-bottom inset">
+        <div layout="row">
+            <div flex="20">
+                <img style="width: 36px; height: 36px; border-radius: 50%" actual-src="data:image/jpeg;base64,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"
+                    showloader="" loader-class="preload" loader-src="app/assets/images/loader.gif" src="data:image/jpeg;base64,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">
             </div>
-        </md-toolbar>
-        <md-list>
-            <md-list-item ng-repeat="item in vm.menu" ng-click="vm.navigateTo(item.link)" >
-                <div class="inset" ng-show="item.icon">
-                    <ng-md-icon icon="{{item.icon}}"></ng-md-icon>
-                </div>
-                <p> {{ item.name }}</p>
-            </md-list-item>
-            <md-divider></md-divider>
-            <md-subheader></md-subheader>
-            <md-list-item ng-repeat="item in vm.admin" ng-click="vm.showSettingsBottom($event)" >
-                <div class="inset">
-                    <ng-md-icon icon="{{item.icon}}"></ng-md-icon>
-                </div>
-                <p> {{ item.title }}</p>
-            </md-list-item>
-        </md-list>
+            <div flex="80" style="margin-top: 10px;font-size: 1em;">
+                <div></div>
+            </div>
+        </div>
+    </div>
+</md-toolbar>
+<md-list>
+    <md-list-item ng-repeat="item in vm.menu" ng-click="vm.navigateTo(item.link)">
+        <div class="inset" ng-show="item.icon">
+            <ng-md-icon icon="{{item.icon}}"></ng-md-icon>
+        </div>
+        <p> {{ item.name }}</p>
+    </md-list-item>
+    <md-divider></md-divider>
+    <md-subheader></md-subheader>
+    <md-list-item ng-repeat="item in vm.admin" ng-click="vm.showSettingsBottom($event)">
+        <div class="inset">
+            <ng-md-icon icon="{{item.icon}}"></ng-md-icon>
+        </div>
+        <p> {{ item.title }}</p>
+    </md-list-item>
+</md-list>
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenavCtrl.js b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenavCtrl.js
index 59bd9fa..5e17b5a 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenavCtrl.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/app/modules/layouts/side-nav/sidenavCtrl.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- (function () {
+(function () {
 	'use strict';
 
 	/**
@@ -26,7 +26,7 @@
 	angular
 		.module('vnfmarket')
 		.controller('SidenavCtrl', SidenavCtrl)
-		// .controller('SettingsCtrl', SettingsCtrl);
+	// .controller('SettingsCtrl', SettingsCtrl);
 
 	// Injecting Denpendencies
 
@@ -47,7 +47,7 @@
 			$mdSidenav(menuId).toggle();
 		};
 
-		vm.closeSidenav = function() {
+		vm.closeSidenav = function () {
 			$mdSidenav('left').close();
 		};
 
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/config/baseUrlConfig.js b/vnfmarket/src/main/webapp/vnfmarket/common/config/baseUrlConfig.js
index 72b9f5a..4b14d97 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/config/baseUrlConfig.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/config/baseUrlConfig.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -28,8 +28,8 @@
         .module('vnfmarket')
         .constant("baseUrlConfig", {
             "common": {
-                "ip" : "", //ses
-                "port" : "" //ses
+                "ip": "", //ses
+                "port": "" //ses
             }
         })
 })();
\ No newline at end of file
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/config/configuration.js b/vnfmarket/src/main/webapp/vnfmarket/common/config/configuration.js
index 33faa97..2adcc02 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/config/configuration.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/config/configuration.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -33,7 +33,7 @@
                         "url": "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars",
                         "method": "POST"
                     },
-					"repostServiceUpload": {
+                    "repostServiceUpload": {
                         "url": "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/:csarId/reupload",
                         "method": "POST"
                     },
@@ -53,15 +53,15 @@
                         "url": "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/:csarId",
                         "method": "GET"
                     },
-					"getFunctionTestDetails" : {
-						"url" : "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/:csarId/operresult?operTypeId=functiontest",
-						"method" : "GET"
-					},
-					"updateDownloadCount" :{
-						"url" : "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/:csarId/downloaded",
-						"method" : "GET"
-					},
-					"getOnBoardingSteps": {
+                    "getFunctionTestDetails": {
+                        "url": "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/:csarId/operresult?operTypeId=functiontest",
+                        "method": "GET"
+                    },
+                    "updateDownloadCount": {
+                        "url": "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/:csarId/downloaded",
+                        "method": "GET"
+                    },
+                    "getOnBoardingSteps": {
                         "url": "/onapapi/vnfsdk-marketplace/v1/PackageResource/csars/onboardsteps",
                         "method": "GET"
                     },
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/css/home.css b/vnfmarket/src/main/webapp/vnfmarket/common/css/home.css
index 820d46a..69e662c 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/css/home.css
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/css/home.css
@@ -13,68 +13,81 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#searchField {
-    position: relative;
-    top: 13px;
-    border-bottom-color:whitesmoke;
-    background-color:#858CA8;
-    height:33px;
-}
-.contentBackground{
-    background: white;
-}
-#homeToolbar form{
-    height: 33px;
-    /*background-color: lightgray;*/
-    margin: 0px;
+
+#searchField,
+#searchField:focus {
+	position: relative;
+	top: 11px !important;
+	border-bottom-color: whitesmoke;
+	background-color: #858ca8;
+	height: 31px !important;
+	line-height: 29px !important;
+	padding: 2px 2px 1px 2px !important;
+	border-bottom-width: 1px !important;
 }
 
-#searchFieldContainer{
-    padding-right:0;
-        top: -31px;
+#searchIcon,
+#cancelSearch {
+	background-color: #858ca8;
+	height: 29px;
+	position: relative;
+	top: -1.5px;
+	margin: 0px;
+}
+.hidden {
+	display: none;
 }
 
-.noMargin{
-	margin:0
+.contentBackground {
+	background: white;
+}
+#homeToolbar form {
+	height: 33px;
+	/*background-color: lightgray;*/
+	margin: 0px;
 }
 
-.iconMargin{
-	margin-right:8px;
+#searchFieldContainer {
+	padding-right: 0;
+	top: -31px;
 }
 
-@media (min-width : 600px) {
-    #gridView .layout-xs-column{
-        margin-bottom: 10px !important;
-    }
+.noMargin {
+	margin: 0;
 }
 
-
-@media (max-width : 600px) {
-    #gridView .layout-xs-column .iconMargin:not(.deletebutton){
-        margin-right:0px;
-        margin-bottom: 6px;
-    }
-
-    #gridView .layout-xs-column .downloadIcon{
-        margin-top: 6px;
-        margin-bottom: 6px;
-    }
+.iconMargin {
+	margin-right: 8px;
 }
 
-
-
-.iconAlignment{
-    position: relative;
-    bottom: 4px;
+@media (min-width: 600px) {
+	#gridView .layout-xs-column {
+		margin-bottom: 10px !important;
+	}
 }
 
+@media (max-width: 600px) {
+	#gridView .layout-xs-column .iconMargin:not(.deletebutton) {
+		margin-right: 0px;
+		margin-bottom: 6px;
+	}
 
-.gridViewMargin{
+	#gridView .layout-xs-column .downloadIcon {
+		margin-top: 6px;
+		margin-bottom: 6px;
+	}
+}
+
+.iconAlignment {
+	position: relative;
+	bottom: 4px;
+}
+
+.gridViewMargin {
 	margin: 0 1.6% 1% 1.6%;
-    padding: 0px 16px 0px 16px;
+	padding: 0px 16px 0px 16px;
 }
 
-
 /*.mdl-color-text--white {
     color: rgb(255,255,255) !important;
 }
@@ -102,7 +115,7 @@
 }*/
 
 .service-detail-tags .material-icons {
-    font-size: 16px !important;
+	font-size: 16px !important;
 }
 
 /*
@@ -161,845 +174,831 @@
   .mdl-chip--contact {
     padding-left: 0; }*/
 
-    .no-padding {
-    padding: 0 !important;
+.no-padding {
+	padding: 0 !important;
 }
 
 .mdl-card__title {
-    -webkit-align-items: center;
-    -ms-flex-align: center;
-    align-items: center;
-    color: rgb(0,0,0);
-    display: block;
-    display: -webkit-flex;
-    display: -ms-flexbox;
-    display: flex;
-    -webkit-justify-content: stretch;
-    -ms-flex-pack: stretch;
-    justify-content: stretch;
-    line-height: normal;
-    padding: 16px 16px;
-    -webkit-perspective-origin: 165px 56px;
-    perspective-origin: 165px 56px;
-    -webkit-transform-origin: 165px 56px;
-    transform-origin: 165px 56px;
-    box-sizing: border-box;
+	-webkit-align-items: center;
+	-ms-flex-align: center;
+	align-items: center;
+	color: rgb(0, 0, 0);
+	display: block;
+	display: -webkit-flex;
+	display: -ms-flexbox;
+	display: flex;
+	-webkit-justify-content: stretch;
+	-ms-flex-pack: stretch;
+	justify-content: stretch;
+	line-height: normal;
+	padding: 16px 16px;
+	-webkit-perspective-origin: 165px 56px;
+	perspective-origin: 165px 56px;
+	-webkit-transform-origin: 165px 56px;
+	transform-origin: 165px 56px;
+	box-sizing: border-box;
 }
 
 .mdl-card__title-text {
-    -webkit-align-self: flex-end;
-    -ms-flex-item-align: end;
-    align-self: flex-end;
-    color: inherit;
-    display: block;
-    display: -webkit-flex;
-    display: -ms-flexbox;
-    display: flex;
-    font-size: 24px;
-    font-weight: 300;
-    line-height: normal;
-    overflow: hidden;
-    -webkit-transform-origin: 149px 48px;
-    transform-origin: 149px 48px;
-    margin: 0;
+	-webkit-align-self: flex-end;
+	-ms-flex-item-align: end;
+	align-self: flex-end;
+	color: inherit;
+	display: block;
+	display: -webkit-flex;
+	display: -ms-flexbox;
+	display: flex;
+	font-size: 24px;
+	font-weight: 300;
+	line-height: normal;
+	overflow: hidden;
+	-webkit-transform-origin: 149px 48px;
+	transform-origin: 149px 48px;
+	margin: 0;
 }
 
 .mdl-button--primary.mdl-button--primary {
-    color: rgb(33,150,243);
+	color: rgb(33, 150, 243);
 }
 
 .mdl-button {
-    background: transparent;
-    border: none;
-    border-radius: 2px;
-    color: rgb(0,0,0);
-    position: relative;
-    height: 36px;
-    margin: 0;
-    min-width: 64px;
-    padding: 0 16px;
-    display: inline-block;
-    font-family: "Roboto", "Helvetica", "Arial", sans-serif;
-    font-size: 14px;
-    font-weight: 500;
-    text-transform: uppercase;
-    line-height: 1;
-    letter-spacing: 0;
-    overflow: hidden;
-    will-change: box-shadow;
-    transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
-    outline: none;
-    cursor: pointer;
-    text-decoration: none;
-    text-align: center;
-    line-height: 36px;
-    vertical-align: middle;
+	background: transparent;
+	border: none;
+	border-radius: 2px;
+	color: rgb(0, 0, 0);
+	position: relative;
+	height: 36px;
+	margin: 0;
+	min-width: 64px;
+	padding: 0 16px;
+	display: inline-block;
+	font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+	font-size: 14px;
+	font-weight: 500;
+	text-transform: uppercase;
+	line-height: 1;
+	letter-spacing: 0;
+	overflow: hidden;
+	will-change: box-shadow;
+	transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1),
+		background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
+		color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+	outline: none;
+	cursor: pointer;
+	text-decoration: none;
+	text-align: center;
+	line-height: 36px;
+	vertical-align: middle;
 }
 
 .mdl-layout-spacer {
-    -webkit-flex-grow: 1;
-    -ms-flex-positive: 1;
-    flex-grow: 1;
+	-webkit-flex-grow: 1;
+	-ms-flex-positive: 1;
+	flex-grow: 1;
 }
 
 .mdl-button--primary.mdl-button--primary {
-    color: rgb(33,150,243);
+	color: rgb(33, 150, 243);
 }
 
 .mdl-button {
-    background: transparent;
-    border: none;
-    border-radius: 2px;
-    color: rgb(0,0,0);
-    position: relative;
-    height: 36px;
-    margin: 0;
-    min-width: 64px;
-    padding: 0 16px;
-    display: inline-block;
-    font-family: "Roboto", "Helvetica", "Arial", sans-serif;
-    font-size: 14px;
-    font-weight: 500;
-    text-transform: uppercase;
-    line-height: 1;
-    letter-spacing: 0;
-    overflow: hidden;
-    will-change: box-shadow;
-    transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
-    outline: none;
-    cursor: pointer;
-    text-decoration: none;
-    text-align: center;
-    line-height: 36px;
-    vertical-align: middle;
+	background: transparent;
+	border: none;
+	border-radius: 2px;
+	color: rgb(0, 0, 0);
+	position: relative;
+	height: 36px;
+	margin: 0;
+	min-width: 64px;
+	padding: 0 16px;
+	display: inline-block;
+	font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+	font-size: 14px;
+	font-weight: 500;
+	text-transform: uppercase;
+	line-height: 1;
+	letter-spacing: 0;
+	overflow: hidden;
+	will-change: box-shadow;
+	transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1),
+		background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
+		color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+	outline: none;
+	cursor: pointer;
+	text-decoration: none;
+	text-align: center;
+	line-height: 36px;
+	vertical-align: middle;
 }
 
 .mdl-button .material-icons {
-    vertical-align: middle;
+	vertical-align: middle;
 }
 
 .mdl-button .material-icons {
-    vertical-align: middle;
+	vertical-align: middle;
 }
 
 #emptyList {
-    padding: 30px;
+	padding: 30px;
 }
 
 .mdl-card__actions.service-actions {
-    border-top: 1px solid rgba(0, 0, 0, 0.12);
-    margin: 0;
+	border-top: 1px solid rgba(0, 0, 0, 0.12);
+	margin: 0;
 }
 
 .mdl-card__supporting-text.service-desc {
-    display: -webkit-box;
-    -webkit-line-clamp: 3;
-    -webkit-box-orient: vertical;
-    overflow: hidden;
-    /* text-overflow: ellipsis; */
-    margin-bottom: 14px;
-    height: 60px;
+	display: -webkit-box;
+	-webkit-line-clamp: 3;
+	-webkit-box-orient: vertical;
+	overflow: hidden;
+	/* text-overflow: ellipsis; */
+	margin-bottom: 14px;
+	height: 60px;
 }
 
-
 .pagination-class .label {
-   color: rgba(0, 0, 0, 0.54) !important;
+	color: rgba(0, 0, 0, 0.54) !important;
 }
 
-md-card-header{
-    padding: 16px 0 16px 0 !important;
+md-card-header {
+	padding: 16px 0 16px 0 !important;
 }
-#service-type-name{
-    margin-right: 6px;
+#service-type-name {
+	margin-right: 6px;
 }
 
-.icon-red{
-    color: red;
+.icon-red {
+	color: red;
 }
 
-#homeToolbar, .dialogHeader {
-    min-height: 40px;
-    height: 40px;
+#homeToolbar,
+.dialogHeader {
+	min-height: 40px;
+	height: 40px;
 }
 
-.fontSize{
-    font-size:18px;
+.fontSize {
+	font-size: 18px;
 }
-md-option.fontSize{
-    font-size:16px;
+md-option.fontSize {
+	font-size: 16px;
 }
-th.fontSize{
-    font-size:15px !important;
+th.fontSize {
+	font-size: 15px !important;
 }
 
-.pointerClick{
-    cursor: pointer;
+.pointerClick {
+	cursor: pointer;
 }
 
-.actionIcon{
-    position: relative;
-    top: 4px;
+.actionIcon {
+	position: relative;
+	top: 4px;
 }
 
-#sideNav{
-    background-color : #f5f5f5 !important;
-    
+#sideNav {
+	background-color: #f5f5f5 !important;
 }
-#sideNav.md-locked-open{
+#sideNav.md-locked-open {
 	z-index: 0;
 }
 
 .btnDefault {
-    border-radius: 6px;
-    /* height: 24px; */
-    font-size: 12px;
-    font-family: "Microsoft Yahei",Arial,Tahoma,Verdana,SimSun;
-    line-height: 24px;
-    color: #000;
-    border: 1px solid #d3d3d3;
-    text-align: center;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    background: linear-gradient(to bottom, #fff, #fafafa);
-    padding: 0 10px;
+	border-radius: 6px;
+	/* height: 24px; */
+	font-size: 12px;
+	font-family: "Microsoft Yahei", Arial, Tahoma, Verdana, SimSun;
+	line-height: 24px;
+	color: #000;
+	border: 1px solid #d3d3d3;
+	text-align: center;
+	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	background: linear-gradient(to bottom, #fff, #fafafa);
+	padding: 0 10px;
 }
 
 .btnDefault:hover {
-    border-color: #4ac9ff;
-    color: #009ae7;
+	border-color: #4ac9ff;
+	color: #009ae7;
 }
-.actionBtnHeight{
-    height:22px;
+.actionBtnHeight {
+	height: 22px;
 }
-#gridView .actionBtnHeight > .materialIconAdjustment{
-    font-size: 16px;
-    position: relative;
-    top: 2px;
+#gridView .actionBtnHeight > .materialIconAdjustment {
+	font-size: 16px;
+	position: relative;
+	top: 2px;
 }
-#listView .materialIconAdjustment{
-    position: relative;
-    top: 4px;
+#listView .materialIconAdjustment {
+	position: relative;
+	top: 4px;
 }
-.btnTransparency{
-    background-color: transparent;
-    border:none;
+.btnTransparency {
+	background-color: transparent;
+	border: none;
 }
-.btnSpacing{
-    margin-right: 5px;
+.btnSpacing {
+	margin-right: 5px;
 }
 .btn-danger {
-    border-radius: 6px;
-    font-size: 12px;
-    font-family: "Microsoft Yahei",Arial,Tahoma,Verdana,SimSun;
-    line-height: 24px;
-    text-align: center;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    padding: 0 10px;
-    color: #fff;
-    background: #d43f3a;
+	border-radius: 6px;
+	font-size: 12px;
+	font-family: "Microsoft Yahei", Arial, Tahoma, Verdana, SimSun;
+	line-height: 24px;
+	text-align: center;
+	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	padding: 0 10px;
+	color: #fff;
+	background: #d43f3a;
 }
 .btn-primary {
-    border-radius: 6px;
-    font-size: 12px;
-    font-family: "Microsoft Yahei",Arial,Tahoma,Verdana,SimSun;
-    line-height: 24px;
-    text-align: center;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    padding: 0 10px;
+	border-radius: 6px;
+	font-size: 12px;
+	font-family: "Microsoft Yahei", Arial, Tahoma, Verdana, SimSun;
+	line-height: 24px;
+	text-align: center;
+	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	padding: 0 10px;
 }
-.btn-danger:hover{
-    border: 1px solid #d43f3a;
-    background: linear-gradient(to bottom, #fff, #fafafa);
-    color:#d43f3a;
-    background: #fafafa !important;
+.btn-danger:hover {
+	border: 1px solid #d43f3a;
+	background: linear-gradient(to bottom, #fff, #fafafa);
+	color: #d43f3a;
+	background: #fafafa !important;
 }
-.msg{
-    text-align: left;
-    vertical-align: middle;
-    vertical-align: middle;
-    position: absolute;
-    top: 47%;
-    -webkit-transform: translateY(-50%);
-    -ms-transform: translateY(-50%);
-    transform: translateY(-50%);
-    padding-left: 70px;
-    white-space: normal;
+.msg {
+	text-align: left;
+	vertical-align: middle;
+	vertical-align: middle;
+	position: absolute;
+	top: 47%;
+	-webkit-transform: translateY(-50%);
+	-ms-transform: translateY(-50%);
+	transform: translateY(-50%);
+	padding-left: 70px;
+	white-space: normal;
 }
-.deleteIconSize{
-    font-size: 37px;
-}
-.fullWidth{
-    width:100%;
+.deleteIconSize {
+	font-size: 37px;
 }
 
-.deleteAction{
-    margin: auto;
-    display: block;
-    text-align: center;
-    position: relative;
-    top: 15px;
+/* if display block then button and text is getting overlapped */
+.fullWidth {
+	width: 100%;
+	display: inline-block;
 }
-.deleteBtn{
-    margin: 5px 5px 5px 0px;
+
+.deleteAction {
+	margin: auto;
+	display: block;
+	text-align: center;
+	position: relative;
+	top: 15px;
 }
- .icon_info {
-    color: green;
+.deleteBtn {
+	margin: 5px 5px 5px 0px;
+}
+.icon_info {
+	color: green;
 }
 .icon_warning {
-    color: orange;
+	color: orange;
 }
-.btn[disabled]{
-    background: lightgray !important;
+.btn[disabled] {
+	background: lightgray !important;
 }
 
-.serviceDelete{
-    font-size: 22px;
-    padding-right: 4px;
-    position: relative;
-    top: 3px;
-    color: red;
-    right: 3px;
+.serviceDelete {
+	font-size: 22px;
+	padding-right: 4px;
+	position: relative;
+	top: 3px;
+	color: red;
+	right: 3px;
 }
 
-#description{
-    list-style-type: disc;
+#description {
+	list-style-type: disc;
 }
 .icon_error {
-    color: red;
+	color: red;
 }
-table tbody tr:nth-child(even)>td {
-    background-color:#fafafa;
+table tbody tr:nth-child(even) > td {
+	background-color: #fafafa;
 }
 
-table tbody tr:nth-child(odd)>td {
-    background-color:#f7f7f7
+table tbody tr:nth-child(odd) > td {
+	background-color: #f7f7f7;
 }
 table tbody tr:hover td {
-    background-color: #e6fbe0 !important;
+	background-color: #e6fbe0 !important;
 }
-#serviceUpload{
-    box-shadow: 1px 2px 4px -1px #858CA8;
+#serviceUpload {
+	box-shadow: 1px 2px 4px -1px #858ca8;
 }
 
 table tr {
-    height:33px !important;
+	height: 33px !important;
 }
 
-table thead{
-    text-align: left;
-    font-size: 14px;
-    background-color: #E1E4E5;
+table thead {
+	text-align: left;
+	font-size: 14px;
+	background-color: #e1e4e5;
 }
 
 table tr {
-    border-color: grey;
+	border-color: grey;
 }
 
-
-#uploadDialog .msg{
-    position: relative;
-    top: 9px;
+#uploadDialog .msg {
+	position: relative;
+	top: 9px;
 }
 
-.nopadding{
-    padding:0 !important;
+.nopadding {
+	padding: 0 !important;
 }
-.nomargin{
-    margin:0 !important;
+.nomargin {
+	margin: 0 !important;
 }
 
-#serviceName{
-    position: relative;
-    left: 14px;
-    background-color: #efefef;
-    color:rgb(148,148,148);
-    text-align:center;
-    width:100px;
-    border-radius: 3px;
+#serviceName {
+	position: relative;
+	left: 14px;
+	background-color: #efefef;
+	color: rgb(148, 148, 148);
+	text-align: center;
+	width: 100px;
+	border-radius: 3px;
 }
 
-.gridTitleHeight{
-    height:46px !important;
-    min-height:46px !important;
+.gridTitleHeight {
+	height: 46px !important;
+	min-height: 46px !important;
 }
 
-.gridToolbarHeight{
-    min-height: 54px;
-    height: 54px;
+.gridToolbarHeight {
+	min-height: 54px;
+	height: 54px;
 }
-.gridBottomeHeight{
-    height:46px !important;
-    min-height:46px !important;
+.gridBottomeHeight {
+	height: 46px !important;
+	min-height: 46px !important;
 }
-.gridUnderline{
-    border-bottom: 1px solid black;
-    border-bottom-style: dashed;
+.gridUnderline {
+	border-bottom: 1px solid black;
+	border-bottom-style: dashed;
 }
-.gridBottomFonts{
-    color: rgb(148,148,148);
-    font-size: 12px;
+.gridBottomFonts {
+	color: rgb(148, 148, 148);
+	font-size: 12px;
 }
-.marginAuto{
-    margin:auto;
+.marginAuto {
+	margin: auto;
 }
-.selectLblAlignment{
-    padding-right: 10px;
+.selectLblAlignment {
+	padding-right: 10px;
 }
-.viewIconPosition{
-    position: relative;
-    top: -2px;
+.viewIconPosition {
+	position: relative;
+	top: -2px;
 }
 
-#searchIcon{
-    background-color: #858CA8;
-    height: 31px;
-    position: relative;
-    top: 1.5px;
-}
-#cancelSearch{
-    background-color: #858CA8;
-    height: 31px;
-    position: relative;
-    top: 1.5px;
-}
-.searchIconColor{
-    color:rgb(234,234,234);
+.searchIconColor {
+	color: rgb(234, 234, 234);
 }
 
-.tabContentBorder{
-    border:1px solid #e7e7e7;
+.tabContentBorder {
+	border: 1px solid #e7e7e7;
 }
 
-.nav.navbar-nav  .active a{
-    color: #3399FF !important;
-    height: calc(41px - 1px);
+.nav.navbar-nav .active a {
+	color: #3399ff !important;
+	height: calc(41px - 1px);
 }
-.nav.navbar-nav  a{
-    padding:16px 16px 4px 16px !important;
-    color: rgba(0, 0, 0, 0.87) !important;
+.nav.navbar-nav a {
+	padding: 16px 16px 4px 16px !important;
+	color: rgba(0, 0, 0, 0.87) !important;
 }
 
-.nav.navbar-nav  a:hover{
-    background:transparent;
+.nav.navbar-nav a:hover {
+	background: transparent;
 }
 
-.nav.navbar-nav  li:not(.active){
-    border-right: 1px solid dimgray !important;
-    cursor:pointer;
+.nav.navbar-nav li:not(.active) {
+	border-right: 1px solid dimgray !important;
+	cursor: pointer;
 }
 
 .nav.navbar-nav li {
-    background-color:#eee;
-    border: 2px solid lightgray;
-
+	background-color: #eee;
+	border: 2px solid lightgray;
 }
 .nav.navbar-nav li.active {
-    background-color:white;
-    /*box-shadow: -1px 5px 10px -1px lightslategrey;*/
-    border-top:3px solid #3399FF;
+	background-color: white;
+	/*box-shadow: -1px 5px 10px -1px lightslategrey;*/
+	border-top: 3px solid #3399ff;
 }
 
-.borderBottom{
-    border-bottom:1px solid black;
+.borderBottom {
+	border-bottom: 1px solid black;
 }
 
-.backgroundWhite{
-    background-color: transparent;
+.backgroundWhite {
+	background-color: transparent;
 }
 
-.paddingBottom{
-    padding-bottom: 16px;
+.paddingBottom {
+	padding-bottom: 16px;
 }
 .onboardProgress {
-    margin-bottom: 90px;
+	margin-bottom: 90px;
 }
 .processLabel {
-    margin-top: 40px;
+	margin-top: 40px;
 }
 
-#onBoardingContent, #onBoardingSuccessContent {
-    background-color: #fff;
-    padding: 30px;
+#onBoardingContent,
+#onBoardingSuccessContent {
+	background-color: #fff;
+	padding: 30px;
 }
 
 .onboarddiv {
-    margin: auto;
-    text-align: center;
-    top: -59px;
-    position: relative;
+	margin: auto;
+	text-align: center;
+	top: -59px;
+	position: relative;
 }
 
 .progressDiv {
-    width: 100%;
-    height: 4px;
-    /*border: 2px solid #3DCCA6;*/
-    background-color: #E2E2E2;
-    position: relative;
-    top: 18px;
-    margin: auto;
+	width: 100%;
+	height: 4px;
+	/*border: 2px solid #3DCCA6;*/
+	background-color: #e2e2e2;
+	position: relative;
+	top: 18px;
+	margin: auto;
 }
 .roundProg {
-    border-radius: 15px;
-    width: 30px;
-    height: 30px;
-    background-color: #E2E2E2;
-    z-index: 1;
-    text-align: center;
-    margin: auto;
-    line-height: 28px;
-    position: relative;
+	border-radius: 15px;
+	width: 30px;
+	height: 30px;
+	background-color: #e2e2e2;
+	z-index: 1;
+	text-align: center;
+	margin: auto;
+	line-height: 28px;
+	position: relative;
 }
 
 .progressed {
-    background-color: #3DCCA6;
-    color: #fff;
+	background-color: #3dcca6;
+	color: #fff;
 }
 
 .bg-grey {
-    background-color: #F6F7F7;
+	background-color: #f6f7f7;
 }
 
 .onboardBtn {
-    width: 120px !important;
-    height: 120px !important;
-    background-color: #E0EDFA;
-    background-repeat: no-repeat;
-    background-size: initial;
-    margin: auto;
-    border: 1px solid transparent;
-    border-radius: 66px;
+	width: 120px !important;
+	height: 120px !important;
+	background-color: #e0edfa;
+	background-repeat: no-repeat;
+	background-size: initial;
+	margin: auto;
+	border: 1px solid transparent;
+	border-radius: 66px;
 }
 
 .onboardBtn.btnImage1 {
-    background-image: url("../images/Validtion.png");
-    background-position: 20px 19px;
+	background-image: url("../images/Validtion.png");
+	background-position: 20px 19px;
 }
 .onboardBtn.btnImage2 {
-    background-image: url("../images/Lifecycle-Test.png");
-    background-position: 23px 20px;
+	background-image: url("../images/Lifecycle-Test.png");
+	background-position: 23px 20px;
 }
 .onboardBtn.btnImage3 {
-    background-image: url("../images/Function-Test.png");
-    background-position: 25px 13px;
+	background-image: url("../images/Function-Test.png");
+	background-position: 25px 13px;
 }
 
 .btnOuter {
-    margin: auto;
-    border-radius: 70px;
-    /*border: 1px solid transparent;*/
-    background-color: #F6F7F7;
-    background-size: initial;
-    width: 140px;
-    height: 140px;
-    padding: 10px;
+	margin: auto;
+	border-radius: 70px;
+	/*border: 1px solid transparent;*/
+	background-color: #f6f7f7;
+	background-size: initial;
+	width: 140px;
+	height: 140px;
+	padding: 10px;
 }
 
 .listItems {
-    position: relative;
-    top: -60px;
+	position: relative;
+	top: -60px;
 }
 
 .onbdContent span.statusIcon {
-    font-size: 22px;
-    color: #3DCCA6;
-    margin-right: 8px;
-    display: inline-block;
-    width: 21px;
-    height: 21px;
-    margin-bottom: -6px;
+	font-size: 22px;
+	color: #3dcca6;
+	margin-right: 8px;
+	display: inline-block;
+	width: 21px;
+	height: 21px;
+	margin-bottom: -6px;
 }
 .onbdContent .md-padding div {
-    margin: 14px;
+	margin: 14px;
 }
 
 .clock-icon {
-    background-image: url("../images/03.png");
+	background-image: url("../images/03.png");
 }
 .progress-icon {
-    background-image: url("../images/02.png");
+	background-image: url("../images/02.png");
 }
 .success-icon {
-    background-image: url("../images/01.png");
+	background-image: url("../images/01.png");
 }
 .failed-icon {
-    /*background-image: url("../images/01.png");*/
+	/*background-image: url("../images/01.png");*/
 
-    /*TODO Remove code after getting proper image*/
+	/*TODO Remove code after getting proper image*/
 
-    color: red !important;
-    padding-left: 6px;
+	color: red !important;
+	padding-left: 6px;
 }
-.iconColor{
-    color:#3399FF;
+.iconColor {
+	color: #3399ff;
 }
 
-.downiconColor{
-    color:white;
+.downiconColor {
+	color: white;
 }
 
-.delButton{
-    margin-left:10px;
+.delButton {
+	margin-left: 10px;
 }
 
-.downloadButton{
-    background:#3399FF;
-
-
+.downloadButton {
+	background: #3399ff;
 }
 
-.reloadButton{
-    padding:0 10px 0 0;
-}
-
-
-.downloadButton:hover {
-    color:black;
-}
-
-
-.btnPrimary{
-    border-radius: 3px;
-    /* height: 24px; */
-    font-size: 12px;
-    font-family: "Microsoft Yahei",Arial,Tahoma,Verdana,SimSun;
-    line-height: 24px;
-    color: white;
-    border: 1px solid #d3d3d3;
-    text-align: center;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-    background: linear-gradient(to bottom, #fff, #fafafa);
-    padding: 0 6px;
-    background: #3399FF;
-
-}
-
-.tiles{
-    border: 1px solid #e5e5e5;
-}
-
-#banner{
-    background-image: url("../images/productioncardtype.png") ;
-}
-
-.toolContainer{
-    position: absolute;
-}
-
-.contentContainer{
-    background-color: #DCDCDC;
-    position: absolute;
-    top: 49px;
-    z-index: 2;
-}
-
-.sortbar{
-    margin-top: 24px;
-    margin-left: 40px;
-    margin-right: 48px;
-    margin-bottom: 8px;
-}
-
-#rightFlex{
-    padding-top:55px;
-}
-
-#childLeftFlex{
-    text-align: right;
-}
-
-#childRightFlex{
-    text-align: right;
-    line-height: 24px;
-}
-
-#buttonsbar{
-    padding-left: 35px;
-}
-
-
 .reloadButton {
-    padding:0 10px 0 0;
-    margin-left:65px;
-}
-.verticalBar{
-    z-index:50;
+	padding: 0 10px 0 0;
 }
 
-.marketplaceSize{
-    font-size:11px;
+.downloadButton:hover {
+	color: black;
 }
 
-.image{
-    max-height: 101px;
-    max-width: 17%;
-    position: relative;
-    top: 8px;
-    bottom: 0;
-    left: -66px;
-    right: 0;
-    margin: auto;
+.btnPrimary {
+	border-radius: 3px;
+	/* height: 24px; */
+	font-size: 12px;
+	font-family: "Microsoft Yahei", Arial, Tahoma, Verdana, SimSun;
+	line-height: 24px;
+	color: white;
+	border: 1px solid #d3d3d3;
+	text-align: center;
+	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+	background: linear-gradient(to bottom, #fff, #fafafa);
+	padding: 0 6px;
+	background: #3399ff;
 }
 
-.divheight{
-    line-height:0px !important;
+.tiles {
+	border: 1px solid #e5e5e5;
 }
 
-.headTitle{
-    color:#858CA8;
+#banner {
+	background-image: url("../images/productioncardtype.png");
 }
 
-.btnPrimaryPadding
-{
-    padding: 0 19px !important;
+.toolContainer {
+	position: absolute;
 }
 
-.gridViewType{
-    color:#3399FF;
+.contentContainer {
+	background-color: #dcdcdc;
+	position: absolute;
+	top: 49px;
+	z-index: 2;
 }
 
-.gridViewType[disabled] > i{
-    color:white;
+.sortbar {
+	margin-top: 24px;
+	margin-left: 40px;
+	margin-right: 48px;
+	margin-bottom: 8px;
 }
 
-.gridViewType[disabled]{
-    background:#3399FF !important;
+#rightFlex {
+	padding-top: 55px;
 }
-.gridViewType[disabled] i{
-    color:white;
+
+#childLeftFlex {
+	text-align: right;
+}
+
+#childRightFlex {
+	text-align: right;
+	line-height: 24px;
+}
+
+#buttonsbar {
+	padding-left: 35px;
+}
+
+.reloadButton {
+	padding: 0 10px 0 0;
+	margin-left: 65px;
+}
+.verticalBar {
+	z-index: 50;
+}
+
+.marketplaceSize {
+	font-size: 11px;
+}
+
+.image {
+	max-height: 101px;
+	max-width: 17%;
+	position: relative;
+	top: 8px;
+	bottom: 0;
+	left: -66px;
+	right: 0;
+	margin: auto;
+}
+
+.divheight {
+	line-height: 0px !important;
+}
+
+.headTitle {
+	color: #858ca8;
+}
+
+.btnPrimaryPadding {
+	padding: 0 19px !important;
+}
+
+.gridViewType {
+	color: #3399ff;
+}
+
+.gridViewType[disabled] > i {
+	color: white;
+}
+
+.gridViewType[disabled] {
+	background: #3399ff !important;
+}
+.gridViewType[disabled] i {
+	color: white;
 }
 #onBoardingSuccessContent {
-    /*min-height: 500px;*/
-    height: 100%;
-    width: 100%;
+	/*min-height: 500px;*/
+	height: 100%;
+	width: 100%;
 }
 #onBoardingSuccessContent #returnBtn {
-    position: relative;
-    left: -30px;
-    border: none;
-    border-radius: 0 13px 13px 0;
-    width: 130px;
-    color: #9D9D9D;
-    background: #F2F2F2;
+	position: relative;
+	left: -30px;
+	border: none;
+	border-radius: 0 13px 13px 0;
+	width: 130px;
+	color: #9d9d9d;
+	background: #f2f2f2;
 }
 #onBoardingSuccessContent #returnBtn:hover {
-    color: #333;
+	color: #333;
 }
 #onBoardingSuccessContent #returnBtn span {
-    font-size: 15px;
-    margin-right: 10px;
+	font-size: 15px;
+	margin-right: 10px;
 }
 
 .content {
-    text-align: center;
-    margin-top: 200px;
+	text-align: center;
+	margin-top: 200px;
 }
 .content.emptyPage {
-    text-align: center;
-    margin-top: 100px;
+	text-align: center;
+	margin-top: 100px;
 }
 .content div {
-    text-align: center;
-    margin: 10px;
+	text-align: center;
+	margin: 10px;
 }
 .content .imageContainer {
-    width: 300px;
-    height: 150px;
-    /*background-color: #f8f8f8;*/
-    margin: 0 auto;
+	width: 300px;
+	height: 150px;
+	/*background-color: #f8f8f8;*/
+	margin: 0 auto;
 }
 .content .imageContainer img {
-    height: 100%;
+	height: 100%;
 }
-.content .backLink {
-    text-decoration: none;
-    color: #9D9D9D;
+.content .vnfLink {
+	color: #007bff !important;
 }
-.content .backLink:hover {
-    color: #333;
+
+.content .vnfLink:hover {
+	text-decoration: underline !important;
+	cursor: pointer;
 }
 
 textarea {
-    width: 100%;
-    height: 150px;
-    box-sizing: border-box;
-    border: 2px solid #ccc;
-    border-radius: 4px;
-    background-color: white;
-    font-size: 16px;
-    resize: none;
+	width: 100%;
+	height: 150px;
+	box-sizing: border-box;
+	border: 2px solid #ccc;
+	border-radius: 4px;
+	background-color: white;
+	font-size: 16px;
+	resize: none;
 }
 
 input {
-    width: 100%;
+	width: 100%;
 }
 
-.labels{
-    padding-top:20px;
+.labels {
+	padding-top: 20px;
 }
 
-#uploadStyle{
-    /*padding-top: 25px;*/
-    padding-left: 25px;
+#uploadStyle {
+	/*padding-top: 25px;*/
+	padding-left: 25px;
 }
 
-.PageIndicator{
-    position: absolute;
-    background-color: #00b3ee;
-    top: 11%;
-    padding-left: 5px;
-    margin: -6px;
-    height: 30px;
-    width: 6px;
-    z-index: 45;
+.PageIndicator {
+	position: absolute;
+	background-color: #00b3ee;
+	top: 11%;
+	padding-left: 5px;
+	margin: -6px;
+	height: 30px;
+	width: 6px;
+	z-index: 45;
 }
 
-.UploadPageIndicator{
-    position: absolute;
-    background-color: #00b3ee;
-    top: 11%;
-    padding-left: 5px;
-    margin: -5px;
-    height: 30px;
-    width:10px;
+.UploadPageIndicator {
+	position: absolute;
+	background-color: #00b3ee;
+	top: 11%;
+	padding-left: 5px;
+	margin: -5px;
+	height: 30px;
+	width: 10px;
 }
 
-.btnIconSpacing{
-    position: relative;
-    top: -2px;
-    left: -3px;
+.btnIconSpacing {
+	position: relative;
+	top: -2px;
+	left: -3px;
 }
 
-#listView .btnIconSpacing{
-    top: -6px !important;
-    position: relative;
-    /*top: -2px;*/
-    left: -3px;
+#listView .btnIconSpacing {
+	top: 0px !important;
+	position: relative;	
+	left: -3px;
 }
 
-.gridServiceTitle{
-    color:#337ab7 !important;
+.gridServiceTitle {
+	color: #337ab7 !important;
 }
 
-.actionWidth{
-    min-width: 150px;
+.actionWidth {
+	min-width: 150px;
 }
 
-.primaryColor{
-    background-color:#3399FF;
+.primaryColor {
+	background-color: #3399ff;
 }
 
-.nav.navbar-nav  a{
-    padding: 10.5px !important;
-    color: dimgray;
+.nav.navbar-nav a {
+	padding: 10.5px !important;
+	color: dimgray;
 }
 
 #detailsTabs .fontSize {
-    font-size: 15px;
-    font-weight:bold;
+	font-size: 15px;
+	font-weight: bold;
 }
-.navbar{
-    min-height:43px;
-}
\ No newline at end of file
+.navbar {
+	min-height: 43px;
+}
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/directives/autofocus/autofocusDirective.js b/vnfmarket/src/main/webapp/vnfmarket/common/directives/autofocus/autofocusDirective.js
index 50b63dc..9eeae64 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/directives/autofocus/autofocusDirective.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/directives/autofocus/autofocusDirective.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/directives/fileupload/fileuploadDirective.js b/vnfmarket/src/main/webapp/vnfmarket/common/directives/fileupload/fileuploadDirective.js
index 2a1748e..3f64841 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/directives/fileupload/fileuploadDirective.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/directives/fileupload/fileuploadDirective.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -41,8 +41,8 @@
         return directive;
 
         function link(scope, element, attrs) {
-            element.bind("change", function(changeEvent) {
-                scope.$apply(function() {
+            element.bind("change", function (changeEvent) {
+                scope.$apply(function () {
                     scope.fileUpload = changeEvent.target.files[0];
                 });
             });
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/locale/locale-en.json b/vnfmarket/src/main/webapp/vnfmarket/common/locale/locale-en.json
index d4be95e..d086b9a 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/locale/locale-en.json
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/locale/locale-en.json
@@ -1,193 +1,188 @@
- {
-	"common" : {
-		"actions" : {
-			"save" : "Save",
-			"upload":"Upload",
-			"delete" : "Delete",
-			"close" : "Close",
-			"search" : "Search",
-			"download" :"Download",
-			"yes" : "Yes",
-			"no" : "No",
-			"update" :"Re Upload",
-			"clickHere" : "Click Here",
-			"getApp" : "get_app",
-			"fileUpload" : "file_upload",
-			"ok" : "Ok",
-            "return" : "Return",
-            "detail" : "See Details",
-            "backToList" : "Back to List",
-            "add" : "Add file"
+{
+	"common": {
+		"actions": {
+			"save": "Save",
+			"upload": "Upload",
+			"delete": "Delete",
+			"close": "Close",
+			"search": "Search",
+			"download": "Download",
+			"yes": "Yes",
+			"no": "No",
+			"update": "Re Upload",
+			"clickHere": "Click Here",
+			"getApp": "get_app",
+			"fileUpload": "file_upload",
+			"ok": "Ok",
+			"return": "Return",
+			"detail": "See Details",
+			"backToList": "Back to List",
+			"add": "Add file"
 		},
-		"message" : {
-			"statusTitle" : "Status : ",
-			"statusText" : "Status text : ",
-			"viewDetails" : "Click here to view details"
+		"message": {
+			"statusTitle": "Status : ",
+			"statusText": "Status text : ",
+			"viewDetails": "Click here to view details"
 		},
-        "tabs" : {
-            "validation" :{
-                "title" : "Validation",
-                "stepTHead" : "Step",
-                "ParamTHead" : "Parameter",
-                "ResultTHead" : "Result"
-            },
-            "lifeCycle" : {
-                "title" : "Lifecycle Test",
-                "stepTHead" : "Step",
-                "ParamTHead" : "Parameter",
-                "ResultTHead" : "Result"
-            },
-            "functionTest": {
-                "title" : "Functional Test",
-                "testTHead" : "Test case",
-                "descTHead" : "Description",
-                "resultTHead" : "Test Result"
-            }
-        }
-	},
-	"module" : {
-		"marketplace" : {
-			"serviceDelete" : {
-				"title" : "Delete Service",
-				"confirmationMesaage" : "Are you sure that you want to delete "
-
+		"tabs": {
+			"validation": {
+				"title": "Validation",
+				"stepTHead": "Step",
+				"ParamTHead": "Parameter",
+				"ResultTHead": "Result"
 			},
-			"serviceUpload" : {
-				"title" : "Upload Service",
-                "updateTitle" : "Re Upload",
-				"fields" : {
-					"fileUpload" : {
-						"label" : "Select File",
-                        "noFileSelected" : "No file selected"
+			"lifeCycle": {
+				"title": "Lifecycle Test",
+				"stepTHead": "Step",
+				"ParamTHead": "Parameter",
+				"ResultTHead": "Result"
+			},
+			"functionTest": {
+				"title": "Functional Test",
+				"testTHead": "Test case",
+				"descTHead": "Description",
+				"resultTHead": "Test Result"
+			}
+		}
+	},
+	"module": {
+		"marketplace": {
+			"serviceDelete": {
+				"title": "Delete Service",
+				"confirmationMesaage": "Are you sure that you want to delete "
+			},
+			"serviceUpload": {
+				"title": "Upload Service",
+				"updateTitle": "Re Upload",
+				"fields": {
+					"fileUpload": {
+						"label": "Select File",
+						"noFileSelected": "No file selected"
 					},
-					"shortDescription" : {
-						 "placeholder" : "Short Description"
+					"shortDescription": {
+						"placeholder": "Short Description"
 					},
-					"details" : {
-						 "placeholder" : "Details"
+					"details": {
+						"placeholder": "Details"
 					},
-					"remarks" : {
-						 "placeholder" : "Remarks"
+					"remarks": {
+						"placeholder": "Remarks"
 					},
-					"funcTestReport" : {
-						"label":"Function Test Report: "
+					"funcTestReport": {
+						"label": "Function Test Report: "
 					}
 				},
-				"messages" : {
-					"onUploading" : "Please wait, Upload is in progress",
-					"onSuccessful" : "Service upload successful"
+				"messages": {
+					"onUploading": "Please wait, Upload is in progress",
+					"onSuccessful": "Service upload successful"
 				},
-                "onBoarding" : {
-                    "onBoardProcessTitle" : "Onboarding Process"
-                },
-                "onBoardingSuccess" : {
-                  "successTitle" : "Onboarding is successful"
-                }
-
-			},
-			"serviceDetails" : {
-				"title" : "Service Name : ",
-				"info" : {
-					"details" : "Details",
-					"remarks" : "Remarks",
-					"provider" : "Provider",
-					"serviceType" : "Service Type",
-					"csarId" : "CSAR Id",
-					"fileSize" : "File Size",
-					"funcTestReport"  :"Function Test Report",
-                    "reportTitle" : "Onboarding Report",
-                    "typeLbl" : "Type",
-                    "createLbl" : "Created At",
-                    "modLbl" : "Last Modfied at"
-
+				"onBoarding": {
+					"onBoardProcessTitle": "Onboarding Process"
 				},
-                "tabs" : {
-                    "validationTabTitle" : "Validation",
-                    "lifecycleTabTitle" : "Lifecycle Test",
-                    "functionalTabTitle" : "Function Test"
-                }
-
-
+				"onBoardingSuccess": {
+					"successTitle": "Onboarding is successful"
+				}
 			},
-			"sideNav" : {
-				"title" :  "VNF  Repository",
-				"marketplaceNav" : "VNF Repository"
+			"serviceDetails": {
+				"title": "Service Name : ",
+				"info": {
+					"details": "Details",
+					"remarks": "Remarks",
+					"provider": "Provider",
+					"serviceType": "Service Type",
+					"csarId": "CSAR Id",
+					"fileSize": "File Size",
+					"funcTestReport": "Function Test Report",
+					"reportTitle": "Onboarding Report",
+					"typeLbl": "Type",
+					"createLbl": "Created At",
+					"modLbl": "Last Modfied at"
+				},
+				"tabs": {
+					"validationTabTitle": "Validation",
+					"lifecycleTabTitle": "Lifecycle Test",
+					"functionalTabTitle": "Function Test"
+				}
 			},
-			"main" : {
-				"headerTitle" : "Welcome to VNF Repository",
-				"description" : "Market place for VNF-SDK does the following task:",
-				"pointOne" : "Upload and download of VNF products and offerings",
-				"pointTwo" : "Show the interface about other component in VNF-SDK",
-				"sortBy" : {
-					"title" : "Please select",
-					"label" : "Sort by ",
-					"options" : {
-						"name" : {
-							"key" :"Name",
-							"value" :"name"
+			"sideNav": {
+				"title": "VNF  Repository",
+				"marketplaceNav": "VNF Repository"
+			},
+			"main": {
+				"headerTitle": "Welcome to VNF Repository",
+				"description": "Market place for VNF-SDK does the following task:",
+				"pointOne": "Upload and download of VNF products and offerings",
+				"pointTwo": "Show the interface about other component in VNF-SDK",
+				"sortBy": {
+					"title": "Please select",
+					"label": "Sort by ",
+					"options": {
+						"name": {
+							"key": "Name",
+							"value": "name"
 						},
-						"dateModified" : {
-							"key" :"Data Modified",
-							"value" : "date"
+						"dateModified": {
+							"key": "Data Modified",
+							"value": "date"
 						},
-						"downloads" : {
-							"key":"Downloads",
-							"value" : "downloads"
+						"downloads": {
+							"key": "Downloads",
+							"value": "downloads"
 						}
 					}
 				},
-				"search" :{
-					"label" : "Search",
-					"placeholder" : "Search keyword",
-					"close" : "Close"
+				"search": {
+					"label": "Search",
+					"placeholder": "Search keyword",
+					"close": "Close"
 				},
-				"upload" : {
-					"label" : "Upload"
+				"upload": {
+					"label": "Upload"
 				},
-				"gridView" : {
-					"label" :  "Grid View",
-					"serviceType" : {
-						"label" : "Type",
+				"gridView": {
+					"label": "Grid View",
+					"serviceType": {
+						"label": "Type",
 						"value": "description"
 					},
-					"downloads" : {
-						"label" : "Downloads",
-						"value":"get_app",
-						"tooltip" : "Download history",
-						"buttonLabel" :"Downloads"
+					"downloads": {
+						"label": "Downloads",
+						"value": "get_app",
+						"tooltip": "Download history",
+						"buttonLabel": "Downloads"
 					},
-					"upload" : {
-						"tooltip" : "Uploads history",
-						"buttonLabel" : "Uploads"
+					"upload": {
+						"tooltip": "Uploads history",
+						"buttonLabel": "Uploads"
 					},
-					"moreDetails" : {
-						"label" : "More details"
+					"moreDetails": {
+						"label": "More details"
 					},
-					"title" : {
-						"label" : "Title"
+					"title": {
+						"label": "Title"
 					}
 				},
-				"listView" : {
-					"label" :  "List View",
-					"headers" : {
-						"name" : "Name",
-						"provider" : "Provider",
-						"description" : "Description",
-						"type" : "Type",
-						"size" : "Size",
-						"createdAt" : "Created at",
-						"lastModified" : "Last Modified at",
-						"donwloads" : "Downloads",
-						"actions" : "Actions"
+				"listView": {
+					"label": "List View",
+					"headers": {
+						"name": "Name",
+						"provider": "Provider",
+						"description": "Description",
+						"type": "Type",
+						"size": "Size",
+						"createdAt": "Created at",
+						"lastModified": "Last Modified at",
+						"donwloads": "Downloads",
+						"actions": "Actions"
 					}
 				},
-				"refresh" : {
-					"label" :  "Refresh"
+				"refresh": {
+					"label": "Refresh"
 				},
-				"emptyList" : {
-					"label" : "Service list is empty. Would you like to upload one? If yes,",
-					"anchor" : "Click here",
-					"labelContinued" : "to upload a new service"
+				"emptyList": {
+					"label": "Service list is empty. Would you like to upload one? If yes,",
+					"anchor": "Click here",
+					"labelContinued": "to upload a new service"
 				}
 			}
 		}
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/services/httpService.js b/vnfmarket/src/main/webapp/vnfmarket/common/services/httpService.js
index bc077a1..dd9dda6 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/services/httpService.js
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/services/httpService.js
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-(function() {
+(function () {
     'use strict';
 
     /**
@@ -39,8 +39,8 @@
             var defer = $q.defer()
             $http({
                 method: method,
-               //ses url: baseUrlConfig.common.ip + ":" + baseUrlConfig.common.port + url,
-			   url:url,
+                //ses url: baseUrlConfig.common.ip + ":" + baseUrlConfig.common.port + url,
+                url: url,
                 data: data,
                 headers: headers
             }).then(function successCallback(response) {
@@ -50,15 +50,15 @@
             }, function errorCallback(error) {
                 var parentEl = angular.element(document.body);
                 $mdDialog.show({
-                    parent:parentEl,
-                    templateUrl:'/onapui/vnfmarket/common/templates/serverError.html',
-                    locals:{
-                        error:error
+                    parent: parentEl,
+                    templateUrl: '/onapui/vnfmarket/common/templates/serverError.html',
+                    locals: {
+                        error: error
                     },
-                    skipHide:true,
-                    controller:function($scope, $mdDialog, error){
+                    skipHide: true,
+                    controller: function ($scope, $mdDialog, error) {
                         $scope.error = error;
-                        $scope.closeDialog= function(){
+                        $scope.closeDialog = function () {
                             $mdDialog.hide();
                         }
                     }
@@ -74,13 +74,13 @@
             var defer = $q.defer()
             $http({
                 method: method,
-              //ses  url: baseUrlConfig.common.ip + ":" + baseUrlConfig.common.port + url,
-			   url:url,
+                //ses  url: baseUrlConfig.common.ip + ":" + baseUrlConfig.common.port + url,
+                url: url,
                 data: data,
                 headers: headers,
                 transformRequest: angular.identity,
                 uploadEventHandlers: {
-                    progress: function(e) {
+                    progress: function (e) {
                         if (e.lengthComputable) {
                             $rootScope.progressBar = (e.loaded / e.total) * 100;
                         }
@@ -93,15 +93,15 @@
             }, function errorCallback(error) {
                 var parentEl = angular.element(document.body);
                 $mdDialog.show({
-                    parent:parentEl,
-                    templateUrl:'/onapui/vnfmarket/common/templates/serverError.html',
-                    locals:{
-                        error:error
+                    parent: parentEl,
+                    templateUrl: '/onapui/vnfmarket/common/templates/serverError.html',
+                    locals: {
+                        error: error
                     },
-                    skipHide:true,
-                    controller:function($scope, $mdDialog, error){
+                    skipHide: true,
+                    controller: function ($scope, $mdDialog, error) {
                         $scope.error = error;
-                        $scope.closeDialog= function(){
+                        $scope.closeDialog = function () {
                             $mdDialog.hide();
                         }
                     }
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/templates/serverError.html b/vnfmarket/src/main/webapp/vnfmarket/common/templates/serverError.html
index 6d40276..9b8a540 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/templates/serverError.html
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/templates/serverError.html
@@ -27,15 +27,21 @@
 
         <md-dialog-content>
             <div class="md-dialog-content">
-                    <div class="fullWidth center">
-                        <div class="row">
-                            <div class="col-xs-2 col-sm-2 col-md-1 col-lg-1 icon glyphicon glyphicon-exclamation-sign icon_error deleteIconSize"></div>
-                            <div class="msg col-xs-10 col-sm-10 col-md-11 col-lg-11" style="text-align:left;vertical-align: middle;">
-                              <div> <span>{{'common.message.statusTitle' | translate }} </span> <span>{{error.status}}</span> </div>
-                              <div> <span>{{'common.message.statusText' | translate }} </span> <span>{{error.statusText}}</span></div>
+                <div class="fullWidth center">
+                    <div class="row">
+                        <div class="col-xs-2 col-sm-2 col-md-1 col-lg-1 icon glyphicon glyphicon-exclamation-sign icon_error deleteIconSize"></div>
+                        <div class="msg col-xs-10 col-sm-10 col-md-11 col-lg-11" style="text-align:left;vertical-align: middle;">
+                            <div>
+                                <span>{{'common.message.statusTitle' | translate }} </span>
+                                <span>{{error.status}}</span>
+                            </div>
+                            <div>
+                                <span>{{'common.message.statusText' | translate }} </span>
+                                <span>{{error.statusText}}</span>
                             </div>
                         </div>
                     </div>
+                </div>
         </md-dialog-content>
 
         <md-dialog-actions layout="row" class="row deleteAction">
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/alert.js b/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/alert.js
deleted file mode 100644
index db97f3b..0000000
--- a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/alert.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/* ========================================================================
- * Bootstrap: alert.js v3.3.7
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // ALERT CLASS DEFINITION
-  // ======================
-
-  var dismiss = '[data-dismiss="alert"]'
-  var Alert   = function (el) {
-    $(el).on('click', dismiss, this.close)
-  }
-
-  Alert.VERSION = '3.3.7'
-
-  Alert.TRANSITION_DURATION = 150
-
-  Alert.prototype.close = function (e) {
-    var $this    = $(this)
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = $(selector === '#' ? [] : selector)
-
-    if (e) e.preventDefault()
-
-    if (!$parent.length) {
-      $parent = $this.closest('.alert')
-    }
-
-    $parent.trigger(e = $.Event('close.bs.alert'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      // detach from parent, fire event then clean up data
-      $parent.detach().trigger('closed.bs.alert').remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent
-        .one('bsTransitionEnd', removeElement)
-        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
-      removeElement()
-  }
-
-
-  // ALERT PLUGIN DEFINITION
-  // =======================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.alert')
-
-      if (!data) $this.data('bs.alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  var old = $.fn.alert
-
-  $.fn.alert             = Plugin
-  $.fn.alert.Constructor = Alert
-
-
-  // ALERT NO CONFLICT
-  // =================
-
-  $.fn.alert.noConflict = function () {
-    $.fn.alert = old
-    return this
-  }
-
-
-  // ALERT DATA-API
-  // ==============
-
-  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/carousel.js b/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/carousel.js
deleted file mode 100644
index 6ff954c..0000000
--- a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/carousel.js
+++ /dev/null
@@ -1,237 +0,0 @@
-/* ========================================================================
- * Bootstrap: carousel.js v3.3.7
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // CAROUSEL CLASS DEFINITION
-  // =========================
-
-  var Carousel = function (element, options) {
-    this.$element    = $(element)
-    this.$indicators = this.$element.find('.carousel-indicators')
-    this.options     = options
-    this.paused      = null
-    this.sliding     = null
-    this.interval    = null
-    this.$active     = null
-    this.$items      = null
-
-    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
-
-    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
-      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
-      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
-  }
-
-  Carousel.VERSION  = '3.3.7'
-
-  Carousel.TRANSITION_DURATION = 600
-
-  Carousel.DEFAULTS = {
-    interval: 5000,
-    pause: 'hover',
-    wrap: true,
-    keyboard: true
-  }
-
-  Carousel.prototype.keydown = function (e) {
-    if (/input|textarea/i.test(e.target.tagName)) return
-    switch (e.which) {
-      case 37: this.prev(); break
-      case 39: this.next(); break
-      default: return
-    }
-
-    e.preventDefault()
-  }
-
-  Carousel.prototype.cycle = function (e) {
-    e || (this.paused = false)
-
-    this.interval && clearInterval(this.interval)
-
-    this.options.interval
-      && !this.paused
-      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
-    return this
-  }
-
-  Carousel.prototype.getItemIndex = function (item) {
-    this.$items = item.parent().children('.item')
-    return this.$items.index(item || this.$active)
-  }
-
-  Carousel.prototype.getItemForDirection = function (direction, active) {
-    var activeIndex = this.getItemIndex(active)
-    var willWrap = (direction == 'prev' && activeIndex === 0)
-                || (direction == 'next' && activeIndex == (this.$items.length - 1))
-    if (willWrap && !this.options.wrap) return active
-    var delta = direction == 'prev' ? -1 : 1
-    var itemIndex = (activeIndex + delta) % this.$items.length
-    return this.$items.eq(itemIndex)
-  }
-
-  Carousel.prototype.to = function (pos) {
-    var that        = this
-    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
-    if (pos > (this.$items.length - 1) || pos < 0) return
-
-    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
-    if (activeIndex == pos) return this.pause().cycle()
-
-    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
-  }
-
-  Carousel.prototype.pause = function (e) {
-    e || (this.paused = true)
-
-    if (this.$element.find('.next, .prev').length && $.support.transition) {
-      this.$element.trigger($.support.transition.end)
-      this.cycle(true)
-    }
-
-    this.interval = clearInterval(this.interval)
-
-    return this
-  }
-
-  Carousel.prototype.next = function () {
-    if (this.sliding) return
-    return this.slide('next')
-  }
-
-  Carousel.prototype.prev = function () {
-    if (this.sliding) return
-    return this.slide('prev')
-  }
-
-  Carousel.prototype.slide = function (type, next) {
-    var $active   = this.$element.find('.item.active')
-    var $next     = next || this.getItemForDirection(type, $active)
-    var isCycling = this.interval
-    var direction = type == 'next' ? 'left' : 'right'
-    var that      = this
-
-    if ($next.hasClass('active')) return (this.sliding = false)
-
-    var relatedTarget = $next[0]
-    var slideEvent = $.Event('slide.bs.carousel', {
-      relatedTarget: relatedTarget,
-      direction: direction
-    })
-    this.$element.trigger(slideEvent)
-    if (slideEvent.isDefaultPrevented()) return
-
-    this.sliding = true
-
-    isCycling && this.pause()
-
-    if (this.$indicators.length) {
-      this.$indicators.find('.active').removeClass('active')
-      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
-      $nextIndicator && $nextIndicator.addClass('active')
-    }
-
-    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
-    if ($.support.transition && this.$element.hasClass('slide')) {
-      $next.addClass(type)
-      $next[0].offsetWidth // force reflow
-      $active.addClass(direction)
-      $next.addClass(direction)
-      $active
-        .one('bsTransitionEnd', function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () {
-            that.$element.trigger(slidEvent)
-          }, 0)
-        })
-        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
-    } else {
-      $active.removeClass('active')
-      $next.addClass('active')
-      this.sliding = false
-      this.$element.trigger(slidEvent)
-    }
-
-    isCycling && this.cycle()
-
-    return this
-  }
-
-
-  // CAROUSEL PLUGIN DEFINITION
-  // ==========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.carousel')
-      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
-      var action  = typeof option == 'string' ? option : options.slide
-
-      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (action) data[action]()
-      else if (options.interval) data.pause().cycle()
-    })
-  }
-
-  var old = $.fn.carousel
-
-  $.fn.carousel             = Plugin
-  $.fn.carousel.Constructor = Carousel
-
-
-  // CAROUSEL NO CONFLICT
-  // ====================
-
-  $.fn.carousel.noConflict = function () {
-    $.fn.carousel = old
-    return this
-  }
-
-
-  // CAROUSEL DATA-API
-  // =================
-
-  var clickHandler = function (e) {
-    var href
-    var $this   = $(this)
-    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
-    if (!$target.hasClass('carousel')) return
-    var options = $.extend({}, $target.data(), $this.data())
-    var slideIndex = $this.attr('data-slide-to')
-    if (slideIndex) options.interval = false
-
-    Plugin.call($target, options)
-
-    if (slideIndex) {
-      $target.data('bs.carousel').to(slideIndex)
-    }
-
-    e.preventDefault()
-  }
-
-  $(document)
-    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
-    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
-
-  $(window).on('load', function () {
-    $('[data-ride="carousel"]').each(function () {
-      var $carousel = $(this)
-      Plugin.call($carousel, $carousel.data())
-    })
-  })
-
-}(jQuery);
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/collapse.js b/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/collapse.js
deleted file mode 100644
index 1203869..0000000
--- a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/collapse.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/* ========================================================================
- * Bootstrap: collapse.js v3.3.7
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-/* jshint latedef: false */
-
-+function ($) {
-  'use strict';
-
-  // COLLAPSE PUBLIC CLASS DEFINITION
-  // ================================
-
-  var Collapse = function (element, options) {
-    this.$element      = $(element)
-    this.options       = $.extend({}, Collapse.DEFAULTS, options)
-    this.$trigger      = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
-                           '[data-toggle="collapse"][data-target="#' + element.id + '"]')
-    this.transitioning = null
-
-    if (this.options.parent) {
-      this.$parent = this.getParent()
-    } else {
-      this.addAriaAndCollapsedClass(this.$element, this.$trigger)
-    }
-
-    if (this.options.toggle) this.toggle()
-  }
-
-  Collapse.VERSION  = '3.3.7'
-
-  Collapse.TRANSITION_DURATION = 350
-
-  Collapse.DEFAULTS = {
-    toggle: true
-  }
-
-  Collapse.prototype.dimension = function () {
-    var hasWidth = this.$element.hasClass('width')
-    return hasWidth ? 'width' : 'height'
-  }
-
-  Collapse.prototype.show = function () {
-    if (this.transitioning || this.$element.hasClass('in')) return
-
-    var activesData
-    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
-
-    if (actives && actives.length) {
-      activesData = actives.data('bs.collapse')
-      if (activesData && activesData.transitioning) return
-    }
-
-    var startEvent = $.Event('show.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    if (actives && actives.length) {
-      Plugin.call(actives, 'hide')
-      activesData || actives.data('bs.collapse', null)
-    }
-
-    var dimension = this.dimension()
-
-    this.$element
-      .removeClass('collapse')
-      .addClass('collapsing')[dimension](0)
-      .attr('aria-expanded', true)
-
-    this.$trigger
-      .removeClass('collapsed')
-      .attr('aria-expanded', true)
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.$element
-        .removeClass('collapsing')
-        .addClass('collapse in')[dimension]('')
-      this.transitioning = 0
-      this.$element
-        .trigger('shown.bs.collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
-    this.$element
-      .one('bsTransitionEnd', $.proxy(complete, this))
-      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
-  }
-
-  Collapse.prototype.hide = function () {
-    if (this.transitioning || !this.$element.hasClass('in')) return
-
-    var startEvent = $.Event('hide.bs.collapse')
-    this.$element.trigger(startEvent)
-    if (startEvent.isDefaultPrevented()) return
-
-    var dimension = this.dimension()
-
-    this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
-    this.$element
-      .addClass('collapsing')
-      .removeClass('collapse in')
-      .attr('aria-expanded', false)
-
-    this.$trigger
-      .addClass('collapsed')
-      .attr('aria-expanded', false)
-
-    this.transitioning = 1
-
-    var complete = function () {
-      this.transitioning = 0
-      this.$element
-        .removeClass('collapsing')
-        .addClass('collapse')
-        .trigger('hidden.bs.collapse')
-    }
-
-    if (!$.support.transition) return complete.call(this)
-
-    this.$element
-      [dimension](0)
-      .one('bsTransitionEnd', $.proxy(complete, this))
-      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
-  }
-
-  Collapse.prototype.toggle = function () {
-    this[this.$element.hasClass('in') ? 'hide' : 'show']()
-  }
-
-  Collapse.prototype.getParent = function () {
-    return $(this.options.parent)
-      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
-      .each($.proxy(function (i, element) {
-        var $element = $(element)
-        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
-      }, this))
-      .end()
-  }
-
-  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
-    var isOpen = $element.hasClass('in')
-
-    $element.attr('aria-expanded', isOpen)
-    $trigger
-      .toggleClass('collapsed', !isOpen)
-      .attr('aria-expanded', isOpen)
-  }
-
-  function getTargetFromTrigger($trigger) {
-    var href
-    var target = $trigger.attr('data-target')
-      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-
-    return $(target)
-  }
-
-
-  // COLLAPSE PLUGIN DEFINITION
-  // ==========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.collapse')
-      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
-      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  var old = $.fn.collapse
-
-  $.fn.collapse             = Plugin
-  $.fn.collapse.Constructor = Collapse
-
-
-  // COLLAPSE NO CONFLICT
-  // ====================
-
-  $.fn.collapse.noConflict = function () {
-    $.fn.collapse = old
-    return this
-  }
-
-
-  // COLLAPSE DATA-API
-  // =================
-
-  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
-    var $this   = $(this)
-
-    if (!$this.attr('data-target')) e.preventDefault()
-
-    var $target = getTargetFromTrigger($this)
-    var data    = $target.data('bs.collapse')
-    var option  = data ? 'toggle' : $this.data()
-
-    Plugin.call($target, option)
-  })
-
-}(jQuery);
diff --git a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/dropdown.js b/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/dropdown.js
deleted file mode 100644
index 04e9c2d..0000000
--- a/vnfmarket/src/main/webapp/vnfmarket/common/thirdparty/bootstrap/js/dropdown.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/* ========================================================================
- * Bootstrap: dropdown.js v3.3.7
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // DROPDOWN CLASS DEFINITION
-  // =========================
-
-  var backdrop = '.dropdown-backdrop'
-  var toggle   = '[data-toggle="dropdown"]'
-  var Dropdown = function (element) {
-    $(element).on('click.bs.dropdown', this.toggle)
-  }
-
-  Dropdown.VERSION = '3.3.7'
-
-  function getParent($this) {
-    var selector = $this.attr('data-target')
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
-    }
-
-    var $parent = selector && $(selector)
-
-    return $parent && $parent.length ? $parent : $this.parent()
-  }
-
-  function clearMenus(e) {
-    if (e && e.which === 3) return
-    $(backdrop).remove()
-    $(toggle).each(function () {
-      var $this         = $(this)
-      var $parent       = getParent($this)
-      var relatedTarget = { relatedTarget: this }
-
-      if (!$parent.hasClass('open')) return
-
-      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
-
-      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
-      if (e.isDefaultPrevented()) return
-
-      $this.attr('aria-expanded', 'false')
-      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
-    })
-  }
-
-  Dropdown.prototype.toggle = function (e) {
-    var $this = $(this)
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    clearMenus()
-
-    if (!isActive) {
-      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
-        // if mobile we use a backdrop because click events don't delegate
-        $(document.createElement('div'))
-          .addClass('dropdown-backdrop')
-          .insertAfter($(this))
-          .on('click', clearMenus)
-      }
-
-      var relatedTarget = { relatedTarget: this }
-      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
-      if (e.isDefaultPrevented()) return
-
-      $this
-        .trigger('focus')
-        .attr('aria-expanded', 'true')
-
-      $parent
-        .toggleClass('open')
-        .trigger($.Event('shown.bs.dropdown', relatedTarget))
-    }
-
-    return false
-  }
-
-  Dropdown.prototype.keydown = function (e) {
-    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
-
-    var $this = $(this)
-
-    e.preventDefault()
-    e.stopPropagation()
-
-    if ($this.is('.disabled, :disabled')) return
-
-    var $parent  = getParent($this)
-    var isActive = $parent.hasClass('open')
-
-    if (!isActive && e.which != 27 || isActive && e.which == 27) {
-      if (e.which == 27) $parent.find(toggle).trigger('focus')
-      return $this.trigger('click')
-    }
-
-    var desc = ' li:not(.disabled):visible a'
-    var $items = $parent.find('.dropdown-menu' + desc)
-
-    if (!$items.length) return
-
-    var index = $items.index(e.target)
-
-    if (e.which == 38 && index > 0)                 index--         // up
-    if (e.which == 40 && index < $items.length - 1) index++         // down
-    if (!~index)                                    index = 0
-
-    $items.eq(index).trigger('focus')
-  }
-
-
-  // DROPDOWN PLUGIN DEFINITION
-  // ==========================
-
-  function Plugin(option) {
-    return this.each(function () {
-      var $this = $(this)
-      var data  = $this.data('bs.dropdown')
-
-      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  var old = $.fn.dropdown
-
-  $.fn.dropdown             = Plugin
-  $.fn.dropdown.Constructor = Dropdown
-
-
-  // DROPDOWN NO CONFLICT
-  // ====================
-
-  $.fn.dropdown.noConflict = function () {
-    $.fn.dropdown = old
-    return this
-  }
-
-
-  // APPLY TO STANDARD DROPDOWN ELEMENTS
-  // ===================================
-
-  $(document)
-    .on('click.bs.dropdown.data-api', clearMenus)
-    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
-    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
-    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
-
-}(jQuery);
