diff --git a/apigee_sync.go b/apigee_sync.go
index 10745de..1f6e38a 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -26,7 +26,7 @@
 	maxIdleConnsPerHost = 10
 )
 
-var knownTables = make(map[string]bool)
+var knownTables = make(map[string]map[string]bool)
 
 /*
  *  Start from existing snapshot if possible
diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index b885593..ad79a6b 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -235,38 +235,39 @@
 
 		It("should correctly identify non-proper subsets with respect to maps", func() {
 
+			testMap := map[string]map[string]bool{"a": make(map[string]bool), "b": make(map[string]bool)}
 			//test b proper subset of a
-			Expect(changesHaveNewTables(map[string]bool{"a": true, "b": true},
+			Expect(changesHaveNewTables(testMap,
 				[]common.Change{common.Change{Table: "b"}},
 			)).To(BeFalse())
 
 			//test a == b
-			Expect(changesHaveNewTables(map[string]bool{"a": true, "b": true},
+			Expect(changesHaveNewTables(testMap,
 				[]common.Change{common.Change{Table: "a"}, common.Change{Table: "b"}},
 			)).To(BeFalse())
 
 			//test b superset of a
-			Expect(changesHaveNewTables(map[string]bool{"a": true, "b": true},
+			Expect(changesHaveNewTables(testMap,
 				[]common.Change{common.Change{Table: "a"}, common.Change{Table: "b"}, common.Change{Table: "c"}},
 			)).To(BeTrue())
 
 			//test b not subset of a
-			Expect(changesHaveNewTables(map[string]bool{"a": true, "b": true},
+			Expect(changesHaveNewTables(testMap,
 				[]common.Change{common.Change{Table: "c"}},
 			)).To(BeTrue())
 
 			//test a empty
-			Expect(changesHaveNewTables(map[string]bool{},
+			Expect(changesHaveNewTables(map[string]map[string]bool{},
 				[]common.Change{common.Change{Table: "a"}},
 			)).To(BeTrue())
 
 			//test b empty
-			Expect(changesHaveNewTables(map[string]bool{"a": true, "b": true},
+			Expect(changesHaveNewTables(testMap,
 				[]common.Change{},
 			)).To(BeFalse())
 
 			//test b nil
-			Expect(changesHaveNewTables(map[string]bool{"a": true, "b": true}, nil)).To(BeFalse())
+			Expect(changesHaveNewTables(testMap, nil)).To(BeFalse())
 
 			//test a nil
 			Expect(changesHaveNewTables(nil,
diff --git a/change_test.go b/change_test.go
index 383bff6..ec9b82f 100644
--- a/change_test.go
+++ b/change_test.go
@@ -46,7 +46,7 @@
 		BeforeEach(func() {
 			event := createTestDb("./sql/init_mock_db.sql", "test_change")
 			processSnapshot(&event)
-			knownTables = extractTablesFromDB(getDB())
+			knownTables = extractTableColsFromDB(getDB())
 		})
 
 		var initializeContext = func() {
diff --git a/changes.go b/changes.go
index 9f26466..9141927 100644
--- a/changes.go
+++ b/changes.go
@@ -298,7 +298,7 @@
 /*
  * Determine if any tables in changes are not present in known tables
  */
