diff --git a/.travis.yml b/.travis.yml
index cf44163..e7c5687 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,4 +14,4 @@
 script:
   - diff -u <(echo -n) <(gofmt -d $(git ls-files | grep '.go$' | grep -v vendor))
   - go vet $(glide novendor)
-  - go test
+  - go test -covermode=atomic $(glide novendor)
diff --git a/apigee_sync.go b/apigee_sync.go
index 8a23079..e64dd2b 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -71,7 +71,7 @@
 	for {
 		select {
 		case <-quit:
-			log.Info("Quit signal recieved.  Returning")
+			log.Info("Quit signal received.  Returning")
 			return
 		case <-retry:
 			start := time.Now()
@@ -124,7 +124,7 @@
 }
 
 func (an expected200Error) Error() string {
-	return "Did not recieve OK response"
+	return "Did not receive OK response"
 }
 
 func (a quitSignalError) Error() string {
diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index f7144a1..809bf7a 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -148,7 +148,7 @@
 
 		}
 
-		It("should succesfully bootstrap from clean slate", func(done Done) {
+		It("should successfully bootstrap from clean slate", func(done Done) {
 			log.Info("Starting sync tests...")
 			var closeDone <-chan bool
 			initializeContext()
diff --git a/cmd/mockServer/main.go b/cmd/mockServer/main.go
index 486da41..8cfa1ef 100644
--- a/cmd/mockServer/main.go
+++ b/cmd/mockServer/main.go
@@ -19,7 +19,6 @@
 
 	"os"
 
-
 	"github.com/apid/apid-core"
 	"github.com/apid/apid-core/factory"
 	"github.com/apid/apidApigeeSync"
@@ -53,16 +52,16 @@
 	router := apid.API().Router()
 
 	params := apidApigeeSync.MockParms{
-		ReliableAPI:            *reliable,
-		ClusterID:              "cluster",
-		TokenKey:               "key",
-		TokenSecret:            "secret",
-		Scope:                  "scope",
-		Organization:           "org",
-		Environment:            "test",
-		NumDevelopers:          *numDevs,
-		NumDeployments:         *numDeps,
-		BundleURI:              *bundleURI,
+		ReliableAPI:    *reliable,
+		ClusterID:      "cluster",
+		TokenKey:       "key",
+		TokenSecret:    "secret",
+		Scope:          "scope",
+		Organization:   "org",
+		Environment:    "test",
+		NumDevelopers:  *numDevs,
+		NumDeployments: *numDeps,
+		BundleURI:      *bundleURI,
 	}
 
 	log.Printf("Params: %#v\n", params)
diff --git a/data.go b/data.go
index c77fc10..a163bf7 100644
--- a/data.go
+++ b/data.go
@@ -152,7 +152,7 @@
 	}
 
 	if len(rows) == 0 {
-		log.Errorf("No rows found for table.", tableName)
+		log.Errorf("No rows found for table %s", tableName)
 		return false
 	}
 
@@ -213,7 +213,7 @@
 func update(tableName string, oldRows, newRows []common.Row, txn apid.Tx) bool {
 	pkeys, err := getPkeysForTable(tableName)
 	if len(pkeys) == 0 || err != nil {
-		log.Errorf("UPDATE No primary keys found for table.", tableName)
+		log.Errorf("UPDATE No primary keys found for table %s", tableName)
 		return false
 	}
 	if len(oldRows) == 0 || len(newRows) == 0 {
@@ -349,7 +349,7 @@
 	sql := "SELECT columnName FROM _transicator_tables WHERE tableName=$1 AND primaryKey ORDER BY columnName;"
 	rows, err := db.Query(sql, normalizedTableName)
 	if err != nil {
-		log.Errorf("Failed [%s] values=[s%] Error: %v", sql, normalizedTableName, err)
+		log.Errorf("Failed [%s] values=[%s] Error: %v", sql, normalizedTableName, err)
 		return nil, err
 	}
 	var columnNames []string
diff --git a/dockertests/docker_test.go b/dockertests/docker_test.go
index e8fc25d..7805abc 100644
--- a/dockertests/docker_test.go
+++ b/dockertests/docker_test.go
@@ -105,7 +105,7 @@
 			Expect(err).Should(Succeed())
 		})
 
-		It("should succesfully download new table from pg", func(done Done) {
+		It("should successfully download new table from pg", func(done Done) {
 			tableName := "docker_test_download"
 			targetTablename := "edgex_" + tableName
 			handler := &newTableHandler{
@@ -335,7 +335,7 @@
 type newTableHandler struct {
 	targetTablename string
 	done            Done
-	verifyFunc      func (string, apid.DB)
+	verifyFunc      func(string, apid.DB)
 }
 
 func (n *newTableHandler) Handle(event apid.Event) {
diff --git a/mock_server.go b/mock_server.go
index f39adb7..089e13e 100644
--- a/mock_server.go
+++ b/mock_server.go
@@ -149,17 +149,17 @@
 
 	db, err := sql.Open("sqlite3", path)
 	if err != nil {
-		log.Panic("Could not instantiate mock db, %s", err)
+		log.Panicf("Could not instantiate mock db, %s", err)
 	}
 	defer db.Close()
 	sqlStatementsBuffer, err := ioutil.ReadFile(statements)
 	if err != nil {
-		log.Panic("Could not instantiate mock db, %s", err)
+		log.Panicf("Could not instantiate mock db, %s", err)
 	}
 	sqlStatementsString := string(sqlStatementsBuffer)
 	_, err = db.Exec(sqlStatementsString)
 	if err != nil {
-		log.Panic("Could not instantiate mock db, %s", err)
+		log.Panicf("Could not instantiate mock db, %s", err)
 	}
 
 }
diff --git a/token.go b/token.go
index 95d4b06..fa0cd56 100644
--- a/token.go
+++ b/token.go
@@ -151,7 +151,7 @@
 	}
 	uri.Path = path.Join(uri.Path, "/accesstoken")
 
-	pollWithBackoff(t.quitPollingForToken, t.getRetrieveNewTokenClosure(uri), func(err error) { log.Errorf("Error getting new token : ", err) })
+	pollWithBackoff(t.quitPollingForToken, t.getRetrieveNewTokenClosure(uri), func(err error) { log.Errorf("Error getting new token : %v", err) })
 }
 
 func (t *simpleTokenManager) getRetrieveNewTokenClosure(uri *url.URL) func(chan bool) error {
