diff --git a/cli/cmd/deviceRemove.go b/cli/cmd/deviceRemove.go
index 6cbdf8125fb4750ce1d2c3b6f893ed539e86604c..af1346fbade09be3b97a48b6ea410f5646c62fd6 100644
--- a/cli/cmd/deviceRemove.go
+++ b/cli/cmd/deviceRemove.go
@@ -59,7 +59,7 @@ The device UUID must be specified as a positional argument.`,
 			spinner.Fail(err)
 			return err
 		}
-		spinner.Success("PND has been deleted, ID: ", did.String())
+		spinner.Success("Device has been deleted, ID: ", did.String())
 		return nil
 	},
 }
diff --git a/controller/nucleus/deviceService.go b/controller/nucleus/deviceService.go
index 30caff6dccec364d4f58b7fc98de7689f3c392cd..c565274e85199fa1e0a383b395d7c7bd8f75cce4 100644
--- a/controller/nucleus/deviceService.go
+++ b/controller/nucleus/deviceService.go
@@ -90,7 +90,12 @@ func (s *DeviceService) Delete(deviceToDelete device.Device) error {
 	if err != nil {
 		return err
 	}
-
+	if deviceToDelete.SBI().Type() == spb.Type_TYPE_PLUGIN {
+		err = s.sbiService.Delete(deviceToDelete.SBI())
+		if err != nil {
+			return err
+		}
+	}
 	return nil
 }
 
diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go
index 4aca330603922b7f8eb2bc0deea1e167269f4cdc..3c75a1ae1fdbab46977dc636f72e2e30b8d608ef 100644
--- a/controller/nucleus/principalNetworkDomain.go
+++ b/controller/nucleus/principalNetworkDomain.go
@@ -342,7 +342,7 @@ func (pnd *pndImplementation) removeDevice(id uuid.UUID) error {
 	defer metrics.FinishHook(labels, start, deviceDeletionDurationSecondsTotal, deviceDeletionDurationSeconds)
 	switch d.(type) {
 	case *CsbiDevice:
-		return pnd.handleCsbiDeletion(id)
+		return pnd.handleCsbiDeletion(d)
 	default:
 		return pnd.deviceService.Delete(d)
 	}
@@ -507,20 +507,24 @@ func handleRollbackError(id uuid.UUID, err error) {
 	// TODO: Notion of invalid state needed.
 }
 
-func (pnd *pndImplementation) handleCsbiDeletion(id uuid.UUID) error {
-	log.Infof("csbi deletion triggered for %v", id)
+func (pnd *pndImplementation) handleCsbiDeletion(d device.Device) error {
+	log.Infof("csbi deletion triggered for %v", d.ID().String())
 	ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
 	defer cancel()
 	req := &cpb.DeleteRequest{
 		Timestamp: time.Now().UnixNano(),
-		Did:       []string{id.String()},
+		Did:       []string{d.ID().String()},
 	}
 	resp, err := pnd.csbiClient.Delete(ctx, req)
 	if err != nil {
 		return err
 	}
+	err = pnd.southboundService.Delete(d.SBI())
+	if err != nil {
+		return err
+	}
 	log.WithFields(log.Fields{
-		"uuid":   id,
+		"uuid":   d.ID().String(),
 		"status": resp.Status,
 	}).Info("csbi deleted")
 	return nil
diff --git a/controller/nucleus/sbiService.go b/controller/nucleus/sbiService.go
index a92a3be32b159ee32173bbf295adab6ad7a6e61f..f00247f790a23add96cc00b0abc34008fe184326 100644
--- a/controller/nucleus/sbiService.go
+++ b/controller/nucleus/sbiService.go
@@ -1,6 +1,8 @@
 package nucleus
 
 import (
+	"os"
+
 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
 	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
@@ -71,6 +73,13 @@ func (s *SbiService) Delete(sbiToDelete southbound.SouthboundInterface) error {
 		return err
 	}
 
+	sbiPlugin, ok := sbiToDelete.(*SouthboundPlugin)
+	if ok {
+		if err := os.RemoveAll(sbiPlugin.Path()); err != nil {
+			return err
+		}
+	}
+
 	return nil
 }