diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/AttributeType.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/AttributeType.java
similarity index 96%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/AttributeType.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/AttributeType.java
index 44cf441..8cfa512 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/AttributeType.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/AttributeType.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of the Attribute Types that is used as a part of
- * {@link org.openecomp.policy.api.PolicyParameters}.
+ * {@link org.onap.policy.api.PolicyParameters}.
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/ConfigRequestParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/ConfigRequestParameters.java
similarity index 84%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/ConfigRequestParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/ConfigRequestParameters.java
index 1830679..cdee967 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/ConfigRequestParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/ConfigRequestParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Map;
 import java.util.UUID;
@@ -31,7 +31,7 @@
  */
 public class ConfigRequestParameters {
 	private String policyName;
-	private String eCOMPComponentName;
+	private String onapComponentName;
 	private String configName;
 	private Map<String,String> configAttributes;
 	private UUID requestID;
@@ -47,12 +47,12 @@
 	}
 	
 	/**
-	 * Sets the ECOMP Component Name of the Config policy which needs to be retrieved. 
+	 * Sets the ONAP Component Name of the Config policy which needs to be retrieved. 
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required.
 	 */
-	public void setEcompName(String eCOMPComponentName){
-		this.eCOMPComponentName = eCOMPComponentName;
+	public void setOnapName(String onapComponentName){
+		this.onapComponentName = onapComponentName;
 	}
 	
 	/**
@@ -74,9 +74,9 @@
 	}
 	
 	/**
-	 * Sets the Request ID of the ECOMP request. 
+	 * Sets the Request ID of the ONAP request. 
 	 * 
-	 * @param requestID unique <code>UUID</code> requestID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique <code>UUID</code> requestID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public void setRequestID(UUID requestID){
 		this.requestID = requestID;
@@ -92,12 +92,12 @@
 	}
 	
 	/**
-	 * Gets the ECOMP Component Name of the Request Parameters. 
+	 * Gets the ONAP Component Name of the Request Parameters. 
 	 * 
-	 * @return <code>String</code> format of the ECOMP Component Name. 
+	 * @return <code>String</code> format of the ONAP Component Name. 
 	 */
-	public String getEcompName(){
-		return eCOMPComponentName;
+	public String getOnapName(){
+		return onapComponentName;
 	}
 	
 	/**
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DecisionRequestParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DecisionRequestParameters.java
similarity index 72%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DecisionRequestParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DecisionRequestParameters.java
index dc485f7..27e419f 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DecisionRequestParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DecisionRequestParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Map;
 import java.util.UUID;
@@ -30,7 +30,7 @@
  * @version 0.1
  */
 public class DecisionRequestParameters {
-	private String eCOMPComponentName;
+	private String onapComponentName;
 	private Map<String,String> decisionAttributes;
 	private UUID requestID;
 	
@@ -43,31 +43,31 @@
 	/**
 	 * Constructor with Parameters
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose Decision is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose Decision is required.
 	 * @param decisionAttributes the <code>Map</code> of <code>String,String</code> format of the decisionAttributes that contain the ID and values.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
-	public DecisionRequestParameters(String eCOMPComponentName, Map<String,String> decisionAttributes, UUID requestID){
-		this.eCOMPComponentName = eCOMPComponentName;
+	public DecisionRequestParameters(String onapComponentName, Map<String,String> decisionAttributes, UUID requestID){
+		this.onapComponentName = onapComponentName;
 		this.decisionAttributes = decisionAttributes;
 		this.requestID = requestID;
 	}
 	
 	/**
-	 * Gets the ECOMPComponentName of the Decision Request Parameters. 
+	 * Gets the ONAPComponentName of the Decision Request Parameters. 
 	 * 
-	 * @return ECOMPComponentName the <code>String</code> format of the eCOMPComponentName of the Decision Request Parameters.
+	 * @return ONAPComponentName the <code>String</code> format of the onapComponentName of the Decision Request Parameters.
 	 */
-	public String getECOMPComponentName() {
-		return eCOMPComponentName;
+	public String getONAPComponentName() {
+		return onapComponentName;
 	}
 	/**
-	 * Sets the ECOMPComponentName of the Decision Request parameters.  
+	 * Sets the ONAPComponentName of the Decision Request parameters.  
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose Decision is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose Decision is required.
 	 */
-	public void setECOMPComponentName(String eCOMPComponentName) {
-		this.eCOMPComponentName = eCOMPComponentName;
+	public void setONAPComponentName(String onapComponentName) {
+		this.onapComponentName = onapComponentName;
 	}
 	/**
 	 * Gets the Decision Attributes from Decision Request Parameters. 
@@ -88,15 +88,15 @@
 	/**
 	 * Gets the request ID of Decision Request Parameters. 
 	 * 
-	 * @return the requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @return the requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public UUID getRequestID() {
 		return requestID;
 	}
 	/**
-	 * Sets the ReqestID of Decision Request Parameters which will be passed around ECOMP requests.
+	 * Sets the ReqestID of Decision Request Parameters which will be passed around ONAP requests.
 	 * 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public void setRequestID(UUID requestID) {
 		this.requestID = requestID;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DecisionResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DecisionResponse.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DecisionResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DecisionResponse.java
index caa9fda..78e80f0 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DecisionResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DecisionResponse.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
  * Defines the Object that represents the Policy Decision Response elements.
@@ -30,7 +30,7 @@
 	/**
 	 * Gets the Decision of the Policy, Either a Permit or Deny. 
 	 * 
-	 * @return {@link org.openecomp.policy.api.PolicyDecision} Enumeration. 
+	 * @return {@link org.onap.policy.api.PolicyDecision} Enumeration. 
 	 */
 	public PolicyDecision getDecision();
 	
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DeletePolicyCondition.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DeletePolicyCondition.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DeletePolicyCondition.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DeletePolicyCondition.java
index 4ef348c..4001d3f 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DeletePolicyCondition.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DeletePolicyCondition.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of the Policy Delete Condition that is used as a part of
- * {@link org.openecomp.policy.api.DeletePolicyParameters}.
+ * {@link org.onap.policy.api.DeletePolicyParameters}.
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DeletePolicyParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DeletePolicyParameters.java
similarity index 98%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DeletePolicyParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DeletePolicyParameters.java
index 3121297..4f67792 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DeletePolicyParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DeletePolicyParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.UUID;
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryParameters.java
similarity index 98%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryParameters.java
index cf70caf..e4aa5e1 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.UUID;
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryResponse.java
similarity index 97%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryResponse.java
index dd73798..4381e69 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryResponse.java
@@ -1,4 +1,4 @@
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Map;
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryType.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryType.java
similarity index 98%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryType.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryType.java
index 823a56b..5ac6d5e 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/DictionaryType.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/DictionaryType.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/EventRequestParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/EventRequestParameters.java
similarity index 91%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/EventRequestParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/EventRequestParameters.java
index 155d9c6..6e4bbbd 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/EventRequestParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/EventRequestParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Map;
 import java.util.UUID;
@@ -43,7 +43,7 @@
 	 * Constructor with Parameters
 	 * 
 	 * @param eventAttributes the <code>Map</code> of <code>String,String</code> format of the eventAttributes that contains the event ID and values.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public EventRequestParameters(Map<String,String> eventAttributes, UUID requestID){
 		this.eventAttributes = eventAttributes;
@@ -69,18 +69,18 @@
 	}
 	
 	/**
-	 * Gets the ReqestID of Event Request Parameters which will be passed around ECOMP requests. 
+	 * Gets the ReqestID of Event Request Parameters which will be passed around ONAP requests. 
 	 * 
-	 * @return requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @return requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public UUID getRequestID() {
 		return requestID;
 	}
 	
 	/**
-	 * Sets the ReqestID of Event Request Parameters which will be passed around ECOMP requests.
+	 * Sets the ReqestID of Event Request Parameters which will be passed around ONAP requests.
 	 * 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public void setRequestID(UUID requestID) {
 		this.requestID = requestID;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/ImportParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/ImportParameters.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/ImportParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/ImportParameters.java
index 8823793..3914864 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/ImportParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/ImportParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.UUID;
 
@@ -47,7 +47,7 @@
 	 * 
 	 * @param serviceName the <code>String</code> format of the Service Name
 	 * @param description the <code>String</code> format of the i Description
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * @param filePath the <code>List</code> format of the file paths for the service files
 	 * @param importType the {@link IMPORT_TYPE} format of the Policy Service List
 	 * @param version the <code>String</code> format of the Policy Import Version
@@ -103,7 +103,7 @@
 	/**
 	 * Gets the requestID of the Policy Parameters. 
 	 * 
-	 * @return unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @return unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public UUID getRequestID() {
 		return requestID;
@@ -112,7 +112,7 @@
 	/**
 	 * Sets the requestID of the Policy Parameters. 
 	 * 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public void setRequestID(UUID requestID) {
 		this.requestID = requestID;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/MetricsRequestParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/MetricsRequestParameters.java
similarity index 90%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/MetricsRequestParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/MetricsRequestParameters.java
index 4c10f39..8820ca3 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/MetricsRequestParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/MetricsRequestParameters.java
@@ -1,4 +1,4 @@
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.UUID;
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/MetricsResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/MetricsResponse.java
similarity index 97%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/MetricsResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/MetricsResponse.java
index d96a6dc..dc48caf 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/MetricsResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/MetricsResponse.java
@@ -1,4 +1,4 @@
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 public interface MetricsResponse {
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/NotificationScheme.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/NotificationScheme.java
similarity index 98%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/NotificationScheme.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/NotificationScheme.java
index 2e88d9c..4df83e5 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/NotificationScheme.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/NotificationScheme.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
  * Enumeration of <code>NotificationScheme</code> describes the Notification Scheme that will be used by the PolicyEngine.
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyChangeResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyChangeResponse.java
similarity index 97%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyChangeResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyChangeResponse.java
index 98bfdc2..249cf24 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyChangeResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyChangeResponse.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
  * <code>PolicyChangeResponse</code> defines the Policy Response
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyClass.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyClass.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyClass.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyClass.java
index 8b87f40..5132a44 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyClass.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyClass.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of the Policy Types that is used as a part of
- * {@link org.openecomp.policy.api.PolicyParameters}.
+ * {@link org.onap.policy.api.PolicyParameters}.
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfig.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfig.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfig.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfig.java
index 5cb7d81..652fd4d 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfig.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfig.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Map;
 import java.util.Properties;
@@ -35,7 +35,7 @@
 
 public interface PolicyConfig {
 	/**
-	 * Gets the {@link org.openecomp.policy.api.PolicyType} associated with <code>PolicyConfig</code> 
+	 * Gets the {@link org.onap.policy.api.PolicyType} associated with <code>PolicyConfig</code> 
 	 * 
 	 * @return the <code>PolicyType</code> associated with this <code>PolicyConfig</code> 
 	 */
@@ -70,7 +70,7 @@
 	public String toOther();
 	
 	/**
-	 * Gets the {@link org.openecomp.policy.api.PolicyConfigStatus} associated with this <code>PolicyConfig</code>.
+	 * Gets the {@link org.onap.policy.api.PolicyConfigStatus} associated with this <code>PolicyConfig</code>.
 	 * 
 	 * @return the <code>PolicyConfigStatus</code> associated with this <code>PolicyConfig</code>
 	 */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigException.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigException.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigException.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigException.java
index ad6948e..b42d8b2 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigException.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigException.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
- * PolicyConfigException extends <code>Exception</code> to implement exceptions thrown by {@link org.openecomp.policy.api.PolicyEngine}
+ * PolicyConfigException extends <code>Exception</code> to implement exceptions thrown by {@link org.onap.policy.api.PolicyEngine}
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigStatus.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigStatus.java
similarity index 96%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigStatus.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigStatus.java
index 95d890d..23291c9 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigStatus.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigStatus.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of PolicyConfigStatus that can be returned as a part of 
- * {@link org.openecomp.policy.api.PolicyConfig}.
+ * {@link org.onap.policy.api.PolicyConfig}.
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigType.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigType.java
similarity index 96%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigType.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigType.java
index 0286964..77c978d 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyConfigType.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyConfigType.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of the Policy Config Types that is used as a part of
- * {@link org.openecomp.policy.api.PolicyParameters}.
+ * {@link org.onap.policy.api.PolicyParameters}.
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyDecision.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyDecision.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyDecision.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyDecision.java
index a6b4bd2..b5fdc1e 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyDecision.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyDecision.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of PolicyDecision that can be returned as a part of 
- * {@link org.openecomp.policy.api.DecisionResponse} getDecision().
+ * {@link org.onap.policy.api.DecisionResponse} getDecision().
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyDecisionException.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyDecisionException.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyDecisionException.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyDecisionException.java
index 7f08fcb..38081de 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyDecisionException.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyDecisionException.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
- * PolicyDecisionException extends <code>Exception</code> to implement exceptions thrown by {@link org.openecomp.policy.api.PolicyEngine}
+ * PolicyDecisionException extends <code>Exception</code> to implement exceptions thrown by {@link org.onap.policy.api.PolicyEngine}
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEngine.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEngine.java
similarity index 70%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEngine.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEngine.java
index 4e2c092..bfb4f1e 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEngine.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEngine.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Collection;
 import java.util.Map;
@@ -26,9 +26,9 @@
 
 import javax.json.JsonObject;
 
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.std.StdPolicyEngine;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.std.StdPolicyEngine;
 
 /**
  * PolicyEngine is the Interface that applications use to make policy queries against a PEPEngine 
@@ -68,7 +68,7 @@
 	 * PolicyEngine Constructor with <code>String</code> format of PropertiesFilePathname and <code>NotificationScheme</code>
 	 * 
 	 * @param propertiesFilePathname the <code>String</code> format of the propertiesFilePathname
-	 * @param scheme the <code>NotificationScheme</code> of {@link org.openecomp.policy.api.NotificationScheme} which defines the Notification Scheme
+	 * @param scheme the <code>NotificationScheme</code> of {@link org.onap.policy.api.NotificationScheme} which defines the Notification Scheme
 	 * @throws PolicyEngineException PolicyEngine Exception
 	 */
 	public PolicyEngine(String propertiesFilePathname, NotificationScheme scheme) throws PolicyEngineException{
@@ -81,8 +81,8 @@
 	 * PolicyEngine Constructor with <code>String</code> format of PropertiesFilePathname, <code>NotificationScheme</code> and <code>NotificationHandler</code>
 	 *  
 	 *  @param propertiesFilePathname the <code>String</code> format of the propertiesFilePathname 
-	 *  @param scheme the <code>NotificationScheme</code> of {@link org.openecomp.policy.api.NotificationScheme} which defines the Notification Scheme
-	 *  @param handler the <code>NotificationHandler</code> of {@link org.openecomp.policy.api.NotificationHandler} which defines what should happen when a notification is received.
+	 *  @param scheme the <code>NotificationScheme</code> of {@link org.onap.policy.api.NotificationScheme} which defines the Notification Scheme
+	 *  @param handler the <code>NotificationHandler</code> of {@link org.onap.policy.api.NotificationHandler} which defines what should happen when a notification is received.
 	 *  @throws PolicyEngineException PolicyEngine Exception
 	 */
 	public PolicyEngine(String propertiesFilePathname, NotificationScheme scheme, NotificationHandler handler) throws PolicyEngineException {
@@ -96,7 +96,7 @@
 	 * Gets the configuration from the PolicyDecisionPoint(PDP) for the <code>String</code> which represents the Policy File Name 
 	 * 
 	 * @param policyName the <code>String</code> format of the PolicyFile Name whose configuration is required. 
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration. 
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters configRequestParameters)} Instead.
 	 */
@@ -109,9 +109,9 @@
 	 * Gets the configuration from the PolicyDecisionPoint(PDP) for the <code>String</code> which represents the Policy File Name 
 	 * 
 	 * @param policyName the <code>String</code> format of the PolicyFile Name whose configuration is required. 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration. 
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters configRequestParameters)} Instead.
 	 */
@@ -121,109 +121,109 @@
 	}
 	
 	/**
-	 * Gets the configuration from the PolicyDecisionPoint(PDP) for the <code>String</code> which represents the eCOMPComponentName 
+	 * Gets the configuration from the PolicyDecisionPoint(PDP) for the <code>String</code> which represents the onapComponentName 
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required. 
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration.
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public Collection<PolicyConfig> getConfig(String eCOMPComponentName) throws PolicyConfigException {
-		return getConfig(setConfigRequestParameters(null, eCOMPComponentName, null, null, null));
+	public Collection<PolicyConfig> getConfig(String onapComponentName) throws PolicyConfigException {
+		return getConfig(setConfigRequestParameters(null, onapComponentName, null, null, null));
 	}
 	
 	/**
-	 * Gets the configuration from the PolicyDecisionPoint(PDP) for the <code>String</code> which represents the eCOMPComponentName 
+	 * Gets the configuration from the PolicyDecisionPoint(PDP) for the <code>String</code> which represents the onapComponentName 
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required. 
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public Collection<PolicyConfig> getConfig(String eCOMPComponentName, UUID requestID) throws PolicyConfigException {
-		return getConfig(setConfigRequestParameters(null, eCOMPComponentName, null, null, requestID));
+	public Collection<PolicyConfig> getConfig(String onapComponentName, UUID requestID) throws PolicyConfigException {
+		return getConfig(setConfigRequestParameters(null, onapComponentName, null, null, requestID));
 	}
 	
 	/**
-	 * Requests the configuration of the <code>String</code> which represents the eCOMPComponentName and <code>String</code>
+	 * Requests the configuration of the <code>String</code> which represents the onapComponentName and <code>String</code>
 	 * which represents the configName and returns the configuration if different Configurations exist for the
-	 * particular eCOMPComponentName.  
+	 * particular onapComponentName.  
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required.
 	 * @param configName the <code>String</code> format of the configurationName whose configuration is required.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration. 
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public Collection<PolicyConfig> getConfig(String eCOMPComponentName, String configName) throws PolicyConfigException {
-		return getConfig(setConfigRequestParameters(null, eCOMPComponentName, configName, null, null));
+	public Collection<PolicyConfig> getConfig(String onapComponentName, String configName) throws PolicyConfigException {
+		return getConfig(setConfigRequestParameters(null, onapComponentName, configName, null, null));
 	}
 	
 	/**
-	 * Requests the configuration of the <code>String</code> which represents the eCOMPComponentName and <code>String</code>
+	 * Requests the configuration of the <code>String</code> which represents the onapComponentName and <code>String</code>
 	 * which represents the configName and returns the configuration if different Configurations exist for the
-	 * particular eCOMPComponentName.  
+	 * particular onapComponentName.  
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required.
 	 * @param configName the <code>String</code> format of the configurationName whose configuration is required.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration. 
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public Collection<PolicyConfig> getConfig(String eCOMPComponentName, String configName, UUID requestID) throws PolicyConfigException {
-		return getConfig(setConfigRequestParameters(null, eCOMPComponentName, configName, null, requestID));
+	public Collection<PolicyConfig> getConfig(String onapComponentName, String configName, UUID requestID) throws PolicyConfigException {
+		return getConfig(setConfigRequestParameters(null, onapComponentName, configName, null, requestID));
 	}
 	
 	/**
-	 * Requests the configuration of the <code>String</code> which represents the eCOMPComponentName, <code>String</code>
+	 * Requests the configuration of the <code>String</code> which represents the onapComponentName, <code>String</code>
 	 * which represents the configName and <code>Map</code> of <code>String,String</code> which has the configAttribute and returns the specific 
 	 * configuration related to the configAttributes mentioned.
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required.
 	 * @param configName the <code>String</code> format of the configurationName whose configuration is required.
 	 * @param configAttributes the <code>Map</code> of <code>String,String</code> format of the configuration attributes which are required.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration.
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration.
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public Collection<PolicyConfig> getConfig(String eCOMPComponentName, String configName, Map<String, String> configAttributes) throws PolicyConfigException{
-		return getConfig(setConfigRequestParameters(null, eCOMPComponentName, configName, configAttributes, null));
+	public Collection<PolicyConfig> getConfig(String onapComponentName, String configName, Map<String, String> configAttributes) throws PolicyConfigException{
+		return getConfig(setConfigRequestParameters(null, onapComponentName, configName, configAttributes, null));
 	}
 	
 	/**
-	 * Requests the configuration of the <code>String</code> which represents the eCOMPComponentName, <code>String</code>
+	 * Requests the configuration of the <code>String</code> which represents the onapComponentName, <code>String</code>
 	 * which represents the configName and <code>Map</code> of <code>String,String</code> which has the configAttribute and returns the specific 
 	 * configuration related to the configAttributes mentioned.
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose configuration is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose configuration is required.
 	 * @param configName the <code>String</code> format of the configurationName whose configuration is required.
 	 * @param configAttributes the <code>Map</code> of <code>String,String</code> format of the configuration attributes which are required.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration.
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration.
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 * @deprecated use {@link #getConfig(ConfigRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public Collection<PolicyConfig> getConfig(String eCOMPComponentName, String configName, Map<String, String> configAttributes, UUID requestID) throws PolicyConfigException{
-		return getConfig(setConfigRequestParameters(null, eCOMPComponentName, configName, configAttributes, requestID));
+	public Collection<PolicyConfig> getConfig(String onapComponentName, String configName, Map<String, String> configAttributes, UUID requestID) throws PolicyConfigException{
+		return getConfig(setConfigRequestParameters(null, onapComponentName, configName, configAttributes, requestID));
 	}
 	
 	/**
 	 * Requests the configuration of the <code>ConfigRequestParameters</code> which represents the Config policy request parameters 
 	 * and returns the specific configuration related to the matching parameters. 
 	 * 
-	 * @param configRequestParameters {@link org.openecomp.policy.api.ConfigRequestParameters} which represents the Config policy request parameters. 
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyConfig} which has the configuration.
+	 * @param configRequestParameters {@link org.onap.policy.api.ConfigRequestParameters} which represents the Config policy request parameters. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyConfig} which has the configuration.
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 */
 	public Collection<PolicyConfig> getConfig(ConfigRequestParameters configRequestParameters)  throws PolicyConfigException{
@@ -234,7 +234,7 @@
 	 * Requests the list of policies based on the <code>ConfigRequestParameters</code> which represents the policy request parameters 
 	 * and returns the list of policies filtered by the parameters. 
 	 * 
-	 * @param configRequestParameters {@link org.openecomp.policy.api.ConfigRequestParameters} which represents the List Policy request parameters. 
+	 * @param configRequestParameters {@link org.onap.policy.api.ConfigRequestParameters} which represents the List Policy request parameters. 
 	 * @return <code>Collection</code> of <code>String</code> which returns the list of policies.
 	 * @throws PolicyConfigException PolicyConfig Exception
 	 */
@@ -247,7 +247,7 @@
 	 * Sends the Events specified to the PEP and returns back the PolicyResponse. 
 	 * 
 	 * @param eventAttributes the <code>Map</code> of <code>String,String</code> format of the eventAttributes that must contain the event ID and values.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyResponse} which has the Response. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyResponse} which has the Response. 
 	 * @throws PolicyEventException PolicyEvent Exception
 	 * @deprecated use {@link #sendEvent(EventRequestParameters)} Instead.
 	 */
@@ -260,9 +260,9 @@
 	 * Sends the Events specified to the PEP and returns back the PolicyResponse. 
 	 * 
 	 * @param eventAttributes the <code>Map</code> of <code>String,String</code> format of the eventAttributes that must contain the event ID and values.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyResponse} which has the Response. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyResponse} which has the Response. 
 	 * @throws PolicyEventException PolicyEvent Exception
 	 * @deprecated use {@link #sendEvent(EventRequestParameters)} Instead.
 	 */
@@ -274,8 +274,8 @@
 	/**
 	 * Sends the Events specified to the PEP and returns back the PolicyResponse.
 	 * 
-	 * @param eventRequestParameters {@link org.openecomp.policy.api.EventRequestParameters} which represents the Event Request Parameters. 
-	 * @return <code>Collection</code> of {@link org.openecomp.policy.api.PolicyResponse} which has the Response.
+	 * @param eventRequestParameters {@link org.onap.policy.api.EventRequestParameters} which represents the Event Request Parameters. 
+	 * @return <code>Collection</code> of {@link org.onap.policy.api.PolicyResponse} which has the Response.
 	 * @throws PolicyEventException PolicyEvent Exception
 	 */
 	public Collection<PolicyResponse> sendEvent(EventRequestParameters eventRequestParameters) throws PolicyEventException {
@@ -285,38 +285,38 @@
 	/**
 	 * Sends the decision Attributes specified to the PEP and returns back the PolicyDecision. 
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose Decision is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose Decision is required.
 	 * @param decisionAttributes the <code>Map</code> of <code>String,String</code> format of the decisionAttributes that must contain the ID and values.
-	 * @return {@link org.openecomp.policy.api.DecisionResponse} which has the Decision. 
+	 * @return {@link org.onap.policy.api.DecisionResponse} which has the Decision. 
 	 * @throws PolicyDecisionException PolicyDecision Exception
 	 * @deprecated use {@link #getDecision(DecisionRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public DecisionResponse getDecision(String eCOMPComponentName, Map<String,String> decisionAttributes) throws PolicyDecisionException {
-		return stdPolicyEngine.getDecision(eCOMPComponentName, decisionAttributes, null);
+	public DecisionResponse getDecision(String onapComponentName, Map<String,String> decisionAttributes) throws PolicyDecisionException {
+		return stdPolicyEngine.getDecision(onapComponentName, decisionAttributes, null);
 	}
 	
 	/**
 	 * Sends the decision Attributes specified to the PEP and returns back the PolicyDecision. 
 	 * 
-	 * @param eCOMPComponentName the <code>String</code> format of the eCOMPComponentName whose Decision is required.
+	 * @param onapComponentName the <code>String</code> format of the onapComponentName whose Decision is required.
 	 * @param decisionAttributes the <code>Map</code> of <code>String,String</code> format of the decisionAttributes that must contain the ID and values.
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
-	 * @return {@link org.openecomp.policy.api.DecisionResponse} which has the Decision. 
+	 * @return {@link org.onap.policy.api.DecisionResponse} which has the Decision. 
 	 * @throws PolicyDecisionException PolicyDecision Exception
 	 * @deprecated use {@link #getDecision(DecisionRequestParameters)} Instead.
 	 */
 	@Deprecated
-	public DecisionResponse getDecision(String eCOMPComponentName, Map<String,String> decisionAttributes, UUID requestID) throws PolicyDecisionException {
-		return stdPolicyEngine.getDecision(eCOMPComponentName, decisionAttributes, requestID);
+	public DecisionResponse getDecision(String onapComponentName, Map<String,String> decisionAttributes, UUID requestID) throws PolicyDecisionException {
+		return stdPolicyEngine.getDecision(onapComponentName, decisionAttributes, requestID);
 	}
 	
 	/**
 	 * Sends the decision Attributes specified to the PEP and returns back the PolicyDecision. 
 	 * 
-	 * @param decisionRequestParameters {@link org.openecomp.policy.api.DecisionRequestParameters} which represents the Decision Request Parameters.
-	 * @return {@link org.openecomp.policy.api.DecisionResponse} which has the Decision.
+	 * @param decisionRequestParameters {@link org.onap.policy.api.DecisionRequestParameters} which represents the Decision Request Parameters.
+	 * @return {@link org.onap.policy.api.DecisionResponse} which has the Decision.
 	 * @throws PolicyDecisionException PolicyDecision Exception
 	 */
 	public DecisionResponse getDecision(DecisionRequestParameters decisionRequestParameters) throws PolicyDecisionException {
@@ -326,8 +326,8 @@
 	/**
 	 * Retrieves the count of policies on the PAP, PDP, and Policy Engine as a whole
 	 * 
-	 * @param parameters {@link  org.openecomp.policy.api.MetricsRequestParameters} which represents the Parameters required to get the Policy Metrics 
-	 * @return {@link org.openecomp.policy.api.MetricsResponse} which consists of the response related to getMetrics Request. 
+	 * @param parameters {@link  org.onap.policy.api.MetricsRequestParameters} which represents the Parameters required to get the Policy Metrics 
+	 * @return {@link org.onap.policy.api.MetricsResponse} which consists of the response related to getMetrics Request. 
 	 * @throws PolicyException PolicyException related to the operation	 
 	 * 
 	 * */
@@ -339,13 +339,13 @@
 	 * Creates a Config Policy based on given arguments
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param policyDescription the <code>String</code> format of the Policy Description
-	 * @param ecompName the <code>String</code> format of the ECOMP Name
+	 * @param onapName the <code>String</code> format of the ONAP Name
 	 * @param configName the <code>String</code> format of the Config Name
 	 * @param configAttributes the <code>List</code> the <code>Map</code> Attributes that must contain the key and value.
 	 * @param configType the <code>String</code> format of the Config Type
 	 * @param body the <code>String</code> format of the Policy Body
 	 * @param policyScope the <code>String</code> value of the sub scope directory where the policy will be created and stored
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 * @param riskLevel the <code>String</code> value of risk Level. 
 	 * @param riskType the <code>String</code> value of risk Type. 
@@ -356,10 +356,10 @@
 	 * @deprecated use {@link #createPolicy(PolicyParameters)} Instead.
 	 */
 	@Deprecated
-	public String createConfigPolicy(String policyName, String policyDescription, String ecompName, String configName, 
+	public String createConfigPolicy(String policyName, String policyDescription, String onapName, String configName, 
 												Map<String, String> configAttributes, String configType, String body, String policyScope, UUID requestID,
 												String riskLevel, String riskType, String guard, String ttlDate) throws PolicyException {
-		return stdPolicyEngine.createUpdateConfigPolicy(policyName, policyDescription, ecompName, configName, 
+		return stdPolicyEngine.createUpdateConfigPolicy(policyName, policyDescription, onapName, configName, 
 				configAttributes, configType, body, policyScope, requestID,
 				riskLevel, riskType, guard, ttlDate, false);
 	}
@@ -368,13 +368,13 @@
 	 * Creates a Config Policy based on given arguments
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param policyDescription the <code>String</code> format of the Policy Description
-	 * @param ecompName the <code>String</code> format of the ECOMP Name
+	 * @param onapName the <code>String</code> format of the ONAP Name
 	 * @param configName the <code>String</code> format of the Config Name
 	 * @param configAttributes the <code>List</code> the <code>Map</code> Attributes that must contain the key and value.
 	 * @param configType the <code>String</code> format of the Config Type
 	 * @param body the <code>String</code> format of the Policy Body
 	 * @param policyScope the <code>String</code> value of the sub scope directory where the policy will be created and stored
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 * @param riskLevel the <code>String</code> value of risk Level. 
 	 * @param riskType the <code>String</code> value of risk Type. 
@@ -385,10 +385,10 @@
 	 * @deprecated use {@link #updatePolicy(PolicyParameters)} Instead.
 	 */
 	@Deprecated
-	public String updateConfigPolicy(String policyName, String policyDescription, String ecompName, String configName, 
+	public String updateConfigPolicy(String policyName, String policyDescription, String onapName, String configName, 
 												Map<String, String> configAttributes, String configType, String body, String policyScope, UUID requestID,
 												String riskLevel, String riskType, String guard, String ttlDate) throws PolicyException {
-		return stdPolicyEngine.createUpdateConfigPolicy(policyName, policyDescription, ecompName, configName, 
+		return stdPolicyEngine.createUpdateConfigPolicy(policyName, policyDescription, onapName, configName, 
 				configAttributes, configType, body, policyScope, requestID,riskLevel, riskType, guard, ttlDate, true);
 	}
 	
@@ -397,7 +397,7 @@
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param firewallJson the <code>JsonObject</code> representation of the Firewall Rules List
 	 * @param policyScope the <code>String</code> value of the sub scope directory where the policy will be created and stored
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 * @param riskLevel the <code>String</code> value of risk Level. 
 	 * @param riskType the <code>String</code> value of risk Type. 
@@ -419,7 +419,7 @@
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param firewallJson the <code>JsonObject</code> representation of the Firewall Rules List
 	 * @param policyScope the <code>String</code> value of the sub scope directory where the policy will be created and stored
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 * @param riskLevel the <code>String</code> value of risk Level. 
 	 * @param riskType the <code>String</code> value of risk Type. 
@@ -438,8 +438,8 @@
 	/**
 	 * Retrieves Dictionary Items for a specified dictionary
 	 * 
-	 * @param parameters {@link org.openecomp.policy.api.DictionaryParameters} which represents the Dictionary Parameters required to create a Dictionary Item. 
-	 * @return {@link org.openecomp.policy.api.DictionaryResponse} which consists of the response related to create dictionary item Request. 
+	 * @param parameters {@link org.onap.policy.api.DictionaryParameters} which represents the Dictionary Parameters required to create a Dictionary Item. 
+	 * @return {@link org.onap.policy.api.DictionaryResponse} which consists of the response related to create dictionary item Request. 
 	 * @throws PolicyException PolicyException related to the operation	 
 	 * 
 	 * */
@@ -450,8 +450,8 @@
 	/**
 	 * Creates a Dictionary Item based on given Dictionary Parameters
 	 * 
-	 * @param parameters {@link org.openecomp.policy.api.DictionaryParameters} which represents the Dictionary Parameters required to create a Dictionary Item. 
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to create dictionary item Request. 
+	 * @param parameters {@link org.onap.policy.api.DictionaryParameters} which represents the Dictionary Parameters required to create a Dictionary Item. 
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to create dictionary item Request. 
 	 * @throws PolicyException  PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse createDictionaryItem(DictionaryParameters parameters) throws PolicyException {
@@ -461,8 +461,8 @@
 	/**
 	 * Updates a Dictionary Item based on given Dictionary Parameters
 	 * 
-	 * @param  parameters {@link org.openecomp.policy.api.DictionaryParameters} which represents the Dictionary Parameters required to update a Dictionary Item. 
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to update dictionary item Request. 
+	 * @param  parameters {@link org.onap.policy.api.DictionaryParameters} which represents the Dictionary Parameters required to update a Dictionary Item. 
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to update dictionary item Request. 
 	 * @throws PolicyException PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse updateDictionaryItem(DictionaryParameters parameters) throws PolicyException {
@@ -472,8 +472,8 @@
 	/**
 	 * Creates a Policy based on given Policy Parameters. 
 	 * 
-	 * @param policyParameters {@link org.openecomp.policy.api.PolicyParameters} which represents the Policy Parameters required to create a Policy. 
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to create policy Request. 
+	 * @param policyParameters {@link org.onap.policy.api.PolicyParameters} which represents the Policy Parameters required to create a Policy. 
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to create policy Request. 
 	 * @throws PolicyException  PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse createPolicy(PolicyParameters policyParameters) throws PolicyException {
@@ -483,8 +483,8 @@
 	/**
 	 * Update Policy based on given Policy Parameters. 
 	 * 
-	 * @param policyParameters {@link org.openecomp.policy.api.PolicyParameters} which represents the Policy Parameters required to update a Policy. 
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to create policy Request. 
+	 * @param policyParameters {@link org.onap.policy.api.PolicyParameters} which represents the Policy Parameters required to update a Policy. 
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to create policy Request. 
 	 * @throws PolicyException  PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse updatePolicy(PolicyParameters policyParameters) throws PolicyException {
@@ -498,7 +498,7 @@
 	 * @param policyName the <code>String</code> format of the Policy Name being pushed. 
 	 * @param policyType the <code>String</code> format of the Policy Type which is being pushed.  
 	 * @param pdpGroup the <code>String</code> format of the PDP Group name to which the policy needs to be pushed to. 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * @return <code>String</code> format of the response related to the push Policy Request. 
 	 * @throws PolicyException  PolicyException related to the operation. 
 	 * @deprecated use {@link #pushPolicy(PushPolicyParameters)} instead. 
@@ -511,8 +511,8 @@
 	/**
 	 * Pushes the specified policy to the PDP Group. If no PDP group is selected default is used. 
 	 * 
-	 * @param pushPolicyParameters {@link org.openecomp.policy.api.PushPolicyParameters} which represents the Push Policy parameters required to push a policy. 
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to the push Policy Request. 
+	 * @param pushPolicyParameters {@link org.onap.policy.api.PushPolicyParameters} which represents the Push Policy parameters required to push a policy. 
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to the push Policy Request. 
 	 * @throws PolicyException  PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse pushPolicy(PushPolicyParameters pushPolicyParameters) throws PolicyException {
@@ -522,8 +522,8 @@
 	/**
 	 * Deletes the specified policy from the PAP or PDP.
 	 * 
-	 * @param deletePolicyParameters {@link org.openecomp.policy.api.DeletePolicyParameters} which represents the Delete Policy parameters to delete a policy.
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to the Delete Policy Request.
+	 * @param deletePolicyParameters {@link org.onap.policy.api.DeletePolicyParameters} which represents the Delete Policy parameters to delete a policy.
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to the Delete Policy Request.
 	 * @throws PolicyException PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse deletePolicy(DeletePolicyParameters deletePolicyParameters) throws PolicyException {
@@ -533,8 +533,8 @@
 	/**
 	 * Creates a new Policy Service based on given Service Parameters. 
 	 * 
-	 * @param importParameters {@link org.openecomp.policy.api.ImportParameters} which represents the Service Parameters required to create a Policy Service. 
-	 * @return {@link org.openecomp.policy.api.PolicyChangeResponse} which consists of the response related to create import Service. 
+	 * @param importParameters {@link org.onap.policy.api.ImportParameters} which represents the Service Parameters required to create a Policy Service. 
+	 * @return {@link org.onap.policy.api.PolicyChangeResponse} which consists of the response related to create import Service. 
 	 * @throws PolicyException PolicyException related to the operation. 
 	 */
 	public PolicyChangeResponse policyEngineImport(ImportParameters importParameters) throws PolicyException {
@@ -544,8 +544,8 @@
 	/**
 	 * <code>setNotification</code> allows changes to the Notification Scheme and Notification Handler
 	 * 
-	 * @param scheme the <code>NotificationScheme</code> of {@link org.openecomp.policy.api.NotificationScheme} which defines the Notification Scheme
-	 * @param handler the <code>NotificationHandler</code> of {@link org.openecomp.policy.api.NotificationHandler} which defines what should happen when a notification is received.
+	 * @param scheme the <code>NotificationScheme</code> of {@link org.onap.policy.api.NotificationScheme} which defines the Notification Scheme
+	 * @param handler the <code>NotificationHandler</code> of {@link org.onap.policy.api.NotificationHandler} which defines what should happen when a notification is received.
 	 */
 	public void setNotification(NotificationScheme scheme, NotificationHandler handler) {
 		this.scheme = scheme;
@@ -563,7 +563,7 @@
 	/**
 	 * <code>setNotification</code> allows changes to the Notification Scheme
 	 * 
-	 * @param scheme the <code>NotificationScheme</code> of {@link org.openecomp.policy.api.NotificationScheme} which defines the Notification Scheme
+	 * @param scheme the <code>NotificationScheme</code> of {@link org.onap.policy.api.NotificationScheme} which defines the Notification Scheme
 	 */
 	public void setScheme(NotificationScheme scheme){
 		this.scheme = scheme;
@@ -573,7 +573,7 @@
 	/**
 	 * Gets the <code>PDPNotification</code> if there is one exists. This is used for Polling Patterns. 
 	 * 
-	 * @return <code>PDPNotification</code> of {@link org.openecomp.policy.api.PDPNotification} which has the Notification. 
+	 * @return <code>PDPNotification</code> of {@link org.onap.policy.api.PDPNotification} which has the Notification. 
 	 */
 	public PDPNotification getNotification() {
 		return stdPolicyEngine.getNotification();
@@ -590,10 +590,10 @@
 	}
 	
 	// Internal Setter Method to help build configRequestParameters.
-	private ConfigRequestParameters setConfigRequestParameters(String policyName, String eCOMPComponentName, String configName, Map<String, String> configAttributes, UUID requestID){
+	private ConfigRequestParameters setConfigRequestParameters(String policyName, String onapComponentName, String configName, Map<String, String> configAttributes, UUID requestID){
 		ConfigRequestParameters configRequestParameters = new ConfigRequestParameters();
 		configRequestParameters.setPolicyName(policyName);
-		configRequestParameters.setEcompName(eCOMPComponentName);
+		configRequestParameters.setOnapName(onapComponentName);
 		configRequestParameters.setConfigName(configName);
 		configRequestParameters.setConfigAttributes(configAttributes);
 		configRequestParameters.setRequestID(requestID);
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEngineException.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEngineException.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEngineException.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEngineException.java
index e80513a..6529a15 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEngineException.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEngineException.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
- * PolicyEngineException extends <code>Exception</code> to implement exceptions thrown by {@link org.openecomp.policy.api.PolicyEngine}
+ * PolicyEngineException extends <code>Exception</code> to implement exceptions thrown by {@link org.onap.policy.api.PolicyEngine}
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEventException.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEventException.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEventException.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEventException.java
index 8e4c819..335c490 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyEventException.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyEventException.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
- * PolicyEventException extends <code>Exception</code> to implement exceptions thrown by {@link org.openecomp.policy.api.PolicyEngine}
+ * PolicyEventException extends <code>Exception</code> to implement exceptions thrown by {@link org.onap.policy.api.PolicyEngine}
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyException.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyException.java
similarity index 86%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyException.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyException.java
index f4a99fd..e615601 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyException.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyException.java
@@ -1,7 +1,7 @@
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
- * PolicyException extends <code>Exception</code> to implement exceptions thrown by {@link org.openecomp.policy.api.PolicyEngine}
+ * PolicyException extends <code>Exception</code> to implement exceptions thrown by {@link org.onap.policy.api.PolicyEngine}
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyParameters.java
similarity index 91%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyParameters.java
index 0f34de0..0d76d8f 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -37,7 +37,7 @@
 	private PolicyConfigType policyConfigType;
 	private String policyName;
 	private String policyDescription;
-	private String ecompName;
+	private String onapName;
 	private String configName;
 	private Map<AttributeType, Map<String,String>> attributes;
 	private String configBody;
@@ -62,23 +62,23 @@
 	/**
 	 * Sets Config Policy Parameters.
 	 * 
-	 * @param policyConfigType the {@link org.openecomp.policy.api.PolicyConfigType} Enum format of the Config Type
+	 * @param policyConfigType the {@link org.onap.policy.api.PolicyConfigType} Enum format of the Config Type
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param policyDescription the <code>String</code> format of the Policy Description
-	 * @param ecompName the <code>String</code> format of the ECOMP Name
+	 * @param onapName the <code>String</code> format of the ONAP Name
 	 * @param configName the <code>String</code> format of the Config Name
 	 * @param attributes the <code>Map</code> Attributes that must contain the AttributeType and Map of key,value pairs corresponding to it.
-	 * @param configBodyType the {@link org.openecomp.policy.api.PolicyType} Enum format of the config Body Type. 
+	 * @param configBodyType the {@link org.onap.policy.api.PolicyType} Enum format of the config Body Type. 
 	 * @param configBody the <code>String</code> format of the Policy Body
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 */
-	public void setConfigPolicyParameters(PolicyConfigType policyConfigType, String policyName, String policyDescription, String ecompName, String configName, 
+	public void setConfigPolicyParameters(PolicyConfigType policyConfigType, String policyName, String policyDescription, String onapName, String configName, 
 			Map<AttributeType, Map<String, String>> attributes, PolicyType configBodyType, String configBody, UUID requestID){
 		this.setPolicyConfigType(policyConfigType);
 		this.setPolicyName(policyName);
 		this.setPolicyDescription(policyDescription);
-		this.setEcompName(ecompName);
+		this.setOnapName(onapName);
 		this.setConfigName(configName);
 		this.setAttributes(attributes);
 		this.setConfigBody(configBody);
@@ -91,7 +91,7 @@
 	 * 
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param firewallJson the <code>String</code> representation of the Firewall Rules List
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 * A different request ID should be passed for each request.
 	 */
 	public void setConfigFirewallPolicyParameters(String policyName, String firewallJson, UUID requestID){
@@ -139,21 +139,21 @@
 	}
 
 	/**
-	 * Gets the ECOMP Name value of the Policy Paramters. 
+	 * Gets the ONAP Name value of the Policy Paramters. 
 	 * 
-	 * @return <code>String</code> format of the ECOMP Name
+	 * @return <code>String</code> format of the ONAP Name
 	 */
-	public String getEcompName() {
-		return ecompName;
+	public String getOnapName() {
+		return onapName;
 	}
 
 	/**
-	 * Sets the ECOMP Name field of the Policy Parameters. 
+	 * Sets the ONAP Name field of the Policy Parameters. 
 	 * 
-	 * @param ecompName the <code>String</code> format of the ECOMP Name
+	 * @param onapName the <code>String</code> format of the ONAP Name
 	 */
-	public void setEcompName(String ecompName) {
-		this.ecompName = ecompName;
+	public void setOnapName(String onapName) {
+		this.onapName = onapName;
 	}
 
 	/**
@@ -195,7 +195,7 @@
 	/**
 	 * Gets the Policy Config Type value the Policy parameters. 
 	 * 
-	 * @return {@link org.openecomp.policy.api.PolicyConfigType} Enum of the Config Type
+	 * @return {@link org.onap.policy.api.PolicyConfigType} Enum of the Config Type
 	 */
 	public PolicyConfigType getPolicyConfigType() {
 		return policyConfigType;
@@ -204,7 +204,7 @@
 	/**
 	 * Sets the Policy Config Type field of the policy Parameters. 
 	 * 
-	 * @param policyConfigType the {@link org.openecomp.policy.api.PolicyConfigType} Enum format of the Config Type
+	 * @param policyConfigType the {@link org.onap.policy.api.PolicyConfigType} Enum format of the Config Type
 	 */
 	public void setPolicyConfigType(PolicyConfigType policyConfigType) {
 		if(policyConfigType!=null){
@@ -252,7 +252,7 @@
 	/**
 	 * Gets the requestID of the Policy Parameters. 
 	 * 
-	 * @return unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @return unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public UUID getRequestID() {
 		return requestID;
@@ -261,7 +261,7 @@
 	/**
 	 * Sets the requestID of the Policy Parameters. 
 	 * 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public void setRequestID(UUID requestID) {
 		this.requestID = requestID;
@@ -270,7 +270,7 @@
 	/**
 	 * Gets the Policy Class of the Policy Parameters. 
 	 * 
-	 * @return {@link org.openecomp.policy.api.PolicyClass} of the Policy Parameters. 
+	 * @return {@link org.onap.policy.api.PolicyClass} of the Policy Parameters. 
 	 */
 	public PolicyClass getPolicyClass() {
 		return policyClass;
@@ -279,7 +279,7 @@
 	/**
 	 * Sets the Policy Class of the Policy Parameters. 
 	 * 
-	 * @param policyClass the Enum {@link org.openecomp.policy.api.PolicyClass} to set Policy Class Type of Policy parameters. 
+	 * @param policyClass the Enum {@link org.onap.policy.api.PolicyClass} to set Policy Class Type of Policy parameters. 
 	 */
 	public void setPolicyClass(PolicyClass policyClass) {
 		this.policyClass = policyClass;
@@ -546,7 +546,7 @@
 	}
 	
 	public String toString() {
-		return "PolicyParameters [ policyName=" + policyName + ", policyDescription=" + policyDescription + ", ecompName="+ ecompName 
+		return "PolicyParameters [ policyName=" + policyName + ", policyDescription=" + policyDescription + ", onapName="+ onapName 
 				+ ", configName=" + configName + ", attributes=" + attributes + ", configBody=" + configBody 
 				+ ",dynamicRuleAlgorithmLabels=" + dynamicRuleAlgorithmLabels + ",dynamicRuleAlgorithmFunctions=" + dynamicRuleAlgorithmFunctions 
 				+ ",dynamicRuleAlgorithmField1=" + dynamicRuleAlgorithmField1 + ",dynamicRuleAlgorithmField2=" + dynamicRuleAlgorithmField2 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyResponse.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyResponse.java
index 316f7dd..ae29585 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyResponse.java
@@ -19,7 +19,7 @@
  */
 
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.Map;
 
@@ -31,7 +31,7 @@
  */
 public interface PolicyResponse {
 	/**
-	 * Gets the {@link org.openecomp.policy.api.PolicyResponseStatus} associated with this <code>PolicyResponse</code>.
+	 * Gets the {@link org.onap.policy.api.PolicyResponseStatus} associated with this <code>PolicyResponse</code>.
 	 * 
 	 * @return the <code>PolicyResponseStatus</code> associated with this <code>PolicyResponse</code>
 	 */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyResponseStatus.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyResponseStatus.java
similarity index 96%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyResponseStatus.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyResponseStatus.java
index 84fac73..4368b64 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyResponseStatus.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyResponseStatus.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of PolicyResponseStatus that can be returned as a part of
- * {@link org.openecomp.policy.api.PolicyResponse}.
+ * {@link org.onap.policy.api.PolicyResponse}.
  * 
  * @version 0.2
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyType.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyType.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyType.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyType.java
index a0566e0..f026596 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PolicyType.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyType.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of the Policy Return Types that can be returned as part of a
- * {@link org.openecomp.policy.api.PolicyConfig}.
+ * {@link org.onap.policy.api.PolicyConfig}.
  * 
  * @version 0.2
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PushPolicyParameters.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PushPolicyParameters.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PushPolicyParameters.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/PushPolicyParameters.java
index 8a82206..211be7e 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/PushPolicyParameters.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PushPolicyParameters.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import java.util.UUID;
 
@@ -46,7 +46,7 @@
 	 * @param policyName the <code>String</code> format of the Policy Name
 	 * @param policyType the <code>String</code> format of the Policy Type
 	 * @param pdpGroup the <code>String</code> format of the PDPGroup
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public PushPolicyParameters(String policyName, String policyType, String pdpGroup, UUID requestID){
 		this.policyName = policyName;
@@ -112,7 +112,7 @@
 	/**
 	 * Gets the requestID of the Push Policy Parameters. 
 	 * 
-	 * @return unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @return unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public UUID getRequestID() {
 		return requestID;
@@ -121,7 +121,7 @@
 	/**
 	 * Sets the requestID of the Push Policy Parameters. 
 	 * 
-	 * @param requestID unique request ID which will be passed throughout the ECOMP components to correlate logging messages.
+	 * @param requestID unique request ID which will be passed throughout the ONAP components to correlate logging messages.
 	 */
 	public void setRequestID(UUID requestID) {
 		this.requestID = requestID;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/RuleProvider.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/RuleProvider.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/RuleProvider.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/RuleProvider.java
index 99f075a..c34e05e 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/RuleProvider.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/RuleProvider.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 /**
  * Enumeration of the Attribute Types that is used as a part of
- * {@link org.openecomp.policy.api.PolicyParameters}.
+ * {@link org.onap.policy.api.PolicyParameters}.
  * 
  * @version 0.1
  */
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/package-info.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/package-info.java
similarity index 92%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/api/package-info.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/api/package-info.java
index 982dbb4..07875bc 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/api/package-info.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/api/package-info.java
@@ -19,10 +19,10 @@
  */
 
 
-package org.openecomp.policy.api;
+package org.onap.policy.api;
 
 /**
- * org.openecomp.policy.api contains the API for the PolicyEngine ProtoType
+ * org.onap.policy.api contains the API for the PolicyEngine ProtoType
  *
  * @version 0.9
  * 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIConfigResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/models/APIConfigResponse.java
similarity index 91%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIConfigResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/models/APIConfigResponse.java
index 6645226..a83f743 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIConfigResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/models/APIConfigResponse.java
@@ -17,12 +17,12 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.openecomp.policy.models;
+package org.onap.policy.models;
 
 import java.util.Map;
 
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyType;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyType;
 
 public interface APIConfigResponse {
     public String getPolicyConfigMessage();
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIDictionaryResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/models/APIDictionaryResponse.java
similarity index 97%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIDictionaryResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/models/APIDictionaryResponse.java
index 4829bfa..050f36b 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIDictionaryResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/models/APIDictionaryResponse.java
@@ -17,7 +17,7 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.openecomp.policy.models;
+package org.onap.policy.models;
 
 public class APIDictionaryResponse {
     private Object dictionaryData;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIPolicyConfigResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/models/APIPolicyConfigResponse.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIPolicyConfigResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/models/APIPolicyConfigResponse.java
index 7be9321..7efee00 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/models/APIPolicyConfigResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/models/APIPolicyConfigResponse.java
@@ -17,12 +17,12 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.openecomp.policy.models;
+package org.onap.policy.models;
 
 import java.util.Map;
 
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyType;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyType;
 
 public class APIPolicyConfigResponse implements APIConfigResponse {
     private String policyConfigMessage;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientDMAAP.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
similarity index 89%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientDMAAP.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
index 563cd85..3699bfc 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientDMAAP.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
@@ -1,16 +1,16 @@
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.List;
 import java.util.UUID;
 
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.utils.BusConsumer;
-import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.utils.BusConsumer;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 
 public class AutoClientDMAAP implements Runnable {
 	private static StdPDPNotification notification = null;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientEnd.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientEnd.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
index 06a2e47..976b570 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientEnd.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.io.IOException;
 import java.net.URI;
@@ -34,17 +34,17 @@
 
 //import org.apache.log4j.Logger;
 import org.glassfish.tyrus.client.ClientManager;
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.std.NotificationStore;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.std.NotificationStore;
+import org.onap.policy.std.StdPDPNotification;
 
-import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
-import org.openecomp.policy.common.logging.flexlogger.*; 
+import org.onap.policy.common.logging.flexlogger.*; 
 
 @ClientEndpoint
 public class AutoClientEnd {
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientUEB.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
similarity index 92%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientUEB.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
index 7821877..37413f4 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/AutoClientUEB.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
@@ -18,20 +18,20 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.List;
 import java.util.UUID;
 
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 
 import com.att.nsa.cambria.client.CambriaClientBuilders;
 import com.att.nsa.cambria.client.CambriaClientBuilders.ConsumerBuilder;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEnd.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
similarity index 92%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEnd.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
index c006b05..7e4ba07 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEnd.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.io.IOException;
 import java.net.URI;
@@ -35,14 +35,14 @@
 
 //import org.apache.log4j.Logger;
 import org.glassfish.tyrus.client.ClientManager;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.std.StdPDPNotification;
 
-import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 
-import org.openecomp.policy.common.logging.flexlogger.*; 
+import org.onap.policy.common.logging.flexlogger.*; 
 
 @ClientEndpoint
 public class ManualClientEnd {
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEndDMAAP.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndDMAAP.java
similarity index 88%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEndDMAAP.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndDMAAP.java
index f4a218d..72ad7ce 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEndDMAAP.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndDMAAP.java
@@ -1,16 +1,16 @@
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.List;
 
 import org.json.JSONObject;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.utils.BusConsumer;
-import org.openecomp.policy.utils.BusPublisher;
-import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.utils.BusConsumer;
+import org.onap.policy.utils.BusPublisher;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 
 public class ManualClientEndDMAAP {
 	private static StdPDPNotification notification = null;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEndUEB.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEndUEB.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
index 85d5659..dcd86eb 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/ManualClientEndUEB.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -26,11 +26,11 @@
 import java.util.List;
 
 import org.json.JSONObject;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 
 import com.att.nsa.cambria.client.CambriaClientFactory;
 import com.att.nsa.cambria.client.CambriaConsumer;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/MatchStore.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/MatchStore.java
similarity index 89%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/MatchStore.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/MatchStore.java
index 1459dd9..a243c1f 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/MatchStore.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/MatchStore.java
@@ -18,20 +18,20 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.Collection;
 import java.util.HashSet;
 
-import org.openecomp.policy.api.LoadedPolicy;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.api.RemovedPolicy;
-import org.openecomp.policy.std.StdLoadedPolicy;
-import org.openecomp.policy.std.StdPDPNotification;
-import org.openecomp.policy.std.StdRemovedPolicy;
+import org.onap.policy.api.LoadedPolicy;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.api.RemovedPolicy;
+import org.onap.policy.std.StdLoadedPolicy;
+import org.onap.policy.std.StdPDPNotification;
+import org.onap.policy.std.StdRemovedPolicy;
 
-import org.openecomp.policy.common.logging.flexlogger.*; 
+import org.onap.policy.common.logging.flexlogger.*; 
 
 public class MatchStore {
 	private static HashSet<Matches> matchStore = new HashSet<>();
@@ -50,8 +50,8 @@
 				// Check if it is a new Match
 				Boolean match = false;
 				for(Matches oldMatch: matchStore){
-					// Compare ECOMPName
-					if(oldMatch.getEcompName().equals(newMatch.getEcompName())){
+					// Compare ONAPName
+					if(oldMatch.getOnapName().equals(newMatch.getOnapName())){
 						// Compare ConfigName if it exists. 
 						if(newMatch.getConfigName()!=null && oldMatch.getConfigName()!=null){
 							if(oldMatch.getConfigName().equals(newMatch.getConfigName())){
@@ -138,14 +138,14 @@
 						// Again Better way would be comparing sizes first.
 						// Matches are different need to check if has configAttributes
 						if(match.getConfigAttributes()!=null && !match.getConfigAttributes().isEmpty()){
-							// adding ecomp and config to config-attributes. 
+							// adding onap and config to config-attributes. 
 							int compValues = match.getConfigAttributes().size() + 2;
 							if(updatedPolicy.getMatches().size()== compValues){
 								// Comparing both the values.. 
 								boolean matchAttributes = false;
 								for(String newKey: updatedPolicy.getMatches().keySet()){
-									if(newKey.equals("ECOMPName")){
-										if(updatedPolicy.getMatches().get(newKey).equals(match.getEcompName())){
+									if(newKey.equals("ONAPName")){
+										if(updatedPolicy.getMatches().get(newKey).equals(match.getOnapName())){
 											matchAttributes = true;
 										}else {
 											matchAttributes = false;
@@ -184,7 +184,7 @@
 						}else if(match.getConfigName()!=null){
 							// If there are no config Attributes then check if it has Config Name
 							if(updatedPolicy.getMatches().size()== 2){
-								if(updatedPolicy.getMatches().get("ECOMPName").equals(match.getEcompName())){
+								if(updatedPolicy.getMatches().get("ONAPName").equals(match.getOnapName())){
 									if(updatedPolicy.getMatches().get("ConfigName").equals(match.getConfigName())){
 										// Match..
 										matched = true;
@@ -198,9 +198,9 @@
 								break;
 							}
 						}else {
-							// If non exist then assuming the ECOMP Name to be there. 
+							// If non exist then assuming the ONAP Name to be there. 
 							if(updatedPolicy.getMatches().size()== 1){
-								if(updatedPolicy.getMatches().get("ECOMPName").equals(match.getEcompName())){
+								if(updatedPolicy.getMatches().get("ONAPName").equals(match.getOnapName())){
 									// Match.. 
 									matched = true;
 								}else {
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/Matches.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/Matches.java
similarity index 88%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/Matches.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/Matches.java
index 8e6a8ee..eb382a6 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/Matches.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/Matches.java
@@ -18,19 +18,19 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.Map;
 
 public class Matches {
-	private String ecompName = null;
+	private String onapName = null;
 	private String configName = null;
 	private Map<String,String> configAttributes = null;
-	public String getEcompName() {
-		return ecompName;
+	public String getOnapName() {
+		return onapName;
 	}
-	public void setEcompName(String ecompName) {
-		this.ecompName = ecompName;
+	public void setOnapName(String onapName) {
+		this.onapName = onapName;
 	}
 	public String getConfigName() {
 		return configName;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/NotificationUnMarshal.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
similarity index 89%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/NotificationUnMarshal.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
index 196f89b..2ec174c 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/NotificationUnMarshal.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
@@ -18,16 +18,16 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.openecomp.policy.api.LoadedPolicy;
-import org.openecomp.policy.api.RemovedPolicy;
-import org.openecomp.policy.api.UpdateType;
-import org.openecomp.policy.std.StdLoadedPolicy;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.api.LoadedPolicy;
+import org.onap.policy.api.RemovedPolicy;
+import org.onap.policy.api.UpdateType;
+import org.onap.policy.std.StdLoadedPolicy;
+import org.onap.policy.std.StdPDPNotification;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdDecisionResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdDecisionResponse.java
similarity index 91%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdDecisionResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdDecisionResponse.java
index 1f4cf65..ee3f18e 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdDecisionResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdDecisionResponse.java
@@ -19,10 +19,10 @@
  */
 
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
-import org.openecomp.policy.api.DecisionResponse;
-import org.openecomp.policy.api.PolicyDecision;
+import org.onap.policy.api.DecisionResponse;
+import org.onap.policy.api.PolicyDecision;
 
 /**
  * Decision Response Implementation Class. 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdDictionaryResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdDictionaryResponse.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdDictionaryResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdDictionaryResponse.java
index 74eebc3..9e0f93d 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdDictionaryResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdDictionaryResponse.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.Map;
 
 import javax.json.JsonObject;
 
-import org.openecomp.policy.api.DictionaryResponse;
+import org.onap.policy.api.DictionaryResponse;
 
 public class StdDictionaryResponse implements DictionaryResponse {
 	private String dictionaryMessage;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdMetricsResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdMetricsResponse.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdMetricsResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdMetricsResponse.java
index 8c89e4a..539863d 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdMetricsResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdMetricsResponse.java
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
-import org.openecomp.policy.api.MetricsResponse;
+import org.onap.policy.api.MetricsResponse;
 
 public class StdMetricsResponse implements MetricsResponse {
 	private String responseMessage;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyChangeResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyChangeResponse.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyChangeResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyChangeResponse.java
index 2fec860..240a53c 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyChangeResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyChangeResponse.java
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
-import org.openecomp.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyChangeResponse;
 
 public class StdPolicyChangeResponse implements PolicyChangeResponse{
 	private String responseMessage = null;
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyConfig.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyConfig.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyConfig.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyConfig.java
index ec205da..8a9b0a0 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyConfig.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyConfig.java
@@ -19,16 +19,16 @@
  */
 
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.Map;
 import java.util.Properties;
 
 import javax.json.JsonObject;
 
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyType;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyType;
 import org.w3c.dom.Document;
 
 /**
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyEngine.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
similarity index 94%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyEngine.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
index 0732c3c..608bb8d 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyEngine.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
@@ -19,7 +19,7 @@
  */
 
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -51,40 +51,40 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 
-import org.openecomp.policy.api.AttributeType;
-import org.openecomp.policy.api.ConfigRequestParameters;
-import org.openecomp.policy.api.DecisionRequestParameters;
-import org.openecomp.policy.api.DecisionResponse;
-import org.openecomp.policy.api.DeletePolicyParameters;
-import org.openecomp.policy.api.DictionaryParameters;
-import org.openecomp.policy.api.DictionaryResponse;
-import org.openecomp.policy.api.EventRequestParameters;
-import org.openecomp.policy.api.ImportParameters;
-import org.openecomp.policy.api.MetricsRequestParameters;
-import org.openecomp.policy.api.MetricsResponse;
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.api.PolicyChangeResponse;
-import org.openecomp.policy.api.PolicyClass;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyConfigType;
-import org.openecomp.policy.api.PolicyDecisionException;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyEventException;
-import org.openecomp.policy.api.PolicyException;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.api.PolicyResponse;
-import org.openecomp.policy.api.PolicyType;
-import org.openecomp.policy.api.PushPolicyParameters;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.models.APIDictionaryResponse;
-import org.openecomp.policy.models.APIPolicyConfigResponse;
-import org.openecomp.policy.utils.AAFEnvironment;
-import org.openecomp.policy.utils.PolicyUtils;
-import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.ConfigRequestParameters;
+import org.onap.policy.api.DecisionRequestParameters;
+import org.onap.policy.api.DecisionResponse;
+import org.onap.policy.api.DeletePolicyParameters;
+import org.onap.policy.api.DictionaryParameters;
+import org.onap.policy.api.DictionaryResponse;
+import org.onap.policy.api.EventRequestParameters;
+import org.onap.policy.api.ImportParameters;
+import org.onap.policy.api.MetricsRequestParameters;
+import org.onap.policy.api.MetricsResponse;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyClass;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyDecisionException;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyEventException;
+import org.onap.policy.api.PolicyException;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PolicyResponse;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.api.PushPolicyParameters;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.models.APIDictionaryResponse;
+import org.onap.policy.models.APIPolicyConfigResponse;
+import org.onap.policy.utils.AAFEnvironment;
+import org.onap.policy.utils.PolicyUtils;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -205,8 +205,8 @@
 	/*
 	 * getDecision using the decision Attributes.
 	 */
-	public DecisionResponse getDecision(String eCOMPComponentName, Map<String, String> decisionAttributes, UUID requestID) throws PolicyDecisionException {
-		return getDecisionImpl(eCOMPComponentName, decisionAttributes, requestID);
+	public DecisionResponse getDecision(String onapComponentName, Map<String, String> decisionAttributes, UUID requestID) throws PolicyDecisionException {
+		return getDecisionImpl(onapComponentName, decisionAttributes, requestID);
 	}
 	
 	/*
@@ -218,7 +218,7 @@
 			LOGGER.error(message);
 			throw new PolicyDecisionException(message);
 		}
-		return getDecisionImpl(decisionRequestParameters.getECOMPComponentName(), decisionRequestParameters.getDecisionAttributes(), decisionRequestParameters.getRequestID());
+		return getDecisionImpl(decisionRequestParameters.getONAPComponentName(), decisionRequestParameters.getDecisionAttributes(), decisionRequestParameters.getRequestID());
 	}
 	
 	/*
@@ -523,7 +523,7 @@
         }
     }
 
-    public DecisionResponse getDecisionImpl(String eCOMPComponentName,
+    public DecisionResponse getDecisionImpl(String onapComponentName,
 											Map<String, String> decisionAttributes,
 											UUID requestID) throws PolicyDecisionException {
 		String resource= "getDecision";
@@ -533,7 +533,7 @@
         try {
             DecisionRequestParameters decisionRequestParameters = new DecisionRequestParameters();
             decisionRequestParameters.setDecisionAttributes(decisionAttributes);
-            decisionRequestParameters.setECOMPComponentName(eCOMPComponentName);
+            decisionRequestParameters.setONAPComponentName(onapComponentName);
             decisionRequestParameters.setRequestID(requestID);
             body = PolicyUtils.objectToJsonString(decisionRequestParameters);
         } catch (JsonProcessingException e) {
@@ -650,8 +650,8 @@
         HashMap<String, String> configAttributes = new HashMap<>();
         try{
             for(String key: matchingConditions.keySet()){
-                if(key.equalsIgnoreCase("ECOMPName")){
-                    match.setEcompName(matchingConditions.get(key));
+                if(key.equalsIgnoreCase("ONAPName")){
+                    match.setOnapName(matchingConditions.get(key));
                 }else if(key.equalsIgnoreCase("ConfigName")){
                     match.setConfigName(matchingConditions.get(key));
                 }else{
@@ -663,8 +663,8 @@
             }
             MatchStore.storeMatch(match);
         }catch(Exception e){
-            LOGGER.info("StoreMatch failed for Ecomp:"
-                    + match.getEcompName() + " Config: "
+            LOGGER.info("StoreMatch failed for Onap:"
+                    + match.getOnapName() + " Config: "
                     + match.getConfigName());
         }
     }
@@ -1138,10 +1138,10 @@
 		return pushPolicyImpl(pushPolicyParameters).getResponseMessage();
 	}
 	
-	public String createUpdateConfigPolicy(String policyName, String policyDescription, String ecompName, String configName,
+	public String createUpdateConfigPolicy(String policyName, String policyDescription, String onapName, String configName,
 			Map<String, String> configAttributes, String configType, String body, String policyScope, UUID requestID,
 			String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag) throws PolicyException {
-		return createUpdateConfigPolicyImpl(policyName, policyDescription, ecompName, configName,
+		return createUpdateConfigPolicyImpl(policyName, policyDescription, onapName, configName,
 				configAttributes, configType, body, policyScope, requestID,
 				riskLevel, riskType, guard, ttlDate, updateFlag);
 	}
@@ -1149,7 +1149,7 @@
 	/*
 	 * Create Config Policy API Implementation
 	 */
-	public String createUpdateConfigPolicyImpl(String policyName, String policyDescription, String ecompName, String configName,
+	public String createUpdateConfigPolicyImpl(String policyName, String policyDescription, String onapName, String configName,
 			Map<String, String> configAttributes, String configType, String body, String policyScope, UUID requestID,
 			String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag) throws PolicyException {
 		PolicyParameters policyParameters = new PolicyParameters();
@@ -1167,7 +1167,7 @@
 		}
 		policyParameters.setPolicyName(policyScope+"."+policyName);
 		policyParameters.setPolicyDescription(policyDescription);
-		policyParameters.setEcompName(ecompName);
+		policyParameters.setOnapName(onapName);
 		policyParameters.setConfigName(configName);
 		Map<AttributeType, Map<String, String>> attributes = new HashMap<AttributeType, Map<String, String>>();
 		attributes.put(AttributeType.MATCHING, configAttributes);
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyResponse.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyResponse.java
similarity index 95%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyResponse.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyResponse.java
index eed40ba..3ab57f2 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdPolicyResponse.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyResponse.java
@@ -19,12 +19,12 @@
  */
 
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.Map;
 
-import org.openecomp.policy.api.PolicyResponse;
-import org.openecomp.policy.api.PolicyResponseStatus;
+import org.onap.policy.api.PolicyResponse;
+import org.onap.policy.api.PolicyResponseStatus;
 
 /**
  * PolicyResponse Implementation class. 
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdStatus.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdStatus.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdStatus.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/StdStatus.java
index a7d22b7..798cbde 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/StdStatus.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdStatus.java
@@ -19,20 +19,20 @@
  */
 
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 
 import java.util.Map;
 import java.util.Properties;
 
 import javax.json.JsonObject;
 
-import org.openecomp.policy.api.DecisionResponse;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyDecision;
-import org.openecomp.policy.api.PolicyResponse;
-import org.openecomp.policy.api.PolicyResponseStatus;
-import org.openecomp.policy.api.PolicyType;
+import org.onap.policy.api.DecisionResponse;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyDecision;
+import org.onap.policy.api.PolicyResponse;
+import org.onap.policy.api.PolicyResponseStatus;
+import org.onap.policy.api.PolicyType;
 import org.w3c.dom.Document;
 
 public class StdStatus extends StdPolicyResponse implements PolicyConfig, PolicyResponse, DecisionResponse{
diff --git a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/package-info.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/package-info.java
similarity index 93%
rename from PolicyEngineAPI/src/main/java/org/openecomp/policy/std/package-info.java
rename to PolicyEngineAPI/src/main/java/org/onap/policy/std/package-info.java
index a10f347..5d6bbcb 100644
--- a/PolicyEngineAPI/src/main/java/org/openecomp/policy/std/package-info.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/package-info.java
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std;
+package org.onap.policy.std;
 /**
- * Provides standard implementations of the interfaces from the {@link org.openecomp.policy.api} package.
+ * Provides standard implementations of the interfaces from the {@link org.onap.policy.api} package.
  *
  * @version 0.3 
  *
diff --git a/PolicyEngineAPI/src/main/resources/logback.xml b/PolicyEngineAPI/src/main/resources/logback.xml
index 098db5a..9f72549 100644
--- a/PolicyEngineAPI/src/main/resources/logback.xml
+++ b/PolicyEngineAPI/src/main/resources/logback.xml
@@ -27,7 +27,7 @@
   <property name="debugDir" value="logs" />
   
   <!--  specify the component name 
-    <ECOMP-component-name>::= "MSO" | "DCAE" | "ASDC " | "AAI" |"Policy" | "SDNC" | "AC"  -->
+    <ONAP-component-name>::= "MSO" | "DCAE" | "ASDC " | "AAI" |"Policy" | "SDNC" | "AC"  -->
   <property name="componentName" value="Policy"></property>
   <property name="subComponentName" value="PolicyEngineAPI"></property>
   
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/AutoClientEndTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java
similarity index 91%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/AutoClientEndTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java
index 86f1599..203b9f5 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/AutoClientEndTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientEndTest.java
@@ -18,17 +18,17 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.std.AutoClientEnd;
-import org.openecomp.policy.std.StdPolicyEngine;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.std.AutoClientEnd;
+import org.onap.policy.std.StdPolicyEngine;
 
 /**
  * The class <code>AutoClientEndTest</code> contains tests for the class <code>{@link AutoClientEnd}</code>.
@@ -81,7 +81,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientEnd
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
 		assertNotNull(result);
 	}
 
@@ -105,7 +105,7 @@
 		// An unexpected exception was thrown in user code while executing this test:
 		//    java.lang.ExceptionInInitializerError
 		//       at org.apache.log4j.Logger.getLogger(Logger.java:104)
-		//       at org.openecomp.policy.std.AutoClientEnd.<clinit>(AutoClientEnd.java:39)
+		//       at org.onap.policy.std.AutoClientEnd.<clinit>(AutoClientEnd.java:39)
 	}
 
 	/**
@@ -140,7 +140,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientEnd
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
 	}
 
 
@@ -160,7 +160,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientEnd
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
 	}
 
 	/**
@@ -178,7 +178,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientEnd
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientEnd
 	}
 
 	/**
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/AutoClientUEBTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
similarity index 91%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/AutoClientUEBTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
index 2888967..94c2ac7 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/AutoClientUEBTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
@@ -18,15 +18,15 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.LinkedList;
 import java.util.List;
 
 import org.junit.*;
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.std.AutoClientUEB;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.std.AutoClientUEB;
 
 import static org.junit.Assert.*;
 
@@ -58,7 +58,7 @@
 		// An unexpected exception was thrown in user code while executing this test:
 		//    java.lang.ExceptionInInitializerError
 		//       at org.apache.log4j.Logger.getLogger(Logger.java:104)
-		//       at org.openecomp.policy.std.AutoClientUEB.<clinit>(AutoClientUEB.java:39)
+		//       at org.onap.policy.std.AutoClientUEB.<clinit>(AutoClientUEB.java:39)
 		assertNotNull(result);
 	}
 
@@ -77,7 +77,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 		assertNull(result);
 	}
 
@@ -96,7 +96,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 		assertFalse(result);
 	}
 
@@ -115,7 +115,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 		assertNotNull(result);
 	}
 
@@ -136,7 +136,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 		assertTrue(result);
 	}
 
@@ -157,7 +157,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -177,7 +177,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -197,7 +197,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -217,7 +217,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -237,7 +237,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -257,7 +257,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -277,7 +277,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -297,7 +297,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -317,7 +317,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -337,7 +337,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -357,7 +357,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -377,7 +377,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -397,7 +397,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -417,7 +417,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -437,7 +437,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -457,7 +457,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -479,7 +479,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -498,7 +498,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
@@ -518,7 +518,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.AutoClientUEB
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
 	}
 
 	/**
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/Handler.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/Handler.java
similarity index 88%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/Handler.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/Handler.java
index 9879174..388ca07 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/Handler.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/Handler.java
@@ -18,22 +18,22 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Collection;
 
-import org.openecomp.policy.api.LoadedPolicy;
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.RemovedPolicy;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.api.LoadedPolicy;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.RemovedPolicy;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 
 public class Handler implements NotificationHandler{
 	
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/ManualClientEndTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java
similarity index 93%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/ManualClientEndTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java
index c44dac6..2ae522c 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/ManualClientEndTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -26,9 +26,9 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.std.ManualClientEnd;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.std.ManualClientEnd;
 
 /**
  * The class <code>ManualClientEndTest</code> contains tests for the class <code>{@link ManualClientEnd}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/ManualClientEndUEBTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndUEBTest.java
similarity index 92%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/ManualClientEndUEBTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndUEBTest.java
index f196975..77b0c6f 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/ManualClientEndUEBTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/ManualClientEndUEBTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -29,10 +29,10 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.std.ManualClientEndUEB;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.std.ManualClientEndUEB;
+import org.onap.policy.std.StdPDPNotification;
 
 /**
  * The class <code>ManualClientEndUEBTest</code> contains tests for the class <code>{@link ManualClientEndUEB}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/MatchStoreTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/MatchStoreTest.java
similarity index 90%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/MatchStoreTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/MatchStoreTest.java
index ab8946c..856474d 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/MatchStoreTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/MatchStoreTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -29,10 +29,10 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.std.MatchStore;
-import org.openecomp.policy.std.Matches;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.std.MatchStore;
+import org.onap.policy.std.Matches;
+import org.onap.policy.std.StdPDPNotification;
 
 /**
  * The class <code>MatchStoreTest</code> contains tests for the class <code>{@link MatchStore}</code>.
@@ -70,7 +70,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNull(result);
 	}
 
@@ -90,7 +90,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -110,7 +110,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -130,7 +130,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -150,7 +150,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -170,7 +170,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -190,7 +190,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -210,7 +210,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -230,7 +230,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -250,7 +250,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -270,7 +270,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -290,7 +290,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -310,7 +310,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -330,7 +330,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -350,7 +350,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -370,7 +370,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 		assertNotNull(result);
 	}
 
@@ -391,7 +391,7 @@
 		// An unexpected exception was thrown in user code while executing this test:
 		//    java.lang.ExceptionInInitializerError
 		//       at org.apache.log4j.Logger.getLogger(Logger.java:104)
-		//       at org.openecomp.policy.std.MatchStore.<clinit>(MatchStore.java:15)
+		//       at org.onap.policy.std.MatchStore.<clinit>(MatchStore.java:15)
 		assertNotNull(result);
 	}
 
@@ -407,13 +407,13 @@
 		throws Exception {
 		Matches newMatch = new Matches();
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -428,13 +428,13 @@
 		throws Exception {
 		Matches newMatch = new Matches();
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -449,13 +449,13 @@
 		throws Exception {
 		Matches newMatch = new Matches();
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -471,13 +471,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -493,13 +493,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -515,13 +515,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -537,13 +537,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -558,13 +558,13 @@
 		throws Exception {
 		Matches newMatch = new Matches();
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -578,13 +578,13 @@
 	public void testStoreMatch_9()
 		throws Exception {
 		Matches newMatch = new Matches();
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -600,13 +600,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -622,13 +622,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -644,13 +644,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -666,13 +666,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -688,13 +688,13 @@
 		Matches newMatch = new Matches();
 		newMatch.setConfigAttributes(new Hashtable<String, String>());
 		newMatch.setConfigName("");
-		newMatch.setEcompName("");
+		newMatch.setOnapName("");
 
 		MatchStore.storeMatch(newMatch);
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -713,7 +713,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
@@ -732,7 +732,7 @@
 
 		// add additional test code here
 		// An unexpected exception was thrown in user code while executing this test:
-		//    java.lang.NoClassDefFoundError: Could not initialize class org.openecomp.policy.std.MatchStore
+		//    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.MatchStore
 	}
 
 	/**
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/MatchesTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/MatchesTest.java
similarity index 90%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/MatchesTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/MatchesTest.java
index cdc9b55..f71d93c 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/MatchesTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/MatchesTest.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Hashtable;
 import java.util.Map;
 
 import org.junit.*;
-import org.openecomp.policy.std.Matches;
+import org.onap.policy.std.Matches;
 
 import static org.junit.Assert.*;
 
@@ -59,7 +59,7 @@
 	public void testGetConfigAttributes_1()
 		throws Exception {
 		Matches fixture = new Matches();
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigAttributes(new Hashtable<String, String>());
 		fixture.setConfigName("");
 
@@ -81,7 +81,7 @@
 	public void testGetConfigName_1()
 		throws Exception {
 		Matches fixture = new Matches();
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigAttributes(new Hashtable<String, String>());
 		fixture.setConfigName("");
 
@@ -92,21 +92,21 @@
 	}
 
 	/**
-	 * Run the String getEcompName() method test.
+	 * Run the String getOnapName() method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:41 PM
 	 */
 	@Test
-	public void testGetEcompName_1()
+	public void testGetOnapName_1()
 		throws Exception {
 		Matches fixture = new Matches();
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigAttributes(new Hashtable<String, String>());
 		fixture.setConfigName("");
 
-		String result = fixture.getEcompName();
+		String result = fixture.getOnapName();
 
 		// add additional test code here
 		assertEquals("", result);
@@ -123,7 +123,7 @@
 	public void testSetConfigAttributes_1()
 		throws Exception {
 		Matches fixture = new Matches();
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigAttributes(new Hashtable<String, String>());
 		fixture.setConfigName("");
 		Map<String, String> configAttributes = new Hashtable<String, String>();
@@ -144,7 +144,7 @@
 	public void testSetConfigName_1()
 		throws Exception {
 		Matches fixture = new Matches();
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigAttributes(new Hashtable<String, String>());
 		fixture.setConfigName("");
 		String configName = "";
@@ -155,22 +155,22 @@
 	}
 
 	/**
-	 * Run the void setEcompName(String) method test.
+	 * Run the void setOnapName(String) method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:41 PM
 	 */
 	@Test
-	public void testSetEcompName_1()
+	public void testSetOnapName_1()
 		throws Exception {
 		Matches fixture = new Matches();
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigAttributes(new Hashtable<String, String>());
 		fixture.setConfigName("");
-		String ecompName = "";
+		String onapName = "";
 
-		fixture.setEcompName(ecompName);
+		fixture.setOnapName(onapName);
 
 		// add additional test code here
 	}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/NotificationStoreTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/NotificationStoreTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/NotificationStoreTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/NotificationStoreTest.java
index d54c4f4..ed7383e 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/NotificationStoreTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/NotificationStoreTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import org.junit.*;
-import org.openecomp.policy.std.NotificationStore;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.std.NotificationStore;
+import org.onap.policy.std.StdPDPNotification;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/NotificationUnMarshalTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/NotificationUnMarshalTest.java
similarity index 97%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/NotificationUnMarshalTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/NotificationUnMarshalTest.java
index 674c58a..fb42f98 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/NotificationUnMarshalTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/NotificationUnMarshalTest.java
@@ -18,15 +18,15 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import static org.junit.Assert.assertNotNull;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.std.NotificationUnMarshal;
-import org.openecomp.policy.std.StdPDPNotification;
+import org.onap.policy.std.NotificationUnMarshal;
+import org.onap.policy.std.StdPDPNotification;
 
 /**
  * The class <code>NotificationUnMarshalTest</code> contains tests for the class <code>{@link NotificationUnMarshal}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdLoadedPolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdLoadedPolicyTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdLoadedPolicyTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdLoadedPolicyTest.java
index de8a6a7..c45a5ac 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdLoadedPolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdLoadedPolicyTest.java
@@ -18,14 +18,14 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Hashtable;
 import java.util.Map;
 
 import org.junit.*;
-import org.openecomp.policy.api.UpdateType;
-import org.openecomp.policy.std.StdLoadedPolicy;
+import org.onap.policy.api.UpdateType;
+import org.onap.policy.std.StdLoadedPolicy;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPDPNotificationTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPDPNotificationTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPDPNotificationTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPDPNotificationTest.java
index 1bda0e5..6a55800 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPDPNotificationTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPDPNotificationTest.java
@@ -18,18 +18,18 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Collection;
 import java.util.LinkedList;
 
 import org.junit.*;
-import org.openecomp.policy.api.LoadedPolicy;
-import org.openecomp.policy.api.NotificationType;
-import org.openecomp.policy.api.RemovedPolicy;
-import org.openecomp.policy.std.StdLoadedPolicy;
-import org.openecomp.policy.std.StdPDPNotification;
-import org.openecomp.policy.std.StdRemovedPolicy;
+import org.onap.policy.api.LoadedPolicy;
+import org.onap.policy.api.NotificationType;
+import org.onap.policy.api.RemovedPolicy;
+import org.onap.policy.std.StdLoadedPolicy;
+import org.onap.policy.std.StdPDPNotification;
+import org.onap.policy.std.StdRemovedPolicy;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyChangeResponseTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyChangeResponseTest.java
similarity index 97%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyChangeResponseTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyChangeResponseTest.java
index 45c7018..5ce53d1 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyChangeResponseTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyChangeResponseTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import org.junit.*;
-import org.openecomp.policy.std.StdPolicyChangeResponse;
+import org.onap.policy.std.StdPolicyChangeResponse;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyConfigTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyConfigTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyConfigTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyConfigTest.java
index a347374..736f51b 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyConfigTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyConfigTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Hashtable;
 import java.util.Map;
@@ -27,9 +27,9 @@
 import javax.json.JsonObject;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyType;
-import org.openecomp.policy.std.StdPolicyConfig;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.std.StdPolicyConfig;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyResponseTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyResponseTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyResponseTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyResponseTest.java
index a593c46..11179ae 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdPolicyResponseTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdPolicyResponseTest.java
@@ -18,14 +18,14 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Hashtable;
 import java.util.Map;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyResponseStatus;
-import org.openecomp.policy.std.StdPolicyResponse;
+import org.onap.policy.api.PolicyResponseStatus;
+import org.onap.policy.std.StdPolicyResponse;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdRemovedPolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdRemovedPolicyTest.java
similarity index 97%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdRemovedPolicyTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdRemovedPolicyTest.java
index 0a0865c..2482c30 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdRemovedPolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdRemovedPolicyTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import org.junit.*;
-import org.openecomp.policy.std.StdRemovedPolicy;
+import org.onap.policy.std.StdRemovedPolicy;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdStatusTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdStatusTest.java
similarity index 99%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdStatusTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdStatusTest.java
index 34918c2..b72d256 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/StdStatusTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/StdStatusTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
 
 import java.util.Hashtable;
 import java.util.Map;
@@ -27,11 +27,11 @@
 import javax.json.JsonObject;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyDecision;
-import org.openecomp.policy.api.PolicyResponseStatus;
-import org.openecomp.policy.api.PolicyType;
-import org.openecomp.policy.std.StdStatus;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyDecision;
+import org.onap.policy.api.PolicyResponseStatus;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.std.StdStatus;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/package-info.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/package-info.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/package-info.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/std/test/package-info.java
index 75bfc39..4c98f98 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/std/test/package-info.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/package-info.java
@@ -24,4 +24,4 @@
 /**
  *
  */
-package org.openecomp.policy.std.test;
+package org.onap.policy.std.test;
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ActionPolicyApiTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
similarity index 93%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ActionPolicyApiTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
index 398efe0..a662564 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ActionPolicyApiTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -27,15 +27,15 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.openecomp.policy.api.AttributeType;
-import org.openecomp.policy.api.PolicyChangeResponse;
-import org.openecomp.policy.api.PolicyClass;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.std.StdPolicyChangeResponse;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyClass;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.std.StdPolicyChangeResponse;
 
 import junit.framework.TestCase; 
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/AttributeTypeTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/AttributeTypeTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/AttributeTypeTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/AttributeTypeTest.java
index df8713a..62c447f 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/AttributeTypeTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/AttributeTypeTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.AttributeType;
+import org.onap.policy.api.AttributeType;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigBasePolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
similarity index 91%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigBasePolicyTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
index 69de7fe..5d5a076 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigBasePolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,16 +26,16 @@
 
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.openecomp.policy.api.AttributeType;
-import org.openecomp.policy.api.PolicyChangeResponse;
-import org.openecomp.policy.api.PolicyConfigType;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.api.PolicyType;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.std.StdPolicyChangeResponse;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.std.StdPolicyChangeResponse;
 
 import junit.framework.TestCase; 
 
@@ -77,7 +77,7 @@
 
         policyParameters.setPolicyConfigType(PolicyConfigType.Base); //required
         policyParameters.setPolicyName("test.junitTest"); //required
-        policyParameters.setEcompName("test");
+        policyParameters.setOnapName("test");
         policyParameters.setConfigName("testBase");
         policyParameters.setConfigBodyType(PolicyType.OTHER);
         policyParameters.setConfigBody("testing");
@@ -204,9 +204,9 @@
 	}
 	
 	@Test
-	public final void testCreatePolicyNullEcompName() {
-		response.setResponseMessage("PE300 - Data Issue: No ECOMP Name given.");
-		policyParameters.setEcompName(null);
+	public final void testCreatePolicyNullOnapName() {
+		response.setResponseMessage("PE300 - Data Issue: No ONAP Name given.");
+		policyParameters.setOnapName(null);
 		try{
 			result = policyEngine.createPolicy(policyParameters);
 		} catch (Exception e){
@@ -276,9 +276,9 @@
 	}
 	
 	@Test
-	public final void testUpdatePolicyNullEcompName() {
-		response.setResponseMessage("PE300 - Data Issue: No ECOMP Name given.");
-		policyParameters.setEcompName(null);
+	public final void testUpdatePolicyNullOnapName() {
+		response.setResponseMessage("PE300 - Data Issue: No ONAP Name given.");
+		policyParameters.setOnapName(null);
 		try{
 			result = policyEngine.updatePolicy(policyParameters);
 		} catch (Exception e){
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigFirewallPolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
similarity index 94%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigFirewallPolicyTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
index 280f06e..78ae249 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigFirewallPolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.io.StringReader;
 import java.util.UUID;
@@ -29,14 +29,14 @@
 
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.openecomp.policy.api.PolicyChangeResponse;
-import org.openecomp.policy.api.PolicyConfigType;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.std.StdPolicyChangeResponse;
+import org.onap.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.std.StdPolicyChangeResponse;
 
 import junit.framework.TestCase; 
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigRequestParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigRequestParametersTest.java
similarity index 92%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigRequestParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigRequestParametersTest.java
index 0e8f912..91025f5 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ConfigRequestParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigRequestParametersTest.java
@@ -18,14 +18,14 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.UUID;
 
 import org.junit.*;
-import org.openecomp.policy.api.ConfigRequestParameters;
+import org.onap.policy.api.ConfigRequestParameters;
 
 import static org.junit.Assert.*;
 
@@ -55,7 +55,7 @@
 		assertEquals(null, result.getConfigName());
 		assertEquals(null, result.getConfigAttributes());
 		assertEquals(null, result.getRequestID());
-		assertEquals(null, result.getEcompName());
+		assertEquals(null, result.getOnapName());
 		assertEquals(Boolean.FALSE, result.getUnique());
 	}
 
@@ -70,19 +70,19 @@
 	public void testConfigRequestParameters_2()
 		throws Exception {
 		String policyName = "";
-		String eCOMPComponentName = "";
+		String onapComponentName = "";
 		String configName = "";
 		Map<String, String> configAttributes = new Hashtable<String, String>();
 		Boolean unique = new Boolean(true);
 		UUID requestID = UUID.randomUUID();
 
-		ConfigRequestParameters result = createConfigRequest(policyName, eCOMPComponentName, configName, configAttributes, unique, requestID);
+		ConfigRequestParameters result = createConfigRequest(policyName, onapComponentName, configName, configAttributes, unique, requestID);
 
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals("", result.getPolicyName());
 		assertEquals("", result.getConfigName());
-		assertEquals("", result.getEcompName());
+		assertEquals("", result.getOnapName());
 		assertEquals(Boolean.TRUE, result.getUnique());
 	}
 
@@ -124,18 +124,18 @@
 	}
 
 	/**
-	 * Run the String getEcompName() method test.
+	 * Run the String getOnapName() method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:40 PM
 	 */
 	@Test
-	public void testGetEcompName_1()
+	public void testGetOnapName_1()
 		throws Exception {
 		ConfigRequestParameters fixture = createConfigRequest("", "", "", new Hashtable<String, String>(), new Boolean(true), UUID.randomUUID());
 
-		String result = fixture.getEcompName();
+		String result = fixture.getOnapName();
 
 		// add additional test code here
 		assertEquals("", result);
@@ -257,19 +257,19 @@
 	}
 
 	/**
-	 * Run the void setEcompName(String) method test.
+	 * Run the void setOnapName(String) method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:40 PM
 	 */
 	@Test
-	public void testSetEcompName_1()
+	public void testSetOnapName_1()
 		throws Exception {
 		ConfigRequestParameters fixture = createConfigRequest("", "", "", new Hashtable<String, String>(), new Boolean(true), UUID.randomUUID());
-		String eCOMPComponentName = "";
+		String onapComponentName = "";
 
-		fixture.setEcompName(eCOMPComponentName);
+		fixture.setOnapName(onapComponentName);
 
 		// add additional test code here
 	}
@@ -349,11 +349,11 @@
 		new org.junit.runner.JUnitCore().run(ConfigRequestParametersTest.class);
 	}
 	
-	private ConfigRequestParameters createConfigRequest(String policyName, String eCOMPComponentName, String configName, Map<String,String> configAttributes, Boolean unique, UUID requestID){
+	private ConfigRequestParameters createConfigRequest(String policyName, String onapComponentName, String configName, Map<String,String> configAttributes, Boolean unique, UUID requestID){
 		ConfigRequestParameters configRequestParameters = new ConfigRequestParameters();
 		configRequestParameters.setRequestID(requestID);
 		configRequestParameters.setPolicyName(policyName);
-		configRequestParameters.setEcompName(eCOMPComponentName);
+		configRequestParameters.setOnapName(onapComponentName);
 		configRequestParameters.setConfigName(configName);
 		configRequestParameters.setConfigAttributes(configAttributes);
 		configRequestParameters.makeUnique(unique);
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DecisionPolicyApiTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
similarity index 89%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DecisionPolicyApiTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
index 82ba1c7..a800934 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DecisionPolicyApiTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,15 +26,15 @@
 
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.openecomp.policy.api.AttributeType;
-import org.openecomp.policy.api.PolicyChangeResponse;
-import org.openecomp.policy.api.PolicyClass;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.std.StdPolicyChangeResponse;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyClass;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.std.StdPolicyChangeResponse;
 
 import junit.framework.TestCase;
 
@@ -76,7 +76,7 @@
 
         policyParameters.setPolicyClass(PolicyClass.Decision); //required
         policyParameters.setPolicyName("test.junitTest"); //required
-        policyParameters.setEcompName("test");
+        policyParameters.setOnapName("test");
         policyParameters.setPolicyDescription("testing");  //optional
         //policyParameters.setPolicyScope("test"); //Directory will be created where the Policies are saved... this displays a a subscope on the GUI
         
@@ -170,9 +170,9 @@
 	}
 	
 	@Test
-	public final void testCreatePolicyNullEcompName() {
+	public final void testCreatePolicyNullOnapName() {
 		response.setResponseMessage("PE500 - Process Flow Issue: :500:");
-		policyParameters.setEcompName(null);
+		policyParameters.setOnapName(null);
 		try{
 			result = policyEngine.createPolicy(policyParameters);
 		} catch (Exception e){
@@ -206,9 +206,9 @@
 	}
 	
 	@Test
-	public final void testUpdatePolicyNullEcompName() {
+	public final void testUpdatePolicyNullOnapName() {
 		response.setResponseMessage("PE500 - Process Flow Issue: :500:");
-		policyParameters.setEcompName(null);
+		policyParameters.setOnapName(null);
 		try{
 			result = policyEngine.updatePolicy(policyParameters);
 		} catch (Exception e){
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DecisionRequestParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionRequestParametersTest.java
similarity index 90%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DecisionRequestParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionRequestParametersTest.java
index d8fdfbc..746822f 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DecisionRequestParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionRequestParametersTest.java
@@ -18,14 +18,14 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.UUID;
 
 import org.junit.*;
-import org.openecomp.policy.api.DecisionRequestParameters;
+import org.onap.policy.api.DecisionRequestParameters;
 
 import static org.junit.Assert.*;
 
@@ -51,7 +51,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals(null, result.getECOMPComponentName());
+		assertEquals(null, result.getONAPComponentName());
 		assertEquals(null, result.getDecisionAttributes());
 		assertEquals(null, result.getRequestID());
 	}
@@ -66,15 +66,15 @@
 	@Test
 	public void testDecisionRequestParameters_2()
 		throws Exception {
-		String eCOMPComponentName = "";
+		String onapComponentName = "";
 		Map<String, String> decisionAttributes = new Hashtable<String, String>();
 		UUID requestID = UUID.randomUUID();
 
-		DecisionRequestParameters result = new DecisionRequestParameters(eCOMPComponentName, decisionAttributes, requestID);
+		DecisionRequestParameters result = new DecisionRequestParameters(onapComponentName, decisionAttributes, requestID);
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("", result.getECOMPComponentName());
+		assertEquals("", result.getONAPComponentName());
 	}
 
 	/**
@@ -97,18 +97,18 @@
 	}
 
 	/**
-	 * Run the String getECOMPComponentName() method test.
+	 * Run the String getONAPComponentName() method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:41 PM
 	 */
 	@Test
-	public void testGetECOMPComponentName_1()
+	public void testGetONAPComponentName_1()
 		throws Exception {
 		DecisionRequestParameters fixture = new DecisionRequestParameters("", new Hashtable<String, String>(), UUID.randomUUID());
 
-		String result = fixture.getECOMPComponentName();
+		String result = fixture.getONAPComponentName();
 
 		// add additional test code here
 		assertEquals("", result);
@@ -156,19 +156,19 @@
 	}
 
 	/**
-	 * Run the void setECOMPComponentName(String) method test.
+	 * Run the void setONAPComponentName(String) method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:41 PM
 	 */
 	@Test
-	public void testSetECOMPComponentName_1()
+	public void testSetONAPComponentName_1()
 		throws Exception {
 		DecisionRequestParameters fixture = new DecisionRequestParameters("", new Hashtable<String, String>(), UUID.randomUUID());
-		String eCOMPComponentName = "";
+		String onapComponentName = "";
 
-		fixture.setECOMPComponentName(eCOMPComponentName);
+		fixture.setONAPComponentName(onapComponentName);
 
 		// add additional test code here
 	}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DeletePolicyConditionTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DeletePolicyConditionTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DeletePolicyConditionTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/DeletePolicyConditionTest.java
index c294120..2513816 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DeletePolicyConditionTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DeletePolicyConditionTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.DeletePolicyCondition;
+import org.onap.policy.api.DeletePolicyCondition;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DeletePolicyParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DeletePolicyParametersTest.java
similarity index 97%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DeletePolicyParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/DeletePolicyParametersTest.java
index 7723f98..423b839 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/DeletePolicyParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DeletePolicyParametersTest.java
@@ -18,13 +18,13 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.UUID;
 
 import org.junit.*;
-import org.openecomp.policy.api.DeletePolicyCondition;
-import org.openecomp.policy.api.DeletePolicyParameters;
+import org.onap.policy.api.DeletePolicyCondition;
+import org.onap.policy.api.DeletePolicyParameters;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/EventRequestParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/EventRequestParametersTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/EventRequestParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/EventRequestParametersTest.java
index abfc31f..4fecea8 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/EventRequestParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/EventRequestParametersTest.java
@@ -18,14 +18,14 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.UUID;
 
 import org.junit.*;
-import org.openecomp.policy.api.EventRequestParameters;
+import org.onap.policy.api.EventRequestParameters;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigByPolicyNameTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigByPolicyNameTest.java
similarity index 84%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigByPolicyNameTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigByPolicyNameTest.java
index 7bfa27c..07af71e 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigByPolicyNameTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigByPolicyNameTest.java
@@ -18,18 +18,18 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.Collection;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 
 import junit.framework.TestCase; 
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringStringMapTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringStringMapTest.java
similarity index 81%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringStringMapTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringStringMapTest.java
index c5b7f8f..f70a16a 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringStringMapTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringStringMapTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -31,19 +31,19 @@
 
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyType;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger; 
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger; 
 
 public class GetConfigStringStringMapTest {
 
 	private PolicyEngine policyEngine = null;
-	private String eCOMPComponentName = null;
+	private String onapComponentName = null;
 	private String configName = null;
 	private Map<String,String> configAttributes = new HashMap<String,String>();
 	private Collection<PolicyConfig> policyConfig = null;
@@ -62,11 +62,11 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringMapFail() {
-		eCOMPComponentName = null;
+		onapComponentName = null;
 		configName = null;
 		configAttributes = null;
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -76,11 +76,11 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringMapFail1() {
-		eCOMPComponentName = null;
+		onapComponentName = null;
 		configName = "testFail";
 		configAttributes.put("TestValue", "Fail");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -90,11 +90,11 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringMapFail2() {
-		eCOMPComponentName = "TestFail";
+		onapComponentName = "TestFail";
 		configName = null;
 		configAttributes.put("TestValue", "Fail");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -104,11 +104,11 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringMapFail3() {
-		eCOMPComponentName = "TestFail";
+		onapComponentName = "TestFail";
 		configName = "configFail";
 		configAttributes= null;
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -118,11 +118,11 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringMapfail4() {
-		eCOMPComponentName = "TestFail";
+		onapComponentName = "TestFail";
 		configName = "configFail";
 		configAttributes.put("", "");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -132,11 +132,11 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringMapNotValid() {
-		eCOMPComponentName = "TestFail";
+		onapComponentName = "TestFail";
 		configName = "configFail";
 		configAttributes.put("Action:com.test.fail", "Value");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -156,13 +156,13 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringMapValidJSON() {
-		eCOMPComponentName = "JSON";
+		onapComponentName = "JSON";
 		configName = "JSONconfig";
 		configAttributes.put("Resource.com:test:resource:json", "Test");
 		configAttributes.put("Action.com:test:action:json", "TestJSON");
 		configAttributes.put("Subject.com:test:subject:json", "TestSubject");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -182,13 +182,13 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringMapValidXML() {
-		eCOMPComponentName = "XML";
+		onapComponentName = "XML";
 		configName = "XMLconfig";
 		configAttributes.put("Resource.com:test:resource:json", "Test");
 		configAttributes.put("Action.com:test:action:json", "TestJSON");
 		configAttributes.put("Subject.com:test:subject:json", "TestSubject");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -208,13 +208,13 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringMapValidProperties() {
-		eCOMPComponentName = "Properties";
+		onapComponentName = "Properties";
 		configName = "PropConfig" ;
 		configAttributes.put("Resource.com:test:resource:json", "Test");
 		configAttributes.put("Action.com:test:action:json", "TestJSON");
 		configAttributes.put("Subject.com:test:subject:json", "TestSubject");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -234,13 +234,13 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringMapValidOther() {
-		eCOMPComponentName = "Other";
+		onapComponentName = "Other";
 		configName = "OtherConfig" ;
 		configAttributes.put("Resource.com:test:resource:json", "Test");
 		configAttributes.put("Action.com:test:action:json", "TestJSON");
 		configAttributes.put("Subject.com:test:subject:json", "TestSubject");
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName, configAttributes);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName, configAttributes);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringStringTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringStringTest.java
similarity index 82%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringStringTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringStringTest.java
index b55abd7..0a6db2d 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringStringTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringStringTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -29,19 +29,19 @@
 
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyConfigStatus;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyType;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger; 
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyType;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger; 
 
 public class GetConfigStringStringTest {
 	
 	private PolicyEngine policyEngine = null;
-	private String eCOMPComponentName = null;
+	private String onapComponentName = null;
 	private String configName = null;
 	private Collection<PolicyConfig> policyConfig = null;
 	private static final Logger logger = FlexLogger.getLogger(GetConfigStringStringTest.class);
@@ -59,10 +59,10 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringFail() {
-		eCOMPComponentName = null;
+		onapComponentName = null;
 		configName = null;
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -72,10 +72,10 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringFail1() {
-		eCOMPComponentName = null;
+		onapComponentName = null;
 		configName = "";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -85,10 +85,10 @@
 	@SuppressWarnings("deprecation")
 	@Test
 	public void testGetConfigStringStringFail2() {
-		eCOMPComponentName = "";
+		onapComponentName = "";
 		configName = null;
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -98,10 +98,10 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringNotvalid() {
-		eCOMPComponentName = "fail";
+		onapComponentName = "fail";
 		configName = "fail";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -121,10 +121,10 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringValidJSON() {
-		eCOMPComponentName = "JSON";
+		onapComponentName = "JSON";
 		configName = "JSONconfig";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -144,10 +144,10 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringValidXML() {
-		eCOMPComponentName = "XML";
+		onapComponentName = "XML";
 		configName = "XMLconfig";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -167,10 +167,10 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringValidProperties() {
-		eCOMPComponentName = "Properties";
+		onapComponentName = "Properties";
 		configName = "PropConfig" ; 
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -190,10 +190,10 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringStringValidOther() {
-		eCOMPComponentName = "Other";
+		onapComponentName = "Other";
 		configName = "OtherConfig" ; 
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName, configName);
+			policyConfig = policyEngine.getConfig(onapComponentName, configName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringTest.java
similarity index 84%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringTest.java
index ffa1913..f87a59c 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/GetConfigStringTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/GetConfigStringTest.java
@@ -18,24 +18,24 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.Collection;
 
 import org.junit.Before;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 
 import junit.framework.TestCase; 
 
 public class GetConfigStringTest extends TestCase{
 	
 	private PolicyEngine policyEngine = null;
-	private String eCOMPComponentName = null;
+	private String onapComponentName = null;
 	private Collection<PolicyConfig> policyConfig = null;
 	private static final Logger logger = FlexLogger.getLogger(GetConfigStringTest.class);
 	@Before
@@ -52,9 +52,9 @@
 	//@Test
 	@SuppressWarnings("deprecation")
 	public void testGetConfigStringFail() {
-		eCOMPComponentName = null;
+		onapComponentName = null;
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName);
+			policyConfig = policyEngine.getConfig(onapComponentName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -63,9 +63,9 @@
 	
 	/*@Test
 	public void testGetConfigStringNotvalid() {
-		eCOMPComponentName = "fail";
+		onapComponentName = "fail";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName);
+			policyConfig = policyEngine.getConfig(onapComponentName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -85,9 +85,9 @@
 	
 	/*@Test
 	public void testGetConfigStringValidJSON() {
-		eCOMPComponentName = "JSON";
+		onapComponentName = "JSON";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName);
+			policyConfig = policyEngine.getConfig(onapComponentName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -106,9 +106,9 @@
 	*/
 	/*@Test
 	public void testGetConfigStringValidXML() {
-		eCOMPComponentName = "XML";
+		onapComponentName = "XML";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName);
+			policyConfig = policyEngine.getConfig(onapComponentName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -127,9 +127,9 @@
 	*/
 	/*@Test
 	public void testGetConfigStringValidProperties() {
-		eCOMPComponentName = "Properties";
+		onapComponentName = "Properties";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName);
+			policyConfig = policyEngine.getConfig(onapComponentName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
@@ -148,9 +148,9 @@
 	*/
 	/*@Test
 	public void testGetConfigStringValidOther() {
-		eCOMPComponentName = "Other";
+		onapComponentName = "Other";
 		try {
-			policyConfig = policyEngine.getConfig(eCOMPComponentName);
+			policyConfig = policyEngine.getConfig(onapComponentName);
 		} catch (PolicyConfigException e) {
 			logger.warn(e.getMessage());
 		}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ImportParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ImportParametersTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ImportParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/ImportParametersTest.java
index 3719b5d..be3e9c3 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/ImportParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ImportParametersTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -28,7 +28,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.ImportParameters;
+import org.onap.policy.api.ImportParameters;
 
 /**
  * The class <code>ImportParametersTest</code> contains tests for the class <code>{@link ImportParameters}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/LoadedPolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/LoadedPolicyTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/LoadedPolicyTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/LoadedPolicyTest.java
index 0748d0a..1cc9de8 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/LoadedPolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/LoadedPolicyTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.LoadedPolicy;
+import org.onap.policy.api.LoadedPolicy;
 
 /**
  * The class <code>LoadedPolicyTest</code> contains tests for the class <code>{@link LoadedPolicy}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationHandlerTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationHandlerTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationHandlerTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationHandlerTest.java
index 68ba3a7..4b996ce 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationHandlerTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationHandlerTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationHandler;
 
 /**
  * The class <code>NotificationHandlerTest</code> contains tests for the class <code>{@link NotificationHandler}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationSchemeTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationSchemeTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationSchemeTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationSchemeTest.java
index 1cb105c..3274cf3 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationSchemeTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationSchemeTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.NotificationScheme;
+import org.onap.policy.api.NotificationScheme;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationTypeTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationTypeTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationTypeTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationTypeTest.java
index 95dce6a..53ef086 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/NotificationTypeTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/NotificationTypeTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.NotificationType;
+import org.onap.policy.api.NotificationType;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PDPNotificationTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PDPNotificationTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PDPNotificationTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PDPNotificationTest.java
index 43754f8..50d0aa3 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PDPNotificationTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PDPNotificationTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.PDPNotification;
+import org.onap.policy.api.PDPNotification;
 
 /**
  * The class <code>PDPNotificationTest</code> contains tests for the class <code>{@link PDPNotification}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyChangeResponseTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyChangeResponseTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyChangeResponseTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyChangeResponseTest.java
index d36ae44..e8fd634 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyChangeResponseTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyChangeResponseTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyChangeResponse;
 
 /**
  * The class <code>PolicyChangeResponseTest</code> contains tests for the class <code>{@link PolicyChangeResponse}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyClassTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyClassTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyClassTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyClassTest.java
index 28e5bee..24eafc1 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyClassTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyClassTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyClass;
+import org.onap.policy.api.PolicyClass;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigExceptionTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigExceptionTest.java
similarity index 89%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigExceptionTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigExceptionTest.java
index 4134eac..60b11b5 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigExceptionTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigExceptionTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyConfigException;
 
 import static org.junit.Assert.*;
 
@@ -48,7 +48,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyConfigException", result.toString());
+		assertEquals("org.onap.policy.api.PolicyConfigException", result.toString());
 		assertEquals(null, result.getLocalizedMessage());
 		assertEquals(null, result.getMessage());
 	}
@@ -70,7 +70,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyConfigException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyConfigException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -91,7 +91,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyConfigException: java.lang.Throwable", result.toString());
+		assertEquals("org.onap.policy.api.PolicyConfigException: java.lang.Throwable", result.toString());
 		assertEquals("java.lang.Throwable", result.getLocalizedMessage());
 		assertEquals("java.lang.Throwable", result.getMessage());
 	}
@@ -113,7 +113,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyConfigException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyConfigException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -137,7 +137,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyConfigException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyConfigException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigStatusTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigStatusTest.java
similarity index 97%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigStatusTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigStatusTest.java
index c402538..7a93f05 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigStatusTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigStatusTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyConfigStatus;
+import org.onap.policy.api.PolicyConfigStatus;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigTest.java
index c6247fc..0aa4fbb 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfig;
 
 /**
  * The class <code>PolicyConfigTest</code> contains tests for the class <code>{@link PolicyConfig}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigTypeTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigTypeTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigTypeTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigTypeTest.java
index cd6c6a9..e5e0b54 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyConfigTypeTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyConfigTypeTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyConfigType;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyDecisionExceptionTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyDecisionExceptionTest.java
similarity index 89%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyDecisionExceptionTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyDecisionExceptionTest.java
index 95dfd7a..f0ee881 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyDecisionExceptionTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyDecisionExceptionTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyDecisionException;
+import org.onap.policy.api.PolicyDecisionException;
 
 import static org.junit.Assert.*;
 
@@ -48,7 +48,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyDecisionException", result.toString());
+		assertEquals("org.onap.policy.api.PolicyDecisionException", result.toString());
 		assertEquals(null, result.getLocalizedMessage());
 		assertEquals(null, result.getMessage());
 	}
@@ -70,7 +70,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyDecisionException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyDecisionException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -91,7 +91,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyDecisionException: java.lang.Throwable", result.toString());
+		assertEquals("org.onap.policy.api.PolicyDecisionException: java.lang.Throwable", result.toString());
 		assertEquals("java.lang.Throwable", result.getLocalizedMessage());
 		assertEquals("java.lang.Throwable", result.getMessage());
 	}
@@ -113,7 +113,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyDecisionException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyDecisionException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -137,7 +137,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyDecisionException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyDecisionException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyDecisionTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyDecisionTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyDecisionTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyDecisionTest.java
index 12069ab..4d95238 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyDecisionTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyDecisionTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyDecision;
+import org.onap.policy.api.PolicyDecision;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineExceptionTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineExceptionTest.java
similarity index 89%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineExceptionTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineExceptionTest.java
index d21fb12..58c45b9 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineExceptionTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineExceptionTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyEngineException;
 
 import static org.junit.Assert.*;
 
@@ -48,7 +48,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyEngineException", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEngineException", result.toString());
 		assertEquals(null, result.getLocalizedMessage());
 		assertEquals(null, result.getMessage());
 	}
@@ -70,7 +70,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyEngineException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEngineException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -91,7 +91,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyEngineException: java.lang.Throwable", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEngineException: java.lang.Throwable", result.toString());
 		assertEquals("java.lang.Throwable", result.getLocalizedMessage());
 		assertEquals("java.lang.Throwable", result.getMessage());
 	}
@@ -113,7 +113,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyEngineException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEngineException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -137,7 +137,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyEngineException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEngineException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineInterfaceTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
similarity index 89%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineInterfaceTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
index fd5f65f..be9e0e7 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineInterfaceTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.io.StringReader;
 import java.net.HttpURLConnection;
@@ -32,34 +32,34 @@
 import javax.json.JsonReader;
 
 import org.mockito.Mockito;
-import org.openecomp.policy.api.AttributeType;
-import org.openecomp.policy.api.ConfigRequestParameters;
-import org.openecomp.policy.api.DecisionRequestParameters;
-import org.openecomp.policy.api.DecisionResponse;
-import org.openecomp.policy.api.DeletePolicyCondition;
-import org.openecomp.policy.api.DeletePolicyParameters;
-import org.openecomp.policy.api.EventRequestParameters;
-import org.openecomp.policy.api.ImportParameters;
-import org.openecomp.policy.api.ImportParameters.IMPORT_TYPE;
-import org.openecomp.policy.api.NotificationHandler;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.PDPNotification;
-import org.openecomp.policy.api.PolicyChangeResponse;
-import org.openecomp.policy.api.PolicyClass;
-import org.openecomp.policy.api.PolicyConfig;
-import org.openecomp.policy.api.PolicyConfigException;
-import org.openecomp.policy.api.PolicyDecisionException;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyEventException;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.api.PolicyResponse;
-import org.openecomp.policy.api.PushPolicyParameters;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger;
-import org.openecomp.policy.std.StdPDPNotification;
-import org.openecomp.policy.std.StdPolicyChangeResponse;
-import org.openecomp.policy.std.StdPolicyResponse;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.ConfigRequestParameters;
+import org.onap.policy.api.DecisionRequestParameters;
+import org.onap.policy.api.DecisionResponse;
+import org.onap.policy.api.DeletePolicyCondition;
+import org.onap.policy.api.DeletePolicyParameters;
+import org.onap.policy.api.EventRequestParameters;
+import org.onap.policy.api.ImportParameters;
+import org.onap.policy.api.ImportParameters.IMPORT_TYPE;
+import org.onap.policy.api.NotificationHandler;
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.PDPNotification;
+import org.onap.policy.api.PolicyChangeResponse;
+import org.onap.policy.api.PolicyClass;
+import org.onap.policy.api.PolicyConfig;
+import org.onap.policy.api.PolicyConfigException;
+import org.onap.policy.api.PolicyDecisionException;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyEventException;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PolicyResponse;
+import org.onap.policy.api.PushPolicyParameters;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.std.StdPDPNotification;
+import org.onap.policy.std.StdPolicyChangeResponse;
+import org.onap.policy.std.StdPolicyResponse;
 
 import junit.framework.TestCase;
 
@@ -163,10 +163,10 @@
 	 */
 	@SuppressWarnings("deprecation")
 	public void testGetConfig() {
-		String ecompName = null;
+		String onapName = null;
 		
 		try{
-			policyConfig = policyEngine.getConfig(ecompName);
+			policyConfig = policyEngine.getConfig(onapName);
 		} catch (PolicyConfigException e){
 			logger.warn(e.getMessage());
 		}
@@ -175,10 +175,10 @@
 	
 	@SuppressWarnings("deprecation")
 	public void testGetConfig2() {
-		String ecompName = null;
+		String onapName = null;
 
 		try{
-			policyConfig = policyEngine.getConfig(ecompName,requestID);
+			policyConfig = policyEngine.getConfig(onapName,requestID);
 		} catch (PolicyConfigException e){
 			logger.warn(e.getMessage());
 		}
@@ -188,11 +188,11 @@
 	
 	@SuppressWarnings("deprecation")
 	public void testGetConfig3() {
-		String ecompName = null;
+		String onapName = null;
 		String configName = null;
 
 		try{
-			policyConfig = policyEngine.getConfig(ecompName,configName,requestID);
+			policyConfig = policyEngine.getConfig(onapName,configName,requestID);
 		} catch (PolicyConfigException e){
 			logger.warn(e.getMessage());
 		}
@@ -201,12 +201,12 @@
 
 	@SuppressWarnings("deprecation")
 	public void testGetConfig4() {
-		String ecompName = null;
+		String onapName = null;
 		String configName = null;
 		Map<String,String> configAttributes = null;
 		
 		try{
-			policyConfig = policyEngine.getConfig(ecompName,configName,configAttributes);
+			policyConfig = policyEngine.getConfig(onapName,configName,configAttributes);
 		} catch (PolicyConfigException e){
 			logger.warn(e.getMessage());
 		}
@@ -215,12 +215,12 @@
 	
 	@SuppressWarnings("deprecation")
 	public void testGetConfig5() {
-		String ecompName = null;
+		String onapName = null;
 		String configName = null;
 		Map<String,String> configAttributes = null;
 		
 		try{
-			policyConfig = policyEngine.getConfig(ecompName,configName,configAttributes,requestID);
+			policyConfig = policyEngine.getConfig(onapName,configName,configAttributes,requestID);
 		} catch (PolicyConfigException e){
 			logger.warn(e.getMessage());
 		}
@@ -307,14 +307,14 @@
 	@SuppressWarnings("deprecation")
 	public void testGetDecision()
 	{
-		String eCOMPComponentName = null;
+		String onapComponentName = null;
 		Map<String,String> decisionAttributes = null;
 		
 		DecisionResponse result = null;
 		
 		try {
-			Mockito.when(mockPolicyEngine.getDecision(eCOMPComponentName,decisionAttributes)).thenReturn(null);
-			result = mockPolicyEngine.getDecision(eCOMPComponentName,decisionAttributes);
+			Mockito.when(mockPolicyEngine.getDecision(onapComponentName,decisionAttributes)).thenReturn(null);
+			result = mockPolicyEngine.getDecision(onapComponentName,decisionAttributes);
 		} catch (PolicyDecisionException e) {
 			logger.error("Exception Occured"+e);
 		}
@@ -325,14 +325,14 @@
 	@SuppressWarnings("deprecation")
 	public void testGetDecision2()
 	{
-		String eCOMPComponentName = null;
+		String onapComponentName = null;
 		Map<String,String> decisionAttributes = null;
 		
 		DecisionResponse result = null;
 		
 		try {	
-			Mockito.when(mockPolicyEngine.getDecision(eCOMPComponentName,decisionAttributes,requestID)).thenReturn(null);
-			result = mockPolicyEngine.getDecision(eCOMPComponentName,decisionAttributes);
+			Mockito.when(mockPolicyEngine.getDecision(onapComponentName,decisionAttributes,requestID)).thenReturn(null);
+			result = mockPolicyEngine.getDecision(onapComponentName,decisionAttributes);
 		} catch (PolicyDecisionException e) {
 			logger.error("Exception Occured"+e);
 		}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineTest.java
similarity index 93%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineTest.java
index c36a921..abfab07 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEngineTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -29,11 +29,11 @@
 import java.nio.file.Paths;
 
 import org.junit.Test;
-import org.openecomp.policy.api.NotificationScheme;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger; 
+import org.onap.policy.api.NotificationScheme;
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger; 
 
 public class PolicyEngineTest {
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEventExceptionTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEventExceptionTest.java
similarity index 89%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEventExceptionTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEventExceptionTest.java
index fa8d5d1..6f75733 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyEventExceptionTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEventExceptionTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyEventException;
+import org.onap.policy.api.PolicyEventException;
 
 import static org.junit.Assert.*;
 
@@ -48,7 +48,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyEventException", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEventException", result.toString());
 		assertEquals(null, result.getLocalizedMessage());
 		assertEquals(null, result.getMessage());
 	}
@@ -70,7 +70,7 @@
 		// add additional test code here
 		assertNotNull(result);
 		assertEquals(null, result.getCause());
-		assertEquals("org.openecomp.policy.api.PolicyEventException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEventException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -91,7 +91,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyEventException: java.lang.Throwable", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEventException: java.lang.Throwable", result.toString());
 		assertEquals("java.lang.Throwable", result.getLocalizedMessage());
 		assertEquals("java.lang.Throwable", result.getMessage());
 	}
@@ -113,7 +113,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyEventException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEventException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
@@ -137,7 +137,7 @@
 
 		// add additional test code here
 		assertNotNull(result);
-		assertEquals("org.openecomp.policy.api.PolicyEventException: ", result.toString());
+		assertEquals("org.onap.policy.api.PolicyEventException: ", result.toString());
 		assertEquals("", result.getLocalizedMessage());
 		assertEquals("", result.getMessage());
 	}
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyParametersTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyParametersTest.java
index eeb973b..ff192dc 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyParametersTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -32,11 +32,11 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.openecomp.policy.api.AttributeType;
-import org.openecomp.policy.api.PolicyClass;
-import org.openecomp.policy.api.PolicyConfigType;
-import org.openecomp.policy.api.PolicyParameters;
-import org.openecomp.policy.api.PolicyType;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.api.PolicyClass;
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PolicyType;
 
 /**
  * The class <code>PolicyParametersTest</code> contains tests for the class <code>{@link PolicyParameters}</code>.
@@ -67,7 +67,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -102,7 +102,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -138,7 +138,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -175,7 +175,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -211,7 +211,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -250,7 +250,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -286,7 +286,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -323,7 +323,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -360,7 +360,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -397,7 +397,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -412,14 +412,14 @@
 	}
 
 	/**
-	 * Run the String getEcompName() method test.
+	 * Run the String getOnapName() method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:41 PM
 	 */
 	@Test
-	public void testGetEcompName_1()
+	public void testGetOnapName_1()
 		throws Exception {
 		PolicyParameters fixture = new PolicyParameters();
 		fixture.setRequestID(UUID.randomUUID());
@@ -434,14 +434,14 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
 		fixture.setActionPerformer("");
 		fixture.setConfigBody("");
 
-		String result = fixture.getEcompName();
+		String result = fixture.getOnapName();
 
 		// add additional test code here
 		assertEquals("", result);
@@ -470,7 +470,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -509,7 +509,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -548,7 +548,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -584,7 +584,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -620,7 +620,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -656,7 +656,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -697,7 +697,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -733,7 +733,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -769,7 +769,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -805,7 +805,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -841,7 +841,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -877,7 +877,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -915,7 +915,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -951,7 +951,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -960,14 +960,14 @@
 		PolicyConfigType policyConfigType = PolicyConfigType.BRMS_PARAM;
 		String policyName = "";
 		String policyDescription = "";
-		String ecompName = "";
+		String onapName = "";
 		String configName = "";
 		Map<AttributeType, Map<String, String>> attributes = new Hashtable<AttributeType, Map<String, String>>();
 		PolicyType configBodyType = PolicyType.JSON;
 		String configBody = "";
 		UUID requestID = UUID.randomUUID();
 
-		fixture.setConfigPolicyParameters(policyConfigType, policyName, policyDescription, ecompName, configName, attributes, configBodyType, configBody, requestID);
+		fixture.setConfigPolicyParameters(policyConfigType, policyName, policyDescription, onapName, configName, attributes, configBodyType, configBody, requestID);
 
 		// add additional test code here
 	}
@@ -995,7 +995,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1031,7 +1031,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1067,7 +1067,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1103,7 +1103,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1117,14 +1117,14 @@
 	}
 
 	/**
-	 * Run the void setEcompName(String) method test.
+	 * Run the void setOnapName(String) method test.
 	 *
 	 * @throws Exception
 	 *
 	 * @generatedBy CodePro at 6/1/16 1:41 PM
 	 */
 	@Test
-	public void testSetEcompName_1()
+	public void testSetOnapName_1()
 		throws Exception {
 		PolicyParameters fixture = new PolicyParameters();
 		fixture.setRequestID(UUID.randomUUID());
@@ -1139,15 +1139,15 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
 		fixture.setActionPerformer("");
 		fixture.setConfigBody("");
-		String ecompName = "";
+		String onapName = "";
 
-		fixture.setEcompName(ecompName);
+		fixture.setOnapName(onapName);
 
 		// add additional test code here
 	}
@@ -1175,7 +1175,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1211,7 +1211,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1247,7 +1247,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1283,7 +1283,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1319,7 +1319,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
@@ -1355,7 +1355,7 @@
 		fixture.setConfigName("");
 		fixture.setDynamicRuleAlgorithmFunctions(new LinkedList<String>());
 		fixture.setPolicyClass(PolicyClass.Action);
-		fixture.setEcompName("");
+		fixture.setOnapName("");
 		fixture.setConfigBodyType(PolicyType.JSON);
 		fixture.setDynamicRuleAlgorithmField1(new LinkedList<String>());
 		fixture.setPriority("");
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyResponseStatusTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyResponseStatusTest.java
similarity index 97%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyResponseStatusTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyResponseStatusTest.java
index 5841571..294f092 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyResponseStatusTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyResponseStatusTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyResponseStatus;
+import org.onap.policy.api.PolicyResponseStatus;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyResponseTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyResponseTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyResponseTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyResponseTest.java
index ec6ac09..b0a71d3 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyResponseTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyResponseTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.PolicyResponse;
+import org.onap.policy.api.PolicyResponse;
 
 /**
  * The class <code>PolicyResponseTest</code> contains tests for the class <code>{@link PolicyResponse}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyTypeTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyTypeTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyTypeTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyTypeTest.java
index 5b31e85..9f1a608 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PolicyTypeTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyTypeTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.PolicyType;
+import org.onap.policy.api.PolicyType;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PushPolicyParametersTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PushPolicyParametersTest.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PushPolicyParametersTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/PushPolicyParametersTest.java
index ef005f1..8325897 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/PushPolicyParametersTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PushPolicyParametersTest.java
@@ -18,12 +18,12 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import java.util.UUID;
 
 import org.junit.*;
-import org.openecomp.policy.api.PushPolicyParameters;
+import org.onap.policy.api.PushPolicyParameters;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/RemovedPolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/RemovedPolicyTest.java
similarity index 95%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/RemovedPolicyTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/RemovedPolicyTest.java
index ef77e6d..6a53cbf 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/RemovedPolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/RemovedPolicyTest.java
@@ -18,11 +18,11 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.After;
 import org.junit.Before;
-import org.openecomp.policy.api.RemovedPolicy;
+import org.onap.policy.api.RemovedPolicy;
 
 /**
  * The class <code>RemovedPolicyTest</code> contains tests for the class <code>{@link RemovedPolicy}</code>.
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/SendEventTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/SendEventTest.java
similarity index 92%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/SendEventTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/SendEventTest.java
index 5757f89..560ca46 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/SendEventTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/SendEventTest.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -30,13 +30,13 @@
 import java.util.Map;
 
 import org.junit.Before;
-import org.openecomp.policy.api.PolicyEngine;
-import org.openecomp.policy.api.PolicyEngineException;
-import org.openecomp.policy.api.PolicyEventException;
-import org.openecomp.policy.api.PolicyResponse;
-import org.openecomp.policy.api.PolicyResponseStatus;
-import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
-import org.openecomp.policy.common.logging.flexlogger.Logger; 
+import org.onap.policy.api.PolicyEngine;
+import org.onap.policy.api.PolicyEngineException;
+import org.onap.policy.api.PolicyEventException;
+import org.onap.policy.api.PolicyResponse;
+import org.onap.policy.api.PolicyResponseStatus;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger; 
 
 public class SendEventTest {
 	
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/TestRunner.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/TestRunner.java
similarity index 98%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/TestRunner.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/TestRunner.java
index 69cbd83..87687f0 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/TestRunner.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/TestRunner.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.runner.JUnitCore;
 import org.junit.runner.Result;
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/UpdateTypeTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/UpdateTypeTest.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/UpdateTypeTest.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/UpdateTypeTest.java
index 909a05f..500d6c1 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/UpdateTypeTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/UpdateTypeTest.java
@@ -18,10 +18,10 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.policy.test;
+package org.onap.policy.test;
 
 import org.junit.*;
-import org.openecomp.policy.api.UpdateType;
+import org.onap.policy.api.UpdateType;
 
 import static org.junit.Assert.*;
 
diff --git a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/package-info.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/package-info.java
similarity index 96%
rename from PolicyEngineAPI/src/test/java/org/openecomp/policy/test/package-info.java
rename to PolicyEngineAPI/src/test/java/org/onap/policy/test/package-info.java
index e678c4b..eb92f89 100644
--- a/PolicyEngineAPI/src/test/java/org/openecomp/policy/test/package-info.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/package-info.java
@@ -21,4 +21,4 @@
 /**
  * API JUNIT TestCases. 
  */
-package org.openecomp.policy.test;
+package org.onap.policy.test;
