diff --git a/nucleus/device.go b/nucleus/device.go
index a5f356dcd26539d61741eb7c2e57246328dc12fb..80034d540f187469b60347967f10de3fead546d4 100644
--- a/nucleus/device.go
+++ b/nucleus/device.go
@@ -15,48 +15,15 @@ import (
 )
 
 // NewDevice creates a Device
-func NewDevice(name string, opt *tpb.TransportOption, sbi southbound.SouthboundInterface) (device.Device, error) {
+func NewDevice(name string, uuidInput uuid.UUID, opt *tpb.TransportOption, sbi southbound.SouthboundInterface) (device.Device, error) {
 	t, err := NewTransport(opt, sbi)
 	if err != nil {
 		return nil, err
 	}
 
-	if name == "" {
-		name = namesgenerator.GetRandomName(0)
-	}
-
-	root, err := ygot.DeepCopy(sbi.Schema().Root)
-	if err != nil {
-		return nil, err
-	}
-	if opt.Type == spb.Type_CONTAINERISED {
-		return &CsbiDevice{
-			CommonDevice: CommonDevice{
-				UUID:             uuid.New(),
-				GoStruct:         root,
-				sbi:              sbi,
-				transport:        t,
-				name:             name,
-				transportOptions: opt,
-			},
-		}, nil
-	}
-
-	return &CommonDevice{
-		UUID:             uuid.New(),
-		GoStruct:         root,
-		sbi:              sbi,
-		transport:        t,
-		name:             name,
-		transportOptions: opt,
-	}, nil
-}
-
-// NewDeviceWithUUID creates a Device with a provided UUID
-func NewDeviceWithUUID(name string, uuid uuid.UUID, opt *tpb.TransportOption, sbi southbound.SouthboundInterface) (device.Device, error) {
-	t, err := NewTransport(opt, sbi)
-	if err != nil {
-		return nil, err
+	// TODO: this needs to check the case that the uuidInput is set, as the same uuid may be already stored.
+	if uuidInput == uuid.Nil {
+		uuidInput = uuid.New()
 	}
 
 	if name == "" {
@@ -70,7 +37,7 @@ func NewDeviceWithUUID(name string, uuid uuid.UUID, opt *tpb.TransportOption, sb
 	if opt.Type == spb.Type_CONTAINERISED {
 		return &CsbiDevice{
 			CommonDevice: CommonDevice{
-				UUID:             uuid,
+				UUID:             uuidInput,
 				GoStruct:         root,
 				sbi:              sbi,
 				transport:        t,
@@ -81,7 +48,7 @@ func NewDeviceWithUUID(name string, uuid uuid.UUID, opt *tpb.TransportOption, sb
 	}
 
 	return &CommonDevice{
-		UUID:             uuid,
+		UUID:             uuidInput,
 		GoStruct:         root,
 		sbi:              sbi,
 		transport:        t,
diff --git a/nucleus/device_test.go b/nucleus/device_test.go
index 30364ce4050f421656eec577c762d9972413dc5e..7b6a5e84388b8474ca2a3ad119d48679c1c72306 100644
--- a/nucleus/device_test.go
+++ b/nucleus/device_test.go
@@ -99,7 +99,7 @@ func TestNewDevice(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			resp, err := NewDevice(tt.args.name, tt.args.opts, tt.args.sbi)
+			resp, err := NewDevice(tt.args.name, uuid.Nil, tt.args.opts, tt.args.sbi)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("NewDevice() error = %v, wantErr %v", err, tt.wantErr)
 				return
diff --git a/nucleus/principalNetworkDomain.go b/nucleus/principalNetworkDomain.go
index 3c5dc0e486541a47743e7406bd4cd31797a0c402..b5dd33d7afc4d691cf6bde7f47a1b59895538a8a 100644
--- a/nucleus/principalNetworkDomain.go
+++ b/nucleus/principalNetworkDomain.go
@@ -173,7 +173,7 @@ func (pnd *pndImplementation) AddDevice(name string, opt *tpb.TransportOption, s
 		}
 	}
 
-	d, err := NewDevice(name, opt, sbi)
+	d, err := NewDevice(name, uuid.Nil, opt, sbi)
 	if err != nil {
 		return err
 	}
@@ -191,7 +191,7 @@ func (pnd *pndImplementation) AddDeviceFromStore(name string, deviceUUID uuid.UU
 		return err
 	}
 
-	d, err := NewDeviceWithUUID(name, deviceUUID, opt, sbi)
+	d, err := NewDevice(name, deviceUUID, opt, sbi)
 	if err != nil {
 		return err
 	}
@@ -444,7 +444,7 @@ func (pnd *pndImplementation) createCsbiDevice(ctx context.Context, name string,
 				TransportOption: opt.TransportOption,
 			}
 			log.WithField("transport option", csbiTransportOptions).Debug("gosdn gnmi transport options")
-			d, err := NewDevice(name, csbiTransportOptions, csbi)
+			d, err := NewDevice(name, uuid.Nil, csbiTransportOptions, csbi)
 			if err != nil {
 				panic(err)
 			}
diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go
index bf2cd336e28f883c163272ef31fd9e11ba0ab605..93c91f400a794f74700b33bcba8238c9ba098f32 100644
--- a/nucleus/principalNetworkDomain_test.go
+++ b/nucleus/principalNetworkDomain_test.go
@@ -676,7 +676,7 @@ func Test_pndImplementation_ChangeOND(t *testing.T) {
 func Test_pndImplementation_GetDevice(t *testing.T) {
 	pnd := newPnd()
 	sbi := NewSBI(spb.Type_OPENCONFIG)
-	d, err := NewDevice("", newGnmiTransportOptions(), sbi)
+	d, err := NewDevice("", uuid.Nil, newGnmiTransportOptions(), sbi)
 	if err != nil {
 		t.Error(err)
 		return
@@ -726,7 +726,7 @@ func Test_pndImplementation_GetDevice(t *testing.T) {
 func Test_pndImplementation_GetDeviceByName(t *testing.T) {
 	p := newPnd()
 	sbi := NewSBI(spb.Type_OPENCONFIG)
-	d, err := NewDevice("my-device", newGnmiTransportOptions(), sbi)
+	d, err := NewDevice("my-device", uuid.Nil, newGnmiTransportOptions(), sbi)
 	if err != nil {
 		t.Error(err)
 		return