diff --git a/epsdk-app-onap/pom.xml b/epsdk-app-onap/pom.xml
index a3c417d..dd0c1ab 100755
--- a/epsdk-app-onap/pom.xml
+++ b/epsdk-app-onap/pom.xml
@@ -28,7 +28,7 @@
 		<snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath>
 		<releaseNexusPath>/content/repositories/releases/</releaseNexusPath>
 		<stagingNexusPath>/content/repositories/staging/</stagingNexusPath>
-		<sitePath>/content/sites/site/org/openecomp/vid/${project.version}</sitePath>
+		<sitePath>/content/sites/site/org/onap/vid/${project.version}</sitePath>
 
 		<!-- SONAR -->
 		<sonar.language>java</sonar.language>
@@ -163,7 +163,7 @@
 					</archive>
 					<overlays>
 						<overlay>
-							<groupId>org.openecomp.vid</groupId>
+							<groupId>org.onap.vid</groupId>
 							<artifactId>vid-app-common</artifactId>
 						</overlay>
 						<overlay>
@@ -274,13 +274,13 @@
 			<type>jar</type>
 		</dependency>
 		<dependency>
-			<groupId>org.openecomp.vid</groupId>
+			<groupId>org.onap.vid</groupId>
 			<artifactId>vid-app-common</artifactId>
 			<version>${project.version}</version>
 			<type>war</type>
 		</dependency>
 		<dependency>
-			<groupId>org.openecomp.vid</groupId>
+			<groupId>org.onap.vid</groupId>
 			<artifactId>vid-app-common</artifactId>
 			<version>${project.version}</version>
 			<type>jar</type>
@@ -308,13 +308,13 @@
 			<version>1.0.0</version>
 		</dependency>
 		<dependency>
-			<groupId>org.openecomp.vid</groupId>
+			<groupId>org.onap.vid</groupId>
 			<artifactId>vid-app-common</artifactId>
 			<version>${version}</version>
 			<type>war</type>
 		</dependency>
 		<dependency>
-			<groupId>org.openecomp.vid</groupId>
+			<groupId>org.onap.vid</groupId>
 			<artifactId>vid-app-common</artifactId>
 			<version>${version}</version>
 			<type>jar</type>