-func changesHaveNewTables(a map[string]bool, changes []common.Change) bool {
+func changesHaveNewTables(a map[string]map[string]bool, changes []common.Change) bool {
 
 	//nil maps should not be passed in.  Making the distinction between nil map and empty map
 	if a == nil {
@@ -307,7 +307,7 @@
 	}
 
 	for _, change := range changes {
-		if !a[normalizeTableName(change.Table)] {
+		if _, ok := a[normalizeTableName(change.Table)]; !ok {
 			log.Infof("Unable to find %s table in current known tables", change.Table)
 			return true
 		}
diff --git a/snapshot.go b/snapshot.go
index ae889e3..66108eb 100644
--- a/snapshot.go
+++ b/snapshot.go
@@ -147,7 +147,7 @@
 }
 
 func (s *simpleSnapShotManager) storeDataSnapshot(snapshot *common.Snapshot) {
-	knownTables = extractTablesFromSnapshot(snapshot)
+	knownTables = extractTableColumnsFromSnapshot(snapshot)
 
 	_, err := dataService.DBVersion(snapshot.SnapshotInfo)
 	if err != nil {
@@ -167,50 +167,20 @@
 
 }
 
-func extractTablesFromSnapshot(snapshot *common.Snapshot) (tables map[string]bool) {
-
-	tables = make(map[string]bool)
-
-	log.Debug("Extracting table names from snapshot")
-	if snapshot.Tables == nil {
-		//if this panic ever fires, it's a bug
-		db, err := dataService.DBVersion(snapshot.SnapshotInfo)
-		if err != nil {
-			log.Panicf("Database inaccessible: %v", err)
-		}
-		rows, err := db.Query("SELECT DISTINCT tableName FROM _transicator_tables;")
-		if err != nil {
-			log.Panicf("Unable to read in known snapshot tables from sqlite file")
-		}
-		for rows.Next() {
-			var tableName string
-			rows.Scan(&tableName)
-			if err != nil {
-				log.Panic("Error scaning tableNames from _transicator_tables")
-			}
-			tables[tableName] = true
-		}
-
-	} else {
-
-		for _, table := range snapshot.Tables {
-			tables[table.Name] = true
-		}
-	}
-	return tables
-
-}
-
-func extractTableColumnsFromSnapshot(snapshot *common.Snapshot) (map[string][]string) {
-
-	columns := make(map[string][]string)
-	tables := make([]string, 0)
-
+func extractTableColumnsFromSnapshot(snapshot *common.Snapshot) map[string]map[string]bool {
 	log.Debug("Extracting table names from snapshot")
 	db, err := dataService.DBVersion(snapshot.SnapshotInfo)
 	if err != nil {
 		log.Panicf("Database inaccessible: %v", err)
 	}
+
+	return extractTableColsFromDB(db)
+}
+
+func extractTableColsFromDB(db apid.DB) map[string]map[string]bool {
+
+	columns := make(map[string]map[string]bool)
+	tables := make([]string, 0)
 	rows, err := db.Query("SELECT DISTINCT tableName FROM _transicator_tables;")
 	if err != nil {
 		log.Panicf("Unable to read in known snapshot tables from sqlite file")
@@ -226,7 +196,7 @@
 	}
 
 	for _, tableName := range tables {
-
+		columns[tableName] = make(map[string]bool)
 		dummyRows, err := db.Query("SELECT * FROM " + tableName + " LIMIT 0;")
 		if err != nil {
 			log.Panicf("Get table info failed: %v", err)
@@ -236,35 +206,14 @@
 		if err != nil {
 			log.Panicf("Get table columns failed: %v", err)
 		}
-		columns[tableName] = cols
+		for _, col := range cols {
+			columns[tableName][col] = true
+		}
+
 	}
 	return columns
 }
 
-func extractTablesFromDB(db apid.DB) (tables map[string]bool) {
-
-	tables = make(map[string]bool)
-
-	log.Debug("Extracting table names from existing DB")
-	rows, err := db.Query("SELECT DISTINCT tableName FROM _transicator_tables;")
-	defer rows.Close()
-
-	if err != nil {
-		log.Panicf("Error reading current set of tables: %v", err)
-	}
-
-	for rows.Next() {
-		var table string
-		if err := rows.Scan(&table); err != nil {
-			log.Panicf("Error reading current set of tables: %v", err)
-		}
-		log.Debugf("Table %s found in existing db", table)
-
-		tables[table] = true
-	}
-	return tables
-}
-
 // Skip Downloading snapshot if there is already a snapshot available from previous run
 func startOnLocalSnapshot(snapshot string) *common.Snapshot {
 	log.Infof("Starting on local snapshot: %s", snapshot)
@@ -275,7 +224,7 @@
 		log.Panicf("Database inaccessible: %v", err)
 	}
 
-	knownTables = extractTablesFromDB(db)
+	knownTables = extractTableColsFromDB(db)
 
 	// allow plugins (including this one) to start immediately on existing database
 	// Note: this MUST have no tables as that is used as an indicator
diff --git a/snapshot_test.go b/snapshot_test.go
index ffad61a..bcbafd5 100644
--- a/snapshot_test.go
+++ b/snapshot_test.go
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 package apidApigeeSync
+
 import (
 	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
@@ -24,7 +25,6 @@
 	const testDbId = "test_snapshot"
 
 	Context("Change Agent Unit Tests", func() {
-		testHandler := handler{}
 
 		var createTestDb = func(sqlfile string, dbId string) common.Snapshot {
 			initDb(sqlfile, "./mockdb_snapshot.sqlite3")
@@ -43,8 +43,8 @@
 
 		BeforeEach(func() {
 			event := createTestDb("./sql/init_mock_db.sql", testDbId)
-			testHandler.Handle(&event)
-			knownTables = extractTablesFromDB(getDB())
+			processSnapshot(&event)
+			knownTables = extractTableColsFromDB(getDB())
 		})
 
 		It("test extract table columns", func() {
@@ -52,10 +52,14 @@
 				SnapshotInfo: testDbId,
 			}
 			columns := extractTableColumnsFromSnapshot(s)
-			for table, cols := range columns {
+			for table, colMap := range columns {
+				cols := []string{}
+				for col := range colMap {
+					cols = append(cols, col)
+				}
 				log.Error("snapshot TABLE: " + table + " COLUMN: " + strings.Join(cols, "|"))
 			}
 		})
 
 	})
-})
\ No newline at end of file
+})
