diff --git a/cmd/gnmi-telemetry/telemetry.go b/cmd/gnmi-telemetry/telemetry.go
index c21bb1301a98ded1c61feec588d438b74d17f02e..fbeb07fdc9c7a5d740c50d72862b887a8d00fe96 100644
--- a/cmd/gnmi-telemetry/telemetry.go
+++ b/cmd/gnmi-telemetry/telemetry.go
@@ -29,7 +29,10 @@ func main() {
 	if err != nil {
 		log.Debug(err)
 	}
-	pnd := nucleus.NewPND("openconfig", "a simple openconfig PND", sbi)
+	pnd, err := nucleus.NewPND("openconfig", "a simple openconfig PND", sbi)
+	if err != nil {
+		log.Fatal(err)
+	}
 	if err := pnd.AddDevice(device); err != nil {
 		log.Fatal(err)
 	}
@@ -46,7 +49,7 @@ func main() {
 		HeartbeatInterval: uint64(time.Second.Nanoseconds()),
 		Paths:             gnmi.SplitPaths(paths),
 		Origin:            "",
-		Target:            device.Transport.GetOptions().GetAddress(),
+		Target:            "portainer.danet.fbi.h-da.de:6030",
 	}
 	done := make(chan os.Signal, 1)
 	signal.Notify(done, syscall.SIGILL, syscall.SIGTERM)
diff --git a/mocks/Transport.go b/mocks/Transport.go
index 3d284039a1a313e4b661634dd96d71a6185ecbff..a2df2b287b0974640857cef15e895121be5e513c 100644
--- a/mocks/Transport.go
+++ b/mocks/Transport.go
@@ -45,6 +45,22 @@ func (_m *Transport) Get(ctx context.Context, params ...string) (interface{}, er
 	return r0, r1
 }
 
+// GetOptions provides a mock function with given fields:
+func (_m *Transport) GetOptions() interface{} {
+	ret := _m.Called()
+
+	var r0 interface{}
+	if rf, ok := ret.Get(0).(func() interface{}); ok {
+		r0 = rf()
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(interface{})
+		}
+	}
+
+	return r0
+}
+
 // ProcessResponse provides a mock function with given fields: resp, root, models
 func (_m *Transport) ProcessResponse(resp interface{}, root interface{}, models *ytypes.Schema) error {
 	ret := _m.Called(resp, root, models)
diff --git a/mocks/TransportOptions.go b/mocks/TransportOptions.go
new file mode 100644
index 0000000000000000000000000000000000000000..4893655f8a5bc0fef06e4898e116fc3df7171421
--- /dev/null
+++ b/mocks/TransportOptions.go
@@ -0,0 +1,57 @@
+// Code generated by mockery v2.6.0. DO NOT EDIT.
+
+package mocks
+
+import mock "github.com/stretchr/testify/mock"
+
+// TransportOptions is an autogenerated mock type for the TransportOptions type
+type TransportOptions struct {
+	mock.Mock
+}
+
+// GetAddress provides a mock function with given fields:
+func (_m *TransportOptions) GetAddress() string {
+	ret := _m.Called()
+
+	var r0 string
+	if rf, ok := ret.Get(0).(func() string); ok {
+		r0 = rf()
+	} else {
+		r0 = ret.Get(0).(string)
+	}
+
+	return r0
+}
+
+// GetPassword provides a mock function with given fields:
+func (_m *TransportOptions) GetPassword() string {
+	ret := _m.Called()
+
+	var r0 string
+	if rf, ok := ret.Get(0).(func() string); ok {
+		r0 = rf()
+	} else {
+		r0 = ret.Get(0).(string)
+	}
+
+	return r0
+}
+
+// GetUsername provides a mock function with given fields:
+func (_m *TransportOptions) GetUsername() string {
+	ret := _m.Called()
+
+	var r0 string
+	if rf, ok := ret.Get(0).(func() string); ok {
+		r0 = rf()
+	} else {
+		r0 = ret.Get(0).(string)
+	}
+
+	return r0
+}
+
+// IsTransportOption provides a mock function with given fields:
+func (_m *TransportOptions) IsTransportOption() {
+	_m.Called()
+}
diff --git a/nucleus/cli-handling.go b/nucleus/cli-handling.go
index 1e7ece71e74ec17dd371d241f48893ce72b7a95a..a8d3a77c5a360f5aa1c0dd393f76f2528d5d1ea3 100644
--- a/nucleus/cli-handling.go
+++ b/nucleus/cli-handling.go
@@ -181,9 +181,10 @@ func (s *server) GetAllPNDs(ctx context.Context, in *emptypb.Empty) (*pb.AllPNDs
 			}
 			tmpDevice := pb.Device{
 				Uuid:     uuidDevice.String(),
-				Address:  device.Transport.GetOptions().GetAddress(),
-				Username: device.Transport.GetOptions().GetUsername(),
-				Password: device.Transport.GetOptions().GetPassword()}
+				Address:  device.Transport.GetOptions().(TransportOptions).GetAddress(),
+				Username: device.Transport.GetOptions().(TransportOptions).GetUsername(),
+				Password: device.Transport.GetOptions().(TransportOptions).GetPassword(),
+			}
 			devices = append(devices, &tmpDevice)
 		}
 		sbi, err := s.core.sbic.get(pnd.GetSBIs().(*sbiStore).UUIDs()[0])
