diff --git a/cmd/gnmi/gnmi.go b/cmd/gnmi/gnmi.go
index 0f30b05abff9dc56f4db082503ecc792a9713c1e..ba24d802ddb593aae76b97cd5e54f46802914c03 100644
--- a/cmd/gnmi/gnmi.go
+++ b/cmd/gnmi/gnmi.go
@@ -25,24 +25,13 @@ func main() {
 	if err != nil {
 		log.Debug(err)
 	}
-	pnd := nucleus.NewPND("openconfig", "test description", sbi)
-	if err := pnd.AddDevice(device); err != nil {
+	pnd, err := nucleus.NewPND("openconfig", "test description", sbi)
+	if err != nil {
 		log.Fatal(err)
 	}
-
-	cfg := &gnmi.Config{
-		Addr:     "[fdfd::ce05]:6030",
-		Username: "admin",
-		Password: "arista",
-		Encoding: gpb.Encoding_JSON_IETF,
-	}
-	transport, err := nucleus.NewGnmiTransport(cfg)
-	if err != nil {
+	if err := pnd.AddDevice(device); err != nil {
 		log.Fatal(err)
 	}
-	transport.SetNode = sbi.SetNode()
-
-	device.Transport = transport
 
 	p := []string{"/interfaces/interface"}
 	errors := 0
diff --git a/nucleus/gnmi_transport_test.go b/nucleus/gnmi_transport_test.go
index b36a4a542e8fe2dae3f9f7e5e43b2164963afc5b..3cd5cc2d706978b141299b51a97250466751e51e 100644
--- a/nucleus/gnmi_transport_test.go
+++ b/nucleus/gnmi_transport_test.go
@@ -55,16 +55,62 @@ func mockTransport() Gnmi {
 	return Gnmi{
 		SetNode:  nil,
 		RespChan: make(chan *gpb.SubscribeResponse),
+		Options:  newGnmiTransportOptions(),
 		config:   gnmiConfig,
 		client:   &mocks.GNMIClient{},
 	}
 }
 
+func newGnmiTransportOptions() *GnmiTransportOptions {
+	return &GnmiTransportOptions{
+		Username: "test",
+		Password: "test",
+		Addr:     "localhost:13371",
+		SetNode:  nil,
+		RespChan: make(chan *gpb.SubscribeResponse),
+		Encoding: gpb.Encoding_PROTO,
+	}
+}
+
 var gnmiConfig *gnmi.Config
 var startGnmiTarget chan string
 var stopGnmiTarget chan bool
 var mockContext = mock.MatchedBy(func(ctx context.Context) bool { return true })
 
+func TestNewGnmiTransport(t *testing.T) {
+	gnmiTransport := mockTransport()
+	type args struct {
+		opts *GnmiTransportOptions
+	}
+	tests := []struct {
+		name    string
+		args    args
+		want    *Gnmi
+		wantErr bool
+	}{
+		{
+			name: "default",
+			args: args{
+				opts: newGnmiTransportOptions(),
+			},
+			want:    &gnmiTransport,
+			wantErr: false,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got, err := NewGnmiTransport(tt.args.opts)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("NewGnmiTransport() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+			if !reflect.DeepEqual(got, tt.want) {
+				t.Errorf("NewGnmiTransport() = %v, want %v", got, tt.want)
+			}
+		})
+	}
+}
+
 func TestGnmi_Capabilities(t *testing.T) {
 	transport := mockTransport()
 	capabilityResponse := &gpb.CapabilityResponse{
diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go
index db95582e17e9e65dab90e56c26709d97b374629b..622be43e8187e8dad710f2c2d3f675f0f99cfb89 100644
--- a/nucleus/principalNetworkDomain_test.go
+++ b/nucleus/principalNetworkDomain_test.go
@@ -36,6 +36,7 @@ func testSetupPnd() {
 
 func mockDevice() Device {
 	return Device{
+		Uuid:      mdid,
 		GoStruct:  nil,
 		SBI:       &OpenConfig{},
 		Transport: &mocks.Transport{},
@@ -168,7 +169,7 @@ func Test_destroy(t *testing.T) {
 
 func Test_pndImplementation_AddDevice(t *testing.T) {
 	type args struct {
-		device *Device
+		device interface{}
 	}
 	tests := []struct {
 		name    string
@@ -177,25 +178,51 @@ func Test_pndImplementation_AddDevice(t *testing.T) {
 	}{
 		{
 			name: "default",
-			args: args{device: &Device{
-				Uuid: did,
-			}},
+			args: args{
+				device: &Device{
+					Uuid: did,
+				},
+			},
 			wantErr: false,
 		},
+		{
+			name: "already exists",
+			args: args{
+				device: &Device{
+					Uuid: did,
+				},
+			},
+			wantErr: true,
+		},
+		{
+			name: "fails wrong type",
+			args: args{device: &pndImplementation{
+				id: did,
+			}},
+			wantErr: true,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			pnd := newPnd()
-			if err := pnd.AddDevice(tt.args.device); (err != nil) != tt.wantErr {
-				t.Errorf("AddDevice() error = %v, wantErr %v", err, tt.wantErr)
+			if tt.name == "already exists" {
+				pnd.devices.store[did] = &Device{Uuid: did}
 			}
-			_, ok := pnd.devices.store[did]
-			if !ok {
-				t.Errorf("AddDevice() Device %v not in device store %v",
-					tt.args.device, pnd.devices)
+			err := pnd.AddDevice(tt.args.device)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("AddDevice() error = %v, wantErr %v", err, tt.wantErr)
 			}
-			if err := pnd.devices.delete(did); err != nil {
-				t.Error(err)
+			if tt.name != "fails wrong type" {
+				if err == nil {
+					_, ok := pnd.devices.store[did]
+					if !ok {
+						t.Errorf("AddDevice() Device %v not in device store %v",
+							tt.args.device, pnd.devices)
+					}
+					if err := pnd.devices.delete(did); err != nil {
+						t.Error(err)
+					}
+				}
 			}
 		})
 	}
@@ -203,7 +230,7 @@ func Test_pndImplementation_AddDevice(t *testing.T) {
 
 func Test_pndImplementation_AddSbi(t *testing.T) {
 	type args struct {
-		sbi SouthboundInterface
+		sbi interface{}
 	}
 	tests := []struct {
 		name    string
@@ -219,20 +246,46 @@ func Test_pndImplementation_AddSbi(t *testing.T) {
 			},
 			wantErr: false,
 		},
+		{
+			name: "already exists",
+			args: args{
+				sbi: &OpenConfig{
+					id: defaultSbiId,
+				},
+			},
+			wantErr: true,
+		},
+		{
+			name: "fails wrong type",
+			args: args{
+				sbi: &pndImplementation{
+					id: defaultSbiId,
+				},
+			},
+			wantErr: true,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			pnd := newPnd()
-			if err := pnd.AddSbi(tt.args.sbi); (err != nil) != tt.wantErr {
-				t.Errorf("AddSbi() error = %v, wantErr %v", err, tt.wantErr)
+			if tt.name == "already exists" {
+				pnd.sbic.store[defaultSbiId] = tt.args.sbi.(*OpenConfig)
 			}
-			_, ok := pnd.sbic.store[defaultSbiId]
-			if !ok {
-				t.Errorf("AddSbi() SBI %v not in device store %v",
-					tt.args.sbi, pnd.GetSBIs())
+			err := pnd.AddSbi(tt.args.sbi)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("AddSbi() error = %v, wantErr %v", err, tt.wantErr)
 			}
-			if err := pnd.sbic.delete(defaultSbiId); err != nil {
-				t.Error(err)
+			if tt.name != "fails wrong type" {
+				if err == nil {
+					_, ok := pnd.sbic.store[defaultSbiId]
+					if !ok {
+						t.Errorf("AddSbi() SBI %v not in device store %v",
+							tt.args.sbi, pnd.GetSBIs())
+					}
+					if err := pnd.sbic.delete(defaultSbiId); err != nil {
+						t.Error(err)
+					}
+				}
 			}
 		})
 	}
@@ -369,12 +422,18 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
 		want    string
 		wantErr bool
 	}{
-		{name: "default", args: args{did}, want: "{\n\t\"Acl\": null,\n\t\"Bgp\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"LocalRoutes\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}", wantErr: false},
+		{
+			name:    "default",
+			args:    args{did},
+			want:    "{\n\t\"Acl\": null,\n\t\"Bgp\": null,\n\t\"Components\": null,\n\t\"Interfaces\": null,\n\t\"LocalRoutes\": null,\n\t\"Messages\": null,\n\t\"NetworkInstances\": null,\n\t\"RoutingPolicy\": null,\n\t\"System\": null\n}",
+			wantErr: false,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			pnd := newPnd()
 			d := &Device{
+				Uuid:      tt.args.uuid,
 				GoStruct:  &openconfig.Device{},
 				SBI:       nil,
 				Transport: nil,