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>
   
