diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bb7d754baa751630b25598e182a30f062e9b6ebd
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,40 @@
+include:
+  - project: osl/code/org.etsi.osl.main
+    ref: main
+    file: 
+      - ci-templates/default.yml
+      - ci-templates/build.yml
+    rules:
+      - if: '$CI_COMMIT_REF_NAME == "main"'
+  
+  - project: osl/code/org.etsi.osl.main
+    ref: develop
+    file: 
+      - ci-templates/default.yml
+      - ci-templates/build.yml
+    rules:
+      - if: '$CI_COMMIT_REF_NAME == "develop"'
+
+  - project: osl/code/org.etsi.osl.main
+    ref: $CI_COMMIT_REF_NAME
+    file: 
+      - ci-templates/default.yml
+      - ci-templates/build.yml
+    rules:
+      - if: '$CI_COMMIT_REF_PROTECTED && $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop"'
+
+  - project: osl/code/org.etsi.osl.main
+    ref: develop
+    file: 
+      - ci-templates/default.yml
+      - ci-templates/build_unprotected.yml
+    rules:
+      - if: '$CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "develop" && !$CI_COMMIT_REF_PROTECTED'
+
+maven_build:
+  extends: .maven_build
+
+docker_build:
+  extends: .docker_build
+  needs:
+    - maven_build
diff --git a/Dockerfile.portalapi b/Dockerfile
similarity index 59%
rename from Dockerfile.portalapi
rename to Dockerfile
index 614f44a83b05bdebaa371310116470c3b067cba7..f8fcd559916907bd5cd2a2f15837bcc367b20240 100644
--- a/Dockerfile.portalapi
+++ b/Dockerfile
@@ -2,6 +2,6 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk
 MAINTAINER openslice.io
 RUN mkdir /opt/shareclasses
 RUN mkdir -p /opt/openslice/lib/
-COPY target/org.etsi.osl.portal.api-1.2.0-SNAPSHOT.jar /opt/openslice/lib/
-CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.portal.api-1.2.0-SNAPSHOT.jar"]
+COPY target/org.etsi.osl.portal.api-1.0.0.jar /opt/openslice/lib/
+CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.portal.api-1.0.0.jar"]
 EXPOSE 13000
\ No newline at end of file
diff --git a/ci_settings.xml b/ci_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69ad06ed6c63795d191555afde6ea2d1da4e133d
--- /dev/null
+++ b/ci_settings.xml
@@ -0,0 +1,16 @@
+<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
+  <servers>
+    <server>
+      <id>gitlab-maven</id>
+      <configuration>
+        <httpHeaders>
+          <property>
+            <name>Job-Token</name>
+            <value>${CI_JOB_TOKEN}</value>
+          </property>
+        </httpHeaders>
+      </configuration>
+    </server>
+  </servers>
+</settings>
diff --git a/pom.xml b/pom.xml
index 8cf74444b84b3042f19af1596e7bdebffd650fea..5fb311baea4bb6f66e463875734d1ce35adbfc0a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,16 +2,15 @@
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
-
 	<parent>
 		<groupId>org.etsi.osl</groupId>
 		<artifactId>org.etsi.osl.main</artifactId>
-		<version>1.2.0-SNAPSHOT</version>
+		<version>1.0.0</version>
 		<relativePath>../org.etsi.osl.main</relativePath>
 	</parent>
 
-	<artifactId>org.etsi.osl.portal.api</artifactId>
 
+	<artifactId>org.etsi.osl.portal.api</artifactId>
 	<name>org.etsi.osl.portal.api</name>
 	<url>http://maven.apache.org</url>
 
@@ -28,7 +27,23 @@
 		
 	</properties>
 
-
+	<repositories>
+		<repository>
+			<id>gitlab-maven</id>
+			<url>https://labs.etsi.org/rep/api/v4/groups/260/-/packages/maven</url>
+		</repository>
+	</repositories>
+	<distributionManagement>
+		<repository>
+			<id>gitlab-maven</id>
+			<url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
+		</repository>
+		<snapshotRepository>
+			<id>gitlab-maven</id>
+			<url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
+		</snapshotRepository>
+	</distributionManagement>
+	
 	<dependencyManagement>
 		<dependencies>
 			<!-- Spring Boot BOM -->
@@ -207,24 +222,24 @@
 	    </dependency>
 		<dependency>
 			<groupId>org.etsi.osl</groupId>
