diff --git a/vnfmarket-be/deployment/docker/docker-postgres/pom.xml b/vnfmarket-be/deployment/docker/docker-postgres/pom.xml
index b274e01..be4594c 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>
diff --git a/vnfmarket-be/deployment/docker/docker-refrepo/pom.xml b/vnfmarket-be/deployment/docker/docker-refrepo/pom.xml
index a6ca68e..8d1bf43 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>
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..e980348 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.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.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,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAsMBgkICQcJCQgGCQcGBgYFBgcHBQkGBgUHCQcGBgcHChwXBwgaCQcHGCEMGhERHxMfBxciGCIeGBAeHxIBBQUFBwcFDAgIBxIIBQgSHhISEhISHhISEhISHh4SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEv/AABEIAGAAYAMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAHCAMFBgQCAQD/xAA6EAABAgQDBQYFAQgDAQAAAAACAQMABBESBQYiByExMkETQlFSYWIIcXKBoSMzgpGSorLR8BQk4RX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQL/xAAWEQEBAQAAAAAAAAAAAAAAAAAAARH/2gAMAwEAAhEDEQA/AG0WPx9I+RDOPIIqS+F0BVZyx5uUknZpw0RGBU9XTTCJbRs6zGI4icw66pNiRCwBUsFoVXSm7wpBF+JraOr75yDRr2LSkLpCVBMx7q06ekAFmbVCUV7yRETg4pP7y3B+YmfcRw7b6J3fNp7sRYPhrkxMCy2JEpeX/wAg97NdkjQEL02KHuG0D6FAAl3CnFqQtOKgr3RVRX3cIv8AD2Udl1lyAxcG20iFUG4e7SGvYy/Ltgggw2iD3bEivm8uS6uoX/GBFrdcI01faGGFJk5pyVnbhJW3GjuElGhad/VIcfYRtHHEJImjokzLgHaj5htp2iRgtoORWJlg9CA4IkQmA6rresCfY9i7mHZqbaKqC6RSrgFzEJlQa19YqnmU/GPKxzST1wpTjQf7Y6C9YCzJeMYra1mQJbCXSUqOECi343EOn7RsDPSvyhZfivxYhsADWggREIlu1ad6QC05mxHtZpwlJVUjMi+ojVbv49Ipe0W/0H+7uxYtYM8Uq5OtgJtMLa5aVXUu3dpZ4V6xYbOsrnPT7cu3dqISdMR5Wh5oygnfDlhaFMG6o8qW3W8ChjmJe2lOb3cvhGXy3l+Xw+TS3TYn6h8CX3LHO9tPkBPsldVLVISIh4xpWyqq+u/+rhHG/dduHqo/LzRVS2epAhEhnARfKW4rvWJix1shV1sk7MSAbxLStxaoD5ijaoBcV3W28Kwv+0PCSbxmUm03K66PL5rq7oOuPTwqFwEhXd4SSkYvMWFJMnJEttrU2yThdLL0ur9oA/5ecXsGitVFNpkv5mki2UvvEEkgoAiNEQUtbt5bB3D+I9ksBNiszawZr3RUrvaIwnXxD48B313uvl5tKNCX43Q1OfcQskHNNVMCBsB4qRpuhBNoc45/9F4Xq1E1HV0tKgjv9IlSrfIcyIybulVQQUCpyqJFXekEz4ZZFtDmnUFaitt3tMuVIHGxdgXH3mnBq2QFp9x7hgy7DcFclX5wTGjbpj2Hrq6xBqc/TAixruVvvCnFRgF5rxiVSYQBkyRT5SMKcxUhn5uSA+Iou7lIajGAzhk9tzWjQK4K/p6E3fKNKCOHygEe9qlpfLveEEzHHf8Aj5cuCo3qkWGXtnVrvbPnRSW+xOVfcsaTPuBg5hJs7lQQ/Tt8w8v3gFmHM0wswgBMm2hLaQ7zC2CfkybdZk0ecnEdR9wBbAh0jaSKVPWkU2GZaQXUvY1abdPH5+Mdue3OxGQZaoBOvkTg920RgybPBZhClWj43NgX8wJHSZxnsjTF2Fy5cbmw+1ookXarBoP9suYBZJv2XH7VtHm+dYS3PM528469uW8iK63vEVYZTbNid8/MNIKIjTdokZUERMKq4pQrOJLrIbkVLi1D1tKJUqyyDmY5KcR8BQ0pY60Y1EvLT1rDIbN8xI+0L279XVaPdK7lhTz3cPqgqbHMdtBWriuArvndEDRMTKrQkJNSR01HmXup1jL5exds2EqSItLSr0KPmP460AWm+gXppJev5jSu6YxVFNRbbv1W3CXDV0+0RYmikwfRaEP+pAj2g577AbZGZGpJc4Vur6fSKpdtF0kouCqviNpEnKXS6njAELD3hW8TFO0aXmLzf4gRbV8YQceYBa2sANxeBOrzfyxHge0G6a/UFRR1dX1d2MjnvEhexYzTeg2BcXtTV+YjJwdguPo9IKyW8pMrCIeoENwF86UglkaQuXwszSoUySVVugCJeJcF+0MK06hcOEVosnxOOqxihWFaM02gueojTTC9Tn7UqcCXTBo+JTGgfxFRQhPsG7bhKooRU4QF3G06kteYYlSvDqcBi0ydPk3ODQqXrq+mKevjXT4xNhy/9gfaoxEHbCMwUESQ046vWB/tEzI4/iPZNkqgCCIjdpQuscU2+4GneiElzZf4jKuvEjpFdRdRe6Au3cKdLTeirTmujyOX6ftHwH96Kg8UctQUdX/fGIXZkl5iUl90BMqiD9wlWxeaPMsqk7duVSLVd5iWORVrx/ej2waoS0410l4QDX/D480MujQigqQCJW0/aiWr8QYmpi3h4wpuw/GibnGxUuYv4kWlfxDQsPIo7+9qt8NMVSLYtMKRKJEpGXMRFUlisdqhJHTxNYgfSkBG+VY7cCbq+g9SSK5FjswmYQHQNa0FRut8sRBZl8IF2SQTAtCaTQe9GOxrKhXKo/1cywfNm5y78gBt0PSIkBeYh61SJsx4G0WgmkAi73h8oBYHsuOjxIaU/eirfbUVtXu96C/mvBVC4LPpXxGBfjrFrtsBV1j2A6V90fEj2qwF5lDGFYmAO7cC3W/T4QwmW9q0sQiJnYVBu7XoXpCwSyav93RMZrdcm5fNAf/Z"
+                    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..28566e8 100644
--- a/vnfmarket/src/main/webapp/vnfmarket/common/css/home.css
+++ b/vnfmarket/src/main/webapp/vnfmarket/common/css/home.css
@@ -14,67 +14,66 @@
  * limitations under the License.
  */
 #searchField {
