Added JCommander#setNoThrow() and JCommander#getUnknownArgs().
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 8965f3b..f1717be 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -18,18 +18,6 @@
 
 package com.beust.jcommander;
 
-import com.beust.jcommander.FuzzyMap.IKey;
-import com.beust.jcommander.converters.IParameterSplitter;
-import com.beust.jcommander.converters.NoConverter;
-import com.beust.jcommander.converters.StringConverter;
-import com.beust.jcommander.internal.Console;
-import com.beust.jcommander.internal.DefaultConsole;
-import com.beust.jcommander.internal.DefaultConverterFactory;
-import com.beust.jcommander.internal.JDK6Console;
-import com.beust.jcommander.internal.Lists;
-import com.beust.jcommander.internal.Maps;
-import com.beust.jcommander.internal.Nullable;
-
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -50,6 +38,18 @@
 import java.util.Map;
 import java.util.ResourceBundle;
 
+import com.beust.jcommander.FuzzyMap.IKey;
+import com.beust.jcommander.converters.IParameterSplitter;
+import com.beust.jcommander.converters.NoConverter;
+import com.beust.jcommander.converters.StringConverter;
+import com.beust.jcommander.internal.Console;
+import com.beust.jcommander.internal.DefaultConsole;
+import com.beust.jcommander.internal.DefaultConverterFactory;
+import com.beust.jcommander.internal.JDK6Console;
+import com.beust.jcommander.internal.Lists;
+import com.beust.jcommander.internal.Maps;
+import com.beust.jcommander.internal.Nullable;
+
 /**
  * The main class for JCommander. It's responsible for parsing the object that contains
  * all the annotated fields, parse the command line and assign the fields with the correct
@@ -149,6 +149,9 @@
   private int m_columnSize = 79;
 
   private boolean m_helpWasSpecified;
+
+  private List<String> m_unknownArgs = Lists.newArrayList();
+  private boolean m_noThrow;
   
   private static Console m_console;
 
@@ -721,7 +724,16 @@
             }
           }
         } else {
-          throw new ParameterException("Unknown option: " + arg);
+          if (m_noThrow) {
+            m_unknownArgs.add(arg);
+            i++;
+            while (i < args.length && ! isOption(args, args[i])) {
+              m_unknownArgs.add(args[i++]);
+            }
+            increment = 0;
+          } else {
+            throw new ParameterException("Unknown option: " + arg);
+          }
         }
       }
       else {
@@ -1545,6 +1557,14 @@
     m_allowAbbreviatedOptions = b;
   }
 
+  public void setNoThrow(boolean b) {
+    m_noThrow = b;
+  }
+
+  public List<String> getUnknownArgs() {
+    return m_unknownArgs;
+  }
+
 //  public void setCaseSensitiveCommands(boolean b) {
 //    m_caseSensitiveCommands = b;
 //  }
diff --git a/src/main/java/com/beust/jcommander/internal/Lists.java b/src/main/java/com/beust/jcommander/internal/Lists.java
index c4017c0..fdbee55 100644
--- a/src/main/java/com/beust/jcommander/internal/Lists.java
+++ b/src/main/java/com/beust/jcommander/internal/Lists.java
@@ -19,6 +19,7 @@
 package com.beust.jcommander.internal;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,6 +34,10 @@
         return new ArrayList<K>(c);
     }
 
+    public static <K> List<K> newArrayList(K... c) {
+      return new ArrayList<K>(Arrays.asList(c));
+    }
+
     public static <K> List<K> newArrayList(int size) {
         return new ArrayList<K>(size);
     }
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index 22c5082..ff001e3 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -18,6 +18,28 @@
 
 package com.beust.jcommander;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.TreeSet;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
 import com.beust.jcommander.args.Args1;
 import com.beust.jcommander.args.Args1Setter;
 import com.beust.jcommander.args.Args2;
@@ -52,30 +74,8 @@
 import com.beust.jcommander.command.CommandAdd;
 import com.beust.jcommander.command.CommandCommit;
 import com.beust.jcommander.command.CommandMain;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.collections.Lists;
-import org.testng.collections.Maps;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.TreeSet;
+import com.beust.jcommander.internal.Lists;
+import com.beust.jcommander.internal.Maps;
 
 @Test
 public class JCommanderTest {
@@ -891,11 +891,26 @@
     Arg a = new Arg();
     V2.names.clear();
     V2.validateCalled = false;
-    new JCommander(a, "--host", "h");
+    JCommander jc = new JCommander(a, "--host", "h");
+    jc.setNoThrow(true);
     Assert.assertEquals(V2.names, Arrays.asList(new String[] { "-h", "--host" }));
     Assert.assertTrue(V2.validateCalled);
   }
 
+  public void partialValidation() {
+    class Arg {
+      @Parameter(names = { "-h", "--host" })
+      String host;
+    }
+    Arg a = new Arg();
+    JCommander jc = new JCommander();
+    jc.setNoThrow(true);
+    jc.addObject(a);
+    jc.parse("-a", "foo", "-h", "host");
+    Assert.assertEquals(a.host, "host");
+    Assert.assertEquals(jc.getUnknownArgs(), Lists.newArrayList("-a", "foo"));
+  }
+
   @Test(enabled = false)
   public static void main(String[] args) throws Exception {
     new JCommanderTest().parameterWithOneDoubleQuote();
diff --git a/src/test/resources/testng-single.xml b/src/test/resources/testng-single.xml
index db8497b..cc0602c 100644
--- a/src/test/resources/testng-single.xml
+++ b/src/test/resources/testng-single.xml
@@ -7,7 +7,10 @@
 <!-- 
       <class name="com.beust.jcommander.FinderTest" />
 -->
-      <class name="com.beust.jcommander.CmdTest">
+      <class name="com.beust.jcommander.JCommanderTest">
+        <methods>
+          <include name="partialValidation"></include>
+        </methods>
       </class>
     </classes>
   </test>