diff --git a/nucleus/principalNetworkDomain.go b/nucleus/principalNetworkDomain.go
index 409c51fee5330e118c241158aec1d81b651573f4..2060689f9ebd858e4b0abea8ec37100e050a2d73 100644
--- a/nucleus/principalNetworkDomain.go
+++ b/nucleus/principalNetworkDomain.go
@@ -3,41 +3,34 @@ package nucleus
 import (
 	"context"
 	"encoding/json"
-	"fmt"
 	"io"
 	"os"
 	"plugin"
-	"strconv"
 	"time"
 
+	"code.fbi.h-da.de/danet/gosdn/interfaces/change"
+	"code.fbi.h-da.de/danet/gosdn/interfaces/device"
+	"code.fbi.h-da.de/danet/gosdn/interfaces/networkdomain"
+	"code.fbi.h-da.de/danet/gosdn/interfaces/southbound"
 	"code.fbi.h-da.de/danet/gosdn/metrics"
+	"code.fbi.h-da.de/danet/gosdn/nucleus/errors"
 	"code.fbi.h-da.de/danet/gosdn/nucleus/types"
+	"code.fbi.h-da.de/danet/gosdn/nucleus/util"
+	"code.fbi.h-da.de/danet/gosdn/store"
 	"code.fbi.h-da.de/danet/yang-models/generated/openconfig"
 
 	cpb "code.fbi.h-da.de/danet/api/go/gosdn/csbi"
 	ppb "code.fbi.h-da.de/danet/api/go/gosdn/pnd"
 	spb "code.fbi.h-da.de/danet/api/go/gosdn/southbound"
 	tpb "code.fbi.h-da.de/danet/api/go/gosdn/transport"
-	"google.golang.org/protobuf/proto"
-
-	"code.fbi.h-da.de/danet/gosdn/interfaces/change"
-	"code.fbi.h-da.de/danet/gosdn/interfaces/device"
-	"code.fbi.h-da.de/danet/gosdn/interfaces/networkdomain"
-	"code.fbi.h-da.de/danet/gosdn/interfaces/southbound"
 	si "code.fbi.h-da.de/danet/gosdn/interfaces/store"
-	"code.fbi.h-da.de/danet/gosdn/nucleus/errors"
-
-	"code.fbi.h-da.de/danet/gosdn/store"
-
-	gpb "github.com/openconfig/gnmi/proto/gnmi"
-	gnmiv "github.com/openconfig/gnmi/value"
-	"github.com/openconfig/goyang/pkg/yang"
 
 	"github.com/google/uuid"
 	"github.com/openconfig/ygot/ygot"
 	"github.com/openconfig/ygot/ytypes"
 	"github.com/prometheus/client_golang/prometheus"
 	log "github.com/sirupsen/logrus"
+	"google.golang.org/protobuf/proto"
 )
 
 // NewPND creates a Principle Network Domain
@@ -364,7 +357,10 @@ func (pnd *pndImplementation) ChangeOND(duid uuid.UUID, operation ppb.ApiOperati
 				return uuid.Nil, err
 			}
 		} else if entry.IsLeaf() {
-			typedValue, _ := convertStringToTypedValue(value[0], entry.Type)
+			typedValue, err := util.ConvertStringToTypedValue(value[0], entry.Type)
+			if err != nil {
+				return uuid.Nil, err
+			}
 			if err := ytypes.SetNode(d.SBI().Schema().RootSchema(), cpy, p, typedValue); err != nil {
 				return uuid.Nil, err
 			}
@@ -389,90 +385,6 @@ func (pnd *pndImplementation) ChangeOND(duid uuid.UUID, operation ppb.ApiOperati
 	return ch.cuid, nil
 }
 
-func convertStringToTypedValue(s string, t *yang.YangType) (*gpb.TypedValue, error) {
-	// TODO: add more types
-	switch t.Kind {
-	case yang.Yint8:
-		parsedInt, err := strconv.ParseInt(s, 10, 8)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(int8(parsedInt))
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Yint16:
-		parsedInt, err := strconv.ParseInt(s, 10, 16)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(int16(parsedInt))
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Yint32:
-		parsedInt, err := strconv.ParseInt(s, 10, 32)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(int32(parsedInt))
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Yuint8:
-		parsedInt, err := strconv.ParseUint(s, 10, 8)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(uint8(parsedInt))
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Yuint16:
-		parsedInt, err := strconv.ParseUint(s, 10, 16)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(uint16(parsedInt))
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Yuint32:
-		parsedInt, err := strconv.ParseUint(s, 10, 32)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(uint32(parsedInt))
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Ybool:
-		parsedBool, err := strconv.ParseBool(s)
-		if err != nil {
-			return nil, err
-		}
-		tv, err := gnmiv.FromScalar(parsedBool)
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	case yang.Ystring:
-		tv, err := gnmiv.FromScalar(s)
-		if err != nil {
-			return nil, err
-		}
-		return tv, nil
-	default:
-		return nil, fmt.Errorf("unsupported type to convert to TypedValue")
-	}
-}
-
 // nolint will be implemented in the near future
 func handleRollbackError(id uuid.UUID, err error) {
 	log.Error(err)
diff --git a/nucleus/util/convert.go b/nucleus/util/convert.go
new file mode 100644
index 0000000000000000000000000000000000000000..1c98020ed65dd3d16603e4b788668f5ab11982fd
--- /dev/null
+++ b/nucleus/util/convert.go
@@ -0,0 +1,96 @@
+package util
+
+import (
+	"fmt"
+	gpb "github.com/openconfig/gnmi/proto/gnmi"
+	gnmiv "github.com/openconfig/gnmi/value"
+	"github.com/openconfig/goyang/pkg/yang"
+	"strconv"
+)
+
+// ConvertStringToTypedValue takes a value as string and a YangType. The
+// returned value is the converted TypedValue of the given string based on the
+// given YangType.
+func ConvertStringToTypedValue(s string, t *yang.YangType) (*gpb.TypedValue, error) {
+	// TODO: add more types
+	switch t.Kind {
+	case yang.Yint8:
+		parsedInt, err := strconv.ParseInt(s, 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(int8(parsedInt))
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Yint16:
+		parsedInt, err := strconv.ParseInt(s, 10, 16)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(int16(parsedInt))
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Yint32:
+		parsedInt, err := strconv.ParseInt(s, 10, 32)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(int32(parsedInt))
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Yuint8:
+		parsedInt, err := strconv.ParseUint(s, 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(uint8(parsedInt))
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Yuint16:
+		parsedInt, err := strconv.ParseUint(s, 10, 16)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(uint16(parsedInt))
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Yuint32:
+		parsedInt, err := strconv.ParseUint(s, 10, 32)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(uint32(parsedInt))
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Ybool:
+		parsedBool, err := strconv.ParseBool(s)
+		if err != nil {
+			return nil, err
+		}
+		tv, err := gnmiv.FromScalar(parsedBool)
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	case yang.Ystring:
+		tv, err := gnmiv.FromScalar(s)
+		if err != nil {
+			return nil, err
+		}
+		return tv, nil
+	default:
+		return nil, fmt.Errorf("unsupported type to convert to TypedValue")
+	}
+}