diff --git a/vid-app-common/src/main/java/org/onap/vid/asdc/local/LocalAsdcClient.java b/vid-app-common/src/main/java/org/onap/vid/asdc/local/LocalAsdcClient.java
index 3c04e5c..7671b73 100644
--- a/vid-app-common/src/main/java/org/onap/vid/asdc/local/LocalAsdcClient.java
+++ b/vid-app-common/src/main/java/org/onap/vid/asdc/local/LocalAsdcClient.java
@@ -94,7 +94,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getResource(java.util.UUID)
+     * @see org.onap.vid.asdc.AsdcClient#getResource(java.util.UUID)
      */
     public Resource getResource(UUID uuid) throws AsdcCatalogException {
         final JSONObject resource = getCatalog().getJSONObject("resources")
@@ -103,7 +103,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getResources()
+     * @see org.onap.vid.asdc.AsdcClient#getResources()
      */
     public Collection<Resource> getResources() throws AsdcCatalogException {
         final Collection<Resource> resources = new LinkedList<Resource>();
@@ -118,7 +118,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getResources(java.util.Map)
+     * @see org.onap.vid.asdc.AsdcClient#getResources(java.util.Map)
      */
     public Collection<Resource> getResources(Map<String, String[]> filter) throws AsdcCatalogException {
         final Collection<Resource> resources = new LinkedList<Resource>();
@@ -144,7 +144,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getService(java.util.UUID)
+     * @see org.onap.vid.asdc.AsdcClient#getService(java.util.UUID)
      */
     public Service getService(UUID uuid) throws AsdcCatalogException {
 
@@ -165,7 +165,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getServices()
+     * @see org.onap.vid.asdc.AsdcClient#getServices()
      */
     public Collection<Service> getServices() throws AsdcCatalogException {
         final Collection<Service> services = new LinkedList<Service>();
@@ -182,7 +182,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecompt.vid.asdc.AsdcClient#getServices(java.util.Map)
+     * @see org.onap.vid.asdc.AsdcClient#getServices(java.util.Map)
      */
     public Collection<Service> getServices(Map<String, String[]> filter) throws AsdcCatalogException {
         final Collection<Service> services = new LinkedList<Service>();
@@ -209,7 +209,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getResourceArtifact(java.util.UUID, java.util.UUID)
+     * @see org.onap.vid.asdc.AsdcClient#getResourceArtifact(java.util.UUID, java.util.UUID)
      */
     public Artifact getResourceArtifact(UUID resourceUuid, UUID artifactUuid) throws AsdcCatalogException {
         final JSONArray artifacts = getCatalog().getJSONObject("resources")
@@ -228,7 +228,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getServiceArtifact(java.util.UUID, java.util.UUID)
+     * @see org.onap.vid.asdc.AsdcClient#getServiceArtifact(java.util.UUID, java.util.UUID)
      */
     public Artifact getServiceArtifact(UUID serviceUuid, UUID artifactUuid) throws AsdcCatalogException {
         final JSONArray artifacts = getCatalog().getJSONObject("services")
@@ -247,7 +247,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getResourceToscaModel(java.util.UUID)
+     * @see org.onap.vid.asdc.AsdcClient#getResourceToscaModel(java.util.UUID)
      */
     public Path getResourceToscaModel(UUID resourceUuid) throws AsdcCatalogException {
         final String toscaModelURL = getCatalog().getJSONObject("resources")
@@ -263,7 +263,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.asdc.AsdcClient#getServiceToscaModel(java.util.UUID)
+     * @see org.onap.vid.asdc.AsdcClient#getServiceToscaModel(java.util.UUID)
      */
     public Path getServiceToscaModel(UUID serviceUuid) throws AsdcCatalogException {
 
diff --git a/vid-app-common/src/main/java/org/onap/vid/asdc/memory/InMemoryAsdcClient.java b/vid-app-common/src/main/java/org/onap/vid/asdc/memory/InMemoryAsdcClient.java
index a7b934e..780e82a 100644
--- a/vid-app-common/src/main/java/org/onap/vid/asdc/memory/InMemoryAsdcClient.java
+++ b/vid-app-common/src/main/java/org/onap/vid/asdc/memory/InMemoryAsdcClient.java
@@ -159,7 +159,7 @@
 	}
 	
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getResource(java.util.UUID)
+	 * @see org.onap.vid.asdc.AsdcClient#getResource(java.util.UUID)
 	 */
 	public Resource getResource(UUID uuid) throws AsdcCatalogException {
 		final JSONObject resource = getCatalog().getJSONObject("resources")
@@ -182,7 +182,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getResources(java.util.Map)
+	 * @see org.onap.vid.asdc.AsdcClient#getResources(java.util.Map)
 	 */
 	public Collection<Resource> getResources(Map<String, String[]> filter) throws AsdcCatalogException {
 		final Collection<Resource> resources = new LinkedList<Resource> ();
@@ -208,7 +208,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getService(java.util.UUID)
+	 * @see org.onap.vid.asdc.AsdcClient#getService(java.util.UUID)
 	 */
 	public Service getService(UUID uuid) throws AsdcCatalogException {
 		final JSONObject service = getCatalog().getJSONObject("services")
@@ -217,7 +217,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getServices()
+	 * @see org.onap.vid.asdc.AsdcClient#getServices()
 	 */
 	public Collection<Service> getServices() throws AsdcCatalogException {
 		final Collection<Service> services = new LinkedList<Service> ();
@@ -232,7 +232,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecompt.vid.asdc.AsdcClient#getServices(java.util.Map)
+	 * @see org.onap.vid.asdc.AsdcClient#getServices(java.util.Map)
 	 */
 	public Collection<Service> getServices(Map<String, String[]> filter) throws AsdcCatalogException {
 		final Collection<Service> services = new LinkedList<Service> ();
@@ -258,7 +258,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getResourceArtifact(java.util.UUID, java.util.UUID)
+	 * @see org.onap.vid.asdc.AsdcClient#getResourceArtifact(java.util.UUID, java.util.UUID)
 	 */
 	public Artifact getResourceArtifact(UUID resourceUuid, UUID artifactUuid) throws AsdcCatalogException {
 		final JSONArray artifacts = getCatalog().getJSONObject("resources")
@@ -277,7 +277,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getServiceArtifact(java.util.UUID, java.util.UUID)
+	 * @see org.onap.vid.asdc.AsdcClient#getServiceArtifact(java.util.UUID, java.util.UUID)
 	 */
 	public Artifact getServiceArtifact(UUID serviceUuid, UUID artifactUuid) throws AsdcCatalogException {
 		final JSONArray artifacts = getCatalog().getJSONObject("services")
@@ -296,7 +296,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getResourceToscaModel(java.util.UUID)
+	 * @see org.onap.vid.asdc.AsdcClient#getResourceToscaModel(java.util.UUID)
 	 */
 	public Path getResourceToscaModel(UUID resourceUuid) throws AsdcCatalogException {
 		final String toscaModelURL = getCatalog().getJSONObject("resources")
@@ -312,7 +312,7 @@
 	}
 
 	/* (non-Javadoc)
-	 * @see org.openecomp.vid.asdc.AsdcClient#getServiceToscaModel(java.util.UUID)
+	 * @see org.onap.vid.asdc.AsdcClient#getServiceToscaModel(java.util.UUID)
 	 */
 	public Path getServiceToscaModel(UUID serviceUuid) throws AsdcCatalogException {
 		final String toscaModelURL = getCatalog().getJSONObject("services")
diff --git a/vid-app-common/src/main/java/org/onap/vid/client/HttpsBasicClient.java b/vid-app-common/src/main/java/org/onap/vid/client/HttpsBasicClient.java
index 28a4d0f..e81be9f 100644
--- a/vid-app-common/src/main/java/org/onap/vid/client/HttpsBasicClient.java
+++ b/vid-app-common/src/main/java/org/onap/vid/client/HttpsBasicClient.java
@@ -61,7 +61,7 @@
 		String methodName = "getClient";
 		ClientConfig config = new ClientConfig();
 		//config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-		//config.getClasses().add(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class);
+		//config.getClasses().add(org.onap.aai.util.CustomJacksonJaxBJsonProvider.class);
 	
 		SSLContext ctx = null;
 		
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java
index f47e16f..4dd6eac 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/AsyncRequestStatus.java
@@ -54,7 +54,7 @@
     private RequestStatus requestStatus;
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#getInstanceIds()
+     * @see org.onap.vid.domain.mso.AsyncRequestStatus#getInstanceIds()
      */
     public InstanceIds getInstanceIds() {
         return instanceIds;
@@ -91,7 +91,7 @@
     }
     
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#toString()
+     * @see org.onap.vid.domain.mso.AsyncRequestStatus#toString()
      */
     @Override
     public String toString() {
@@ -99,7 +99,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#hashCode()
+     * @see org.onap.vid.domain.mso.AsyncRequestStatus#hashCode()
      */
     @Override
     public int hashCode() {
@@ -107,7 +107,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.AsyncRequestStatus#equals(java.lang.Object)
+     * @see org.onap.vid.domain.mso.AsyncRequestStatus#equals(java.lang.Object)
      */
     @Override
     public boolean equals(Object other) {
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedInstance.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedInstance.java
index b7f1203..3fd4cd4 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedInstance.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedInstance.java
@@ -76,7 +76,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedInstance#toString()
+     * @see org.onap.vid.domain.mso.RelatedInstance#toString()
      */
     @Override
     public String toString() {
@@ -84,7 +84,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedInstance#getAdditionalProperties()
+     * @see org.onap.vid.domain.mso.RelatedInstance#getAdditionalProperties()
      */
     @JsonAnyGetter
     public Map<String, Object> getAdditionalProperties() {
@@ -92,7 +92,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedInstance#setAdditionalProperty(java.lang.String, java.lang.Object)
+     * @see org.onap.vid.domain.mso.RelatedInstance#setAdditionalProperty(java.lang.String, java.lang.Object)
      */
     @JsonAnySetter
     public void setAdditionalProperty(String name, Object value) {
@@ -100,7 +100,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedInstance#hashCode()
+     * @see org.onap.vid.domain.mso.RelatedInstance#hashCode()
      */
     @Override
     public int hashCode() {
@@ -108,7 +108,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedInstance#equals(java.lang.Object)
+     * @see org.onap.vid.domain.mso.RelatedInstance#equals(java.lang.Object)
      */
     @Override
     public boolean equals(Object other) {
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedModel.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedModel.java
index 39722e1..36487c5 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedModel.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RelatedModel.java
@@ -49,7 +49,7 @@
 
 //    /** The related model object instance list. */
 //    @JsonProperty("instanceId")
-//    private org.openecomp.vid.domain.mso.InstanceIds instanceId;
+//    private org.onap.vid.domain.mso.InstanceIds instanceId;
     
     /** The additional properties. */
     @JsonIgnore
@@ -76,7 +76,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedModel#toString()
+     * @see org.onap.vid.domain.mso.RelatedModel#toString()
      */
     @Override
     public String toString() {
@@ -84,7 +84,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedModel#getAdditionalProperties()
+     * @see org.onap.vid.domain.mso.RelatedModel#getAdditionalProperties()
      */
     @JsonAnyGetter
     public Map<String, Object> getAdditionalProperties() {
@@ -92,7 +92,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedModel#setAdditionalProperty(java.lang.String, java.lang.Object)
+     * @see org.onap.vid.domain.mso.RelatedModel#setAdditionalProperty(java.lang.String, java.lang.Object)
      */
     @JsonAnySetter
     public void setAdditionalProperty(String name, Object value) {
@@ -100,7 +100,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedModel#hashCode()
+     * @see org.onap.vid.domain.mso.RelatedModel#hashCode()
      */
     @Override
     public int hashCode() {
@@ -108,7 +108,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RelatedModel#equals(java.lang.Object)
+     * @see org.onap.vid.domain.mso.RelatedModel#equals(java.lang.Object)
      */
     @Override
     public boolean equals(Object other) {
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/Request.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/Request.java
index b1a84ab..ee1652e 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/Request.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/Request.java
@@ -57,7 +57,7 @@
  
     
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.Request#getInstanceIds()
+     * @see org.onap.vid.domain.mso.Request#getInstanceIds()
      */
     @JsonProperty("instanceIds")
     public InstanceIds getInstanceIds() {
@@ -117,7 +117,7 @@
 
   
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.Request#toString()
+     * @see org.onap.vid.domain.mso.Request#toString()
      */
     @Override
     public String toString() {
@@ -125,7 +125,7 @@
     }
     
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.Request#equals(java.lang.Object)
+     * @see org.onap.vid.domain.mso.Request#equals(java.lang.Object)
      */
     @Override
     public boolean equals(Object other) {
diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetails.java b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetails.java
index 1e05989..9e74473 100644
--- a/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetails.java
+++ b/vid-app-common/src/main/java/org/onap/vid/mso/rest/RequestDetails.java
@@ -179,7 +179,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RequestDetails#toString()
+     * @see org.onap.vid.domain.mso.RequestDetails#toString()
      */
     @Override
     public String toString() {
@@ -187,7 +187,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RequestDetails#getAdditionalProperties()
+     * @see org.onap.vid.domain.mso.RequestDetails#getAdditionalProperties()
      */
     @JsonAnyGetter
     public Map<String, Object> getAdditionalProperties() {
@@ -195,7 +195,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RequestDetails#setAdditionalProperty(java.lang.String, java.lang.Object)
+     * @see org.onap.vid.domain.mso.RequestDetails#setAdditionalProperty(java.lang.String, java.lang.Object)
      */
     @JsonAnySetter
     public void setAdditionalProperty(String name, Object value) {
@@ -203,7 +203,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RequestDetails#hashCode()
+     * @see org.onap.vid.domain.mso.RequestDetails#hashCode()
      */
     @Override
     public int hashCode() {
@@ -211,7 +211,7 @@
     }
 
     /* (non-Javadoc)
-     * @see org.openecomp.vid.domain.mso.RequestDetails#equals(java.lang.Object)
+     * @see org.onap.vid.domain.mso.RequestDetails#equals(java.lang.Object)
      */
     @Override
     public boolean equals(Object other) {
diff --git a/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java
index 8196643..7b0d1a0 100644
--- a/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java
+++ b/vid-app-common/src/main/java/org/onap/vid/services/VidServiceImpl.java
@@ -39,7 +39,7 @@
     /*
      * (non-Javadoc)
      *
-     * @see org.openecomp.vid.controller.VidService#getServices(java.util.Map)
+     * @see org.onap.vid.controller.VidService#getServices(java.util.Map)
      */
     @Override
     public Collection<Service> getServices(Map<String, String[]> requestParams)
@@ -50,7 +50,7 @@
     /*
      * (non-Javadoc)
      *
-     * @see org.openecomp.vid.controller.VidService#getService(java.lang.String)
+     * @see org.onap.vid.controller.VidService#getService(java.lang.String)
      */
     @Override
     public ServiceModel getService(String uuid) throws AsdcCatalogException {
