diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go
index 473a2fe417364ea7d195aa9999298e60878fe24a..89407828b56b8574ae605da29d5a46d6e2994be0 100644
--- a/controller/northbound/server/networkElement.go
+++ b/controller/northbound/server/networkElement.go
@@ -723,49 +723,67 @@ func (n *NetworkElementServer) addMne(ctx context.Context, name string, opt *tpb
 
 	mne, err := nucleus.NewNetworkElement(name, networkElementID, opt, pndID, plugin, conflict.Metadata{ResourceVersion: 0})
 	if err != nil {
-		plugin.Remove()
+		if pluginRmErr := plugin.Remove(); err != nil {
+			return uuid.Nil, pluginRmErr
+		}
 		return uuid.Nil, err
 	}
 
 	if mne.IsTransportValid() {
-		resp, err := n.getPath(ctx, mne, "/")
-		if err != nil {
-			plugin.Remove()
-			return uuid.Nil, err
-		}
-
-		err = mne.ProcessResponse(resp)
+		err := n.initialNetworkElementRootPathRequest(ctx, mne, plugin)
 		if err != nil {
-			plugin.Remove()
 			return uuid.Nil, err
 		}
 
 		err = n.mneService.Add(mne)
 		if err != nil {
-			plugin.Remove()
+			if pluginRmErr := plugin.Remove(); err != nil {
+				return uuid.Nil, pluginRmErr
+			}
 			return uuid.Nil, err
 		}
 
 		err = n.pluginService.Add(plugin)
 		if err != nil {
-			if err := plugin.Remove(); err != nil {
-				return uuid.Nil, status.Errorf(codes.Internal, "failed to clean up plugin: ", err)
+			if pluginRmErr := plugin.Remove(); err != nil {
+				return uuid.Nil, pluginRmErr
 			}
 			if err := n.mneService.Delete(mne); err != nil {
-				return uuid.Nil, status.Errorf(codes.Internal, "failed to clean up device: ", err)
+				return uuid.Nil, err
 			}
 			return uuid.Nil, err
 		}
 
 		n.networkElementWatchter.SubscribeToNetworkElement(mne, config.GetGnmiSubscriptionPaths(), nil)
 	} else {
-		plugin.Remove()
-		return uuid.Nil, status.Errorf(codes.InvalidArgument, "invalid transport data provided")
+		if pluginRmErr := plugin.Remove(); err != nil {
+			return uuid.Nil, pluginRmErr
+		}
+		return uuid.Nil, fmt.Errorf("invalid transport data provided")
 	}
 
 	return mne.ID(), nil
 }
 
+func (n *NetworkElementServer) initialNetworkElementRootPathRequest(ctx context.Context, mne networkelement.NetworkElement, plugin plugin.Plugin) error {
+	resp, err := n.getPath(ctx, mne, "/")
+	if err != nil {
+		if pluginRmErr := plugin.Remove(); err != nil {
+			return pluginRmErr
+		}
+		return err
+	}
+
+	err = mne.ProcessResponse(resp)
+	if err != nil {
+		if pluginRmErr := plugin.Remove(); err != nil {
+			return pluginRmErr
+		}
+		return err
+	}
+	return nil
+}
+
 // SetChangeList sets a list of changes.
 func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) {
 	labels := prometheus.Labels{"service": "mne", "rpc": "set"}