diff --git a/cli/cmd/prompt.go b/cli/cmd/prompt.go
index 27d6ba966a1ef06a0e32986c228bfdf1a8439c4d..0047f9087bcb46cbdc51bbe8a6abddb94e36b107 100644
--- a/cli/cmd/prompt.go
+++ b/cli/cmd/prompt.go
@@ -47,7 +47,7 @@ import (
 
 // PromptCompleter provides completion for a device
 type PromptCompleter struct {
-	//NOTE: not too sure about this but for now it should be sufficient
+	//NOTE: should be removed
 	deviceID               uuid.UUID
 	yangSchemaCompleterMap map[uuid.UUID]*completer.YangSchemaCompleter
 }
@@ -113,7 +113,7 @@ func (pc *PromptCompleter) cstmCompleter(d prompt.Document) []prompt.Suggest {
 		currCmd = c
 	}
 
-	return completionBasedOnCmd(pc, currCmd, inputSplit, inputFlags, d)
+	return completionBasedOnCmd(pc, currCmd, inputSplitFiltered, inputFlags, d)
 }
 
 func filterFlagSlice(input []string) (commandSlice []string, flagSlice []string) {
@@ -128,51 +128,54 @@ func filterFlagSlice(input []string) (commandSlice []string, flagSlice []string)
 }
 
 func deviceGetCompletion(c *PromptCompleter, d prompt.Document, inputSplit []string) []prompt.Suggest {
-	inputLen := len(inputSplit)
-	if inputLen == 2 || inputLen == 3 {
-		if id, err := uuid.Parse(inputSplit[inputLen-1]); err == nil {
-			if c, ok := c.yangSchemaCompleterMap[id]; ok {
-				return c.Complete(d)
-			}
-			dev, err := pndAdapter.GetDevice(id.String())
-			if err != nil {
-				return []prompt.Suggest{}
-			}
-			sid, err := uuid.Parse(dev[0].GetSbi().GetId())
-			if err != nil {
-				return []prompt.Suggest{}
-			}
-			schemaTree, err := pndAdapter.GetSbiSchemaTree(sid)
-			if err != nil {
-				return []prompt.Suggest{}
-			}
-			c.yangSchemaCompleterMap[id] = completer.NewYangSchemaCompleter(schemaTree["Device"], true)
-			if yc, ok := c.yangSchemaCompleterMap[id]; ok {
-				c.deviceID = id
-				return yc.Complete(d)
-			}
-
+	switch inputLen := len(inputSplit); inputLen {
+	case 2:
+		return devicePrompt(d)
+	case 3:
+		id, err := uuid.Parse(inputSplit[inputLen-1])
+		if err != nil {
+			return devicePrompt(d)
+		}
+		if c, ok := c.yangSchemaCompleterMap[id]; ok {
+			return c.Complete(d)
+		}
+		schemaTree, err := getSchemaTreeForDeviceID(id.String())
+		if err != nil {
+			return []prompt.Suggest{}
+		}
+		c.yangSchemaCompleterMap[id] = completer.NewYangSchemaCompleter(schemaTree["Device"], true)
+		if yc, ok := c.yangSchemaCompleterMap[id]; ok {
+			c.deviceID = id
+			return yc.Complete(d)
+		}
+	case 4:
+		if d.GetWordBeforeCursor() == "" || d.GetWordAfterCursor() != "" {
 			return []prompt.Suggest{}
 		}
-		if inputLen == 2 || (inputLen == 3 && !(d.GetWordBeforeCursor() == "")) {
-			spinner, _ := pterm.DefaultSpinner.Start("Requesting devices from controller.")
-			devices, err := getDevices()
-			if err != nil {
-				spinner.Fail(err)
-				return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
-			}
-			spinner.Success()
-			return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
+		_, err := uuid.Parse(inputSplit[inputLen-2])
+		if err != nil {
+			return devicePrompt(d)
 		}
-	} else {
 		if yc, ok := c.yangSchemaCompleterMap[c.deviceID]; ok {
 			return yc.Complete(d)
 		}
+	default:
 		return []prompt.Suggest{}
 	}
 	return []prompt.Suggest{}
 }
 
+func devicePrompt(d prompt.Document) []prompt.Suggest {
+	spinner, _ := pterm.DefaultSpinner.Start("Requesting devices from controller.")
+	devices, err := getDevices()
+	if err != nil {
+		spinner.Fail(err)
+		return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
+	}
+	spinner.Success()
+	return prompt.FilterHasPrefix(devices, d.GetWordBeforeCursor(), true)
+}
+
 func cobraCommandCompletion(currCmd *cobra.Command, d prompt.Document, inputFlags []string, loaded []prompt.Suggest) []prompt.Suggest {
 	if currCmd.HasAvailableFlags() {
 		currCmd.LocalFlags().VisitAll(
diff --git a/cli/cmd/utils.go b/cli/cmd/utils.go
index 0b341581550116ea47eb4287fcbca43ba5f337c1..8c2813a140caa397c2828998cea25cc4f377072b 100644
--- a/cli/cmd/utils.go
+++ b/cli/cmd/utils.go
@@ -39,6 +39,8 @@ import (
 	"code.fbi.h-da.de/danet/gosdn/cli/completer"
 	"code.fbi.h-da.de/danet/gosdn/controller/api"
 	"github.com/c-bata/go-prompt"
+	"github.com/google/uuid"
+	"github.com/openconfig/goyang/pkg/yang"
 	"github.com/spf13/viper"
 )
 
@@ -69,6 +71,18 @@ func getDevices() ([]prompt.Suggest, error) {
 	return completer.SortSuggestionByText(s), nil
 }
 
+func getSchemaTreeForDeviceID(id string) (map[string]*yang.Entry, error) {
+	dev, err := pndAdapter.GetDevice(id)
+	if err != nil {
+		return nil, err
+	}
+	sid, err := uuid.Parse(dev[0].GetSbi().GetId())
+	if err != nil {
+		return nil, err
+	}
+	return pndAdapter.GetSbiSchemaTree(sid)
+}
+
 func getPnds() []prompt.Suggest {
 	resp, err := api.GetIds(viper.GetString("controllerAPIEndpoint"))
 	if err != nil {