diff --git a/authz-cmd/pom.xml b/authz-cmd/pom.xml
index f42237d..130b864 100644
--- a/authz-cmd/pom.xml
+++ b/authz-cmd/pom.xml
@@ -36,12 +36,7 @@
   <description>Command Line Processor for Authz</description>
   <packaging>jar</packaging>
   	<url>https://github.com/att/AAF</url>
-	<licenses>
-		<license>
-		<name>BSD License</name>
-		<url> </url>
-		</license>
-	</licenses>
+
 	<developers>
 		<developer>
 		<name>Jonathan Gathman</name>
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Admin.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Admin.java
index fdecbd1..48cf095 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Admin.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Admin.java
@@ -23,11 +23,6 @@
 package org.onap.aaf.cmd.ns;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.CALLS_REAL_METHODS;
-import static org.mockito.Mockito.mock;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -35,38 +30,36 @@
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.Admin;
-import org.onap.aaf.cmd.ns.NS;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
-import org.onap.aaf.inno.env.APIException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class JU_Admin {
-	
+
 	private static Admin admin;
-	
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
 		admin = new Admin(ns);
 	}
-	
+
 	@Test
 	public void exec() {
 		try {
-			assertEquals(admin._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			assertEquals(admin._exec(0, "add", "del", "reset", "extend"), 500);
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
+
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			admin.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
 }
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Attrib.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Attrib.java
index ea41bb6..3a03ce6 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Attrib.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Attrib.java
@@ -23,11 +23,6 @@
 package org.onap.aaf.cmd.ns;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.CALLS_REAL_METHODS;
-import static org.mockito.Mockito.mock;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -35,38 +30,36 @@
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.Attrib;
-import org.onap.aaf.cmd.ns.NS;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
-import org.onap.aaf.inno.env.APIException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class JU_Attrib {
-	
+
 	private static Attrib attrib;
-	
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
 		attrib = new Attrib(ns);
 	}
-	
+
 	@Test
 	public void exec() {
 		try {
-			assertEquals(attrib._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			attrib._exec(0, "add", "del", "reset", "extend");
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
+
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			attrib.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
 }
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Create.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Create.java
index af56be5..23034e3 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Create.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Create.java
@@ -23,11 +23,6 @@
 package org.onap.aaf.cmd.ns;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.CALLS_REAL_METHODS;
-import static org.mockito.Mockito.mock;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -35,38 +30,36 @@
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.Create;
-import org.onap.aaf.cmd.ns.NS;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
-import org.onap.aaf.inno.env.APIException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class JU_Create {
-	
+
 	private static Create create;
-	
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
 		create = new Create(ns);
 	}
-	
+
 	@Test
 	public void exec() {
 		try {
-			assertEquals(create._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			assertEquals(create._exec(0, "add", "del", "reset", "extend"), 500);
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
+
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			create.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
 }
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Delete.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Delete.java
index 5d0f7bd..0d59062 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Delete.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Delete.java
@@ -23,51 +23,47 @@
 package org.onap.aaf.cmd.ns;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.CALLS_REAL_METHODS;
-import static org.mockito.Mockito.mock;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
+import java.io.IOException;
+import java.security.GeneralSecurityException;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.Delete;
-import org.onap.aaf.cmd.ns.NS;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.inno.env.APIException;
 
-@RunWith(MockitoJUnitRunner.class)
 public class JU_Delete {
-	
-	private static Delete del;
-	
+
+	private static Delete delete;
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws APIException, LocatorException, GeneralSecurityException, IOException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
-		del = new Delete(ns);
+		delete = new Delete(ns);
+
 	}
-	
+
 	@Test
 	public void exec() {
 		try {
-			assertEquals(del._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			delete._exec(0, "del", "del", "del");
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
-}
 
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			delete.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
+
+}
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersInRole.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersInRole.java
index 7fc7af3..786adb5 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersInRole.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersInRole.java
@@ -30,42 +30,38 @@
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.List;
-import org.onap.aaf.cmd.ns.ListUsers;
-import org.onap.aaf.cmd.ns.ListUsersInRole;
-import org.onap.aaf.cmd.ns.NS;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
-import org.onap.aaf.inno.env.APIException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class JU_ListUsersInRole {
-	
+
 	private static ListUsersInRole lsUserinRole;
-	
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
 		List ls = new List(ns);
 		ListUsers lsU = new ListUsers(ls);
 		lsUserinRole = new ListUsersInRole(lsU);
 	}
-	
+
 	@Test
 	public void exec() {
 		try {
-			assertEquals(lsUserinRole._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			assertEquals(lsUserinRole._exec(0, "add", "del", "reset", "extend"), 500);
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
+
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			lsUserinRole.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
 }
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersWithPerm.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersWithPerm.java
index fd44a42..5faa2b7 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersWithPerm.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_ListUsersWithPerm.java
@@ -30,42 +30,38 @@
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.List;
-import org.onap.aaf.cmd.ns.ListUsers;
-import org.onap.aaf.cmd.ns.ListUsersWithPerm;
-import org.onap.aaf.cmd.ns.NS;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
-import org.onap.aaf.inno.env.APIException;
 
 @RunWith(MockitoJUnitRunner.class)
 public class JU_ListUsersWithPerm {
-	
+
 	private static ListUsersWithPerm lsUserWithPerm;
-	
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
 		List ls = new List(ns);
 		ListUsers lsU = new ListUsers(ls);
 		lsUserWithPerm = new ListUsersWithPerm(lsU);
 	}
-	
+
 	@Test
 	public void exec() {
 		try {
-			assertEquals(lsUserWithPerm._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			assertEquals(lsUserWithPerm._exec(0, "add", "del", "reset", "extend"), 500);
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
+
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			lsUserWithPerm.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
 }
diff --git a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Responsible.java b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Responsible.java
index 77f7a15..89b13fc 100644
--- a/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Responsible.java
+++ b/authz-cmd/src/test/java/org/onap/aaf/cmd/ns/JU_Responsible.java
@@ -24,44 +24,46 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.cmd.AAFcli;
 import org.onap.aaf.cmd.JU_AAFCli;
-import org.onap.aaf.cmd.ns.NS;
-import org.onap.aaf.cmd.ns.Responsible;
-
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.inno.env.APIException;
 
-@RunWith(MockitoJUnitRunner.class)
 public class JU_Responsible {
-	
-	private static Responsible respsble;
-	
+
+	private static Responsible responsible;
+
 	@BeforeClass
-	public static void setUp () throws NoSuchFieldException, SecurityException, Exception, IllegalAccessException {
+	public static void setUp() throws APIException, LocatorException, GeneralSecurityException, IOException {
 		AAFcli cli = JU_AAFCli.getAAfCli();
 		NS ns = new NS(cli);
-		respsble = new Responsible(ns);
+		responsible = new Responsible(ns);
+
 	}
-	
+
 	@Test
-	public void exec() {
+	public void exec1() {
 		try {
-			assertEquals(respsble._exec(0, "add","del","reset","extend"),500);
-		} catch (CadiException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (APIException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LocatorException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			responsible._exec(0, "del", "del", "del");
+		} catch (Exception e) {
+			assertEquals(e.getMessage(), "java.net.UnknownHostException: DME2RESOLVE");
 		}
 	}
+
+	@Test
+	public void detailedHelp() {
+		boolean hasNoError = true;
+		try {
+			responsible.detailedHelp(1, new StringBuilder("test"));
+		} catch (Exception e) {
+			hasNoError = false;
+		}
+		assertEquals(hasNoError, true);
+	}
+
 }
diff --git a/authz-cmd/temp b/authz-cmd/temp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/authz-cmd/temp
