diff --git a/dockertests/dockerTest.sh b/dockertests/dockerTest.sh
index 46c5937..39b65b8 100755
--- a/dockertests/dockerTest.sh
+++ b/dockertests/dockerTest.sh
@@ -55,6 +55,28 @@
 docker run --name ${ssname} -d -p 9001:9001 apigeelabs/transicator-snapshot -p 9001 -u ${TEST_PG_URL}
 docker run --name ${csname} -d -p 9000:9000 apigeelabs/transicator-changeserver -p 9000 -u ${TEST_PG_URL} -s testslot
 
+# Wait for SS to be up
+while `true`
+do
+  sleep 1
+  response=$(curl -i http://${DOCKER_IP}:9001/snapshots?selector=foo | head -n 1)
+  if [[ $response == *303* ]]
+  then
+    break
+  fi
+done
+
+# Wait for CS to be up
+while `true`
+do
+  sleep 1
+  response=$(curl -i http://${DOCKER_IP}:9000/changes | head -n 1)
+  if [[ $response == *200* ]]
+  then
+    break
+  fi
+done
+
 apid_config=`cat <<EOF
 apigeesync_instance_name: SQLLITAPID
 apigeesync_snapshot_server_base: http://${DOCKER_IP}:9001/
@@ -67,4 +89,6 @@
 EOF
 `
 rm -f ${WORK_DIR}/dockertests/apid_config.yaml
-echo "$apid_config" >> ${WORK_DIR}/dockertests/apid_config.yaml
\ No newline at end of file
+echo "$apid_config" >> ${WORK_DIR}/dockertests/apid_config.yaml
+
+#go test dockertests/*.go
\ No newline at end of file
diff --git a/dockertests/docker_test.go b/dockertests/docker_test.go
index efce091..eb0ad02 100644
--- a/dockertests/docker_test.go
+++ b/dockertests/docker_test.go
@@ -28,7 +28,7 @@
  * This test suite acts like a dummy plugin. It listens to events emitted by
  * apidApigeeSync and runs tests.
  */
-var _ = BeforeSuite(func(done Done) {
+var _ = BeforeSuite(func() {
 	defer GinkgoRecover()
 	//hostname := "http://" + os.Getenv("APIGEE_SYNC_DOCKER_IP")
 	pgUrl = os.Getenv("APIGEE_SYNC_DOCKER_PG_URL") + "?sslmode=disable"
@@ -49,30 +49,26 @@
 	config.Set(configName, "dockerIT")
 	config.Set(configConsumerKey, "dummyKey")
 	config.Set(configConsumerSecret, "dummySecret")
-	//config.Set(configApidClusterId, "testClusterId")
 	testServer := initDummyAuthServer()
 
-	// hang until snapshot received
-	apid.Events().ListenFunc(ApigeeSyncEventSelector, func(event apid.Event){
-		if _, ok := event.(*common.Snapshot); ok {
-			close(done)
-		}
-	})
+	initDone := make(chan bool)
+	handler := &waitSnapshotHandler{initDone}
 
-	// Setup dependencies
-	//config.Set(configChangeServerBaseURI, hostname+":"+dockerCsPort+"/")
-	//config.Set(configSnapServerBaseURI, hostname+":"+dockerSsPort+"/")
+
+	// hang until snapshot received
+	apid.Events().Listen(ApigeeSyncEventSelector, handler)
+
 	config.Set(configProxyServerBaseURI, testServer.URL)
 
 	// init plugin
 	apid.RegisterPlugin(initPlugin)
 	apid.InitializePlugins("dockerTest")
 
-
+	<- initDone
 }, 5)
 
 var _ = AfterSuite(func() {
-	pgManager.CleanupAll()
+	//pgManager.CleanupAll()
 })
 
 var _ = Describe("dockerIT", func() {
@@ -83,7 +79,7 @@
 		})
 
 		var _ = AfterEach(func() {
-			pgManager.CleanupTest()
+			//pgManager.CleanupTest()
 		})
 
 		It("should succesfully download new table from pg", func(done Done) {
@@ -91,13 +87,15 @@
 			//log.Debug("SS: " + config.GetString(configSnapServerBaseURI))
 			//log.Debug("Auth: " + config.GetString(configProxyServerBaseURI))
 			tableName := "docker_test"
+			targetTablename := "edgex_" + tableName
 			apid.Events().ListenFunc(ApigeeSyncEventSelector, func(event apid.Event){
 				if s, ok := event.(*common.Snapshot); ok {
 					go func() {
 						defer GinkgoRecover()
 						sqliteDb, err := dataService.DBVersion(s.SnapshotInfo)
 						Expect(err).Should(Succeed())
-						Expect(verifyTestTable(tableName, sqliteDb)).To(BeTrue())
+						Expect(verifyTestTable(targetTablename, sqliteDb)).To(BeTrue())
+						dropTestTable(targetTablename, sqliteDb)
 						close(done)
 					}()
 				}
@@ -106,7 +104,7 @@
 			createTestTable(tableName);
 
 
-		}, 5)
+		}, 1)
 	})
 })
 
@@ -135,6 +133,7 @@
 		var tableName string
 		err = rows.Scan(&tableName)
 		Expect(err).Should(Succeed())
+
 		if tableName==targetTableName {
 			return true
 		}
@@ -142,6 +141,13 @@
 	return false
 }
 
+func dropTestTable(targetTableName string, sqliteDb apid.DB) {
+	tx, err := pgManager.BeginTransaction()
+	Expect(err).Should(Succeed())
+	_, err = tx.Exec("DROP TABLE IF EXISTS edgex." + targetTableName + ";")
+	Expect(err).Should(Succeed())
+}
+
 func initDummyAuthServer() (testServer *httptest.Server) {
 	testRouter := apid.API().Router()
 	testServer = httptest.NewServer(testRouter)
@@ -245,8 +251,8 @@
 	}
 
 	tx, err := pgManager.BeginTransaction()
-	defer tx.Rollback()
 	Expect(err).Should(Succeed())
+	defer tx.Rollback()
 	err = pgManager.InsertApidCluster(tx, cluster)
 	Expect(err).Should(Succeed())
 	err = pgManager.InsertDataScope(tx, ds)
@@ -259,6 +265,17 @@
 	Expect(err).Should(Succeed())
 }
 
+type waitSnapshotHandler struct {
+	initDone chan bool
+}
+
+func (w *waitSnapshotHandler) Handle(event apid.Event) {
+	if _, ok := event.(*common.Snapshot); ok {
+		apid.Events().StopListening(ApigeeSyncEventSelector, w)
+		w.initDone <- true
+	}
+}
+
 func TestDockerApigeeSync(t *testing.T) {
 	RegisterFailHandler(Fail)
 	RunSpecs(t, "ApigeeSync Docker Suite")
