diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
index cf1e6fc..392c32a 100644
--- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
+++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
@@ -40,7 +40,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 import java.util.Scanner;
@@ -89,7 +88,6 @@
 import org.onap.policy.xacml.api.pap.OnapPDP;
 import org.onap.policy.xacml.api.pap.OnapPDPGroup;
 import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
-import org.onap.policy.xacml.std.pap.StdPAPPolicy;
 import org.onap.policy.xacml.std.pap.StdPDP;
 import org.onap.policy.xacml.std.pap.StdPDPGroup;
 import org.onap.policy.xacml.std.pap.StdPDPItemSetChangeNotifier.StdItemSetChangeListener;
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java
index c79f203..e2317e4 100644
--- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java
+++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java
@@ -161,7 +161,7 @@
 			if(dictionaryName.startsWith("ActionPolicyDictionary")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					ActionPolicyDict attribute = new ActionPolicyDict("",  userId);
+					ActionPolicyDict attribute = new ActionPolicyDict();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -196,7 +196,7 @@
 			if(dictionaryName.startsWith("OnapName")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					OnapName attribute = new OnapName("",  userId);
+					OnapName attribute = new OnapName();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -256,7 +256,7 @@
 			if(dictionaryName.startsWith("VNFType")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					VNFType attribute = new VNFType("",  userId);
+					VNFType attribute = new VNFType();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -276,7 +276,7 @@
 			if(dictionaryName.startsWith("VSCLAction")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					VSCLAction attribute = new VSCLAction("",  userId);
+					VSCLAction attribute = new VSCLAction();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -316,7 +316,7 @@
 			if(dictionaryName.startsWith("ClosedLoopSite")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					ClosedLoopSite attribute = new ClosedLoopSite("",  userId);
+					ClosedLoopSite attribute = new ClosedLoopSite();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -336,7 +336,7 @@
 			if(dictionaryName.startsWith("PEPOptions")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					PEPOptions attribute = new PEPOptions("",  userId);
+					PEPOptions attribute = new PEPOptions();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -359,7 +359,7 @@
 			if(dictionaryName.startsWith("VarbindDictionary")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					VarbindDictionary attribute = new VarbindDictionary("",  userId);
+					VarbindDictionary attribute = new VarbindDictionary();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -448,7 +448,7 @@
 			if(dictionaryName.startsWith("Settings")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					DecisionSettings attribute = new DecisionSettings("",  userId);
+					DecisionSettings attribute = new DecisionSettings();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -632,7 +632,7 @@
 			if(dictionaryName.startsWith("TermList")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					TermList attribute = new TermList("",  userId);
+					TermList attribute = new TermList();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
@@ -673,7 +673,7 @@
 			if(dictionaryName.startsWith("SearchCriteria")){
 				dictionaryImportExists = true;
 				for(int i = 1; i< dictSheet.size(); i++){
-					DescriptiveScope attribute = new DescriptiveScope("",  userId);
+					DescriptiveScope attribute = new DescriptiveScope();
 					UserInfo userinfo = new UserInfo();
 					userinfo.setUserLoginId(userId);
 					attribute.setUserCreatedBy(userinfo);
diff --git a/ONAP-PDP-REST/pom.xml b/ONAP-PDP-REST/pom.xml
index ed9481f..34109c6 100644
--- a/ONAP-PDP-REST/pom.xml
+++ b/ONAP-PDP-REST/pom.xml
@@ -182,7 +182,7 @@
 		<dependency>
 			<groupId>io.springfox</groupId>
 			<artifactId>springfox-swagger2</artifactId>
-			<version>2.8.0</version>
+			<version>2.5.0</version>
 			<exclusions>
 				<exclusion>
 					<groupId>com.fasterxml.jackson.core</groupId>
@@ -191,6 +191,11 @@
 			</exclusions>
 		</dependency>
 		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.5.0</version>
+		</dependency>
+		<dependency>
 			<groupId>org.onap.policy.engine</groupId>
 			<artifactId>PolicyEngineAPI</artifactId>
 			<version>${project.version}</version>
diff --git a/ONAP-REST/pom.xml b/ONAP-REST/pom.xml
index 27f3582..ef8c76e 100644
--- a/ONAP-REST/pom.xml
+++ b/ONAP-REST/pom.xml
@@ -185,6 +185,12 @@
 			<artifactId>tomcat-dbcp</artifactId>
 			<version>8.5.9</version>
 		</dependency>
+		<dependency>
+    		<groupId>org.powermock</groupId>
+    		<artifactId>powermock-module-junit4-common</artifactId>
+    		<version>1.6.4</version>
+		</dependency>
+		
 	</dependencies>
 
 	<properties>
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java b/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
index c29e176..8a59ec6 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,77 +20,8 @@
 
 package org.onap.policy.rest;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.jpa.UserInfo;
-import org.onap.policy.xacml.api.XACMLErrorConstants;
-
-import com.att.research.xacml.api.DataTypeException;
-import com.att.research.xacml.api.Decision;
-import com.att.research.xacml.api.Request;
-import com.att.research.xacml.api.Response;
-import com.att.research.xacml.api.Result;
-import com.att.research.xacml.api.pdp.PDPEngine;
-import com.att.research.xacml.api.pdp.PDPEngineFactory;
-import com.att.research.xacml.api.pdp.PDPException;
-import com.att.research.xacml.std.annotations.RequestParser;
-import com.att.research.xacml.std.annotations.XACMLAction;
-import com.att.research.xacml.std.annotations.XACMLRequest;
-import com.att.research.xacml.std.annotations.XACMLResource;
-import com.att.research.xacml.std.annotations.XACMLSubject;
-import com.att.research.xacml.util.FactoryException;
-
-
-
 public class XacmlAdminAuthorization {
-	private static Log logger	= LogFactory.getLog(XacmlAdminAuthorization.class);
-	
-	private static UserInfo userId;
-	public static UserInfo getUserId() {
-		return userId;
-	}
 
-	public static void setUserId(UserInfo userId) {
-		XacmlAdminAuthorization.userId = userId;
-	}
-
-	public enum AdminAction {
-		ACTION_ACCESS("access"),
-		ACTION_READ("read"),
-		ACTION_WRITE("write"),
-		ACTION_ADMIN("admin");
-		
-		String action;
-		AdminAction(String a) {
-			this.action = a;
-		}
-		@Override
-		public String toString() {
-			return this.action;
-		}
-	}
-	
-	public enum AdminResource {
-		RESOURCE_APPLICATION("application"),
-		RESOURCE_POLICY_WORKSPACE("workspace"),
-		RESOURCE_POLICY_EDITOR("editor"),
-		RESOURCE_DICTIONARIES("dictionaries"),
-		RESOURCE_PDP_ADMIN("pdp_admin"),
-		RESOURCE_PIP_ADMIN("pip_admin"),
-		RESOURCE_SCOPES_SUPERADMIN("manage_scopes");
-		
-		String resource;
-		AdminResource(String r) {
-			this.resource = r;
-		}
-		@Override
-		public String toString() {
-			return this.resource;
-		}
-	}
-	
 	public enum Role {
 		ROLE_GUEST("guest"),
 		ROLE_ADMIN("admin"),
@@ -109,115 +40,4 @@
 			return this.userRole;
 		}
 	}
-	
-	@XACMLRequest(ReturnPolicyIdList=true)
-	public class AuthorizationRequest {
-		
-		@XACMLSubject(includeInResults=true)
-		String	userID;
-		
-		@XACMLAction()
-		String	action;
-		
-		@XACMLResource()
-		String	resource;
-		
-		public AuthorizationRequest(String userId, String action, String resource) {
-			this.userID = userId;
-			this.action = action;
-			this.resource = resource;
-		}
-
-		public String getUserID() {
-			return userID;
-		}
-
-		public void setUserID(String userID) {
-			this.userID = userID;
-		}
-
-		public String getAction() {
-			return action;
-		}
-
-		public void setAction(String action) {
-			this.action = action;
-		}
-
-		public String getResource() {
-			return resource;
-		}
-
-		public void setResource(String resource) {
-			this.resource = resource;
-		}
-	}
-	
-	//
-	// The PDP Engine
-	//
-	protected PDPEngine pdpEngine;
-
-	public XacmlAdminAuthorization() {
-		PDPEngineFactory pdpEngineFactory	= null;
-		try {
-			pdpEngineFactory	= PDPEngineFactory.newInstance();
-			if (pdpEngineFactory == null) {
-				logger.error("Failed to create PDP Engine Factory");
-				PolicyLogger.error("Failed to create PDP Engine Factory");
-			}
-			this.pdpEngine = pdpEngineFactory.newEngine();
-		} catch (FactoryException e) {
-			logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Exception create PDP Engine: " + e.getLocalizedMessage());
-			PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XacmlAdminAuthorization", "Exception create PDP Engine");
-		}
-	}
-	
-	public boolean	isAuthorized(String userid, AdminAction action, AdminResource resource) {
-		logger.info("authorize: " + userid + " to " + action + " with " + resource);
-		if (this.pdpEngine == null) {
-			logger.warn("no pdp engine available to authorize");
-			return false;
-		}
-		Request request;
-		try {
-			request = RequestParser.parseRequest(new AuthorizationRequest(userid, action.toString(), resource.toString()));
-		} catch (IllegalArgumentException | IllegalAccessException | DataTypeException e) {
-			logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create request: " + e.getLocalizedMessage());
-			PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XacmlAdminAuthorization", "Failed to create request");
-			return false;
-		}
-		if (request == null) {
-			logger.error("Failed to parse request.");
-			PolicyLogger.error("Failed to parse request");
-			return false;
-		}
-		logger.info("Request: " + request);
-		//
-		// Ask the engine
-		//
-		try {
-			Response response = this.pdpEngine.decide(request);
-			if (response == null) {
-				logger.error("Null response from PDP decide");
-				PolicyLogger.error("Null response from PDP decide");
-			}
-			//
-			// Should only be one result
-			//
-			if(response != null){
-				for (Result result : response.getResults()) {
-					Decision decision = result.getDecision();
-					logger.info("Decision: " + decision);
-					if (decision.equals(Decision.PERMIT)) {
-						return true;
-					}
-				}	
-			}
-		} catch (PDPException e) {
-			logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "PDP Decide failed: " + e.getLocalizedMessage());
-			PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XacmlAdminAuthorization", "PDP Decide failed");
-		}
-		return false;
-	}
 }
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ActionPolicyDict.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ActionPolicyDict.java
index fff1bf8..7abd9a0 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ActionPolicyDict.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ActionPolicyDict.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,10 +40,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 
 @Entity
 @Table(name="ActionPolicyDict")
@@ -115,19 +111,7 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log logger = LogFactory.getLog(ActionPolicyDict.class);
-	public ActionPolicyDict() {
-		//An empty constructor
-	}
 	
-	public ActionPolicyDict(String string, String userid) {
-		this(string);
-	}
-	
-	public ActionPolicyDict(String domain) {
-		this.type = domain;
-	}	
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
@@ -137,11 +121,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			logger.error("Exception caused While adding Modified by Role"+e);
-		}
 	}
 	public int getId() {
 		return this.id;
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Attribute.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Attribute.java
index ea89eea..3a4624a 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Attribute.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Attribute.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -43,10 +43,6 @@
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 import com.fasterxml.jackson.annotation.JsonIgnore;
 
 /**
@@ -58,7 +54,6 @@
 @NamedQuery(name="Attribute.findAll", query="SELECT a FROM Attribute a order by  a.priority asc, a.xacmlId asc")
 public class Attribute implements Serializable {
 	private static final long serialVersionUID = 1L;
-	private static final Log logger = LogFactory.getLog(Attribute.class);
 	
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
@@ -181,11 +176,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy = XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			logger.error("Exception caused While adding Modified by Role"+e);
-		}
 	}
 
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopD2Services.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopD2Services.java
index 5768895..5fc3067 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopD2Services.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopD2Services.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,12 +40,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 
 @Entity
 @Table(name = "ClosedLoopD2Services")
@@ -96,8 +90,6 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(ClosedLoopD2Services.class);
 	
 	public ClosedLoopD2Services(){
 		//An empty constructor
@@ -113,12 +105,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy = XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "ClosedLoopD2Services", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopSite.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopSite.java
index c3acf9a..6db176b 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopSite.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/ClosedLoopSite.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -41,21 +41,12 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 
 @Entity
 @Table(name = "ClosedLoopSite")
 @NamedQuery(name="ClosedLoopSite.findAll", query="SELECT c FROM ClosedLoopSite c ")
 public class ClosedLoopSite implements Serializable{
 	private static final long serialVersionUID = 1L;
-	
-	private static String domain;
 
 	
 	@Id
@@ -102,20 +93,6 @@
 		this.userModifiedBy = userModifiedBy;
 	}
 
-	private static Log LOGGER = LogFactory.getLog(ClosedLoopSite.class);
-	
-	public ClosedLoopSite(){
-		//An empty constructor
-	}
-	
-	public ClosedLoopSite(String string, String userid) {
-		this(domain);
-	}
-	
-	public ClosedLoopSite(String domain) {
-		this.siteName = domain;
-	}	
-
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
@@ -126,12 +103,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy = XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "ClosedLoopSite", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DecisionSettings.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DecisionSettings.java
index ae36202..ccd1052 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DecisionSettings.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DecisionSettings.java
@@ -39,10 +39,6 @@
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
 
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 
 @Entity
 @Table(name="DecisionSettings")
@@ -108,25 +104,7 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-	
-	public DecisionSettings() {
-		//An empty constructor
-	}
-	
-	public DecisionSettings(String domain) {
-		this.xacmlId = domain;
-	}
-	
-	public DecisionSettings(String domain, String user) {
-		this(domain);
-	}
-	public DecisionSettings(DecisionSettings copy, String user) {
-		this(copy.getXacmlId() + ":(0)", user);
-		this.datatypeBean = copy.getDatatypeBean();
-		this.description = copy.getDescription();
-		
-	}
-	
+
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
@@ -137,11 +115,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy = XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "DecisionSettings", "Exception caused While adding Modified by Role");
-		}
 	}
 
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DescriptiveScope.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DescriptiveScope.java
index 68a00db..d67a584 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DescriptiveScope.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/DescriptiveScope.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,13 +38,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 
 @Entity
 @Table(name = "DescriptiveScope")
@@ -98,20 +91,6 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(DescriptiveScope.class);
-	
-	public DescriptiveScope(){
-		//An empty constructor
-	}
-	
-	public DescriptiveScope(String string, String userid) {
-		this(string);
-	}
-
-	public DescriptiveScope(String domain) {
-		this.descriptiveScopeName = domain;
-	}	
 	
 	@PrePersist
 	public void	prePersist() {
@@ -123,12 +102,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "DescriptiveScope", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTag.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTag.java
index 31ec31d..c606dd9 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTag.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTag.java
@@ -38,12 +38,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 @Entity
 @Table(name = "FWTag")
 @NamedQuery(name = "FWTag.findAll", query= "Select p from FWTag p")
@@ -96,8 +90,6 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(FWTag.class);
 	
 	@PrePersist
 	public void	prePersist() {
@@ -109,12 +101,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "FWTag", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTagPicker.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTagPicker.java
index 708ebf5..314a4ee 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTagPicker.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/FWTagPicker.java
@@ -37,12 +37,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 @Entity
 @Table(name = "FWTagPicker")
 @NamedQuery(name = "FWTagPicker.findAll", query= "Select p from FWTagPicker p")
@@ -81,9 +75,7 @@
 
 	@ManyToOne(optional = false)
 	@JoinColumn(name="modified_by")
-	private UserInfo userModifiedBy;
-
-	private static Log logger = LogFactory.getLog(FWTagPicker.class);	
+	private UserInfo userModifiedBy;	
 	
 	@PrePersist
 	public void	prePersist() {
@@ -95,12 +87,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			logger.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "DescriptiveScope", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/OnapName.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/OnapName.java
index 66ee346..d817f20 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/OnapName.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/OnapName.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -39,10 +39,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 
 @Entity
 @Table(name="OnapName")
@@ -50,8 +46,6 @@
 public class OnapName implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-	private static String domain;
-
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	@Column(name="id")
@@ -95,18 +89,6 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-	
-	public OnapName() {
-		//An empty constructor
-	}
-	
-	public OnapName(String string, String userid) {
-		this(domain);
-	}
-	
-	public OnapName(String domain) {
-		this.onapName = domain;
-	}	
 
 	@PrePersist
 	public void	prePersist() {
@@ -118,11 +100,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "OnapName", "Exception caused While adding Modified by Role");
-		}
 	}
 	public String getOnapName() {
 		return this.onapName;
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PEPOptions.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PEPOptions.java
index 869386f..ae01999 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PEPOptions.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PEPOptions.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,13 +40,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 
 @Entity
 @Table(name = "PEPOptions")
@@ -100,20 +93,7 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(PEPOptions.class);
-	
-	public PEPOptions(){
-		//An empty constructor
-	}
-	
-	public PEPOptions(String string, String userid) {
-		this(string);
-	}
-
-	public PEPOptions(String domain) {
-		this.pepName = domain;
-	}	
+		
 	
 	@PrePersist
 	public void	prePersist() {
@@ -125,12 +105,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PEPOptions", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEditorScopes.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEditorScopes.java
index 698ec36..923f5ec 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEditorScopes.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEditorScopes.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,21 +38,11 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 @Entity
 @Table(name="PolicyEditorScopes")
 @NamedQuery(name="PolicyEditorScopes.findAll", query="SELECT p FROM PolicyEditorScopes p ")
 public class PolicyEditorScopes implements Serializable{
 	private static final long serialVersionUID = 1L;
-	private static Log logger = LogFactory.getLog(PolicyEditorScopes.class);
-
-	private static String domain;
 
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
@@ -78,18 +68,6 @@
 	@ManyToOne(optional = false)
 	@JoinColumn(name="modified_by")
 	private UserInfo userModifiedBy;
-	
-	public PolicyEditorScopes() {
-		// Empty constructor
-	}
-	
-	public PolicyEditorScopes(String string, String userid) {
-		this(domain);
-	}
-	
-	public PolicyEditorScopes(String domain) {
-		this.scopeName = domain;
-	}	
 
 	@PrePersist
 	public void	prePersist() {
@@ -101,12 +79,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			logger.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyEditorScopes", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyScore.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyScore.java
index a9e7765..dba7299 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyScore.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyScore.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -42,8 +42,6 @@
 public class PolicyScore implements Serializable {
 	
 	private static final long serialVersionUID = 1L;
-
-	private static String domain;
 	
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
@@ -61,18 +59,6 @@
 	@Column(name="POLICY_SCORE", nullable=true)
 	private String PolicyScore;
 	
-	public PolicyScore() {
-		// Empty constructor
-	}
-	
-	public PolicyScore(String pName, String pScore) {
-		this(domain);
-		
-	}
-	public PolicyScore(String domain) {
-		// Empty constructor
-	}
-	
 	public int getId() {
 		return id;
 	}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyVersion.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyVersion.java
index 663d34a..6af607f 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyVersion.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyVersion.java
@@ -21,7 +21,6 @@
 package org.onap.policy.rest.jpa;
 
 import java.io.Serializable;
-import java.sql.Timestamp;
 import java.util.Date;
 import java.util.Objects;
 
@@ -143,7 +142,7 @@
 		return createdDate;
 	}
 
-	public void setCreatedDate(Timestamp createdDate) {
+	public void setCreatedDate(Date createdDate) {
 		this.createdDate = createdDate;
 	}
 
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RemoteCatalogValues.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RemoteCatalogValues.java
index 7d34795..b338b18 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RemoteCatalogValues.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RemoteCatalogValues.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,8 +30,6 @@
 import javax.persistence.Id;
 import javax.persistence.NamedQuery;
 import javax.persistence.OrderBy;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
 import javax.persistence.Table;
 
 
@@ -41,8 +39,6 @@
 public class RemoteCatalogValues implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-	private static String domain;
-
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	@Column(name="id")
@@ -55,27 +51,6 @@
 	@Column(name="value")
 	private String value;
 
-
-	public RemoteCatalogValues() {
-		// Empty constructor
-	}
-	public RemoteCatalogValues(String string, String userid) {
-		this(domain);
-		
-	}
-	public RemoteCatalogValues(String domain) {
-		// Empty constructor
-	}	
-
-	@PrePersist
-	public void	prePersist() {
-		// Empty function
-	}
-	@PreUpdate
-	public void preUpdate() {
-		// Empty function
-	}
-
 	public String getValue() {
 		return value;
 	}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RiskType.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RiskType.java
index a533a70..5e69815 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RiskType.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/RiskType.java
@@ -39,12 +39,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
 
 @Entity
 @Table(name="RiskType")
@@ -96,8 +90,6 @@
 		this.userModifiedBy = userModifiedBy;
 	}
 
-	private static Log LOGGER = LogFactory.getLog(RiskType.class);
-
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
@@ -108,12 +100,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "RiskType", "Exception caused While adding Modified by Role");
-		}
 	}
 	public String getRiskName() {
 		return this.name;
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/SystemLogDB.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/SystemLogDB.java
index 324e92f..45e20d6 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/SystemLogDB.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/SystemLogDB.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -80,17 +80,6 @@
 		this.type = type;
 		this.logtype = logtype;
 	}
-
-	public void SystemLogB (int id, String system, String description, String remote, String type, Date date, String logtype){
-		this.id = id;
-		this.system = system;
-		this.description = description;
-		this.remote = remote;
-		this.type = type;
-		this.date = date;
-		this.logtype = logtype;
-		
-	}
 	
 	public int getId() {
 		return this.id;
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java
index 9c18343..1b71861 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,13 +38,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 
 @Entity
 @Table(name="TERM")
@@ -52,8 +45,6 @@
 public class TermList implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-	private static String domain;
-
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	@Column(name="id")
@@ -139,40 +130,16 @@
 		this.userModifiedBy = userModifiedBy;
 	}
 
-	private static Log LOGGER = LogFactory.getLog(TermList.class);
-	
-	public TermList() {
-		// Empty constructor
-	}
-	
-	private static final Log auditLogger = LogFactory
-			.getLog("auditLogger");
-	
-	public TermList(String string, String userid) {
-		this(domain);
-	}
-	public TermList(String domain) {
-		this.termName = domain;
-	}	
-
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
 		this.createdDate = date;
 		this.modifiedDate = date;
-		auditLogger.debug("Added New Term Name: "+this.termName+" by "+this.userCreatedBy);
-		
 	}
+	
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "TermList", "Exception caused While adding Modified by Role");
-		}
-		auditLogger.debug("Updated Term Name: "+this.termName+" by "+this.userModifiedBy);
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VNFType.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VNFType.java
index d44e4b5..bffdce0 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VNFType.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VNFType.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,13 +38,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 
 
 @Entity
@@ -53,8 +46,6 @@
 public class VNFType implements Serializable  {
 	private static final long serialVersionUID = 1L;
 
-	private static String domain;
-
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	@Column(name="id")
@@ -98,12 +89,6 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(VNFType.class);
-	
-	public VNFType() {
-		// Empty constructor
-	}
 	
 	public String getVnftype() {
 		return vnftype;
@@ -111,14 +96,6 @@
 
 	public void setVnftype(String vnftype) {
 		this.vnftype = vnftype;
-	}
-
-	public VNFType(String string, String userid) {
-		this(domain);
-	}
-	
-	public VNFType(String domain) {
-		this.vnftype = domain;
 	}	
 
 	@PrePersist
@@ -131,12 +108,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "VNFType", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VSCLAction.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VSCLAction.java
index df605ee..62c36e5 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VSCLAction.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VSCLAction.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,13 +38,6 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 
 @Entity
 @Table(name="VSCLAction")
@@ -52,8 +45,6 @@
 public class VSCLAction implements Serializable  {
 	private static final long serialVersionUID = 1L;
 
-	private static String domain;
-
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	@Column(name="id")
@@ -97,21 +88,7 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(VSCLAction.class);
 	
-	public VSCLAction() {
-		// Empty constructor
-	}
-	
-	public VSCLAction(String string, String userid) {
-		this(domain);
-	}
-	
-	public VSCLAction(String domain) {
-		this.vsclaction = domain;
-	}	
-
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
@@ -122,12 +99,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "VSCLAction", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VarbindDictionary.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VarbindDictionary.java
index 376689e..fba4b61 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VarbindDictionary.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/VarbindDictionary.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,21 +38,12 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.onap.policy.rest.XacmlAdminAuthorization;
-
-import org.onap.policy.common.logging.eelf.MessageCodes;
-import org.onap.policy.common.logging.eelf.PolicyLogger;
-
 @Entity
 @Table(name="VarbindDictionary")
 @NamedQuery(name = "VarbindDictionary.findAll", query = "Select v FROM VarbindDictionary v")
 public class VarbindDictionary implements Serializable{
 	private static final long serialVersionUID = 1L;
 	
-	private static String domain;
-	
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	@Column(name = "Id")
@@ -99,21 +90,7 @@
 	public void setUserModifiedBy(UserInfo userModifiedBy) {
 		this.userModifiedBy = userModifiedBy;
 	}
-
-	private static Log LOGGER = LogFactory.getLog(VarbindDictionary.class);
 	
-	public VarbindDictionary() {
-		// Empty constructor
-	}
-	
-	public VarbindDictionary(String string, String userid) {
-		this(domain);
-	}
-	
-	public VarbindDictionary(String domain) {
-		this.varbindName = domain;
-	}	
-
 	@PrePersist
 	public void	prePersist() {
 		Date date = new Date();
@@ -124,12 +101,6 @@
 	@PreUpdate
 	public void preUpdate() {
 		this.modifiedDate = new Date();
-		try {
-			this.userModifiedBy =XacmlAdminAuthorization.getUserId();;
-		} catch (Exception e) {
-			LOGGER.error("Exception caused While adding Modified by Role"+e);
-			PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "VarbindDictionary", "Exception caused While adding Modified by Role");
-		}
 	}
 	
 	public int getId() {
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/XACMLRestTest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/XACMLRestTest.java
index 3de4364..419b14d 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/XACMLRestTest.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/XACMLRestTest.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,68 +20,60 @@
 
 package org.onap.policy.rest;
 
-/*import java.io.IOException;
-import java.io.InputStream;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Properties;
-import java.util.Random;
 
 import javax.servlet.ServletConfig;
-import javax.servlet.ServletInputStream;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import junit.framework.TestCase;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockServletConfig;
 
-import com.att.research.xacml.util.XACMLProperties;
-import com.mockrunner.mock.web.MockServletInputStream;
-
-public class XACMLRestTest extends TestCase{
+public class XACMLRestTest extends Mockito{
 	private static Log logger	= LogFactory.getLog(XACMLRestTest.class);
-	
-	private List<String> headers = new ArrayList<String>();
-	
+
+	private List<String> headers = new ArrayList<>();
+
 	private HttpServletRequest httpServletRequest;
 	private HttpServletResponse httpServletResponse;
 	private ServletOutputStream mockOutput;
-	private ServletInputStream mockInput;
 	private ServletConfig servletConfig; 
 
-	 
-    @Before
-    public void setUp(){
-    	httpServletRequest = Mockito.mock(HttpServletRequest.class);
-    	Mockito.when(httpServletRequest.getMethod()).thenReturn("POST");
-    	Mockito.when(httpServletRequest.getHeaderNames()).thenReturn(Collections.enumeration(headers));
-    	Mockito.when(httpServletRequest.getAttributeNames()).thenReturn(Collections.enumeration(headers));
-    	
-    	mockOutput = Mockito.mock(ServletOutputStream.class);
-    	
-    	httpServletResponse = Mockito.mock(MockHttpServletResponse.class);
-    	
-    	try {
+
+	@Before
+	public void setUp(){
+		httpServletRequest = Mockito.mock(HttpServletRequest.class);
+		Mockito.when(httpServletRequest.getMethod()).thenReturn("POST");
+		Mockito.when(httpServletRequest.getHeaderNames()).thenReturn(Collections.enumeration(headers));
+		Mockito.when(httpServletRequest.getAttributeNames()).thenReturn(Collections.enumeration(headers));
+
+		mockOutput = Mockito.mock(ServletOutputStream.class);
+
+		httpServletResponse = Mockito.mock(MockHttpServletResponse.class);
+
+		try {
 			Mockito.when(httpServletResponse.getOutputStream()).thenReturn(mockOutput);
 		} catch (IOException e) {
 			fail();
 		}
 
-    	servletConfig = Mockito.mock(MockServletConfig.class);
-    	Mockito.when(servletConfig.getInitParameterNames()).thenReturn(Collections.enumeration(headers));
-    	//pdpServlet = new XACMLPdpServlet();
-    	
-    	Mockito.when(servletConfig.getInitParameter("XACML_PROPERTIES_NAME")).thenReturn("xacml.pdp.properties");
-    	
+		servletConfig = Mockito.mock(MockServletConfig.class);
+		Mockito.when(servletConfig.getInitParameterNames()).thenReturn(Collections.enumeration(headers));
+		Mockito.when(servletConfig.getInitParameter("XACML_PROPERTIES_NAME")).thenReturn("xacml.pdp.properties");
+
 		System.setProperty("xacml.properties", "xacml.pdp.properties");
 		System.setProperty("xacml.rest.pdp.config", "config_testing");
 		System.setProperty("xacml.rest.pep.idfile", "testclient.properties"); 
@@ -90,18 +82,19 @@
 		System.setProperty("xacml.referencedPolicies", "test_PolicyEngine.xml");
 		System.setProperty("test_PolicyEngine.xml.file", "config_testing\\test_PolicyEngine.xml");
 		System.setProperty("xacml.rest.pdp.register", "false");
-    }
-	
-    @Test
-	public void testDummy(){
+	}
+
+	@Test
+	public void testXacmlInit(){
 		logger.info("XACMLRestTest - testInit");
 		try {	
-			assertTrue(true);
+			XACMLRest.xacmlInit(servletConfig);
+			Logger.getRootLogger().setLevel(Level.DEBUG);
+			XACMLRest.dumpRequest(httpServletRequest);
+			XACMLRest.loadXacmlProperties(null, null);
 		} catch (Exception e) {
 			fail();
-			
 		}
 
 	}
-}
-*/
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ActionDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ActionDictionaryJPATest.java
similarity index 83%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ActionDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ActionDictionaryJPATest.java
index af70596..61f44bd 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ActionDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ActionDictionaryJPATest.java
@@ -30,9 +30,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class ActionDictionaryJPAClasses {
+public class ActionDictionaryJPATest {
 
-	private static Logger logger = FlexLogger.getLogger(ActionDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(ActionDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
@@ -246,4 +246,48 @@
 		data.setExpression("Test");
 		assertTrue("Test".equals(data.getExpression()));
 	}
+	
+	@Test
+	public void testDatatype(){
+		Datatype data = new Datatype();
+		new Datatype(null);
+		new Datatype(1, new Datatype());
+		data.setArguments(new HashSet<>());
+		assertTrue(data.getArguments()!=null);
+		data.setAttributes(new HashSet<>());
+		assertTrue(data.getAttributes()!=null);
+		data.setFunctions(new HashSet<>());
+		assertTrue(data.getFunctions()!=null);
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setShortName("Test");
+		assertTrue("Test".equals(data.getShortName()));
+		data.setXacmlId("Test");
+		assertTrue("Test".equals(data.getXacmlId()));
+		data.addArgument(new FunctionArgument());
+		data.addAttribute(new Attribute());
+		data.addFunction(new FunctionDefinition());
+		data.removeArgument(new FunctionArgument());
+		data.removeAttribute(new Attribute());
+		data.removeAttribute(new FunctionDefinition());
+		assertTrue(data.getIdentifer()!=null);
+		assertTrue(data.getIdentiferByShortName()!=null);
+		data.setIsStandard(Datatype.STANDARD);
+		assertTrue(data.isStandard());
+		data.setIsStandard(Datatype.CUSTOM);
+		assertTrue(data.isCustom());
+	}
+	
+	@Test
+	public void testPolicyAlgorithms(){
+		PolicyAlgorithms data = new PolicyAlgorithms();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setShortName("Test");
+		assertTrue("Test".equals(data.getShortName()));
+		data.setXacmlId("Test");
+		assertTrue("Test".equals(data.getXacmlId()));
+		data.setIsStandard(PolicyAlgorithms.STANDARD);
+		assertTrue(data.isStandard());
+	}
 }
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/BRMSDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/BRMSDictionaryJPATest.java
similarity index 97%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/BRMSDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/BRMSDictionaryJPATest.java
index 1f09205..72c1b7d 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/BRMSDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/BRMSDictionaryJPATest.java
@@ -28,9 +28,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class BRMSDictionaryJPAClasses {
+public class BRMSDictionaryJPATest {
 
-	private static Logger logger = FlexLogger.getLogger(BRMSDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(BRMSDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ClosedLoopPolicyDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ClosedLoopPolicyDictionaryJPATest.java
similarity index 95%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ClosedLoopPolicyDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ClosedLoopPolicyDictionaryJPATest.java
index 4fd1d0c..aa93aac 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ClosedLoopPolicyDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/ClosedLoopPolicyDictionaryJPATest.java
@@ -28,9 +28,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class ClosedLoopPolicyDictionaryJPAClasses {
+public class ClosedLoopPolicyDictionaryJPATest {
 	
-	private static Logger logger = FlexLogger.getLogger(ClosedLoopPolicyDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(ClosedLoopPolicyDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
@@ -45,7 +45,6 @@
 	@Test
 	public void testVSCLAction(){
 		VSCLAction data = new VSCLAction();
-		new VSCLAction("Test","Test");
 		data.preUpdate();
 		data.prePersist();
 		data.setId(1);
@@ -67,7 +66,6 @@
 	@Test
 	public void testVNFType(){
 		VNFType data = new VNFType();
-		new VNFType("Test","Test");
 		data.preUpdate();
 		data.prePersist();
 		data.setId(1);
@@ -89,7 +87,6 @@
 	@Test
 	public void testPEPOptions(){
 		PEPOptions data = new PEPOptions();
-		new PEPOptions("Test","Test");
 		data.preUpdate();
 		data.prePersist();
 		data.setId(1);
@@ -111,7 +108,6 @@
 	@Test
 	public void testVarbindDictionary(){
 		VarbindDictionary data = new VarbindDictionary();
-		new VarbindDictionary("Test","Test");
 		data.preUpdate();
 		data.prePersist();
 		data.setId(1);
@@ -156,7 +152,6 @@
 	@Test
 	public void testClosedLoopSite(){
 		ClosedLoopSite data = new ClosedLoopSite();
-		new ClosedLoopSite("Test","Test");
 		data.preUpdate();
 		data.prePersist();
 		data.setId(1);
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/CommonDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/CommonDictionaryJPATest.java
similarity index 97%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/CommonDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/CommonDictionaryJPATest.java
index eded9ed..afe0905 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/CommonDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/CommonDictionaryJPATest.java
@@ -29,9 +29,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class CommonDictionaryJPAClasses {
+public class CommonDictionaryJPATest {
 	
-	private static Logger logger = FlexLogger.getLogger(CommonDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(CommonDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
@@ -94,7 +94,6 @@
 		OnapName data = new OnapName();
 		data.preUpdate();
 		data.prePersist();
-		new OnapName("Test", "Test");
 		data.setId(1);
 		assertTrue(1 == data.getId());
 		data.setOnapName("Test");
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/DecisionDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/DecisionDictionaryJPATest.java
similarity index 94%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/DecisionDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/DecisionDictionaryJPATest.java
index 3e7d23d..0a221b0 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/DecisionDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/DecisionDictionaryJPATest.java
@@ -28,9 +28,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class DecisionDictionaryJPAClasses {
+public class DecisionDictionaryJPATest {
 
-	private static Logger logger = FlexLogger.getLogger(DecisionDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(DecisionDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
@@ -49,8 +49,6 @@
 		assertTrue(1 == data.getId());
 		data.preUpdate();
 		data.prePersist();
-		new DecisionSettings("Test");
-		new DecisionSettings(new DecisionSettings("Test"), "Test");
 		data.setDescription("Test");
 		assertTrue("Test".equals(data.getDescription()));
 		data.setXacmlId("Test");
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/FWDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/FWDictionaryJPATest.java
similarity index 98%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/FWDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/FWDictionaryJPATest.java
index fa4c038..bec9fe0 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/FWDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/FWDictionaryJPATest.java
@@ -28,9 +28,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class FWDictionaryJPAClasses {
+public class FWDictionaryJPATest {
 
-	private static Logger logger = FlexLogger.getLogger(FWDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(FWDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
@@ -210,7 +210,6 @@
 		TermList data = new TermList();
 		data.preUpdate();
 		data.prePersist();
-		new TermList("Test", "Test");
 		data.setId(1);
 		assertTrue(1 == data.getId());
 		data.setTermName("Test");
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/MicroServiceDictionaryJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/MicroServiceDictionaryJPATest.java
similarity index 88%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/MicroServiceDictionaryJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/MicroServiceDictionaryJPATest.java
index 465d034..eba1c40 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/MicroServiceDictionaryJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/MicroServiceDictionaryJPATest.java
@@ -26,9 +26,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class MicroServiceDictionaryJPAClasses {
+public class MicroServiceDictionaryJPATest {
 
-	private static Logger logger = FlexLogger.getLogger(MicroServiceDictionaryJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(MicroServiceDictionaryJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
@@ -180,4 +180,29 @@
 		data.setGroupList("Test");
 		assertTrue("Test".equals(data.getGroupList()));
 	}
+	
+	@Test
+	public void testClosedLoops(){
+		ClosedLoops data = new ClosedLoops();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setClosedLoopControlName("Test");
+		assertTrue("Test".equals(data.getClosedLoopControlName()));
+		data.setAlarmConditions("Test");
+		assertTrue("Test".equals(data.getAlarmConditions()));
+		data.setYaml("Test");
+		assertTrue("Test".equals(data.getYaml()));
+	}
+	
+	@Test
+	public void testVMType(){
+		VMType data = new VMType();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setName("Test");
+		assertTrue("Test".equals(data.getName()));
+		data.setDescription("Test");
+		assertTrue("Test".equals(data.getDescription()));
+	}
+	
 }
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PIPJPATest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PIPJPATest.java
new file mode 100644
index 0000000..d114a18
--- /dev/null
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PIPJPATest.java
@@ -0,0 +1,183 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.rest.jpa;
+
+import static org.junit.Assert.*;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Properties;
+
+import org.junit.Test;
+
+import com.att.research.xacml.api.pip.PIPException;
+
+public class PIPJPATest {
+
+	@Test
+	public void testPIPConfigParam(){
+		PIPConfigParam data = new PIPConfigParam();
+		new PIPConfigParam("test");
+		new PIPConfigParam(new PIPConfigParam());
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setParamName("Test");
+		assertTrue("Test".equals(data.getParamName()));
+		data.setParamValue("Test");
+		assertTrue("Test".equals(data.getParamValue()));
+		data.setParamDefault("Test");
+		assertTrue("Test".equals(data.getParamDefault()));
+		data.setPipconfiguration(new PIPConfiguration());
+		assertTrue(data.getPipconfiguration()!=null);
+		data.setRequired(true);
+		assertTrue(data.isRequired());
+		data.toString();
+	}
+	
+	@Test
+	public void testPIPResolverParam(){
+		PIPResolverParam data = new PIPResolverParam();
+		new PIPResolverParam("test");
+		new PIPResolverParam(new PIPResolverParam());
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setParamName("Test");
+		assertTrue("Test".equals(data.getParamName()));
+		data.setParamValue("Test");
+		assertTrue("Test".equals(data.getParamValue()));
+		data.setParamDefault("Test");
+		assertTrue("Test".equals(data.getParamDefault()));
+		data.setPipresolver(new PIPResolver());
+		assertTrue(data.getPipresolver()!=null);
+		data.setRequired(true);
+		assertTrue(data.isRequired());
+		data.toString();
+	}
+	
+	@Test
+	public void testPIPType(){
+		PIPType data = new PIPType();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setType("Test");
+		assertTrue("Test".equals(data.getType()));
+		data.setPipconfigurations(new HashSet<>());
+		assertTrue(data.getPipconfigurations()!=null);
+		data.addPipconfiguration(new PIPConfiguration());
+		data.removePipconfiguration(new PIPConfiguration());
+		data.setType("SQL");
+		assertTrue(data.isSQL());
+		data.setType("LDAP");
+		assertTrue(data.isLDAP());
+		data.setType("CSV");
+		assertTrue(data.isCSV());
+		data.setType("Hyper-CSV");
+		assertTrue(data.isHyperCSV());
+		data.setType("Custom");
+		assertTrue(data.isCustom());
+	}
+	
+	@Test
+	public void testPIPResolver(){
+		PIPResolver data = new PIPResolver();
+		new PIPResolver(new PIPResolver());
+		data.prePersist();
+		data.preUpdate();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setName("Test");
+		assertTrue("Test".equals(data.getName()));
+		data.setDescription("Test");
+		assertTrue("Test".equals(data.getDescription()));
+		data.setIssuer("Test");
+		assertTrue("Test".equals(data.getIssuer()));
+		data.setClassname("Test");
+		assertTrue("Test".equals(data.getClassname()));
+		data.setCreatedBy("Test");
+		assertTrue("Test".equals(data.getCreatedBy()));
+		data.setModifiedBy("Test");
+		assertTrue("Test".equals(data.getModifiedBy()));
+		data.setCreatedDate(new Date());
+		assertTrue(data.getCreatedDate()!=null);
+		data.setModifiedDate(new Date());
+		assertTrue(data.getModifiedDate()!=null);
+		data.setPipconfiguration(new PIPConfiguration());
+		assertTrue(data.getPipconfiguration()!=null);
+		data.setPipresolverParams(new HashSet<>());
+		assertTrue(data.getPipresolverParams()!=null);
+		data.addPipresolverParam(new PIPResolverParam());
+		data.removePipresolverParam(new PIPResolverParam());
+		data.clearParams();
+		data.getConfiguration("test");
+		data.setReadOnly(true);
+		assertTrue(data.isReadOnly());
+		data.toString();
+		Properties properties = new Properties();
+		data.generateProperties(properties,"test");
+		try {
+			data.readProperties("test", properties);
+		} catch (PIPException e) {
+			fail();
+		}
+	}
+	
+	@Test
+	public void testPIPConfiguration(){
+		PIPConfiguration data = new PIPConfiguration();
+		data.prePersist();
+		data.preUpdate();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setName("Test");
+		assertTrue("Test".equals(data.getName()));
+		data.setDescription("Test");
+		assertTrue("Test".equals(data.getDescription()));
+		data.setIssuer("Test");
+		assertTrue("Test".equals(data.getIssuer()));
+		data.setClassname("Test");
+		assertTrue("Test".equals(data.getClassname()));
+		data.setCreatedBy("Test");
+		assertTrue("Test".equals(data.getCreatedBy()));
+		data.setModifiedBy("Test");
+		assertTrue("Test".equals(data.getModifiedBy()));
+		data.setCreatedDate(new Date());
+		assertTrue(data.getCreatedDate()!=null);
+		data.setModifiedDate(new Date());
+		assertTrue(data.getModifiedDate()!=null);
+		try {
+			data.readProperties("test", data.generateProperties("test"));
+		} catch (PIPException e) {
+			fail();
+		}
+		data.setPiptype(new PIPType());
+		assertTrue(data.getPiptype()!=null);
+		data.setPipresolvers(new HashSet<>());
+		assertTrue(data.getPipresolvers()!=null);
+		data.addPipresolver(new PIPResolver());
+		data.removePipresolver(new PIPResolver());
+		data.getConfiguration("test");
+		data.setReadOnly(true);
+		assertTrue(data.isReadOnly());
+		data.setRequiresResolvers(true);
+		assertTrue(data.requiresResolvers());
+		data.toString();
+	}
+	
+}
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyEntityJPAClasses.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyEntityJPATest.java
similarity index 98%
rename from ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyEntityJPAClasses.java
rename to ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyEntityJPATest.java
index 96f107b..25ea391 100644
--- a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyEntityJPAClasses.java
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyEntityJPATest.java
@@ -28,9 +28,9 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
-public class PolicyEntityJPAClasses {
+public class PolicyEntityJPATest {
 
-	private static Logger logger = FlexLogger.getLogger(PolicyEntityJPAClasses.class);
+	private static Logger logger = FlexLogger.getLogger(PolicyEntityJPATest.class);
 	private UserInfo userInfo;
 	
 	@Before
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyUtilsJPATest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyUtilsJPATest.java
new file mode 100644
index 0000000..934c27b
--- /dev/null
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/jpa/PolicyUtilsJPATest.java
@@ -0,0 +1,190 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.rest.jpa;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.Date;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+
+public class PolicyUtilsJPATest {
+
+	private static Logger logger = FlexLogger.getLogger(PolicyUtilsJPATest.class);
+	private UserInfo userInfo;
+	
+	@Before
+	public void setUp() throws Exception {
+		logger.info("setUp: Entering");
+		userInfo = new UserInfo();
+		userInfo.setUserLoginId("Test");
+		userInfo.setUserName("Test");
+		logger.info("setUp: exit");
+	}
+	
+	@Test
+	public void testWatchPolicyNotificationTable(){
+		WatchPolicyNotificationTable data = new WatchPolicyNotificationTable();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setPolicyName("Test");
+		assertTrue("Test".equals(data.getPolicyName()));
+		data.setLoginIds("Test");
+		assertTrue("Test".equals(data.getLoginIds()));
+		data.equals(data);
+		data.hashCode();
+	}
+	
+	@Test
+	public void testPolicyRoles(){
+		PolicyRoles data = new PolicyRoles();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setScope("Test");
+		assertTrue("Test".equals(data.getScope()));
+		data.setRole("Test");
+		assertTrue("Test".equals(data.getRole()));
+		data.setLoginId(userInfo);
+		assertTrue("Test".equals(data.getLoginId().getUserLoginId()));
+	}
+	
+	@Test
+	public void testPolicyVersion(){
+		PolicyVersion data = new PolicyVersion();
+		new PolicyVersion("Test", "Test");
+		data.prePersist();
+		data.preUpdate();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setActiveVersion(1);
+		assertTrue(1 == data.getActiveVersion());
+		data.setHigherVersion(1);
+		assertTrue(1 == data.getHigherVersion());
+		data.setPolicyName("Test");
+		assertTrue("Test".equals(data.getPolicyName()));
+		data.setCreatedBy("Test");
+		assertTrue("Test".equals(data.getCreatedBy()));
+		data.setModifiedBy("Test");
+		assertTrue("Test".equals(data.getModifiedBy()));
+		data.setCreatedDate(new Date());
+		assertTrue(data.getCreatedDate()!=null);
+		data.setModifiedDate(new Date());
+		assertTrue(data.getModifiedDate()!=null);
+		data.equals(data);
+		data.hashCode();
+	}
+	
+	@Test
+	public void testSystemLogDB(){
+		SystemLogDB data = new SystemLogDB();
+		new SystemLogDB(1, "","","","","");
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setDescription("Test");
+		assertTrue("Test".equals(data.getDescription()));
+		data.setType("Test");
+		assertTrue("Test".equals(data.getType()));
+		data.setSystem("Test");
+		assertTrue("Test".equals(data.getSystem()));
+		data.setRemote("Test");
+		assertTrue("Test".equals(data.getRemote()));
+		data.setLogtype("Test");
+		assertTrue("Test".equals(data.getLogtype()));
+		data.setDate(new Date());
+		assertTrue(data.getDate()!=null);
+	}
+	
+	@Test
+	public void testRemoteCatalogValues(){
+		RemoteCatalogValues data = new RemoteCatalogValues();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setName("Test");
+		assertTrue("Test".equals(data.getName()));
+		data.setValue("Test");
+		assertTrue("Test".equals(data.getValue()));
+	}
+	
+	@Test
+	public void testPolicyScore(){
+		PolicyScore data = new PolicyScore();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setPolicyName("Test");
+		assertTrue("Test".equals(data.getPolicyName()));
+		data.setVersionExtension("Test");
+		assertTrue("Test".equals(data.getVersionExtension()));
+		data.setPolicyScore("Test");
+		assertTrue("Test".equals(data.getPolicyScore()));
+	}
+	
+	@Test
+	public void testPolicyEditorScopes(){
+		PolicyEditorScopes data = new PolicyEditorScopes();
+		data.prePersist();
+		data.preUpdate();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setScopeName("Test");
+		assertTrue("Test".equals(data.getScopeName()));
+		data.setCreatedDate(new Date());
+		assertTrue(data.getCreatedDate()!=null);
+		data.setModifiedDate(new Date());
+		assertTrue(data.getModifiedDate()!=null);
+		data.setUserCreatedBy(userInfo);
+		assertTrue(data.getUserCreatedBy()!=null);
+		data.setUserModifiedBy(userInfo);
+		assertTrue(data.getUserModifiedBy()!=null);
+	}
+	
+	@Test
+	public void testDescriptiveScope(){
+		DescriptiveScope data = new DescriptiveScope();
+		data.prePersist();
+		data.preUpdate();
+		data.setId(1);
+		assertTrue(1 == data.getId());
+		data.setScopeName("Test");
+		assertTrue("Test".equals(data.getScopeName()));
+		data.setSearch("Test");
+		assertTrue("Test".equals(data.getSearch()));
+		data.setCreatedDate(new Date());
+		assertTrue(data.getCreatedDate()!=null);
+		data.setModifiedDate(new Date());
+		assertTrue(data.getModifiedDate()!=null);
+		data.setUserCreatedBy(userInfo);
+		assertTrue(data.getUserCreatedBy()!=null);
+		data.setUserModifiedBy(userInfo);
+		assertTrue(data.getUserModifiedBy()!=null);
+	}
+	
+	@Test
+	public void testGlobalRoleSettings(){
+		GlobalRoleSettings data = new GlobalRoleSettings();
+		new GlobalRoleSettings(true);
+		data.setRole("Test");
+		assertTrue("Test".equals(data.getRole()));
+		data.setLockdown(true);
+		assertTrue(data.isLockdown());
+	}
+}
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/util/MSAttributeObjectTest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/util/MSAttributeObjectTest.java
new file mode 100644
index 0000000..85a11d4
--- /dev/null
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/util/MSAttributeObjectTest.java
@@ -0,0 +1,73 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.rest.util;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.HashMap;
+
+import org.junit.Test;
+
+public class MSAttributeObjectTest {
+
+	@Test
+	public void testMSAttributeObject(){
+		MSAttributeObject data = new MSAttributeObject();
+		data.setClassName("Test");
+		assertTrue("Test".equals(data.getClassName()));
+		data.setRefAttribute(new HashMap<>());
+		assertTrue(data.getRefAttribute()!=null);
+		data.setAttribute(new HashMap<>());
+		assertTrue(data.getAttribute()!=null);
+		data.setEnumType(new HashMap<>());
+		assertTrue(data.getEnumType()!=null);
+		data.addAttribute("test", "test");
+		data.addRefAttribute("test", "test");
+		data.addAllAttribute(new HashMap<>());
+		data.addAllRefAttribute(new HashMap<>());
+		data.setSubClass(new HashMap<>());
+		assertTrue(data.getSubClass()!=null);
+		data.addAllSubClass(new HashMap<>());
+		data.setDependency("Test");
+		assertTrue("Test".equals(data.getDependency()));
+		data.addSingleEnum("test", "test");
+		data.setMatchingSet(new HashMap<>());
+		assertTrue(data.getMatchingSet()!=null);
+		data.addMatchingSet("test", "test");
+		data.addMatchingSet(new HashMap<>());
+		data.setPolicyTempalate(true);
+		assertTrue(data.isPolicyTempalate());
+	}
+	
+	@Test
+	public void testMSAttributeValue(){
+		MSAttributeValue data = new MSAttributeValue();
+		data.setName("Test");
+		assertTrue("Test".equals(data.getName()));
+		data.setType("Test");
+		assertTrue("Test".equals(data.getType()));
+		data.setRequired(true);
+		assertTrue(data.getRequired());
+		data.setArrayValue(true);
+		assertTrue(data.getArrayValue());
+		data.setDefaultValue("Test");
+		assertTrue("Test".equals(data.getDefaultValue()));
+	}
+}
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/util/MSModelUtilsTest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/util/MSModelUtilsTest.java
new file mode 100644
index 0000000..83a82f9
--- /dev/null
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/util/MSModelUtilsTest.java
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.rest.util;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+import org.onap.policy.rest.util.MSModelUtils.MODEL_TYPE;
+
+public class MSModelUtilsTest {
+	
+	@Test
+	public void testMSModelUtils(){
+		HashMap<String, MSAttributeObject> classMap = new HashMap<>();
+		ClassLoader classLoader = getClass().getClassLoader();
+		File file = new File(classLoader.getResource("DKaTVESPolicy-v1802.xmi").getFile());
+		MSModelUtils utils = new MSModelUtils("http://org.onap", "http://org.onap.policy");
+		Map<String, MSAttributeObject> tempMap = utils.processEpackage(file.getAbsolutePath().toString(), MODEL_TYPE.XMI);
+		classMap.putAll(tempMap);
+		MSAttributeObject mainClass = classMap.get("StandardDeviationThreshold");
+		String dependTemp = StringUtils.replaceEach(mainClass.getDependency(), new String[]{"[", "]", " "}, new String[]{"", "", ""});
+		List<String> dependency = new ArrayList<String>(Arrays.asList(dependTemp.split(",")));
+		dependency = utils.getFullDependencyList(dependency, classMap);
+		String subAttribute = utils.createSubAttributes(dependency, classMap, "StandardDeviationThreshold");
+		assertTrue(subAttribute != null);
+	}
+}
diff --git a/ONAP-REST/src/test/resources/DKaTVESPolicy-v1802.xmi b/ONAP-REST/src/test/resources/DKaTVESPolicy-v1802.xmi
new file mode 100644
index 0000000..ac7e339
--- /dev/null
+++ b/ONAP-REST/src/test/resources/DKaTVESPolicy-v1802.xmi
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="service" nsURI="service.ControllerServiceDcaeDkatService.ControllerServiceDcaeDkatServiceInstance"
+    nsPrefix="">
+  <eAnnotations source="http://org.onap/policy">
+    <details key="policyTemplate" value="dcae-microservice"/>
+    <details key="matching" value="true"/>
+    <details key="dictionary" value="Dictionary Name"/>
+  </eAnnotations>ss
+  <eAnnotations source="http://www.eclipse.org/emf/2011/Xcore">
+    <details key="ecomp" value="http://org.onap"/>
+    <details key="policy" value="http://org.onap/policy"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="ControllerServiceDcaeDkatService"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ControllerServiceDcaeDkatServiceInstance"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ControllerServiceDcaeDkatServiceConfiguration">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="DkatVESPolicyBodies" eType="#//DkatVESPolicyBody"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DkatVESPolicyBody">
+    <eAnnotations source="http://org.onap/policy">
+      <details key="policyTemplate" value="dcae-microservice"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="serviceNetwork" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="serviceNetworkDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="vnfType" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="vnfTypeDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="vnfcType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="">
+      <eAnnotations source="http://org.onap">
+        <details key="type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="vnfcTypeDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiClass" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="kpiClassDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiId" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EShort">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="unitOfMeasure" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="unitOfMeasureDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rounding" eType="#//roundingList">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="filterText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="pmSchemaName" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="pmSchemaNameDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="pmTableName" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="pmTableNameDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fileNamePattern" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dmdTopic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fileDenominator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="denominator" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fileNumerator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiStatus" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="kpiStatusDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiInUse" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="calculateBy" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="calculateByDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="pkString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="hierarchyString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="functionCode" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="elementType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="elementName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="interfaceName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="recordSource" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="PolicyGUI">
+      <eAnnotations source="http://org.onap">
+        <details key="type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="StandardDeviationThresholds"
+        eType="#//StandardDeviationThreshold">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="KpiThresholds" eType="#//KpiThreshold">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numerator" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="displayStatus" eType="#//displayStatusList">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiAggregation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fileId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="vendor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="netId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="entityType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="customerId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kpiVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="thresholdType" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="thresholdTypeDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="KpiThreshold">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="calculationInterval" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="calculationIntervalDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+      <eAnnotations source="http://org.onap/policy">
+        <details key="dictionary" value="directionDictionary"/>
+        <details key="matching" value="true"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorWatermark" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalWatermark" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="setSuppressionPeriod" eType="#//setSuppressionPeriodList">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contSuppressionPeriod"
+        eType="#//contSuppressionPeriodList">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="clearSuppressionPeriod"
+        eType="#//clearSuppressionPeriodList">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="productionAlert" eType="#//productionAlertList">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minNumerator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minDenominator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="highEmailNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowEmailNotification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="highQNotification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowQNotification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardDeviationThreshold">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalSdThresholdPlus"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalSdThresholdMinus"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorSdThresholdPlus" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorSdThresholdMinus"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sdNewWindowSize" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sdInitialWindowSize" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalSdPlusEmailNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalSdPlusQNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalSdMinusEmailNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="criticalSdMinusQNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorSdPlusEmailNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorSdPlusQNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorSdMinusEmailNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="majorSdMinusQNotification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="http://org.onap">
+        <details key="^type" value="configuration"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="onapNameList">
+    <eLiterals name="DCAE"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="policyStatusList">
+    <eLiterals name="ACTIVE"/>
+    <eLiterals name="INACTIVE" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="serviceNetworkList">
+    <eLiterals name="L3"/>
+    <eLiterals name="vUSP" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="vnfTypeList">
+    <eLiterals name="JUNIPER-DBE"/>
+    <eLiterals name="VVIG" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="vnfcTypeList">
+    <eLiterals name="dbc"/>
+    <eLiterals name="dbg" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="kpiClassList">
+    <eLiterals name="accessability"/>
+    <eLiterals name="ect" value="1"/>
+    <eLiterals name="volume" value="3" literal=""/>
+    <eLiterals name="retainability" value="2"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="unitOfMeasureList">
+    <eLiterals name="%"/>
+    <eLiterals name="bytes" value="1"/>
+    <eLiterals name="kbps" value="2"/>
+    <eLiterals name="ms" value="3"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="roundingList">
+    <eLiterals name="0"/>
+    <eLiterals name="1" value="1" literal="1"/>
+    <eLiterals name="2" value="2" literal="2"/>
+    <eLiterals name="3" value="3" literal="3"/>
+    <eLiterals name="4" value="4" literal="4"/>
+    <eLiterals name="5" value="5" literal="5"/>
+    <eLiterals name="6" value="6" literal="6"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="pmSchemaNameList">
+    <eLiterals name="JUNVDBE"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="pmTableNameList">
+    <eLiterals name="ATTTUNNELSTAT"/>
+    <eLiterals name="CPUMEM_DC" value="1"/>
+    <eLiterals name="IFTABLE_DC" value="2"/>
+    <eLiterals name="UVP_DBE_NATPOOLSTATS" value="3"/>
+    <eLiterals name="UVP_DBE_NATPOOLUTILSTATS" value="4"/>
+    <eLiterals name="UVP_DBE_PERFSTATS" value="5"/>
+    <eLiterals name="UVP_DBE_SINGLEPORTSTATS" value="6"/>
+    <eLiterals name="DNR table (PID: 296120)" value="7"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="kpiStatusList">
+    <eLiterals name="IN PROGRESS"/>
+    <eLiterals name="IN REVIEW" value="1"/>
+    <eLiterals name="Active" value="3"/>
+    <eLiterals name="Ready" value="4"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="calculateByList">
+    <eLiterals name="Central"/>
+    <eLiterals name="Edge" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="directionList">
+    <eLiterals name="ascending"/>
+    <eLiterals name="descending" value="1"/>
+    <eLiterals name="max" value="2"/>
+    <eLiterals name="min" value="3"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="setSuppressionPeriodList">
+    <eLiterals name="0"/>
+    <eLiterals name="1" value="1" literal="1"/>
+    <eLiterals name="2" value="2" literal="2"/>
+    <eLiterals name="3" value="3" literal="3"/>
+    <eLiterals name="4" value="4" literal="4"/>
+    <eLiterals name="5" value="5" literal="5"/>
+    <eLiterals name="6" value="6" literal="6"/>
+    <eLiterals name="7" value="7" literal="7"/>
+    <eLiterals name="8" value="8" literal="8"/>
+    <eLiterals name="9" value="9" literal="9"/>
+    <eLiterals name="10" value="10" literal="10"/>
+    <eLiterals name="11" value="11" literal="11"/>
+    <eLiterals name="12" value="12" literal="12"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="contSuppressionPeriodList">
+    <eLiterals name="0"/>
+    <eLiterals name="1" value="1" literal="1"/>
+    <eLiterals name="2" value="2" literal="2"/>
+    <eLiterals name="3" value="3" literal="3"/>
+    <eLiterals name="4" value="4" literal="4"/>
+    <eLiterals name="5" value="5" literal="5"/>
+    <eLiterals name="6" value="6" literal="6"/>
+    <eLiterals name="7" value="7" literal="7"/>
+    <eLiterals name="8" value="8" literal="8"/>
+    <eLiterals name="9" value="9" literal="9"/>
+    <eLiterals name="10" value="10" literal="10"/>
+    <eLiterals name="11" value="11" literal="11"/>
+    <eLiterals name="12" value="12" literal="12"/>
+    <eLiterals name="13" value="13" literal="13"/>
+    <eLiterals name="14" value="14" literal="14"/>
+    <eLiterals name="15" value="15" literal="15"/>
+    <eLiterals name="16" value="16" literal="16"/>
+    <eLiterals name="17" value="17" literal="17"/>
+    <eLiterals name="18" value="18" literal="18"/>
+    <eLiterals name="19" value="19" literal="19"/>
+    <eLiterals name="20" value="20" literal="20"/>
+    <eLiterals name="21" value="21" literal="21"/>
+    <eLiterals name="22" value="22" literal="22"/>
+    <eLiterals name="23" value="23" literal="23"/>
+    <eLiterals name="24" value="24" literal="24"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="clearSuppressionPeriodList">
+    <eLiterals name="0"/>
+    <eLiterals name="1" value="1" literal="1"/>
+    <eLiterals name="2" value="2" literal="2"/>
+    <eLiterals name="3" value="3" literal="3"/>
+    <eLiterals name="4" value="4" literal="4"/>
+    <eLiterals name="5" value="5" literal="5"/>
+    <eLiterals name="6" value="6" literal="6"/>
+    <eLiterals name="7" value="7" literal="7"/>
+    <eLiterals name="8" value="8" literal="8"/>
+    <eLiterals name="9" value="9" literal="9"/>
+    <eLiterals name="10" value="10" literal="10"/>
+    <eLiterals name="11" value="11" literal="11"/>
+    <eLiterals name="12" value="12" literal="12"/>
+    <eLiterals name="13" value="13" literal="13"/>
+    <eLiterals name="14" value="14" literal="14"/>
+    <eLiterals name="15" value="15" literal="15"/>
+    <eLiterals name="16" value="16" literal="16"/>
+    <eLiterals name="17" value="17" literal="17"/>
+    <eLiterals name="18" value="18" literal="18"/>
+    <eLiterals name="19" value="19" literal="19"/>
+    <eLiterals name="20" value="20" literal="20"/>
+    <eLiterals name="21" value="21" literal="21"/>
+    <eLiterals name="22" value="22" literal="22"/>
+    <eLiterals name="23" value="23" literal="23"/>
+    <eLiterals name="24" value="24" literal="24"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="productionAlertList">
+    <eLiterals name="Y"/>
+    <eLiterals name="N" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="displayStatusList">
+    <eLiterals name="Y"/>
+    <eLiterals name="N" value="1"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
index 2df70c7..ae473f3 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -46,7 +46,6 @@
 import org.onap.policy.model.PDPGroupContainer;
 import org.onap.policy.model.Roles;
 import org.onap.policy.rest.XACMLRestProperties;
-import org.onap.policy.rest.XacmlAdminAuthorization;
 import org.onap.policy.rest.dao.CommonClassDao;
 import org.onap.policy.rest.jpa.Datatype;
 import org.onap.policy.rest.jpa.FunctionDefinition;
@@ -75,10 +74,6 @@
 	private static final Logger	policyLogger	= FlexLogger.getLogger(PolicyController.class);
 
 	private static CommonClassDao commonClassDao;
-
-	// Our authorization object
-	//
-	XacmlAdminAuthorization authorizer = new XacmlAdminAuthorization();
 	//
 	// The PAP Engine
 	//
@@ -487,14 +482,6 @@
 		PolicyController.commonClassDao = commonClassDao;
 	}
 
-	public XacmlAdminAuthorization getAuthorizer() {
-		return authorizer;
-	}
-
-	public void setAuthorizer(XacmlAdminAuthorization authorizer) {
-		this.authorizer = authorizer;
-	}
-
 	public static Map<Datatype, List<FunctionDefinition>> getMapDatatype2Function() {
 		return mapDatatype2Function;
 	}
