diff --git a/feature-test-transaction/pom.xml b/feature-test-transaction/pom.xml
index 693c3dc..14ba010 100644
--- a/feature-test-transaction/pom.xml
+++ b/feature-test-transaction/pom.xml
@@ -93,5 +93,10 @@
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
+    	<dependency>
+		<groupId>junit</groupId>
+		<artifactId>junit</artifactId>
+		<scope>test</scope>
+	</dependency>
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/feature-test-transaction/src/assembly/assemble_zip.xml b/feature-test-transaction/src/assembly/assemble_zip.xml
index 03c0bb5..9945a1c 100644
--- a/feature-test-transaction/src/assembly/assemble_zip.xml
+++ b/feature-test-transaction/src/assembly/assemble_zip.xml
@@ -34,45 +34,39 @@
      <includeBaseDirectory>false</includeBaseDirectory>
 
      <fileSets>
-          <fileSet>
-               <directory>target</directory>
-               <outputDirectory>lib/feature</outputDirectory>
-               <includes>
-                    <include>feature-test-transaction-${project.version}.jar</include>
-               </includes>
-          </fileSet>
-		<fileSet>
-			<directory>target/assembly/lib</directory>
-			<outputDirectory>lib/dependencies</outputDirectory>
-			<includes>
-				<include>*.jar</include>
-			</includes>
-		</fileSet>
-		<fileSet>
-			<directory>src/main/feature/config</directory>
-			<outputDirectory>config</outputDirectory>
-			<fileMode>0644</fileMode>
-			<excludes/>
-		</fileSet>
-		<fileSet>
-			<directory>src/main/feature/bin</directory>
-			<outputDirectory>bin</outputDirectory>
-			<fileMode>0744</fileMode>
-			<excludes/>
-		</fileSet>
-		<fileSet>
-			<directory>src/main/feature/db</directory>
-			<outputDirectory>db</outputDirectory>
-			<fileMode>0744</fileMode>
-			<excludes/>
-		</fileSet>
-		<fileSet>
-			<directory>src/main/feature/install</directory>
-			<outputDirectory>install</outputDirectory>
-			<fileMode>0744</fileMode>
-			<excludes/>
-		</fileSet>
-
+	<fileSet>
+		<directory>target</directory>
+		<outputDirectory>lib/feature</outputDirectory>
+		<includes>
+			<include>feature-test-transaction-${project.version}.jar</include>
+		</includes>
+       	</fileSet>
+	<fileSet>
+		<directory>target/assembly/lib</directory>
+		<outputDirectory>lib/dependencies</outputDirectory>
+		<includes>
+			<include>*.jar</include>
+		</includes>
+	</fileSet>
+	<fileSet>
+		<directory>src/main/feature/config</directory>
+		<outputDirectory>config</outputDirectory>
+		<fileMode>0644</fileMode>
+	</fileSet>
+	<fileSet>
+		<directory>src/main/feature/bin</directory>
+		<outputDirectory>bin</outputDirectory>
+		<fileMode>0744</fileMode>
+	</fileSet>
+	<fileSet>
+		<directory>src/main/feature/db</directory>
+		<outputDirectory>db</outputDirectory>
+		<fileMode>0744</fileMode>
+	</fileSet>
+	<fileSet>
+		<directory>src/main/feature/install</directory>
+		<outputDirectory>install</outputDirectory>
+		<fileMode>0744</fileMode>
+	</fileSet>
      </fileSets>
-
 </assembly>
diff --git a/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java b/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java
new file mode 100644
index 0000000..2a44e1c
--- /dev/null
+++ b/feature-test-transaction/src/test/java/org/onap/policy/drools/testtransaction/TestTransactionTest.java
@@ -0,0 +1,152 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * feature-test-transaction
+ * ================================================================================
+ * Copyright (C) 2017 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.drools.testtransaction;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Properties;
+import java.util.Set;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.drools.persistence.SystemPersistence;
+import org.onap.policy.drools.properties.PolicyProperties;
+import org.onap.policy.drools.system.PolicyController;
+import org.onap.policy.drools.system.PolicyEngine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestTransactionTest {
+	/**
+	 * Test JUnit Controller Name
+	 */
+	public static final String TEST_CONTROLLER_NAME = "unnamed";
+	/**
+	 * Controller Configuration File
+	 */
+	public static final String TEST_CONTROLLER_FILE = TEST_CONTROLLER_NAME + "-controller.properties";
+	
+	/**
+	 * Controller Configuration Backup File
+	 */
+	public static final String TEST_CONTROLLER_FILE_BAK = TEST_CONTROLLER_NAME + "-controller.properties.bak";
+	
+	
+	/**
+	 * logger
+	 */
+	private static Logger logger = LoggerFactory.getLogger(TestTransactionTest.class);
+	
+	
+
+	@BeforeClass
+	public static void startUp() throws IOException {
+		logger.info("enter");
+		
+		cleanUpWorkingDir();
+		
+		/* ensure presence of config directory */
+		Path configDir = Paths.get(SystemPersistence.CONFIG_DIR_NAME);
+		if (Files.notExists(configDir))
+			Files.createDirectories(configDir);
+	}
+	
+	@Test
+	public void registerUnregisterTest() {
+		Properties controllerProperties = new Properties();
+		controllerProperties.put(PolicyProperties.PROPERTY_CONTROLLER_NAME, TEST_CONTROLLER_NAME);
+		PolicyController controller = PolicyEngine.manager.createPolicyController(TEST_CONTROLLER_NAME, controllerProperties);
+		Thread ttThread = null;
+		
+		TestTransaction.manager.register(controller);
+		assertNotNull(TestTransaction.manager);
+		
+			/* 
+			 * If the controller was successfully registered
+			 * it will have a thread created. 
+			 */
+		ttThread = getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
+		assertNotNull(ttThread);
+
+			/* 
+			 * Unregistering the controller should
+			 * terminate its TestTransaction thread
+			 * if it hasn't already been terminated
+			 */
+		TestTransaction.manager.unregister(controller);
+		
+			/*
+			 * Put this thread to sleep so the TestTransaction
+			 * thread has enough time to terminate before
+			 * we check.
+			 */
+		try {
+			Thread.sleep(2000);
+		} catch (InterruptedException e) {
+			
+		}
+		ttThread = getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
+		assertEquals(null, ttThread);
+		
+		
+	}
+
+		/*
+		 * Returns thread object based on
+		 * String name
+		 */
+	public Thread getThread(String threadName) {
+		
+		Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
+		for (Thread thread : threadSet) {
+			if (thread.getName().equals(threadName)) {
+				return thread;
+			}
+			
+		}
+		return null;
+	}
+	
+	/**
+	 * clean up working directory
+	 */
+	protected static void cleanUpWorkingDir() {
+		Path testControllerPath = Paths.get(SystemPersistence.CONFIG_DIR_NAME, TEST_CONTROLLER_FILE);
+		try {
+			Files.deleteIfExists(testControllerPath);
+		} catch (Exception e) {
+			logger.info("Problem cleaning {}", testControllerPath, e);
+		}
+		
+		Path testControllerBakPath = Paths.get(SystemPersistence.CONFIG_DIR_NAME, TEST_CONTROLLER_FILE_BAK);
+		try {
+			Files.deleteIfExists(testControllerBakPath);
+		} catch (Exception e) {
+			logger.info("Problem cleaning {}", testControllerBakPath, e);
+		}
+	}
+	
+}
