diff --git a/dockertests/const.go b/dockertests/const.go
index 26926ff..1fdd217 100644
--- a/dockertests/const.go
+++ b/dockertests/const.go
@@ -15,15 +15,21 @@
 package dockertests
 
 const (
-	pluginName                       = "apigeeSyncDockerTest"
-	configApidClusterId       = "apigeesync_cluster_id"
-	configProxyServerBaseURI         = "apigeesync_proxy_server_base"
-	configLocalStoragePath = "local_storage_path"
-	configConsumerKey                = "apigeesync_consumer_key"
-	configConsumerSecret             = "apigeesync_consumer_secret"
-	configName                       = "apigeesync_instance_name"
-	ApigeeSyncEventSelector          = "ApigeeSync"
-	testInitUser = "dockerTestInit"
+	pluginName               = "apigeeSyncDockerTest"
+	configApidClusterId      = "apigeesync_cluster_id"
+	configProxyServerBaseURI = "apigeesync_proxy_server_base"
+	configLocalStoragePath   = "local_storage_path"
+	configConsumerKey        = "apigeesync_consumer_key"
+	configConsumerSecret     = "apigeesync_consumer_secret"
+	configName               = "apigeesync_instance_name"
+	ApigeeSyncEventSelector  = "ApigeeSync"
+	testInitUser             = "dockerTestInit"
+	basicTables              = map[string]bool{
+		"deployment_history": true,
+		"deployment":         true,
+		"bundle_config":      true,
+		"configuration":      true,
+		"apid_cluster":       true,
+		"data_scope":         true,
+	}
 )
-
-
diff --git a/dockertests/docker_test.go b/dockertests/docker_test.go
index 1e0b24d..c787115 100644
--- a/dockertests/docker_test.go
+++ b/dockertests/docker_test.go
@@ -15,26 +15,26 @@
 package dockertests
 
 import (
+	"encoding/json"
 	"github.com/30x/apid-core"
 	"github.com/30x/apid-core/factory"
 	_ "github.com/30x/apidApigeeSync"
+	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 	"net/http/httptest"
 	"os"
 	"testing"
 	"time"
-	"encoding/json"
-	"github.com/apigee-labs/transicator/common"
 )
 
 var (
-	services  apid.Services
-	log       apid.LogService
-	dataService     apid.DataService
-	config    apid.ConfigService
-	pgUrl     string
-	pgManager *ManagementPg
+	services            apid.Services
+	log                 apid.LogService
+	dataService         apid.DataService
+	config              apid.ConfigService
+	pgUrl               string
+	pgManager           *ManagementPg
 	clusterIdFromConfig string
 )
 
@@ -48,8 +48,6 @@
 	pgUrl = os.Getenv("APIGEE_SYNC_DOCKER_PG_URL") + "?sslmode=disable"
 	os.Setenv("APID_CONFIG_FILE", "./apid_config.yaml")
 
-
-
 	apid.Initialize(factory.DefaultServicesFactory())
 	config = apid.Config()
 
@@ -73,7 +71,6 @@
 	initDone := make(chan bool)
 	handler := &waitSnapshotHandler{initDone}
 
-
 	// hang until snapshot received
 	apid.Events().Listen(ApigeeSyncEventSelector, handler)
 
@@ -83,47 +80,44 @@
 	apid.RegisterPlugin(initPlugin)
 	apid.InitializePlugins("dockerTest")
 
-	<- initDone
+	<-initDone
 }, 5)
 
 var _ = AfterSuite(func() {
-	//pgManager.CleanupAll()
+	err := pgManager.CleanupAll()
+	Expect(err).Should(Succeed())
 })
 
 var _ = Describe("dockerIT", func() {
 
+	/*
+	 * Isolation between tests is not perfect.
+	 * If in a test you listen to any event, please make sure you stop listening to it,
+	 * and don't let it mess up later tests.
+	 */
 	Context("Generic Replication", func() {
 		var _ = BeforeEach(func() {
 
 		})
 
 		var _ = AfterEach(func() {
-			//pgManager.CleanupTest()
+			err := pgManager.CleanupTest()
+			Expect(err).Should(Succeed())
 		})
 
 		It("should succesfully download new table from pg", func(done Done) {
-			//log.Debug("CS: " + config.GetString(configChangeServerBaseURI))
-			//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(targetTablename, sqliteDb)).To(BeTrue())
-						dropTestTable(tableName, sqliteDb)
-						close(done)
-					}()
-				}
-			})
+			handler := &newTableHandler{
+				targetTablename: targetTablename,
+				done:            done,
+			}
 
-			createTestTable(tableName);
-
+			apid.Events().Listen(ApigeeSyncEventSelector, handler)
+			createTestTable(tableName)
 
 		}, 1)
+
 	})
 })
 
@@ -153,7 +147,7 @@
 		err = rows.Scan(&tableName)
 		Expect(err).Should(Succeed())
 
-		if tableName==targetTableName {
+		if tableName == targetTableName {
 			return true
 		}
 	}