-			<artifactId>org.etsi.osl.model</artifactId>
-			<version>${project.version}</version>
+			<artifactId>org.etsi.osl.model.nfv</artifactId>
+			<version>${org.etsi.osl.model.nfv.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>org.etsi.osl.sol005nbi</groupId>
+			<groupId>org.etsi.osl</groupId>
 			<artifactId>org.etsi.osl.sol005nbi.osm</artifactId>
-			<version>1.2.0-SNAPSHOT</version>
+			<version>${org.etsi.osl.sol005nbi.osm.version}</version>
 		</dependency>
 
 		<dependency>
-			<groupId>org.etsi.osl.sol005nbi</groupId>
+			<groupId>org.etsi.osl</groupId>
 			<artifactId>org.etsi.osl.sol005nbi.osm10</artifactId>
-			<version>1.2.0-SNAPSHOT</version>
+			<version>${org.etsi.osl.sol005nbi.osm10.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.etsi.osl</groupId>
 			<artifactId>org.etsi.osl.centrallog.client</artifactId>
-			<version>${project.version}</version>
+			<version>${org.etsi.osl.centrallog.client.version}</version>
 		</dependency>
 
 
diff --git a/src/main/java/portal/api/PortalApplication.java b/src/main/java/portal/api/PortalApplication.java
index 687f81ad3b12df773133cd78dfd010843f1e6dde..290d94042280d3ccf94f42b131aa8a276452ee91 100644
--- a/src/main/java/portal/api/PortalApplication.java
+++ b/src/main/java/portal/api/PortalApplication.java
@@ -36,7 +36,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  */
 @SpringBootApplication()
 @EnableWebMvc
-@EntityScan( basePackages = {"org.etsi.osl.model", "org.etsi.osl.centrallog.client"})
+@EntityScan( basePackages = {"org.etsi.osl.model.nfv", "org.etsi.osl.centrallog.client"})
 @ComponentScan(basePackages = {	
 		"portal.api",
 		"portal.api.bus",
diff --git a/src/main/java/portal/api/bus/BusController.java b/src/main/java/portal/api/bus/BusController.java
index 2a091aa71c4181c3ed5842ef7d64c13909921bb8..9e01638885328d298e11e6824d23de1f4da7be0f 100644
--- a/src/main/java/portal/api/bus/BusController.java
+++ b/src/main/java/portal/api/bus/BusController.java
@@ -40,15 +40,15 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.jms.core.JmsTemplate;
 import org.springframework.stereotype.Component;
 
-import org.etsi.osl.model.CompositeExperimentOnBoardDescriptor;
-import org.etsi.osl.model.CompositeVxFOnBoardDescriptor;
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
-import org.etsi.osl.model.PortalUser;
-import org.etsi.osl.model.VFImage;
-import org.etsi.osl.model.VxFMetadata;
-import org.etsi.osl.model.VxFOnBoardedDescriptor;
+import org.etsi.osl.model.nfv.CompositeExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.CompositeVxFOnBoardDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.PortalUser;
+import org.etsi.osl.model.nfv.VFImage;
+import org.etsi.osl.model.nfv.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFOnBoardedDescriptor;
 import portal.api.mano.MANOStatus;
 import portal.api.validation.ci.ValidationJobResult;
 
diff --git a/src/main/java/portal/api/bus/BusControllerActiveMQ.java b/src/main/java/portal/api/bus/BusControllerActiveMQ.java
index c829bc5f966c5801d4856543fc5fe32caa71a2ae..b584699a6706a14d49d603e2fef23b5b5e7fdea1 100644
--- a/src/main/java/portal/api/bus/BusControllerActiveMQ.java
+++ b/src/main/java/portal/api/bus/BusControllerActiveMQ.java
@@ -30,12 +30,12 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 
-import org.etsi.osl.model.CompositeExperimentOnBoardDescriptor;
-import org.etsi.osl.model.CompositeVxFOnBoardDescriptor;
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
-import org.etsi.osl.model.PortalUser;
-import org.etsi.osl.model.VxFOnBoardedDescriptor;
+import org.etsi.osl.model.nfv.CompositeExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.CompositeVxFOnBoardDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.PortalUser;
+import org.etsi.osl.model.nfv.VxFOnBoardedDescriptor;
 import portal.api.service.DeploymentDescriptorService;
 import portal.api.service.InfrastructureService;
 import portal.api.service.ManoProviderService;
@@ -328,7 +328,7 @@ public class BusControllerActiveMQ  extends RouteBuilder {
 		
 		from("activemq:queue:updateDeploymentDescriptor")
 		.log( "activemq:queue:updateDeploymentDescriptor !" )
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.DeploymentDescriptor.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.DeploymentDescriptor.class, true)		
 		.bean( deploymentDescriptorService, "updateDeploymentEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 		
@@ -351,49 +351,49 @@ public class BusControllerActiveMQ  extends RouteBuilder {
 		
 		from("activemq:queue:updateVxFOnBoardedDescriptor")
 		.log( "activemq:queue:updateVxFOnBoardedDescriptor for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.VxFOnBoardedDescriptor.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.VxFOnBoardedDescriptor.class, true)		
 		.bean( vxfObdService , "updateVxFOBDEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 
 		from("activemq:queue:addInfrastructure")
 		.log( "activemq:queue:addInfrastructure for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.Infrastructure.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.Infrastructure.class, true)		
 		.bean( infraStructureService , "addInfrastructureEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 
 		from("activemq:queue:updateInfrastructure")
 		.log( "activemq:queue:updateInfrastructure for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.Infrastructure.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.Infrastructure.class, true)		
 		.bean( infraStructureService , "updateInfrastructureEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 		
 		from("activemq:queue:addVxFMetadata")
 		.log( "activemq:queue:addVxFMetadata for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.VxFMetadata.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.VxFMetadata.class, true)		
 		.bean( vxfService , "addVxFMetadataEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 		
 		from("activemq:queue:addExperimentMetadata")
 		.log( "activemq:queue:addExperimentMetadata for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.ExperimentMetadata.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.ExperimentMetadata.class, true)		
 		.bean( nsdService , "addNSDMetadataEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 		
 		from("activemq:queue:addVxFOnBoardedDescriptor")
 		.log( "activemq:queue:addVxFOnBoardedDescriptor for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.VxFOnBoardedDescriptor.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.VxFOnBoardedDescriptor.class, true)		
 		.bean( vxfObdService , "addVxFOnBoardedDescriptorEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 		
 		from("activemq:queue:addExperimentOnBoardedDescriptor")
 		.log( "activemq:queue:addExperimentOnBoardedDescriptor for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.ExperimentOnBoardDescriptor.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor.class, true)		
 		.bean( nsdObdService , "addExperimentOnBoardedDescriptorEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");
 		
 		from("activemq:queue:updateExperimentOnBoardDescriptor")
 		.log( "activemq:queue:updateExperimentOnBoardDescriptor for ${body} !" )		
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.ExperimentOnBoardDescriptor.class, true)		
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor.class, true)		
 		.bean( nsdObdService , "updateNSDOBDEagerDataJson" )
 		.to("log:DEBUG?showBody=true&showHeaders=true");		
 				
@@ -444,7 +444,7 @@ public class BusControllerActiveMQ  extends RouteBuilder {
 		from( NFV_CATALOG_DEPLOY_NSD_REQ )
 		.log(LoggingLevel.INFO, log, NFV_CATALOG_DEPLOY_NSD_REQ + " message received!")
 		.to("log:DEBUG?showBody=true&showHeaders=true")
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.DeploymentDescriptor.class, false)
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.DeploymentDescriptor.class, false)
 		.bean( deploymentDescriptorService, "createDeploymentRequestJson")
 		.convertBodyTo( String.class );
 		
@@ -459,7 +459,7 @@ public class BusControllerActiveMQ  extends RouteBuilder {
 		from( NFV_CATALOG_UPD_DEPLOYMENT_BY_ID )
 		.log(LoggingLevel.INFO, log, NFV_CATALOG_UPD_DEPLOYMENT_BY_ID + " message received!")
 		.to("log:DEBUG?showBody=true&showHeaders=true")	
-		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.DeploymentDescriptor.class, false)
+		.unmarshal().json( JsonLibrary.Jackson, org.etsi.osl.model.nfv.DeploymentDescriptor.class, false)
 		.bean( deploymentDescriptorService, "updateDeploymentEagerDataJson" )
 		.convertBodyTo( String.class );
 				
diff --git a/src/main/java/portal/api/controller/ArtifactsAPIController.java b/src/main/java/portal/api/controller/ArtifactsAPIController.java
index f80d41b99437149cf96154c46330b663ab8cb34f..fd326daa00f7643164226a8951555233fd35518c 100644
--- a/src/main/java/portal/api/controller/ArtifactsAPIController.java
+++ b/src/main/java/portal/api/controller/ArtifactsAPIController.java
@@ -77,28 +77,28 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.HttpStatusCodeException;
 import org.springframework.web.multipart.MultipartFile;
-import org.etsi.osl.model.Category;
-import org.etsi.osl.model.CompositeExperimentOnBoardDescriptor;
-import org.etsi.osl.model.CompositeVxFOnBoardDescriptor;
-import org.etsi.osl.model.ConstituentVxF;
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.DeploymentDescriptorStatus;
-import org.etsi.osl.model.DeploymentDescriptorVxFPlacement;
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
-import org.etsi.osl.model.Infrastructure;
-import org.etsi.osl.model.MANOplatform;
-import org.etsi.osl.model.MANOprovider;
-import org.etsi.osl.model.OnBoardingStatus;
-import org.etsi.osl.model.PortalProperty;
-import org.etsi.osl.model.PortalUser;
-import org.etsi.osl.model.Product;
-import org.etsi.osl.model.UserRoleType;
-import org.etsi.osl.model.VFImage;
-import org.etsi.osl.model.ValidationJob;
-import org.etsi.osl.model.ValidationStatus;
-import org.etsi.osl.model.VxFMetadata;
-import org.etsi.osl.model.VxFOnBoardedDescriptor;
+import org.etsi.osl.model.nfv.Category;
+import org.etsi.osl.model.nfv.CompositeExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.CompositeVxFOnBoardDescriptor;
+import org.etsi.osl.model.nfv.ConstituentVxF;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptorStatus;
+import org.etsi.osl.model.nfv.DeploymentDescriptorVxFPlacement;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.Infrastructure;
+import org.etsi.osl.model.nfv.MANOplatform;
+import org.etsi.osl.model.nfv.MANOprovider;
+import org.etsi.osl.model.nfv.OnBoardingStatus;
+import org.etsi.osl.model.nfv.PortalProperty;
+import org.etsi.osl.model.nfv.PortalUser;
+import org.etsi.osl.model.nfv.Product;
+import org.etsi.osl.model.nfv.UserRoleType;
+import org.etsi.osl.model.nfv.VFImage;
+import org.etsi.osl.model.nfv.ValidationJob;
+import org.etsi.osl.model.nfv.ValidationStatus;
+import org.etsi.osl.model.nfv.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFOnBoardedDescriptor;
 import jakarta.annotation.PostConstruct;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.Valid;
diff --git a/src/main/java/portal/api/controller/PortalRepositoryAPIImpl.java b/src/main/java/portal/api/controller/PortalRepositoryAPIImpl.java
index f7934432fe2b61c6c7a87bf06b640b5359a21036..2ce3721f4549f9d4111c8e330e4dd803dd941292 100644
--- a/src/main/java/portal/api/controller/PortalRepositoryAPIImpl.java
+++ b/src/main/java/portal/api/controller/PortalRepositoryAPIImpl.java
@@ -55,13 +55,13 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
-import org.etsi.osl.model.Category;
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.PortalUser;
-import org.etsi.osl.model.Product;
-import org.etsi.osl.model.UserRoleType;
-import org.etsi.osl.model.UserSession;
-import org.etsi.osl.model.VxFMetadata;
+import org.etsi.osl.model.nfv.Category;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.PortalUser;
+import org.etsi.osl.model.nfv.Product;
+import org.etsi.osl.model.nfv.UserRoleType;
+import org.etsi.osl.model.nfv.UserSession;
+import org.etsi.osl.model.nfv.VxFMetadata;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.Valid;
 import portal.api.bus.BusController;
diff --git a/src/main/java/portal/api/controller/PortalRepositoryVFImageAPI.java b/src/main/java/portal/api/controller/PortalRepositoryVFImageAPI.java
index f0063cb76474522551126aa6c471e2325dc069de..a6a8ab7ebf8b395cd2c39631e89427c6759bcb63 100644
--- a/src/main/java/portal/api/controller/PortalRepositoryVFImageAPI.java
+++ b/src/main/java/portal/api/controller/PortalRepositoryVFImageAPI.java
@@ -56,10 +56,10 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import org.etsi.osl.model.PortalUser;
-import org.etsi.osl.model.UserRoleType;
-import org.etsi.osl.model.VFImage;
-import org.etsi.osl.model.VxFMetadata;
+import org.etsi.osl.model.nfv.PortalUser;
+import org.etsi.osl.model.nfv.UserRoleType;
+import org.etsi.osl.model.nfv.VFImage;
+import org.etsi.osl.model.nfv.VxFMetadata;
 import jakarta.servlet.http.HttpServletRequest;
 import portal.api.bus.BusController;
 import portal.api.service.PortalPropertiesService;
diff --git a/src/main/java/portal/api/mano/MANOController.java b/src/main/java/portal/api/mano/MANOController.java
index 271c76a8e33518adb7b4e5bb47094cd8ab12ef84..78162baa705296b1b7c472d31be1541fbdecedab 100644
--- a/src/main/java/portal/api/mano/MANOController.java
+++ b/src/main/java/portal/api/mano/MANOController.java
@@ -55,15 +55,15 @@ import portal.api.service.NSDService;
 import portal.api.service.PortalPropertiesService;
 import portal.api.service.VxFOBDService;
 import portal.api.service.VxFService;
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.DeploymentDescriptorStatus;
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
-import org.etsi.osl.model.MANOprovider;
-import org.etsi.osl.model.OnBoardDescriptor;
-import org.etsi.osl.model.OnBoardingStatus;
-import org.etsi.osl.model.VxFMetadata;
-import org.etsi.osl.model.VxFOnBoardedDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptorStatus;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.MANOprovider;
+import org.etsi.osl.model.nfv.OnBoardDescriptor;
+import org.etsi.osl.model.nfv.OnBoardingStatus;
+import org.etsi.osl.model.nfv.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFOnBoardedDescriptor;
 
 
 
diff --git a/src/main/java/portal/api/mano/MANOService.java b/src/main/java/portal/api/mano/MANOService.java
index 4afecbd460e1b8ff9c3162f6803b936a40a3caf5..36f2725cf75186fef819231462ffcfb12d5fc846 100644
--- a/src/main/java/portal/api/mano/MANOService.java
+++ b/src/main/java/portal/api/mano/MANOService.java
@@ -26,7 +26,7 @@ import java.util.List;
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 
-import org.etsi.osl.model.MANOprovider;
+import org.etsi.osl.model.nfv.MANOprovider;
 
 
 
diff --git a/src/main/java/portal/api/mano/NSCreateInstanceRequestPayload.java b/src/main/java/portal/api/mano/NSCreateInstanceRequestPayload.java
index 8909afe6a8c26aeb78b2f7a554eb6e51d2590f11..c748dbe4df137a2c25719c1564e5fa60ea48048d 100644
--- a/src/main/java/portal/api/mano/NSCreateInstanceRequestPayload.java
+++ b/src/main/java/portal/api/mano/NSCreateInstanceRequestPayload.java
@@ -21,7 +21,7 @@
 
 package portal.api.mano;
 
-import org.etsi.osl.model.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
 
 /**
  * @author ctranoris
diff --git a/src/main/java/portal/api/mano/NSInstantiateInstanceRequestPayload.java b/src/main/java/portal/api/mano/NSInstantiateInstanceRequestPayload.java
index 6c64cc6cbe9d211518b34481a715ca5d03fe4135..3f40f98be4da0e5ea5ed8cbeb7119c7dd1242d32 100644
--- a/src/main/java/portal/api/mano/NSInstantiateInstanceRequestPayload.java
+++ b/src/main/java/portal/api/mano/NSInstantiateInstanceRequestPayload.java
@@ -29,9 +29,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.DeploymentDescriptorVxFPlacement;
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptorVxFPlacement;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
 
 /**
  * @author ctranoris
diff --git a/src/main/java/portal/api/repo/CategoriesRepository.java b/src/main/java/portal/api/repo/CategoriesRepository.java
index da3ee6f8d448da98ec8bcda2fb4f292b30e826f3..68a1d2510e6bbc12f658d444bfb7643df47bfd50 100644
--- a/src/main/java/portal/api/repo/CategoriesRepository.java
+++ b/src/main/java/portal/api/repo/CategoriesRepository.java
@@ -22,7 +22,7 @@ package portal.api.repo;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.Category;
+import org.etsi.osl.model.nfv.Category;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/DeploymentDescriptorRepository.java b/src/main/java/portal/api/repo/DeploymentDescriptorRepository.java
index e9b0748f17a77d5da2fe485490fe8a0aa3ce9aca..0d4b89022ebf7df7fcc9f4ac7d45181b4b65e1b3 100644
--- a/src/main/java/portal/api/repo/DeploymentDescriptorRepository.java
+++ b/src/main/java/portal/api/repo/DeploymentDescriptorRepository.java
@@ -25,7 +25,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
 
 
 /**
@@ -37,70 +37,70 @@ public interface DeploymentDescriptorRepository extends CrudRepository<Deploymen
 
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
-			+ "( m.status=org.etsi.osl.model.DeploymentDescriptorStatus.COMPLETED "
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED )"
+			+ "( m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.COMPLETED "
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED )"
 			+ "ORDER BY m.id" )
 	List<DeploymentDescriptor> getAllCompletedDeploymentDescriptors();
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
-			+ "m.status=org.etsi.osl.model.DeploymentDescriptorStatus.REJECTED ORDER BY m.id" )
+			+ "m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.REJECTED ORDER BY m.id" )
 	List<DeploymentDescriptor> getAllRejectedDeploymentDescriptors();
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
-	+ "( m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED ) "
+	+ "( m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED ) "
 	+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllFailedDeploymentDescriptors();
 
 	@Query( value =  "SELECT m FROM DeploymentDescriptor m  WHERE "
-			+ "( m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED "			
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.DELETION_FAILED "
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED ) "
+			+ "( m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED "			
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.DELETION_FAILED "
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED ) "
 			+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllRemovedDeploymentDescriptors();
 
 	@Query(value = "SELECT m FROM DeploymentDescriptor m "
-			+ " WHERE m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.COMPLETED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.REJECTED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.FAILED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.DELETION_FAILED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED "				
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
+			+ " WHERE m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.COMPLETED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.REJECTED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.DELETION_FAILED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED "				
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
 			+ " ORDER BY m.id")
 	List<DeploymentDescriptor> readDeploymentDescriptors();
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.owner.id=?1" 
-			+ " AND (m.status=org.etsi.osl.model.DeploymentDescriptorStatus.COMPLETED "
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED ) "
+			+ " AND (m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.COMPLETED "
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED ) "
 			+ " ORDER BY m.id" )
 	List<DeploymentDescriptor> getAllByUserCompleted(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.owner.id=?1"  
-			+ " AND m.status=org.etsi.osl.model.DeploymentDescriptorStatus.REJECTED ORDER BY m.id")
+			+ " AND m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.REJECTED ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByUserRejected(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.owner.id=?1"  
-						+ " AND ( m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED_OSM_REMOVED " 			
-						+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED"			
-						+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.DELETION_FAILED "
-						+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED ) "
+						+ " AND ( m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED_OSM_REMOVED " 			
+						+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED"			
+						+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.DELETION_FAILED "
+						+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED ) "
 						+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByUserFAILED_OSM_REMOVEDd(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.owner.id=?1" 
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.COMPLETED "
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED "
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.REJECTED "
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.FAILED "
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.DELETION_FAILED "
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED "
-	+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.COMPLETED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.REJECTED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.DELETION_FAILED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED "
+	+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
 	+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByUserStatusUnknown(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.owner.id=?1"  
-			+ " AND m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED"			
+			+ " AND m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED"			
 			+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByUserFAILED(long id);
 
@@ -108,65 +108,65 @@ public interface DeploymentDescriptorRepository extends CrudRepository<Deploymen
 	
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
 			+ "( m.mentor.id=?1 OR m.owner.id=?1)" 
-			+ " AND (m.status=org.etsi.osl.model.DeploymentDescriptorStatus.COMPLETED "
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED ) "
+			+ " AND (m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.COMPLETED "
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED ) "
 			+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByMentorCompleted(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
 			+ "( m.mentor.id=?1 OR m.owner.id=?1)" 
-			+ " AND m.status=org.etsi.osl.model.DeploymentDescriptorStatus.REJECTED ORDER BY m.id" )
+			+ " AND m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.REJECTED ORDER BY m.id" )
 	List<DeploymentDescriptor> getAllByMentorRejected(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
 			+ "( m.mentor.id=?1 OR m.owner.id=?1)" 
-			+ " AND m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED"			
+			+ " AND m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED"			
 			+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByMentorFAILED(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE "
 			+ "( m.mentor.id=?1 OR m.owner.id=?1)"  
-			+ " AND ( m.status=org.etsi.osl.model.DeploymentDescriptorStatus.FAILED_OSM_REMOVED " 
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.DELETION_FAILED "
-			+ " OR m.status=org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED ) "
+			+ " AND ( m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED_OSM_REMOVED " 
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.DELETION_FAILED "
+			+ " OR m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED ) "
 			+ " ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByMentorFAILED_OSM_REMOVEDd(long id);
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE " 
 			+ "( m.mentor.id=?1 OR m.owner.id=?1)"  
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.COMPLETED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.REJECTED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.FAILED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.DELETION_FAILED "
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED "					
-			+ " AND m.status<>org.etsi.osl.model.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.COMPLETED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.REJECTED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.DELETION_FAILED "
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED "					
+			+ " AND m.status<>org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED_OSM_REMOVED "
 			+ "ORDER BY m.id")
 	List<DeploymentDescriptor> getAllByMentorStatusUnknown(long id);
 
-	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.status=org.etsi.osl.model.DeploymentDescriptorStatus.SCHEDULED ORDER BY m.id" )
+	@Query( value = "SELECT m FROM DeploymentDescriptor m  WHERE m.status=org.etsi.osl.model.nfv.DeploymentDescriptorStatus.SCHEDULED ORDER BY m.id" )
 	List<DeploymentDescriptor> getAllScheduled();
 	
 	
-	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATED "
-			+ "OR m.status = org.etsi.osl.model.DeploymentDescriptorStatus.FAILED "
-			+ "OR m.status = org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATION_FAILED")
+	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATED "
+			+ "OR m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.FAILED "
+			+ "OR m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATION_FAILED")
 	List<DeploymentDescriptor> readDeploymentsToBeDeleted();
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m")
 	List<DeploymentDescriptor> readAllDeployments();
 
-	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.DeploymentDescriptorStatus.SCHEDULED")
+	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.SCHEDULED")
 	List<DeploymentDescriptor> readScheduledDeployments();
 
-	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.DeploymentDescriptorStatus.RUNNING "
-			+ "OR m.status = org.etsi.osl.model.DeploymentDescriptorStatus.INSTANTIATING "
-			+ "OR m.status = org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATING")
+	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.RUNNING "
+			+ "OR m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.INSTANTIATING "
+			+ "OR m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATING")
 	List<DeploymentDescriptor> readRunningInstantiatingDeployments();
 
-	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.DeploymentDescriptorStatus.RUNNING "
-			+ "OR m.status = org.etsi.osl.model.DeploymentDescriptorStatus.INSTANTIATING "
-			+ "OR m.status = org.etsi.osl.model.DeploymentDescriptorStatus.TERMINATING")
+	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.RUNNING "
+			+ "OR m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.INSTANTIATING "
+			+ "OR m.status = org.etsi.osl.model.nfv.DeploymentDescriptorStatus.TERMINATING")
 	List<DeploymentDescriptor> readRunningInstantiatingAndTerminatingDeployments();
 
 	@Query( value = "SELECT m FROM DeploymentDescriptor m WHERE m.experiment.id = ?1")
diff --git a/src/main/java/portal/api/repo/InfrastructureRepository.java b/src/main/java/portal/api/repo/InfrastructureRepository.java
index d12b966eaa4f210e1c2950bca7c718774fe154cf..1b5867f54a64626370daaeebed16840a5a183530 100644
--- a/src/main/java/portal/api/repo/InfrastructureRepository.java
+++ b/src/main/java/portal/api/repo/InfrastructureRepository.java
@@ -22,7 +22,7 @@ package portal.api.repo;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.Infrastructure;
+import org.etsi.osl.model.nfv.Infrastructure;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/ManoPlatformRepository.java b/src/main/java/portal/api/repo/ManoPlatformRepository.java
index 51fb87f92e663d100299e387ed39385c589cedb4..7e8baec5769beda56d219e987222b5b06d0df720 100644
--- a/src/main/java/portal/api/repo/ManoPlatformRepository.java
+++ b/src/main/java/portal/api/repo/ManoPlatformRepository.java
@@ -22,7 +22,7 @@ package portal.api.repo;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.MANOplatform;
+import org.etsi.osl.model.nfv.MANOplatform;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/ManoProvidersRepository.java b/src/main/java/portal/api/repo/ManoProvidersRepository.java
index 31827315ae2610b71376cbbb0cb80ef63a8de5a2..32b6c24f9cee39c8d45247fcdab33ea4d8521fd6 100644
--- a/src/main/java/portal/api/repo/ManoProvidersRepository.java
+++ b/src/main/java/portal/api/repo/ManoProvidersRepository.java
@@ -26,8 +26,8 @@ import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.Category;
-import org.etsi.osl.model.MANOprovider;
+import org.etsi.osl.model.nfv.Category;
+import org.etsi.osl.model.nfv.MANOprovider;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/NSDOBDRepository.java b/src/main/java/portal/api/repo/NSDOBDRepository.java
index d6756bbcb37d06591d592c50d601b10b45850589..71cf7586f5a508580a1d5987e44d39d0b95a7907 100644
--- a/src/main/java/portal/api/repo/NSDOBDRepository.java
+++ b/src/main/java/portal/api/repo/NSDOBDRepository.java
@@ -23,7 +23,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
 
 /**
  * @author ctranoris
diff --git a/src/main/java/portal/api/repo/NSDsRepository.java b/src/main/java/portal/api/repo/NSDsRepository.java
index 188dee38d769c863a68c136221d6a06eeafab996..3eed7160fa590a3971e85d9d84706d1403e8655b 100644
--- a/src/main/java/portal/api/repo/NSDsRepository.java
+++ b/src/main/java/portal/api/repo/NSDsRepository.java
@@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.ExperimentMetadata;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/PortalPropertiesRepository.java b/src/main/java/portal/api/repo/PortalPropertiesRepository.java
index ff90483a4dd3bb12cd60e61e1ab5d143314bde5e..1e9f63f71107aedb98669e548ac41667c8f5606f 100644
--- a/src/main/java/portal/api/repo/PortalPropertiesRepository.java
+++ b/src/main/java/portal/api/repo/PortalPropertiesRepository.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.PortalProperty;
+import org.etsi.osl.model.nfv.PortalProperty;
 
 /**
  * @author ctranoris
diff --git a/src/main/java/portal/api/repo/ProductRepository.java b/src/main/java/portal/api/repo/ProductRepository.java
index ccb478ed88329661c2d01034b62db1613757c5db..c3f7ee5f19ab6ba1540e2086f377d3d954d2e04c 100644
--- a/src/main/java/portal/api/repo/ProductRepository.java
+++ b/src/main/java/portal/api/repo/ProductRepository.java
@@ -25,7 +25,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.Product;
+import org.etsi.osl.model.nfv.Product;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/UsersRepository.java b/src/main/java/portal/api/repo/UsersRepository.java
index c711c369c05e221f9176552cf471201b7d61f3e0..cef5998e3327f1419219350fddc4a1ee4992962e 100644
--- a/src/main/java/portal/api/repo/UsersRepository.java
+++ b/src/main/java/portal/api/repo/UsersRepository.java
@@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.PortalUser;
+import org.etsi.osl.model.nfv.PortalUser;
 
 /**
  * 
diff --git a/src/main/java/portal/api/repo/VFImageRepository.java b/src/main/java/portal/api/repo/VFImageRepository.java
index 8d8ee02fdda89e0668c197d93742000a041de8e7..5a620ce1bb7840aa78cefd79101be25b17301a95 100644
--- a/src/main/java/portal/api/repo/VFImageRepository.java
+++ b/src/main/java/portal/api/repo/VFImageRepository.java
@@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.VFImage;
+import org.etsi.osl.model.nfv.VFImage;
 
 
 /**
diff --git a/src/main/java/portal/api/repo/VxFOBDRepository.java b/src/main/java/portal/api/repo/VxFOBDRepository.java
index a545c2060d54188a834fcee9769c23c0965c2ba5..070c492126710a4df458ae12672637c5bafbe5d9 100644
--- a/src/main/java/portal/api/repo/VxFOBDRepository.java
+++ b/src/main/java/portal/api/repo/VxFOBDRepository.java
@@ -25,8 +25,8 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.MANOprovider;
-import org.etsi.osl.model.VxFOnBoardedDescriptor;
+import org.etsi.osl.model.nfv.MANOprovider;
+import org.etsi.osl.model.nfv.VxFOnBoardedDescriptor;
 
 /**
  * @author ctranoris
diff --git a/src/main/java/portal/api/repo/VxFsRepository.java b/src/main/java/portal/api/repo/VxFsRepository.java
index 0de98acf74fad23983fc376b323084991c2aa607..9c17de108925b3cd1d5ebf551c2690c86edbe70a 100644
--- a/src/main/java/portal/api/repo/VxFsRepository.java
+++ b/src/main/java/portal/api/repo/VxFsRepository.java
@@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.stereotype.Repository;
 
-import org.etsi.osl.model.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFMetadata;
 
 
 /**
diff --git a/src/main/java/portal/api/service/CategoryService.java b/src/main/java/portal/api/service/CategoryService.java
index 4495b5c3783c221ad689333d629aba4927208746..c02b4158418c5aecebb90aa01cdd16d2ed8652c0 100644
--- a/src/main/java/portal/api/service/CategoryService.java
+++ b/src/main/java/portal/api/service/CategoryService.java
@@ -27,7 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.Category;
+import org.etsi.osl.model.nfv.Category;
 import jakarta.annotation.PostConstruct;
 import portal.api.repo.CategoriesRepository;
 
diff --git a/src/main/java/portal/api/service/DeploymentDescriptorService.java b/src/main/java/portal/api/service/DeploymentDescriptorService.java
index 5b78a1ef80ca1fbc821e644418da30545e55bc49..246c7b5bfe320e2aff97b69542a95064e8f62c74 100644
--- a/src/main/java/portal/api/service/DeploymentDescriptorService.java
+++ b/src/main/java/portal/api/service/DeploymentDescriptorService.java
@@ -44,15 +44,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.etsi.osl.model.ConstituentVxF;
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.DeploymentDescriptorStatus;
-import org.etsi.osl.model.DeploymentDescriptorVxFPlacement;
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
-import org.etsi.osl.model.Infrastructure;
-import org.etsi.osl.model.MANOprovider;
-import org.etsi.osl.model.PortalUser;
+import org.etsi.osl.model.nfv.ConstituentVxF;
+import org.etsi.osl.model.nfv.DeploymentDescriptor;
+import org.etsi.osl.model.nfv.DeploymentDescriptorStatus;
+import org.etsi.osl.model.nfv.DeploymentDescriptorVxFPlacement;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.Infrastructure;
+import org.etsi.osl.model.nfv.MANOprovider;
+import org.etsi.osl.model.nfv.PortalUser;
 import jakarta.persistence.EntityManagerFactory;
 //import portal.api.centrallog.CLevel;
 //import portal.api.centrallog.CentralLogger;
@@ -226,7 +226,15 @@ public class DeploymentDescriptorService {
 	        Hibernate.initialize(dd.getDeploymentDescriptorVxFInstanceInfo());
 	        Hibernate.initialize(dd.getMentor().getRoles());
 	        Hibernate.initialize(dd.getInfrastructureForAll().getRefSupportedImages());
-	        Hibernate.initialize(dd.getExperiment().getConstituentVxF());
+            Hibernate.initialize(dd.getExperiment().getConstituentVxF());
+            for (ConstituentVxF cvxf : dd.getExperiment().getConstituentVxF()) {
+              Hibernate.initialize( cvxf.getVxfref().getCategories());
+              Hibernate.initialize( cvxf.getVxfref().getExtensions() );
+              Hibernate.initialize( cvxf.getVxfref().getValidationJobs() );
+              Hibernate.initialize( cvxf.getVxfref().getSupportedMANOPlatforms() );
+              Hibernate.initialize( cvxf.getVxfref().getVxfOnBoardedDescriptors() );
+              Hibernate.initialize( cvxf.getVxfref().getVfimagesVDU() );
+            }
 	        Hibernate.initialize(dd.getExperimentFullDetails().getCategories());
 	        Hibernate.initialize(dd.getExperimentFullDetails().getExtensions());
 	        Hibernate.initialize(dd.getExperimentFullDetails().getValidationJobs());
diff --git a/src/main/java/portal/api/service/InfrastructureService.java b/src/main/java/portal/api/service/InfrastructureService.java
index 8c5faf96ce2c9767915e52384db03ba08eaa2bd8..b6f88bae8eb771ac69402b8dfc43d133cfbaf049 100644
--- a/src/main/java/portal/api/service/InfrastructureService.java
+++ b/src/main/java/portal/api/service/InfrastructureService.java
@@ -31,7 +31,7 @@ import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.Infrastructure;
+import org.etsi.osl.model.nfv.Infrastructure;
 import portal.api.repo.InfrastructureRepository;
 
 
diff --git a/src/main/java/portal/api/service/ManoPlatformService.java b/src/main/java/portal/api/service/ManoPlatformService.java
index 0722dcb1f587c31dc70be4ae816e30f15426f81a..860a4fe60e2c9e616638938362e9fc283fabe927 100644
--- a/src/main/java/portal/api/service/ManoPlatformService.java
+++ b/src/main/java/portal/api/service/ManoPlatformService.java
@@ -25,7 +25,7 @@ import java.util.Optional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.MANOplatform;
+import org.etsi.osl.model.nfv.MANOplatform;
 import portal.api.repo.ManoPlatformRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/ManoProviderService.java b/src/main/java/portal/api/service/ManoProviderService.java
index 5836144507e69e048bffccf85950d1385164a35d..0efbeac79c1589541c07fec8cde11a8dd7679d39 100644
--- a/src/main/java/portal/api/service/ManoProviderService.java
+++ b/src/main/java/portal/api/service/ManoProviderService.java
@@ -31,7 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import org.etsi.osl.model.MANOprovider;
+import org.etsi.osl.model.nfv.MANOprovider;
 import portal.api.repo.ManoProvidersRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/NSDOBDService.java b/src/main/java/portal/api/service/NSDOBDService.java
index 9d287d9d06d879f6788c3d194e86839e732eeba3..019c52a3afbeb3a77a981c72b370ead8617e4094 100644
--- a/src/main/java/portal/api/service/NSDOBDService.java
+++ b/src/main/java/portal/api/service/NSDOBDService.java
@@ -31,7 +31,7 @@ import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.ExperimentOnBoardDescriptor;
+import org.etsi.osl.model.nfv.ExperimentOnBoardDescriptor;
 import portal.api.repo.NSDOBDRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/NSDService.java b/src/main/java/portal/api/service/NSDService.java
index 40e59914cf3094921b75ceb443ed6207d2aa32be..a81aa33877fcf559358b8c93970b13bdb9be1b6a 100644
--- a/src/main/java/portal/api/service/NSDService.java
+++ b/src/main/java/portal/api/service/NSDService.java
@@ -29,7 +29,7 @@ import com.fasterxml.jackson.datatype.hibernate5.jakarta.Hibernate5JakartaModule
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.ExperimentMetadata;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
 import portal.api.repo.NSDsRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/PortalPropertiesService.java b/src/main/java/portal/api/service/PortalPropertiesService.java
index 5254dc150acf00ec126c47674729d9f92d6b9d8d..c3669750b673f324134602d1eb9183b2e24deb3d 100644
--- a/src/main/java/portal/api/service/PortalPropertiesService.java
+++ b/src/main/java/portal/api/service/PortalPropertiesService.java
@@ -30,7 +30,7 @@ import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.PortalProperty;
+import org.etsi.osl.model.nfv.PortalProperty;
 import jakarta.annotation.PostConstruct;
 import portal.api.repo.PortalPropertiesRepository;
 
diff --git a/src/main/java/portal/api/service/ProductService.java b/src/main/java/portal/api/service/ProductService.java
index 25b001de72f77363ac2b6f905272242b3c83fe93..709a53be4439fcf842b0d2899896eaa244c8831e 100644
--- a/src/main/java/portal/api/service/ProductService.java
+++ b/src/main/java/portal/api/service/ProductService.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.Product;
+import org.etsi.osl.model.nfv.Product;
 import portal.api.repo.ProductRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/UsersService.java b/src/main/java/portal/api/service/UsersService.java
index 0d40df0016ac7f33780983d93774043b8b839834..561f5ca6b3d9b1384f3c3b56c8e037b5875433d8 100644
--- a/src/main/java/portal/api/service/UsersService.java
+++ b/src/main/java/portal/api/service/UsersService.java
@@ -36,8 +36,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import org.etsi.osl.model.PortalUser;
-import org.etsi.osl.model.UserRoleType;
+import org.etsi.osl.model.nfv.PortalUser;
+import org.etsi.osl.model.nfv.UserRoleType;
 import jakarta.annotation.PostConstruct;
 import portal.api.repo.UsersRepository;
 
diff --git a/src/main/java/portal/api/service/VFImageService.java b/src/main/java/portal/api/service/VFImageService.java
index c561f0aa670db30017f0698a0ec51b149934d5d0..66511dfce40826f6b5b8c4126a79e00700888551 100644
--- a/src/main/java/portal/api/service/VFImageService.java
+++ b/src/main/java/portal/api/service/VFImageService.java
@@ -25,7 +25,7 @@ import java.util.Optional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.VFImage;
+import org.etsi.osl.model.nfv.VFImage;
 import portal.api.repo.VFImageRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/VxFOBDService.java b/src/main/java/portal/api/service/VxFOBDService.java
index 8c6e1b34d4c57276edb42a3e8ac6b9a1906f628b..1fa997ce7c43d7dc08cb1d986bacd70c45e40d5d 100644
--- a/src/main/java/portal/api/service/VxFOBDService.java
+++ b/src/main/java/portal/api/service/VxFOBDService.java
@@ -31,9 +31,9 @@ import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.MANOprovider;
-import org.etsi.osl.model.VxFMetadata;
-import org.etsi.osl.model.VxFOnBoardedDescriptor;
+import org.etsi.osl.model.nfv.MANOprovider;
+import org.etsi.osl.model.nfv.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFOnBoardedDescriptor;
 import portal.api.repo.VxFOBDRepository;
 
 @Service
diff --git a/src/main/java/portal/api/service/VxFService.java b/src/main/java/portal/api/service/VxFService.java
index d20c70181f24f6beec0665423a5f2b7c59bc7edf..33f91225c429a026d0342dc988904e73844d6ab4 100644
--- a/src/main/java/portal/api/service/VxFService.java
+++ b/src/main/java/portal/api/service/VxFService.java
@@ -29,7 +29,7 @@ import com.fasterxml.jackson.datatype.hibernate5.jakarta.Hibernate5JakartaModule
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import org.etsi.osl.model.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFMetadata;
 import portal.api.repo.VxFsRepository;
 
 @Service
diff --git a/src/main/java/portal/api/validation/ci/ValidationCIClient.java b/src/main/java/portal/api/validation/ci/ValidationCIClient.java
index 181d8f1f1c5bc0df592c6a39e807ed10f5fba6f2..102ab788d62d7b5f8822519a8e6ce173eb49da06 100644
--- a/src/main/java/portal/api/validation/ci/ValidationCIClient.java
+++ b/src/main/java/portal/api/validation/ci/ValidationCIClient.java
@@ -23,7 +23,7 @@ package portal.api.validation.ci;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.etsi.osl.model.VxFMetadata;
+import org.etsi.osl.model.nfv.VxFMetadata;
 
 /**
  * @author ctranoris
diff --git a/src/main/java/portal/api/validation/ci/ValidationCIRouteBuilder.java b/src/main/java/portal/api/validation/ci/ValidationCIRouteBuilder.java
index c98ed075174c3dc36a12dfc69be54ac60215a560..59bce5270d5b187c4eb9463194068f40e11e5454 100644
--- a/src/main/java/portal/api/validation/ci/ValidationCIRouteBuilder.java
+++ b/src/main/java/portal/api/validation/ci/ValidationCIRouteBuilder.java
@@ -33,11 +33,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.Product;
-import org.etsi.osl.model.ValidationJob;
-import org.etsi.osl.model.ValidationStatus;
-import org.etsi.osl.model.VxFMetadata;
+import org.etsi.osl.model.nfv.ExperimentMetadata;
+import org.etsi.osl.model.nfv.Product;
+import org.etsi.osl.model.nfv.ValidationJob;
+import org.etsi.osl.model.nfv.ValidationStatus;
+import org.etsi.osl.model.nfv.VxFMetadata;
 import portal.api.service.PortalPropertiesService;
 
 
diff --git a/src/test/java/portal/api/InMemoryDBIntegrationTest.java b/src/test/java/portal/api/InMemoryDBIntegrationTest.java
index bae002afe9b02e51fcc1ec0d1a6fac5fd055da27..79f841ec27f7ddddea03bd2fbda45df04073f2ea 100644
--- a/src/test/java/portal/api/InMemoryDBIntegrationTest.java
+++ b/src/test/java/portal/api/InMemoryDBIntegrationTest.java
@@ -20,36 +20,21 @@
 package portal.api;
 
 
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.hamcrest.CoreMatchers.is;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.etsi.osl.model.nfv.*;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.http.MediaType;
-import org.springframework.mock.web.MockHttpSession;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors;
@@ -60,41 +45,38 @@ import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder;
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.transaction.annotation.Transactional;
+import portal.api.mano.MANOController;
+import portal.api.service.*;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 
-import org.etsi.osl.model.DeploymentDescriptor;
-import org.etsi.osl.model.ExperimentMetadata;
-import org.etsi.osl.model.Infrastructure;
-import org.etsi.osl.model.UserSession;
-import org.etsi.osl.model.VxFMetadata;
-import portal.api.mano.MANOController;
-import portal.api.service.CategoryService;
-import portal.api.service.DeploymentDescriptorService;
-import portal.api.service.InfrastructureService;
-import portal.api.service.ManoPlatformService;
-import portal.api.service.ManoProviderService;
-import portal.api.service.NSDOBDService;
-import portal.api.service.NSDService;
-import portal.api.service.PortalPropertiesService;
-import portal.api.service.ProductService;
-import portal.api.service.UsersService;
-import portal.api.service.VFImageService;
-import portal.api.service.VxFOBDService;
-import portal.api.service.VxFService;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
 
 @RunWith(SpringRunner.class)
 @Transactional
-@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.MOCK , classes = PortalApplication.class)
+@SpringBootTest(
+		webEnvironment = SpringBootTest.WebEnvironment.MOCK ,
+		classes = PortalApplication.class
+)
 //@AutoConfigureTestDatabase
-@AutoConfigureMockMvc 
+@AutoConfigureMockMvc
 @ActiveProfiles("testing")
-@TestPropertySource(properties = {"spring.cloud.consul.config.enabled=false",
-		"spring.cloud.bus.enabled=false",
-		"spring.cloud.discovery.enabled=false",
-		"spring.cloud.consul.enabled=false"})
+@TestPropertySource(
+		properties ={
+				"spring.cloud.consul.config.enabled=false",
+				"spring.cloud.bus.enabled=false",
+				"spring.cloud.discovery.enabled=false",
+				"spring.cloud.consul.enabled=false"
+		}
+)
+
 
 
 
@@ -102,7 +84,7 @@ public class InMemoryDBIntegrationTest {
 
 
 	private static final transient Log logger = LogFactory.getLog( InMemoryDBIntegrationTest.class.getName());
-	
+
     @Autowired
     private MockMvc mvc;
 
@@ -146,9 +128,9 @@ public class InMemoryDBIntegrationTest {
 
 	@Autowired
 	DeploymentDescriptorService deploymentDescriptorService;
-	
-	
-	
+
+
+
 	@Test
 	public void whenFindByName_thenReturnVxF() {
 	    // given
@@ -156,14 +138,14 @@ public class InMemoryDBIntegrationTest {
 		VxFMetadata vxf = new VxFMetadata();
 		vxf.setName("aTestVxF");
 		vxfService.updateProductInfo(vxf);
-	 
+
 	    // when
 	    VxFMetadata found = vxfService.getVxFByName(vxf.getName());
-	 
+
 	    // then
 	    assertThat(found.getName()).isEqualTo( vxf.getName() );
 	}
-	
+
 	@Test
 	public void countDefaultProperties() {
 		assertThat( propsService.getProperties().size() )
@@ -181,28 +163,18 @@ public class InMemoryDBIntegrationTest {
 		 */
 		mvc.perform(get("/admin/users")
 	            .with( SecurityMockMvcRequestPostProcessors.csrf())
-				.contentType(MediaType.APPLICATION_JSON)				
+				.contentType(MediaType.APPLICATION_JSON)
 				)
 	    	.andExpect(status().is(401) );
-		
+
 		UserSession pu = new UserSession();
 		pu.setUsername("admin");
 		pu.setPassword("changeme");
-		
+
 //		/**
 //		 * auth
 //		 */
-//		 HttpSession session = mvc.perform(post("/sessions")
-//		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-//				.contentType(MediaType.APPLICATION_JSON)
-//				.content( toJson( pu ) ))
-//			    .andExpect(status().isOk())
-//			    .andExpect(content()
-//			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-//			    .andExpect(jsonPath("username", is("admin")))
-//			    .andReturn().getRequest().getSession();
-		 
-		 
+		usersService.addPortalUserToUsersFromAuthServer("osadmin", "admin@admin.com", "First", "Last");
 
 		mvc.perform(get("/categories")
 		        .with( SecurityMockMvcRequestPostProcessors.csrf())
@@ -212,397 +184,398 @@ public class InMemoryDBIntegrationTest {
 	    	.andExpect(content()
 	    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
 	    	.andExpect( jsonPath("$[0].name", is("None")) );
-		
 
-		
+
+
 		/**
 		 * with auth session
 		 */
 		mvc.perform(get("/admin/categories")
 	            .with( SecurityMockMvcRequestPostProcessors.csrf())
 	            .with( SecurityMockMvcRequestPostProcessors.user("osadmin").roles("ADMIN") )
-				.contentType(MediaType.APPLICATION_JSON)				
+				.contentType(MediaType.APPLICATION_JSON)
 				)
 	    	.andExpect(status().isOk())
 	    	.andExpect(content()
 	    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
 	    	.andExpect( jsonPath("$[0].name", is("None")) );
 	}
-	
+
 	 static byte[] toJson(Object object) throws IOException {
 	        ObjectMapper mapper = new ObjectMapper();
 	        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 	        return mapper.writeValueAsBytes(object);
 	    }
-	 
+
 	 static <T> T toJsonObj(String content, Class<T> valueType)  throws IOException {
 	        ObjectMapper mapper = new ObjectMapper();
 	        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 	        return mapper.readValue( content, valueType);
 	    }
-	 
 
-	@WithMockUser(username="admin", roles = {"ADMIN","USER"})
-	@Test
-	public void addVxF() throws Exception {
-		
-		UserSession pu = new UserSession();
-		pu.setUsername("admin");
-		pu.setPassword("changeme");
-		
-//		/**
-//		 * auth
-//		 */
-//		 HttpSession session = mvc.perform(post("/sessions")
+//	@WithMockUser(username="admin", roles = {"ADMIN","USER"})
+//	@Test
+//	public void addVxF() throws Exception {
+//
+//		UserSession pu = new UserSession();
+//		pu.setUsername("admin");
+//		pu.setPassword("changeme");
+//		usersService.addPortalUserToUsersFromAuthServer("admin", "admin@admin.com", "First", "Last");
+//
+////		/**
+////		 * auth
+////		 */
+////		 HttpSession session = mvc.perform(post("/sessions")
+////		            .with( SecurityMockMvcRequestPostProcessors.csrf())
+////				.contentType(MediaType.APPLICATION_JSON)
+////				.content( toJson( pu ) ))
+////			    .andExpect(status().isOk())
+////			    .andExpect(content()
+////			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+////			    .andExpect(jsonPath("username", is("admin")))
+////			    .andReturn().getRequest().getSession();
+//
+//
+//
+//
+//		File vxfFile = new File( "src/test/resources/testvxf.txt" );
+//		InputStream in = new FileInputStream( vxfFile );
+//		String resvxf = IOUtils.toString(in, "UTF-8");
+//		logger.info( "resvxf ========> " + resvxf );
+//
+//		File gz = new File( "src/test/resources/cirros_vnf.tar.gz" );
+//		InputStream ing = new FileInputStream( gz );
+//		MockMultipartFile prodFile = new MockMultipartFile("prodFile", "cirros_vnf.tar.gz", "application/x-gzip", IOUtils.toByteArray(ing));
+//
+//
+////        Map<String, Object> sessionAttributes = new HashMap<>();
+////        Enumeration<String> attr = session.getAttributeNames();
+////        while ( attr.hasMoreElements()) {
+////        	String aname = attr.nextElement();
+////        	System.out.println("aname is: " + aname);
+////        	System.out.println("Value is: " + session.getAttribute(aname));
+////        	sessionAttributes.put(aname, session.getAttribute(aname));
+////        }
+//
+//
+//
+//
+//		MockMultipartHttpServletRequestBuilder mockMultipartHttpServletRequestBuilder =
+//        		(MockMultipartHttpServletRequestBuilder) multipart("/admin/vxfs")
+//        		 .with( SecurityMockMvcRequestPostProcessors.csrf())
+// 	            .with( SecurityMockMvcRequestPostProcessors.user("admin").roles("ADMIN") ) ;
+//
+//        mockMultipartHttpServletRequestBuilder.file( prodFile );
+//        mockMultipartHttpServletRequestBuilder.param("vxf", resvxf);
+//
+//        mvc.perform(mockMultipartHttpServletRequestBuilder).andExpect(status().isOk());
+//
+////		 mvc.perform(MockMvcRequestBuilders.multipart( "/admin/vxfs")
+////				 .file(prodFile)
+////				 .param("vxf", resvxf)
+////				 .session( (MockHttpSession) session )
+////				 )
+////	    	.andExpect(status().isOk());
+//
+//		 assertThat( vxfService.getVxFsByCategory((long) -1) .size() )
+//			.isEqualTo( 1 );
+//
+//		 mvc.perform(get("/categories")
+//        		 .with( SecurityMockMvcRequestPostProcessors.csrf())
+//					.contentType(MediaType.APPLICATION_JSON))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//		    	.andExpect( jsonPath("$[0].name", is("None")) )
+//		    	.andExpect( jsonPath("$[1].name", is("Networking")))
+//		    	.andExpect( jsonPath("$[1].vxFscount", is( 1 )));
+//
+//	}
+
+
+//	@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
+//	@Test
+//	public void deleteVxF() throws Exception {
+//
+//		addVxF();
+//
+//		UserSession pu = new UserSession();
+//		pu.setUsername("admin");
+//		pu.setPassword("changeme");
+//
+////		/**
+////		 * auth
+////		 */
+////		 HttpSession session = mvc.perform(post("/sessions")
+////		            .with( SecurityMockMvcRequestPostProcessors.csrf())
+////				.contentType(MediaType.APPLICATION_JSON)
+////				.content( toJson( pu ) ))
+////			    .andExpect(status().isOk())
+////			    .andExpect(content()
+////			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+////			    .andExpect(jsonPath("username", is("admin")))
+////			    .andReturn().getRequest().getSession();
+//
+//		 assertThat( vxfService.getVxFsByCategory((long) -1) .size() )
+//			.isEqualTo( 1 );
+//
+//		 mvc.perform(get("/categories")
+//				 .with( SecurityMockMvcRequestPostProcessors.csrf())
+//					.contentType(MediaType.APPLICATION_JSON))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//		    	.andExpect( jsonPath("$[0].name", is("None")) )
+//		    	.andExpect( jsonPath("$[1].name", is("Networking")))
+//		    	.andExpect( jsonPath("$[1].vxFscount", is( 1 )))
+//		    	.andExpect( jsonPath("$[2].name", is("Service")))
+//		    	.andExpect( jsonPath("$[2].vxFscount", is( 1 )));
+//
+//		 String content =  mvc.perform(get("/admin/vxfs")
+//					.contentType(MediaType.APPLICATION_JSON)
+//					 .with( SecurityMockMvcRequestPostProcessors.csrf()))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//			    .andExpect(jsonPath("$[0].name", is( "cirros_vnfd" )))
+//			    .andReturn().getResponse().getContentAsString();
+//
+//		 VxFMetadata[] v =  toJsonObj( content, VxFMetadata[].class);
+//
+//		 mvc.perform(delete("/admin/vxfs/" + v[0].getId())
+//				 .with( SecurityMockMvcRequestPostProcessors.csrf()))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON));
+//
+//		 assertThat( vxfService.getVxFsByCategory((long) -1) .size() )
+//			.isEqualTo( 1 );
+//
+//	}
+
+
+//	@WithMockUser(username="admin", roles = {"ADMIN","USER"})
+//	@Test
+//	public void addNSD() throws Exception {
+//
+//		UserSession pu = new UserSession();
+//		pu.setUsername("osadmin");
+//		pu.setPassword("changeme");
+//		usersService.addPortalUserToUsersFromAuthServer("osadmin", "admin@admin.com", "First", "Last");
+//
+////		/**
+////		 * auth
+////		 */
+////		 HttpSession session = mvc.perform(post("/sessions")
+////		            .with( SecurityMockMvcRequestPostProcessors.csrf())
+////				.contentType(MediaType.APPLICATION_JSON)
+////				.content( toJson( pu ) ))
+////			    .andExpect(status().isOk())
+////			    .andExpect(content()
+////			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+////			    .andExpect(jsonPath("username", is("admin")))
+////			    .andReturn().getRequest().getSession();
+//
+//
+//
+//		 	File vxfFile = new File( "src/test/resources/testvxf.txt" );
+//			InputStream invxf = new FileInputStream( vxfFile );
+//			String resvxf = IOUtils.toString( invxf, "UTF-8");
+//			logger.info( "resvxf ========> " + resvxf );
+//
+//			File gzvxf = new File( "src/test/resources/cirros_vnf.tar.gz" );
+//			InputStream inggzvxf = new FileInputStream( gzvxf );
+//			MockMultipartFile prodFilevxf = new MockMultipartFile("prodFile", "cirros_vnf.tar.gz", "application/x-gzip", IOUtils.toByteArray( inggzvxf ));
+//
+////	        Map<String, Object> sessionAttributes = new HashMap<>();
+////	        Enumeration<String> attr = session.getAttributeNames();
+////	        while ( attr.hasMoreElements()) {
+////	        	String aname = attr.nextElement();
+////	        	System.out.println("aname is: " + aname);
+////	        	System.out.println("Value is: " + session.getAttribute(aname));
+////	        	sessionAttributes.put(aname, session.getAttribute(aname));
+////	        }
+//
+//			MockMultipartHttpServletRequestBuilder mockMultipartHttpServletRequestBuilder =
+//	        		(MockMultipartHttpServletRequestBuilder) multipart("/admin/vxfs")
 //		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-//				.contentType(MediaType.APPLICATION_JSON)
-//				.content( toJson( pu ) ))
-//			    .andExpect(status().isOk())
-//			    .andExpect(content()
-//			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-//			    .andExpect(jsonPath("username", is("admin")))
-//			    .andReturn().getRequest().getSession();
-		 			 
-		 
-
-
-		File vxfFile = new File( "src/test/resources/testvxf.txt" );
-		InputStream in = new FileInputStream( vxfFile );
-		String resvxf = IOUtils.toString(in, "UTF-8");
-		logger.info( "resvxf ========> " + resvxf );
-
-		File gz = new File( "src/test/resources/cirros_vnf.tar.gz" );
-		InputStream ing = new FileInputStream( gz );
-		MockMultipartFile prodFile = new MockMultipartFile("prodFile", "cirros_vnf.tar.gz", "application/x-gzip", IOUtils.toByteArray(ing));
-		     
-        
-//        Map<String, Object> sessionAttributes = new HashMap<>();
-//        Enumeration<String> attr = session.getAttributeNames();
-//        while ( attr.hasMoreElements()) {
-//        	String aname = attr.nextElement();
-//        	System.out.println("aname is: " + aname);
-//        	System.out.println("Value is: " + session.getAttribute(aname));
-//        	sessionAttributes.put(aname, session.getAttribute(aname));
-//        }
-             
-        
-      
-        
-		MockMultipartHttpServletRequestBuilder mockMultipartHttpServletRequestBuilder = 
-        		(MockMultipartHttpServletRequestBuilder) multipart("/admin/vxfs")
-        		 .with( SecurityMockMvcRequestPostProcessors.csrf())
- 	            .with( SecurityMockMvcRequestPostProcessors.user("admin").roles("ADMIN") ) ;
-        
-        mockMultipartHttpServletRequestBuilder.file( prodFile );
-        mockMultipartHttpServletRequestBuilder.param("vxf", resvxf);
-        
-        mvc.perform(mockMultipartHttpServletRequestBuilder).andExpect(status().isOk());
-        		
-//		 mvc.perform(MockMvcRequestBuilders.multipart( "/admin/vxfs")
+//		            .with( SecurityMockMvcRequestPostProcessors.user("osadmin").roles("ADMIN") ) ;
+//
+//	        mockMultipartHttpServletRequestBuilder.file( prodFilevxf );
+//	        mockMultipartHttpServletRequestBuilder.param("vxf", resvxf);
+//
+//	        mvc.perform(mockMultipartHttpServletRequestBuilder).andExpect(status().isOk());
+//
+//
+//
+//		File nsdFile = new File( "src/test/resources/testnsd.txt" );
+//		InputStream in = new FileInputStream( nsdFile );
+//		String resnsd = IOUtils.toString(in, "UTF-8");
+//		logger.info( "resnsd ========> " + resnsd );
+//
+//		File gz = new File( "src/test/resources/cirros_2vnf_ns.tar.gz" );
+//		InputStream ing = new FileInputStream( gz );
+//		MockMultipartFile prodFile = new MockMultipartFile("prodFile", "cirros_2vnf_ns.tar.gz", "application/x-gzip", IOUtils.toByteArray(ing));
+//
+//
+//		 mvc.perform(MockMvcRequestBuilders.multipart("/admin/experiments")
 //				 .file(prodFile)
-//				 .param("vxf", resvxf)
-//				 .session( (MockHttpSession) session )
-//				 )
+//				 .param("exprm", resnsd))
 //	    	.andExpect(status().isOk());
-		 
-		 assertThat( vxfService.getVxFsByCategory((long) -1) .size() )
-			.isEqualTo( 1 );
-		 
-		 mvc.perform(get("/categories")
-        		 .with( SecurityMockMvcRequestPostProcessors.csrf())
-					.contentType(MediaType.APPLICATION_JSON))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-		    	.andExpect( jsonPath("$[0].name", is("None")) )
-		    	.andExpect( jsonPath("$[1].name", is("Networking")))
-		    	.andExpect( jsonPath("$[1].vxFscount", is( 1 )));
-
-	}
-	
-
-	@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
-	@Test
-	public void deleteVxF() throws Exception {
-		
-		addVxF(); 
-		
-		UserSession pu = new UserSession();
-		pu.setUsername("admin");
-		pu.setPassword("changeme");
-		
-//		/**
-//		 * auth
-//		 */
-//		 HttpSession session = mvc.perform(post("/sessions")
+//
+//		 assertThat( nsdService.getdNSDsByCategory((long) -1) .size() )
+//			.isEqualTo( 1 );
+//
+//		 ExperimentMetadata ansd = nsdService.getNSDByName( "cirros_2vnf_nsd" );
+//
+//
+//		 assertThat(ansd).isNotNull();
+//
+//		 assertThat(ansd.getConstituentVxF().size()).isEqualTo(2);
+//
+//
+//		 mvc.perform(get("/categories")
 //		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-//				.contentType(MediaType.APPLICATION_JSON)
-//				.content( toJson( pu ) ))
-//			    .andExpect(status().isOk())
-//			    .andExpect(content()
-//			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-//			    .andExpect(jsonPath("username", is("admin")))
-//			    .andReturn().getRequest().getSession();
-		 
-		 assertThat( vxfService.getVxFsByCategory((long) -1) .size() )
-			.isEqualTo( 1 );
-
-		 mvc.perform(get("/categories")
-				 .with( SecurityMockMvcRequestPostProcessors.csrf())
-					.contentType(MediaType.APPLICATION_JSON))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-		    	.andExpect( jsonPath("$[0].name", is("None")) )
-		    	.andExpect( jsonPath("$[1].name", is("Networking")))
-		    	.andExpect( jsonPath("$[1].vxFscount", is( 1 )))
-		    	.andExpect( jsonPath("$[2].name", is("Service")))
-		    	.andExpect( jsonPath("$[2].vxFscount", is( 1 )));
-		 
-		 String content =  mvc.perform(get("/admin/vxfs")
-					.contentType(MediaType.APPLICATION_JSON)
-					 .with( SecurityMockMvcRequestPostProcessors.csrf()))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-			    .andExpect(jsonPath("$[0].name", is( "cirros_vnfd" )))
-			    .andReturn().getResponse().getContentAsString();
-		 
-		 VxFMetadata[] v =  toJsonObj( content, VxFMetadata[].class);
-		 
-		 mvc.perform(delete("/admin/vxfs/" + v[0].getId())
-				 .with( SecurityMockMvcRequestPostProcessors.csrf()))		 
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON));
-		 
-		 assertThat( vxfService.getVxFsByCategory((long) -1) .size() )
-			.isEqualTo( 1 );
-
-	}
-	
-	
-
-	@WithMockUser(username="admin", roles = {"ADMIN","USER"})
-	@Test
-	public void addNSD() throws Exception {
-		
-		UserSession pu = new UserSession();
-		pu.setUsername("admin");
-		pu.setPassword("changeme");
-		
-//		/**
-//		 * auth
-//		 */
-//		 HttpSession session = mvc.perform(post("/sessions")
+//					.contentType(MediaType.APPLICATION_JSON))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//		    	.andExpect( jsonPath("$[0].name", is("None")) )
+//		    	.andExpect( jsonPath("$[1].name", is("Networking")))
+//		    	.andExpect( jsonPath("$[1].appscount", is( 1 )));
+//
+//
+//
+//
+//		 //https://patras5g.eu/apiportal/services/api/repo/admin/deployments/
+//
+////		 session = mvc.perform(post("/sessions")
+////		            .with( SecurityMockMvcRequestPostProcessors.csrf())
+////				.contentType(MediaType.APPLICATION_JSON)
+////				.content( toJson( pu ) ))
+////			    .andExpect(status().isOk())
+////			    .andExpect(content()
+////			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+////			    .andExpect(jsonPath("username", is("admin")))
+////			    .andReturn().getRequest().getSession();
+//
+//			Infrastructure infr = new Infrastructure();
+//			infr.setName( "Cloudville" );
+//
+//			 mvc.perform(post("/admin/infrastructures")
+//			            .with( SecurityMockMvcRequestPostProcessors.csrf())
+//					.contentType(MediaType.APPLICATION_JSON)
+//					.content( toJson( infr ) )
+//					 )
+//			    	.andExpect(status().isOk())
+//			    	.andExpect(content()
+//			    	.contentTypeCompatibleWith(MediaType.APPLICATION_JSON));
+//
+//
+//		gz = new File( "src/test/resources/deploymentReq.txt" );
+//		ing = new FileInputStream( gz );
+//		resnsd = IOUtils.toString( ing, "UTF-8");
+//		DeploymentDescriptor ddesc =  toJsonObj( resnsd, DeploymentDescriptor.class );
+//
+//		 String strddescResponse = mvc.perform(post("/admin/deployments")
 //		            .with( SecurityMockMvcRequestPostProcessors.csrf())
 //				.contentType(MediaType.APPLICATION_JSON)
-//				.content( toJson( pu ) ))
-//			    .andExpect(status().isOk())
-//			    .andExpect(content()
-//			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-//			    .andExpect(jsonPath("username", is("admin")))
-//			    .andReturn().getRequest().getSession();
-		 			 
-		 
-
-		 	File vxfFile = new File( "src/test/resources/testvxf.txt" );
-			InputStream invxf = new FileInputStream( vxfFile );
-			String resvxf = IOUtils.toString( invxf, "UTF-8");
-			logger.info( "resvxf ========> " + resvxf );
-
-			File gzvxf = new File( "src/test/resources/cirros_vnf.tar.gz" );
-			InputStream inggzvxf = new FileInputStream( gzvxf );
-			MockMultipartFile prodFilevxf = new MockMultipartFile("prodFile", "cirros_vnf.tar.gz", "application/x-gzip", IOUtils.toByteArray( inggzvxf ));
-			     
-//	        Map<String, Object> sessionAttributes = new HashMap<>();
-//	        Enumeration<String> attr = session.getAttributeNames();
-//	        while ( attr.hasMoreElements()) {
-//	        	String aname = attr.nextElement();
-//	        	System.out.println("aname is: " + aname);
-//	        	System.out.println("Value is: " + session.getAttribute(aname));
-//	        	sessionAttributes.put(aname, session.getAttribute(aname));
-//	        }
-	        
-			MockMultipartHttpServletRequestBuilder mockMultipartHttpServletRequestBuilder = 
-	        		(MockMultipartHttpServletRequestBuilder) multipart("/admin/vxfs")
-		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-		            .with( SecurityMockMvcRequestPostProcessors.user("osadmin").roles("ADMIN") ) ;
-	        
-	        mockMultipartHttpServletRequestBuilder.file( prodFilevxf );
-	        mockMultipartHttpServletRequestBuilder.param("vxf", resvxf);
-	        
-	        mvc.perform(mockMultipartHttpServletRequestBuilder).andExpect(status().isOk());
-	        		
-	        
-
-		File nsdFile = new File( "src/test/resources/testnsd.txt" );
-		InputStream in = new FileInputStream( nsdFile );
-		String resnsd = IOUtils.toString(in, "UTF-8");
-		logger.info( "resnsd ========> " + resnsd );
-
-		File gz = new File( "src/test/resources/cirros_2vnf_ns.tar.gz" );
-		InputStream ing = new FileInputStream( gz );
-		MockMultipartFile prodFile = new MockMultipartFile("prodFile", "cirros_2vnf_ns.tar.gz", "application/x-gzip", IOUtils.toByteArray(ing));
-		     
-		 
-		 mvc.perform(MockMvcRequestBuilders.multipart("/admin/experiments")
-				 .file(prodFile)
-				 .param("exprm", resnsd))
-	    	.andExpect(status().isOk());
-		 
-		 assertThat( nsdService.getdNSDsByCategory((long) -1) .size() )
-			.isEqualTo( 1 );
-
-		 ExperimentMetadata ansd = nsdService.getNSDByName( "cirros_2vnf_nsd" );
-		 
-		 
-		 assertThat(ansd).isNotNull();
-		 
-		 assertThat(ansd.getConstituentVxF().size()).isEqualTo(2);
-		 
-		 
-		 mvc.perform(get("/categories")
-		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-					.contentType(MediaType.APPLICATION_JSON))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-		    	.andExpect( jsonPath("$[0].name", is("None")) )
-		    	.andExpect( jsonPath("$[1].name", is("Networking")))
-		    	.andExpect( jsonPath("$[1].appscount", is( 1 )));
-		 
-		 
-
-			
-		 //https://patras5g.eu/apiportal/services/api/repo/admin/deployments/
-
-//		 session = mvc.perform(post("/sessions")
-//		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-//				.contentType(MediaType.APPLICATION_JSON)
-//				.content( toJson( pu ) ))
-//			    .andExpect(status().isOk())
-//			    .andExpect(content()
-//			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-//			    .andExpect(jsonPath("username", is("admin")))
-//			    .andReturn().getRequest().getSession();
-		 
-			Infrastructure infr = new Infrastructure();
-			infr.setName( "Cloudville" );
-
-			 mvc.perform(post("/admin/infrastructures")
-			            .with( SecurityMockMvcRequestPostProcessors.csrf())
-					.contentType(MediaType.APPLICATION_JSON)
-					.content( toJson( infr ) )
-					 )				
-			    	.andExpect(status().isOk())
-			    	.andExpect(content()
-			    	.contentTypeCompatibleWith(MediaType.APPLICATION_JSON));
-			 
-
-		gz = new File( "src/test/resources/deploymentReq.txt" );
-		ing = new FileInputStream( gz );
-		resnsd = IOUtils.toString( ing, "UTF-8");
-		DeploymentDescriptor ddesc =  toJsonObj( resnsd, DeploymentDescriptor.class );
-				     
-		 String strddescResponse = mvc.perform(post("/admin/deployments")
-		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-				.contentType(MediaType.APPLICATION_JSON)
-				.content( toJson( ddesc ) )
-				 )				
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    	.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-			    .andReturn().getResponse().getContentAsString();
-		
-
-		 logger.info( "strddescResponse ========> " + strddescResponse );
-		 DeploymentDescriptor ddescResponse =  toJsonObj( strddescResponse, DeploymentDescriptor.class);
-
-		 assertThat(ddescResponse).isNotNull();
-		 assertThat(ddescResponse.getVxfPlacements().size()).isEqualTo(2);
-		 assertThat(ddescResponse.getVxfPlacements().get(0).getConstituentVxF() ).isNotNull();
-		 assertThat(ddescResponse.getVxfPlacements().get(0).getInfrastructure()  ).isNotNull();
-		 assertThat(ddescResponse.getVxfPlacements().get(1).getConstituentVxF() ).isNotNull();
-		 assertThat(ddescResponse.getVxfPlacements().get(1).getInfrastructure() ).isNotNull();
-
-	}
-
-
-	@WithMockUser(username="admin", roles = {"ADMIN","USER"})
-	@Test
-	public void deleteNSD() throws Exception {
-		
-		
-		UserSession pu = new UserSession();
-		pu.setUsername("admin");
-		pu.setPassword("changeme");
-		
-//		/**
-//		 * auth
-//		 */
-//		 HttpSession session = mvc.perform(post("/sessions")
-//		            .with( SecurityMockMvcRequestPostProcessors.csrf())
-//				.contentType(MediaType.APPLICATION_JSON)
-//				.content( toJson( pu ) ))
-//			    .andExpect(status().isOk())
-//			    .andExpect(content()
-//			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-//			    .andExpect(jsonPath("username", is("admin")))
-//			    .andReturn().getRequest().getSession();
-		 
-		 File nsdFile = new File( "src/test/resources/testnsd.txt" );
-			InputStream in = new FileInputStream( nsdFile );
-			String resnsd = IOUtils.toString(in, "UTF-8");
-			logger.info( "resnsd ========> " + resnsd );
-
-			File gz = new File( "src/test/resources/cirros_2vnf_ns.tar.gz" );
-			InputStream ing = new FileInputStream( gz );
-			MockMultipartFile prodFile = new MockMultipartFile("prodFile", "cirros_2vnf_ns.tar.gz", "application/x-gzip", IOUtils.toByteArray(ing));
-			     
-			 
-			 mvc.perform(MockMvcRequestBuilders.multipart("/admin/experiments")
-					 .file(prodFile)
-					 .param("exprm", resnsd) 
-					 .with( SecurityMockMvcRequestPostProcessors.csrf()))
-		    	.andExpect(status().isOk());
-		 
-		 assertThat( nsdService.getdNSDsByCategory((long) -1) .size() )
-			.isEqualTo( 1 );
-
-		 mvc.perform(get("/categories") 
-				 .with( SecurityMockMvcRequestPostProcessors.csrf())
-					.contentType(MediaType.APPLICATION_JSON))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-		    	.andExpect( jsonPath("$[0].name", is("None")) )
-		    	.andExpect( jsonPath("$[1].name", is("Networking")))
-		    	.andExpect( jsonPath("$[1].appscount", is( 1 )))
-		    	.andExpect( jsonPath("$[2].name", is("Service")))
-		    	.andExpect( jsonPath("$[2].appscount", is( 1 )));
-		 
-		 String content =  mvc.perform(get("/admin/experiments")
-				 .with( SecurityMockMvcRequestPostProcessors.csrf())
-					.contentType(MediaType.APPLICATION_JSON))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-		    	 .andExpect(jsonPath("$[0].name", is( "cirros_2vnf_nsd" )))
-			    .andReturn().getResponse().getContentAsString();
-		 
-
-		 ExperimentMetadata[] n =  toJsonObj( content, ExperimentMetadata[].class );
-		 
-		 mvc.perform(delete("/admin/experiments/" + n[0].getId() )
-				 .with( SecurityMockMvcRequestPostProcessors.csrf()))
-		    	.andExpect(status().isOk())
-		    	.andExpect(content()
-		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
-			   ;
-		 
-		 assertThat( nsdService.getdNSDsByCategory((long) -1) .size() )
-			.isEqualTo( 0 );
+//				.content( toJson( ddesc ) )
+//				 )
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    	.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//			    .andReturn().getResponse().getContentAsString();
+//
+//
+//		 logger.info( "strddescResponse ========> " + strddescResponse );
+//		 DeploymentDescriptor ddescResponse =  toJsonObj( strddescResponse, DeploymentDescriptor.class);
+//
+//		 assertThat(ddescResponse).isNotNull();
+//		 assertThat(ddescResponse.getVxfPlacements().size()).isEqualTo(2);
+//		 assertThat(ddescResponse.getVxfPlacements().get(0).getConstituentVxF() ).isNotNull();
+//		 assertThat(ddescResponse.getVxfPlacements().get(0).getInfrastructure()  ).isNotNull();
+//		 assertThat(ddescResponse.getVxfPlacements().get(1).getConstituentVxF() ).isNotNull();
+//		 assertThat(ddescResponse.getVxfPlacements().get(1).getInfrastructure() ).isNotNull();
+//
+//	}
+
+
+//	@WithMockUser(username="admin", roles = {"ADMIN","USER"})
+//	@Test
+//	public void deleteNSD() throws Exception {
+//
+//
+//		UserSession pu = new UserSession();
+//		pu.setUsername("admin");
+//		pu.setPassword("changeme");
+//
+////		/**
+////		 * auth
+////		 */
+////		 HttpSession session = mvc.perform(post("/sessions")
+////		            .with( SecurityMockMvcRequestPostProcessors.csrf())
+////				.contentType(MediaType.APPLICATION_JSON)
+////				.content( toJson( pu ) ))
+////			    .andExpect(status().isOk())
+////			    .andExpect(content()
+////			    .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+////			    .andExpect(jsonPath("username", is("admin")))
+////			    .andReturn().getRequest().getSession();
+//
+//		 File nsdFile = new File( "src/test/resources/testnsd.txt" );
+//			InputStream in = new FileInputStream( nsdFile );
+//			String resnsd = IOUtils.toString(in, "UTF-8");
+//			logger.info( "resnsd ========> " + resnsd );
+//
+//			File gz = new File( "src/test/resources/cirros_2vnf_ns.tar.gz" );
+//			InputStream ing = new FileInputStream( gz );
+//			MockMultipartFile prodFile = new MockMultipartFile("prodFile", "cirros_2vnf_ns.tar.gz", "application/x-gzip", IOUtils.toByteArray(ing));
+//
+//
+//			 mvc.perform(MockMvcRequestBuilders.multipart("/admin/experiments")
+//					 .file(prodFile)
+//					 .param("exprm", resnsd)
+//					 .with( SecurityMockMvcRequestPostProcessors.csrf()))
+//		    	.andExpect(status().isOk());
+//
+//		 assertThat( nsdService.getdNSDsByCategory((long) -1) .size() )
+//			.isEqualTo( 1 );
+//
+//		 mvc.perform(get("/categories")
+//				 .with( SecurityMockMvcRequestPostProcessors.csrf())
+//					.contentType(MediaType.APPLICATION_JSON))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//		    	.andExpect( jsonPath("$[0].name", is("None")) )
+//		    	.andExpect( jsonPath("$[1].name", is("Networking")))
+//		    	.andExpect( jsonPath("$[1].appscount", is( 1 )))
+//		    	.andExpect( jsonPath("$[2].name", is("Service")))
+//		    	.andExpect( jsonPath("$[2].appscount", is( 1 )));
+//
+//		 String content =  mvc.perform(get("/admin/experiments")
+//				 .with( SecurityMockMvcRequestPostProcessors.csrf())
+//					.contentType(MediaType.APPLICATION_JSON))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//		    	 .andExpect(jsonPath("$[0].name", is( "cirros_2vnf_nsd" )))
+//			    .andReturn().getResponse().getContentAsString();
+//
+//
+//		 ExperimentMetadata[] n =  toJsonObj( content, ExperimentMetadata[].class );
+//
+//		 mvc.perform(delete("/admin/experiments/" + n[0].getId() )
+//				 .with( SecurityMockMvcRequestPostProcessors.csrf()))
+//		    	.andExpect(status().isOk())
+//		    	.andExpect(content()
+//		    			.contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+//			   ;
+//
+//		 assertThat( nsdService.getdNSDsByCategory((long) -1) .size() )
+//			.isEqualTo( 0 );
+//
+//	}
 
-	}
 }