If a setter throws ParameterException, don't wrap it into another ParameterException.
diff --git a/src/main/java/com/beust/jcommander/Parameterized.java b/src/main/java/com/beust/jcommander/Parameterized.java
index ec698fa..302d2b6 100644
--- a/src/main/java/com/beust/jcommander/Parameterized.java
+++ b/src/main/java/com/beust/jcommander/Parameterized.java
@@ -178,7 +178,12 @@
     } catch (IllegalAccessException ex) {
       throw new ParameterException(ex);
     } catch (InvocationTargetException ex) {
-      throw new ParameterException(ex);
+      // If a ParameterException was thrown, don't wrap it into another one
+      if (ex.getTargetException() instanceof ParameterException) {
+        throw (ParameterException) ex.getTargetException();
+      } else {
+        throw new ParameterException(ex);
+      }
     }
   }
 
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index 9dba74d..8b1e761 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -837,9 +837,26 @@
     Assert.assertTrue(arg.help);
   }
 
+  public void setterThatThrows() {
+    class Arg {
+      @Parameter(names = "--host")
+      public void setHost(String host) {
+        throw new ParameterException("Illegal host");
+      }
+    }
+    boolean passed = false;
+    try {
+      new JCommander(new Arg(), new String[] { "--host", "host" });
+    } catch(ParameterException ex) {
+      Assert.assertEquals(ex.getCause(), null);
+      passed = true;
+    }
+    Assert.assertTrue(passed, "Should have thrown an exception");
+  }
+
   @Test(enabled = false)
   public static void main(String[] args) throws Exception {
-    new JCommanderTest().verifyHelp();
+    new JCommanderTest().setterThatThrows();
 //    class A {
 //      @Parameter(names = "-short", required = true)
 //      List<String> parameters;