diff --git a/nucleus/device.go b/nucleus/device.go
index ca734983f7f69c3138015d6c61738adacd14d6cc..913bdc9d7839d70634713afd2a4bfa6228a44c2d 100644
--- a/nucleus/device.go
+++ b/nucleus/device.go
@@ -24,9 +24,13 @@ type Device struct {
 //NewDevice creates a Device
 func NewDevice(ttype string, sbi SouthboundInterface, opts TransportOptions) (*Device, error) {
 	var transport Transport
+	var err error
 	switch ttype {
 	case "gnmi":
-		transport = NewGnmiTransport(opts.(*GnmiTransportOptions))
+		transport, err = NewGnmiTransport(opts.(*GnmiTransportOptions))
+		if err != nil {
+			return nil, err
+		}
 	case "restconf":
 		//TODO: implement restconf -> NewRestConfTransport(opts)
 	default:
@@ -42,5 +46,5 @@ func NewDevice(ttype string, sbi SouthboundInterface, opts TransportOptions) (*D
 }
 
 func (d *Device) Id() uuid.UUID {
-	return d.Config.Uuid
+	return d.Uuid
 }
diff --git a/nucleus/gnmi_transport.go b/nucleus/gnmi_transport.go
index 9ad44cd48c8b00fa7bd5b808ac446a6c6f54e907..baee06334c303c24b20bcaa804be3c03ecb4fd03 100644
--- a/nucleus/gnmi_transport.go
+++ b/nucleus/gnmi_transport.go
@@ -23,19 +23,6 @@ func init() {
 	tapProto = false
 }
 
-func NewGnmiTransport(config *gnmi.Config) (*Gnmi, error) {
-	c, err := gnmi.Dial(config)
-	if err != nil {
-		return nil, err
-	}
-	return &Gnmi{
-		SetNode:  nil,
-		RespChan: nil,
-		config:   config,
-		client:   c,
-	}, nil
-}
-
 type Gnmi struct {
 	SetNode  func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error
 	RespChan chan *gpb.SubscribeResponse
@@ -44,15 +31,19 @@ type Gnmi struct {
 	client   gpb.GNMIClient
 }
 
-func NewGnmiTransport(opts *GnmiTransportOptions) *Gnmi {
-	ngt := &Gnmi{
+func NewGnmiTransport(opts *GnmiTransportOptions) (*Gnmi, error) {
+	config := createConfig(opts)
+	c, err := gnmi.Dial(config)
+	if err != nil {
+		return nil, err
+	}
+	return &Gnmi{
 		SetNode:  opts.SetNode,
 		RespChan: opts.RespChan,
 		Options:  opts,
-	}
-	config := ngt.CreateConfig(opts)
-	ngt.SetConfig(config)
-	return ngt
+		config:   config,
+		client:   c,
+	}, nil
 }
 
 //SetConfig sets the config of gnmi
@@ -71,12 +62,12 @@ func (g *Gnmi) SetOptions(to TransportOptions) {
 }
 
 //GetConfig returns the gnmi config
-func (g *Gnmi) GetOptions() TransportOptions {
+func (g *Gnmi) GetOptions() interface{} {
 	return g.Options
 }
 
 //CreateConfig creates a new gnmi config based on the given parameters
-func (g *Gnmi) CreateConfig(opts *GnmiTransportOptions) *gnmi.Config {
+func createConfig(opts *GnmiTransportOptions) *gnmi.Config {
 	return &gnmi.Config{
 		Addr:     opts.Addr,
 		Username: opts.Username,
diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go
index 5d77a64dd956a94b2ebcd7e92bb5598aca52428c..db95582e17e9e65dab90e56c26709d97b374629b 100644
--- a/nucleus/principalNetworkDomain_test.go
+++ b/nucleus/principalNetworkDomain_test.go
@@ -36,14 +36,8 @@ func testSetupPnd() {
 
 func mockDevice() Device {
 	return Device{
-		GoStruct: nil,
-		SBI:      &OpenConfig{},
-		Config: DeviceConfig{
-			Uuid:     mdid,
-			Address:  "mock://localhost",
-			Username: "mock",
-			Password: "mock",
-		},
+		GoStruct:  nil,
+		SBI:       &OpenConfig{},
 		Transport: &mocks.Transport{},
 	}
 }
@@ -184,9 +178,7 @@ func Test_pndImplementation_AddDevice(t *testing.T) {
 		{
 			name: "default",
 			args: args{device: &Device{
-				Config: DeviceConfig{
-					Uuid: did,
-				},
+				Uuid: did,
 			}},
 			wantErr: false,
 		},
@@ -258,15 +250,15 @@ func Test_pndImplementation_ContainsDevice(t *testing.T) {
 	}{
 		{name: "default", args: args{
 			uuid:   did,
-			device: &Device{Config: DeviceConfig{Uuid: did}},
+			device: &Device{Uuid: did},
 		}, want: true},
 		{name: "fails", args: args{
 			uuid:   uuid.New(),
-			device: &Device{Config: DeviceConfig{Uuid: did}},
+			device: &Device{Uuid: did},
 		}, want: false},
 		{name: "fails empty", args: args{
 			uuid:   uuid.New(),
-			device: &Device{Config: DeviceConfig{Uuid: did}},
+			device: &Device{Uuid: did},
 		}, want: false},
 	}
 	for _, tt := range tests {
@@ -383,14 +375,8 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
 		t.Run(tt.name, func(t *testing.T) {
 			pnd := newPnd()
 			d := &Device{
-				GoStruct: &openconfig.Device{},
-				SBI:      nil,
-				Config: DeviceConfig{
-					Uuid:     tt.args.uuid,
-					Address:  "localhost",
-					Username: "test",
-					Password: "test",
-				},
+				GoStruct:  &openconfig.Device{},
+				SBI:       nil,
 				Transport: nil,
 			}
 			if err := pnd.addDevice(d); err != nil {
@@ -428,7 +414,7 @@ func Test_pndImplementation_RemoveDevice(t *testing.T) {
 		t.Run(tt.name, func(t *testing.T) {
 			pnd := newPnd()
 			if tt.name != "fails empty" {
-				d := &Device{Config: DeviceConfig{Uuid: did}}
+				d := &Device{Uuid: did}
 				if err := pnd.addDevice(d); err != nil {
 					t.Error(err)
 				}
diff --git a/nucleus/store_test.go b/nucleus/store_test.go
index 8a393efd6b93204de7a993affc5ca1bd0b3ca42a..d8fc58121f653375e41e580941c158b01b0f6aea 100644
--- a/nucleus/store_test.go
+++ b/nucleus/store_test.go
@@ -276,9 +276,7 @@ func Test_sbiStore_get(t *testing.T) {
 			fields: fields{
 				store: store{
 					did: &Device{
-						Config: DeviceConfig{
-							Uuid: did,
-						},
+						Uuid: did,
 					},
 				},
 			},
@@ -351,9 +349,7 @@ func Test_pndStore_get(t *testing.T) {
 			fields: fields{
 				store: store{
 					did: &Device{
-						Config: DeviceConfig{
-							Uuid: did,
-						},
+						Uuid: did,
 					},
 				},
 			},
@@ -396,12 +392,10 @@ func Test_deviceStore_get(t *testing.T) {
 			name: "exists",
 			fields: fields{
 				store: store{
-					defaultPndId: &Device{Config: DeviceConfig{Uuid: did}}}},
+					defaultPndId: &Device{Uuid: did}}},
 			args: args{id: defaultPndId},
 			want: &Device{
-				Config: DeviceConfig{
-					Uuid: did,
-				},
+				Uuid: did,
 			},
 			wantErr: false,
 		},
@@ -409,7 +403,7 @@ func Test_deviceStore_get(t *testing.T) {
 			name: "fails",
 			fields: fields{
 				store: store{
-					defaultPndId: &Device{Config: DeviceConfig{Uuid: did}}}},
+					defaultPndId: &Device{Uuid: did}}},
 			args:    args{id: iid},
 			wantErr: true,
 		},
diff --git a/nucleus/transport.go b/nucleus/transport.go
index ae5d676d44bb56310d75fb48d2696b6c7a3a1929..757ba085f51dbe50f00644ca7a7672bd917f6c5e 100644
--- a/nucleus/transport.go
+++ b/nucleus/transport.go
@@ -15,7 +15,7 @@ type Transport interface {
 	Set(ctx context.Context, params ...string) (interface{}, error)
 	Subscribe(ctx context.Context, params ...string) error
 	Type() string
-	GetOptions() TransportOptions
+	GetOptions() interface{}
 	ProcessResponse(resp interface{}, root interface{}, models *ytypes.Schema) error
 }