diff --git a/db/model/transaction_test.go b/db/model/transaction_test.go
index 7b438b2..0e49f33 100644
--- a/db/model/transaction_test.go
+++ b/db/model/transaction_test.go
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package model
 
 import (
@@ -26,8 +27,8 @@
 )
 
 var (
-	txTargetDevId string
-	txDevId       string
+	txTargetDevID string
+	txDevID       string
 )
 
 func Test_Transaction_1_GetDevices(t *testing.T) {
@@ -39,7 +40,7 @@
 		t.Error("there are no available devices to retrieve")
 	} else {
 		// Save the target device id for later tests
-		txTargetDevId = devices.([]interface{})[0].(*voltha.Device).Id
+		txTargetDevID = devices.([]interface{})[0].(*voltha.Device).Id
 		t.Logf("retrieved devices: %+v", devices)
 	}
 
@@ -47,8 +48,8 @@
 }
 
 func Test_Transaction_2_AddDevice(t *testing.T) {
-	devIdBin, _ := uuid.New().MarshalBinary()
-	txDevId = "0001" + hex.EncodeToString(devIdBin)[:12]
+	devIDBin, _ := uuid.New().MarshalBinary()
+	txDevID = "0001" + hex.EncodeToString(devIDBin)[:12]
 
 	ports := []*voltha.Port{
 		{
@@ -63,7 +64,7 @@
 	}
 
 	device := &voltha.Device{
-		Id:         txDevId,
+		Id:         txDevID,
 		Type:       "simulated_olt",
 		Address:    &voltha.Device_HostAndPort{HostAndPort: "1.2.3.4:5555"},
 		AdminState: voltha.AdminState_PREPROVISIONED,
@@ -75,6 +76,7 @@
 	if added := addTx.Add("/devices", device); added == nil {
 		t.Error("Failed to add device")
 	} else {
+		txTargetDevID = added.(*voltha.Device).Id
 		t.Logf("Added device : %+v", added)
 	}
 	addTx.Commit()
@@ -82,7 +84,7 @@
 
 func Test_Transaction_3_GetDevice_PostAdd(t *testing.T) {
 
-	basePath := "/devices/" + txDevId
+	basePath := "/devices/" + txDevID
 
 	getDevWithPortsTx := modelTestConfig.RootProxy.OpenTransaction()
 	device1 := getDevWithPortsTx.Get(basePath+"/ports", 1, false)
@@ -98,7 +100,7 @@
 
 func Test_Transaction_4_UpdateDevice(t *testing.T) {
 	updateTx := modelTestConfig.RootProxy.OpenTransaction()
-	if retrieved := updateTx.Get("/devices/"+txTargetDevId, 1, false); retrieved == nil {
+	if retrieved := updateTx.Get("/devices/"+txTargetDevID, 1, false); retrieved == nil {
 		t.Error("Failed to get device")
 	} else {
 		var fwVersion int
@@ -106,7 +108,7 @@
 			fwVersion = 0
 		} else {
 			fwVersion, _ = strconv.Atoi(retrieved.(*voltha.Device).FirmwareVersion)
-			fwVersion += 1
+			fwVersion++
 		}
 
 		cloned := reflect.ValueOf(retrieved).Elem().Interface().(voltha.Device)
@@ -114,7 +116,7 @@
 		t.Logf("Before update : %+v", cloned)
 
 		// FIXME: The makeBranch passed in function is nil or not being executed properly!!!!!
-		if afterUpdate := updateTx.Update("/devices/"+txTargetDevId, &cloned, false); afterUpdate == nil {
+		if afterUpdate := updateTx.Update("/devices/"+txTargetDevID, &cloned, false); afterUpdate == nil {
 			t.Error("Failed to update device")
 		} else {
 			t.Logf("Updated device : %+v", afterUpdate.(Revision).GetData())
@@ -125,7 +127,7 @@
 
 func Test_Transaction_5_GetDevice_PostUpdate(t *testing.T) {
 
-	basePath := "/devices/" + txDevId
+	basePath := "/devices/" + txDevID
 
 	getDevWithPortsTx := modelTestConfig.RootProxy.OpenTransaction()
 	device1 := getDevWithPortsTx.Get(basePath+"/ports", 1, false)
@@ -141,7 +143,7 @@
 
 func Test_Transaction_6_RemoveDevice(t *testing.T) {
 	removeTx := modelTestConfig.RootProxy.OpenTransaction()
-	if removed := removeTx.Remove("/devices/" + txDevId); removed == nil {
+	if removed := removeTx.Remove("/devices/" + txDevID); removed == nil {
 		t.Error("Failed to remove device")
 	} else {
 		t.Logf("Removed device : %+v", removed)
@@ -151,7 +153,7 @@
 
 func Test_Transaction_7_GetDevice_PostRemove(t *testing.T) {
 
-	basePath := "/devices/" + txDevId
+	basePath := "/devices/" + txDevID
 
 	getDevTx := modelTestConfig.RootProxy.OpenTransaction()
 	device := modelTestConfig.RootProxy.Get(basePath, 0, false, "")