-    position: relative;
-    top: 13px;
-    border-bottom-color:whitesmoke;
-    background-color:#858CA8;
-    height:33px;
+	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;
+.hidden {
+	display: none;
 }
 
-#searchFieldContainer{
-    padding-right:0;
-        top: -31px;
+.contentBackground {
+	background: white;
+}
+#homeToolbar form {
+	height: 33px;
+	/*background-color: lightgray;*/
+	margin: 0px;
 }
 
-.noMargin{
-	margin:0
+#searchFieldContainer {
+	padding-right: 0;
+	top: -31px;
 }
 
-.iconMargin{
-	margin-right:8px;
+.noMargin {
+	margin: 0;
 }
 
-@media (min-width : 600px) {
-    #gridView .layout-xs-column{
-        margin-bottom: 10px !important;
-    }
+.iconMargin {
+	margin-right: 8px;
 }
 
-
-@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;
-    }
+@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;
+	}
 
-
-.iconAlignment{
-    position: relative;
-    bottom: 4px;
+	#gridView .layout-xs-column .downloadIcon {
+		margin-top: 6px;
+		margin-bottom: 6px;
+	}
 }
 
+.iconAlignment {
+	position: relative;
+	bottom: 4px;
+}
 
-.gridViewMargin{
+.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 +101,7 @@
 }*/
 
 .service-detail-tags .material-icons {
-    font-size: 16px !important;
+	font-size: 16px !important;
 }
 
 /*
@@ -161,845 +160,842 @@
   .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;
+#searchIcon {
+	background-color: #858ca8;
+	height: 31px;
+	position: relative;
+	top: 1.5px;
 }
-#cancelSearch{
-    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;
+	text-decoration: underline;
+	/*color: #9d9d9d;*/
 }
 .content .backLink:hover {
-    color: #333;
+	color: #333;
 }
 
 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);
