diff --git a/cl.go b/cl.go
index 7ad11d6..7e40f59 100644
--- a/cl.go
+++ b/cl.go
@@ -167,7 +167,7 @@
 	s := jirix.NewSeq()
 	for _, branch := range branches {
 		cleanupFn := func() error { return cleanupBranch(jirix, branch) }
-		if err := s.Call(cleanupFn, "Cleaning up branch %q", branch).Done(); err != nil {
+		if err := s.Call(cleanupFn, "Cleaning up branch: %s", branch).Done(); err != nil {
 			return err
 		}
 		if branch == originalBranch {
diff --git a/runutil/sequence.go b/runutil/sequence.go
index 01a6d3d..becb639 100644
--- a/runutil/sequence.go
+++ b/runutil/sequence.go
@@ -399,22 +399,6 @@
 	}
 }
 
-func fmtArgs(args ...interface{}) string {
-	if len(args) == 0 {
-		return ""
-	}
-	var out bytes.Buffer
-	for _, a := range args {
-		switch at := a.(type) {
-		case string:
-			fmt.Fprintf(&out, ", %q", at)
-		default:
-			fmt.Fprintf(&out, ", %v", a)
-		}
-	}
-	return out.String()
-}
-
 func fmtStringArgs(args ...string) string {
 	if len(args) == 0 {
 		return ""
@@ -487,7 +471,7 @@
 		return Sequence{s.sequence}
 	}
 	defer s.initAndDefer()()
-	s.setError(s.r.FunctionWithOpts(s.getOpts(), fn, format, args...), fmt.Sprintf("Call(%s%s)", format, fmtArgs(args)))
+	s.setError(s.r.FunctionWithOpts(s.getOpts(), fn, format, args...), fmt.Sprintf(format, args))
 	return Sequence{s.sequence}
 }
 