@@ -193,7 +187,7 @@
 }
 
 func initPgData() {
-	clusterIdFromConfig = config.GetString(configApidClusterId)//"4c6bb536-0d64-43ca-abae-17c08f1a7e58"
+	clusterIdFromConfig = config.GetString(configApidClusterId) //"4c6bb536-0d64-43ca-abae-17c08f1a7e58"
 	clusterId := clusterIdFromConfig
 	scopeId := "ae418890-2c22-4c6a-b218-69e261034b96"
 	deploymentId := "633af126-ee79-4a53-bef7-7ba30da8aad6"
@@ -228,45 +222,44 @@
 	}
 
 	bf := bundleConfigData{
-		Id: bundleConfigId,
-		Created: t.Format(time.RFC3339),
+		Id:        bundleConfigId,
+		Created:   t.Format(time.RFC3339),
 		CreatedBy: testInitUser,
-		Updated: t.Format(time.RFC3339),
+		Updated:   t.Format(time.RFC3339),
 		UpdatedBy: testInitUser,
-		Name: bundleConfigName,
-		Uri: bundleUri,
+		Name:      bundleConfigName,
+		Uri:       bundleUri,
 	}
 
 	jsonBytes, err := json.Marshal(bf)
 	Expect(err).Should(Succeed())
 
-
 	bfr := &bundleConfigRow{
-		id: bf.Id,
-		scopeId: scopeId,
-		name: bf.Name,
-		uri: bf.Uri,
+		id:           bf.Id,
+		scopeId:      scopeId,
+		name:         bf.Name,
+		uri:          bf.Uri,
 		checksumType: "",
-		checksum: "",
-		created: t,
-		createdBy: bf.CreatedBy,
-		updated: t,
-		updatedBy: bf.UpdatedBy,
+		checksum:     "",
+		created:      t,
+		createdBy:    bf.CreatedBy,
+		updated:      t,
+		updatedBy:    bf.UpdatedBy,
 	}
 
 	d := &deploymentRow{
-		id: deploymentId,
-		configId: bundleConfigId,
-		clusterId: clusterId,
-		scopeId: scopeId,
+		id:               deploymentId,
+		configId:         bundleConfigId,
+		clusterId:        clusterId,
+		scopeId:          scopeId,
 		bundleConfigName: bundleConfigName,
 		bundleConfigJson: string(jsonBytes),
-		configJson: "{}",
-		created: t,
-		createdBy: testInitUser,
-		updated: t,
-		updatedBy: testInitUser,
-		changeSelector: clusterId,
+		configJson:       "{}",
+		created:          t,
+		createdBy:        testInitUser,
+		updated:          t,
+		updatedBy:        testInitUser,
+		changeSelector:   clusterId,
 	}
 
 	tx, err := pgManager.BeginTransaction()
@@ -295,6 +288,24 @@
 	}
 }
 
+type newTableHandler struct {
+	targetTablename string
+	done            Done
+}
+
+func (n *newTableHandler) Handle(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(n.targetTablename, sqliteDb)).To(BeTrue())
+			apid.Events().StopListening(ApigeeSyncEventSelector, n)
+			close(n.done)
+		}()
+	}
+}
+
 func TestDockerApigeeSync(t *testing.T) {
 	RegisterFailHandler(Fail)
 	RunSpecs(t, "ApigeeSync Docker Suite")
diff --git a/dockertests/management_pg.go b/dockertests/management_pg.go
index d46c8c6..b8a6f3d 100644
--- a/dockertests/management_pg.go
+++ b/dockertests/management_pg.go
@@ -17,6 +17,7 @@
 import (
 	"database/sql"
 	_ "github.com/lib/pq"
+	"fmt"
 )
 
 type ManagementPg struct {
@@ -179,9 +180,39 @@
 	return tx, err
 }
 
+/*
+ * Delete all new tables or rows created by a test from pg.
+ * Only test data for the whole suite will remain in the pg.
+ */
 func (m *ManagementPg) CleanupTest() error {
+	tablesToDelete := make([]string, 0)
+	rows, err := m.pg.Query("SELECT table_name FROM information_schema.tables WHERE table_schema='edgex';")
+	if err != nil {
+		return err
+	}
+	defer rows.Close()
+	for rows.Next() {
+		var tableName string
+		err = rows.Scan(&tableName)
+		if err != nil {
+			return err
+		}
+
+		if !basicTables[tableName] {
+			tablesToDelete = append(tablesToDelete, tableName)
+		}
+	}
+
+	for _, tableName := range tablesToDelete {
+		fmt.Println("Drop table: " + tableName)
+		cleanupSql := "DROP TABLE edgex." + tableName + ";"
+		_, err := m.pg.Exec(cleanupSql)
+		if err != nil {
+			return err
+		}
+	}
 	cleanupSql := "DELETE FROM edgex.apid_cluster WHERE created_by!='" + testInitUser + "';"
-	_, err := m.pg.Exec(cleanupSql)
+	_, err = m.pg.Exec(cleanupSql)
 	return err
 }
 
diff --git a/dockertests/pg_table_data.go b/dockertests/pg_table_data.go
index 12d047b..0a1aecd 100644
--- a/dockertests/pg_table_data.go
+++ b/dockertests/pg_table_data.go
@@ -78,13 +78,12 @@
 	changeSelector   string
 }
 
-
 type bundleConfigData struct {
-	Id string `json:"id"`
-	Created string `json:"created"`
+	Id        string `json:"id"`
+	Created   string `json:"created"`
 	CreatedBy string `json:"createdBy"`
-	Updated string `json:"updated"`
+	Updated   string `json:"updated"`
 	UpdatedBy string `json:"updatedBy"`
-	Name string `json:"name"`
-	Uri string `json:"uri"`
-}
\ No newline at end of file
+	Name      string `json:"name"`
+	Uri       string `json:"uri"`
+}
