diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index d137fec62..cf5980e3c 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,5 +1,38 @@
# picocli Release Notes
+# Picocli 3.3.0
+The picocli community is pleased to announce picocli 3.3.0.
+
+This release contains a bugfix for the JLine TAB completion support and error message improvements.
+
+This is the thirty-fourth public release.
+Picocli follows [semantic versioning](http://semver.org/).
+
+## Table of Contents
+* [New and noteworthy](#3.3.0-new)
+* [Promoted features](#3.3.0-promoted)
+* [Fixed issues](#3.3.0-fixes)
+* [Deprecations](#3.3.0-deprecated)
+* [Potential breaking changes](#3.3.0-breaking-changes)
+
+## New and Noteworthy
+###
+
+## Promoted Features
+Promoted features are features that were incubating in previous versions of picocli but are now supported and subject to backwards compatibility.
+
+No features have been promoted in this picocli release.
+
+## Fixed issues
+- [#411] Bugfix: Completion candidates were only generated for the first option, not for subsequent options.
+
+## Deprecations
+No features were deprecated in this release.
+
+## Potential breaking changes
+This release has no breaking changes.
+
+
# Picocli 3.2.0
The picocli community is pleased to announce picocli 3.2.0.
diff --git a/src/main/java/picocli/AutoComplete.java b/src/main/java/picocli/AutoComplete.java
index c82de72f2..0cb7e6834 100644
--- a/src/main/java/picocli/AutoComplete.java
+++ b/src/main/java/picocli/AutoComplete.java
@@ -579,12 +579,8 @@ public static int complete(CommandSpec spec, String[] args, int argIndex, int po
CommandLine parser = new CommandLine(spec);
ParseResult parseResult = parser.parseArgs(args);
if (argIndex >= parseResult.tentativeMatch.size()) {
- int count = parseResult.tentativeMatch.size();
- if (count == 0) {
- addCandidatesForArgsFollowing(spec, candidates);
- } else {
- addCandidatesForArgsFollowing(parseResult.tentativeMatch.get(count - 1), candidates);
- }
+ Object startPoint = findCompletionStartPoint(parseResult);
+ addCandidatesForArgsFollowing(startPoint, candidates);
} else {
Object obj = parseResult.tentativeMatch.get(argIndex);
if (obj instanceof CommandSpec) { // subcommand
@@ -615,7 +611,28 @@ public static int complete(CommandSpec spec, String[] args, int argIndex, int po
spec.parser().collectErrors(reset);
}
}
+ private static Object findCompletionStartPoint(ParseResult parseResult) {
+ List