diff --git a/cmd/ipfs2/main.go b/cmd/ipfs2/main.go
index 2ccef1645acba2cf717381f93186f1ab01f5e564..0ef3ac69a51790f74b0ca2c876dfa8cdab766115 100644
--- a/cmd/ipfs2/main.go
+++ b/cmd/ipfs2/main.go
@@ -160,7 +160,7 @@ func (i *cmdInvocation) Run() (output io.Reader, err error) {
 func (i *cmdInvocation) Parse(args []string) error {
 	var err error
 
-	i.req, i.root, i.cmd, i.path, err = cmdsCli.Parse(args, Root)
+	i.req, i.cmd, i.path, err = cmdsCli.Parse(args, Root)
 	if err != nil {
 		return err
 	}
diff --git a/commands/cli/parse.go b/commands/cli/parse.go
index 8e1dba86f67e2a74a55321d27800fb27ca27b9bb..3beb0e600bcd5c67e93cafad93dc233e11e55e64 100644
--- a/commands/cli/parse.go
+++ b/commands/cli/parse.go
@@ -15,38 +15,36 @@ var ErrInvalidSubcmd = errors.New("subcommand not found")
 // Parse parses the input commandline string (cmd, flags, and args).
 // returns the corresponding command Request object.
 // Parse will search each root to find the one that best matches the requested subcommand.
-// TODO: get rid of extraneous return values (e.g. we ended up not needing the root value anymore)
-// TODO: get rid of multiple-root support, we should only need one now
-func Parse(input []string, root *cmds.Command) (cmds.Request, *cmds.Command, *cmds.Command, []string, error) {
+func Parse(input []string, root *cmds.Command) (cmds.Request, *cmds.Command, []string, error) {
 	// use the root that matches the longest path (most accurately matches request)
 	path, input, cmd := parsePath(input, root)
 	opts, stringArgs, err := parseOptions(input)
 	if err != nil {
-		return nil, root, cmd, path, err
+		return nil, cmd, path, err
 	}
 
 	if len(path) == 0 {
-		return nil, root, nil, path, ErrInvalidSubcmd
+		return nil, nil, path, ErrInvalidSubcmd
 	}
 
 	args, err := parseArgs(stringArgs, cmd)
 	if err != nil {
-		return nil, root, cmd, path, err
+		return nil, cmd, path, err
 	}
 
 	optDefs, err := root.GetOptions(path)
 	if err != nil {
-		return nil, root, cmd, path, err
+		return nil, cmd, path, err
 	}
 
 	req := cmds.NewRequest(path, opts, args, cmd, optDefs)
 
 	err = cmd.CheckArguments(req)
 	if err != nil {
-		return req, root, cmd, path, err
+		return req, cmd, path, err
 	}
 
-	return req, root, cmd, path, nil
+	return req, cmd, path, nil
 }
 
 // parsePath separates the command path and the opts and args from a command string