diff --git a/completion.go b/completion.go
index 2f730d9..fea0e3a 100644
--- a/completion.go
+++ b/completion.go
@@ -141,6 +141,16 @@
 	return ret
 }
 
+func (c *completion) completeArg(arg *Arg, prefix string, match string) []Completion {
+	if arg.isRemaining() {
+		// For remaining positional args (that are parsed into a slice), complete
+		// based on the element type.
+		return c.completeValue(reflect.New(arg.value.Type().Elem()), prefix, match)
+	}
+
+	return c.completeValue(arg.value, prefix, match)
+}
+
 func (c *completion) complete(args []string) []Completion {
 	if len(args) == 0 {
 		args = []string{""}
@@ -205,7 +215,11 @@
 			}
 		} else {
 			if len(s.positional) > 0 {
-				s.positional = s.positional[1:]
+				if !s.positional[0].isRemaining() {
+					// Don't advance beyond a remaining positional arg (because
+					// it consumes all subsequent args).
+					s.positional = s.positional[1:]
+				}
 			} else if cmd, ok := s.lookup.commands[arg]; ok {
 				cmd.fillParseState(s)
 			}
@@ -251,7 +265,7 @@
 		}
 	} else if len(s.positional) > 0 {
 		// Complete for positional argument
-		ret = c.completeValue(s.positional[0].value, "", lastarg)
+		ret = c.completeArg(s.positional[0], "", lastarg)
 	} else if len(s.command.commands) > 0 {
 		// Complete for command
 		ret = c.completeCommands(s, lastarg)
diff --git a/completion_test.go b/completion_test.go
index f51949e..908e421 100644
--- a/completion_test.go
+++ b/completion_test.go
@@ -43,6 +43,12 @@
 		} `positional-args:"yes"`
 	} `command:"add"`
 
+	AddMultiCommand struct {
+		Positional struct {
+			Filename []Filename
+		} `positional-args:"yes"`
+	} `command:"add-multi"`
+
 	RemoveCommand struct {
 		Other bool     `short:"o"`
 		File  Filename `short:"f" long:"filename"`
@@ -90,7 +96,7 @@
 		{
 			// Commands
 			[]string{""},
-			[]string{"add", "rename", "rm"},
+			[]string{"add", "add-multi", "rename", "rm"},
 		},
 
 		{
@@ -106,6 +112,22 @@
 		},
 
 		{
+			// Multiple positional filename (1 arg)
+			[]string{"add-multi", filepath.Join(sourcedir, "completion")},
+			excompl,
+		},
+		{
+			// Multiple positional filename (2 args)
+			[]string{"add-multi", filepath.Join(sourcedir, "completion.go"), filepath.Join(sourcedir, "completion")},
+			excompl,
+		},
+		{
+			// Multiple positional filename (3 args)
+			[]string{"add-multi", filepath.Join(sourcedir, "completion.go"), filepath.Join(sourcedir, "completion.go"), filepath.Join(sourcedir, "completion")},
+			excompl,
+		},
+
+		{
 			// Flag filename
 			[]string{"rm", "-f", path.Join(sourcedir, "completion")},
 			excompl,
diff --git a/flags.go b/flags.go
index 85f124d..923379b 100644
--- a/flags.go
+++ b/flags.go
@@ -231,6 +231,7 @@
 Customized completion for argument values is supported by implementing
 the flags.Completer interface for the argument value type. An example
 of a type which does so is the flags.Filename type, an alias of string
-allowing simple filename completion.
+allowing simple filename completion. A slice or array argument value
+whose element type implements flags.Completer will also be completed.
 */
 package flags
