diff --git src/main/java/org/apache/commons/cli/DefaultParser.java src/main/java/org/apache/commons/cli/DefaultParser.java
index d762a3e..ebc324f 100644
--- src/main/java/org/apache/commons/cli/DefaultParser.java
+++ src/main/java/org/apache/commons/cli/DefaultParser.java
@@ -54,7 +54,44 @@ public class DefaultParser implements CommandLineParser
  
     /** The required options and groups expected to be found when parsing the command line. */
     protected List expectedOpts;
- 
+
+    public DefaultParser() {
+        this.stripLeadingAndTrailingQuotes = true;
+    }
+
+    /** Flag indicating if balanced leading and trailing double quotes should be stripped from option arguments. */
+    private final  boolean stripLeadingAndTrailingQuotes;
+
+    /**
+     * Create a new DefaultParser instance with the specified partial matching and quote
+     * stripping policy.
+     *
+     * By "partial matching" we mean that given the following code:
+     * <pre>
+     *     {@code
+     *          final Options options = new Options();
+     *      options.addOption(new Option("d", "debug", false, "Turn on debug."));
+     *      options.addOption(new Option("e", "extract", false, "Turn on extract."));
+     *      options.addOption(new Option("o", "option", true, "Turn on option with argument."));
+     *      }
+     * </pre>
+     * with "partial matching" turned on, <code>-de</code> only matches the
+     * <code>"debug"</code> option. However, with "partial matching" disabled,
+     * <code>-de</code> would enable both <code>debug</code> as well as
+     * <code>extract</code> options.
+     * with "stripping of balanced leading and trailing double quotes from option arguments" turned
+     * on, the outermost balanced double quotes of option arguments values will be removed.
+     * ie.
+     * for <code>-o '"x"'</code> getValue() will return <code>x</code>, instead of <code>"x"</code>
+     * @param allowPartialMatching if partial matching of long options shall be enabled
+     * @param stripLeadingAndTrailingQuotes if balanced outer double quoutes should be stripped
+     */
+    public DefaultParser(final boolean allowPartialMatching,
+            final boolean stripLeadingAndTrailingQuotes) {
+        // We do not care about allowPartialMatching in this patch
+        this.stripLeadingAndTrailingQuotes = stripLeadingAndTrailingQuotes;
+    }
+
     public CommandLine parse(Options options, String[] arguments) throws ParseException
     {
         return parse(options, arguments, null);
@@ -232,7 +269,7 @@ public class DefaultParser implements CommandLineParser
         }
         else if (currentOption != null && currentOption.acceptsArg() && isArgument(token))
         {
-            currentOption.addValueForProcessing(Util.stripLeadingAndTrailingQuotes(token));
+            currentOption.addValueForProcessing(conditionallyStripLeadingAndTrailingQuotes(token));
         }
         else if (token.startsWith("--"))
         {
@@ -704,4 +741,12 @@ public class DefaultParser implements CommandLineParser
             }
         }
     }
+
+    protected String conditionallyStripLeadingAndTrailingQuotes(final String token) {
+        if(stripLeadingAndTrailingQuotes) {
+            return Util.stripLeadingAndTrailingQuotes(token);
+        } else {
+            return token;
+        }
+    }
 }
