diff --git a/src/main/java/org/apache/commons/exec/CommandLine.java b/src/main/java/org/apache/commons/exec/CommandLine.java
index fad7e3d..7f2bab5 100644
--- a/src/main/java/org/apache/commons/exec/CommandLine.java
+++ b/src/main/java/org/apache/commons/exec/CommandLine.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -57,7 +57,7 @@
 
     /**
      * Create a command line from a string.
-     * 
+     *
      * @param line the first element becomes the executable, the rest the arguments
      * @return the parsed command line
      * @throws IllegalArgumentException If line is null or all whitespace
@@ -75,7 +75,7 @@
      * @throws IllegalArgumentException If line is null or all whitespace
      */
     public static CommandLine parse(final String line, final Map<String, ?> substitutionMap) {
-                
+
         if (line == null) {
             throw new IllegalArgumentException("Command line can not be null");
         } else if (line.trim().isEmpty()) {
@@ -139,7 +139,7 @@
 
     /**
      * Returns the executable.
-     * 
+     *
      * @return The executable
      */
     public String getExecutable() {
@@ -152,7 +152,7 @@
     /**
      * Was a file being used to set the executable?
      *
-     * @return true if a file was used for setting the executable 
+     * @return true if a file was used for setting the executable
      */
     public boolean isFile() {
         return isFile;
@@ -160,7 +160,7 @@
 
     /**
      * Add multiple arguments. Handles parsing of quotes and whitespace.
-     * 
+     *
      * @param addArguments An array of arguments
      * @return The command line itself
      */
@@ -189,8 +189,8 @@
      * Add multiple arguments. Handles parsing of quotes and whitespace.
      * Please note that the parsing can have undesired side-effects therefore
      * it is recommended to build the command line incrementally.
-     * 
-     * @param addArguments An string containing multiple arguments. 
+     *
+     * @param addArguments An string containing multiple arguments.
      * @return The command line itself
      */
     public CommandLine addArguments(final String addArguments) {
@@ -253,7 +253,7 @@
 
     /**
      * Returns the expanded and quoted command line arguments.
-     *  
+     *
      * @return The quoted arguments
      */
     public String[] getArguments() {
@@ -281,7 +281,7 @@
     /**
      * Set the substitutionMap to expand variables in the
      * command line.
-     * 
+     *
      * @param substitutionMap the map
      */
     public void setSubstitutionMap(final Map<String, ?> substitutionMap) {
@@ -303,7 +303,7 @@
     /**
      * Stringify operator returns the command line as a string.
      * Parameters are correctly quoted when containing a space or
-     * left untouched if the are already quoted. 
+     * left untouched if the are already quoted.
      *
      * @return the command line as single string
      */
diff --git a/src/main/java/org/apache/commons/exec/DaemonExecutor.java b/src/main/java/org/apache/commons/exec/DaemonExecutor.java
index 07068cb..b1e2587 100644
--- a/src/main/java/org/apache/commons/exec/DaemonExecutor.java
+++ b/src/main/java/org/apache/commons/exec/DaemonExecutor.java
@@ -19,7 +19,7 @@
 /**
  * Runs daemon processes asynchronously. Callers are expected to register a {@link ProcessDestroyer} before executing
  * any processes.
- * 
+ *
  * @since 1.3
  */
 public class DaemonExecutor extends DefaultExecutor {
diff --git a/src/main/java/org/apache/commons/exec/DefaultExecuteResultHandler.java b/src/main/java/org/apache/commons/exec/DefaultExecuteResultHandler.java
index 2a1c646..d47cfe7 100644
--- a/src/main/java/org/apache/commons/exec/DefaultExecuteResultHandler.java
+++ b/src/main/java/org/apache/commons/exec/DefaultExecuteResultHandler.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -60,7 +60,7 @@
      */
     @Override
     public void onProcessFailed(final ExecuteException e) {
-        this.exitValue = e.getExitValue();            
+        this.exitValue = e.getExitValue();
         this.exception = e;
         this.hasResult = true;
     }
diff --git a/src/main/java/org/apache/commons/exec/DefaultExecutor.java b/src/main/java/org/apache/commons/exec/DefaultExecutor.java
index d1cb07d..a598d9a 100644
--- a/src/main/java/org/apache/commons/exec/DefaultExecutor.java
+++ b/src/main/java/org/apache/commons/exec/DefaultExecutor.java
@@ -61,7 +61,7 @@
     /** launches the command in a new process */
     private final CommandLauncher launcher;
 
-    /** optional cleanup of started processes */ 
+    /** optional cleanup of started processes */
     private ProcessDestroyer processDestroyer;
 
     /** worker thread for asynchronous execution */
@@ -171,7 +171,7 @@
         if (workingDirectory != null && !workingDirectory.exists()) {
             throw new IOException(workingDirectory + " doesn't exist.");
         }
-        
+
         return executeInternal(command, environment, workingDirectory, streamHandler);
 
     }
@@ -302,7 +302,7 @@
     protected Thread getExecutorThread() {
         return executorThread;
     }
-    
+
     /**
      * Close the streams belonging to the given Process.
      *
@@ -398,7 +398,7 @@
                 // Process.waitFor should clear interrupt status when throwing InterruptedException
                 // but we have to do that manually
                 Thread.interrupted();
-            }            
+            }
 
             if (watchdog != null) {
                 watchdog.stop();
diff --git a/src/main/java/org/apache/commons/exec/ExecuteException.java b/src/main/java/org/apache/commons/exec/ExecuteException.java
index cf58907..7c8a287 100644
--- a/src/main/java/org/apache/commons/exec/ExecuteException.java
+++ b/src/main/java/org/apache/commons/exec/ExecuteException.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -40,10 +40,10 @@
      * The exit value returned by the failed process
      */
     private final int exitValue;
-    
+
     /**
      * Construct a new exception with the specified detail message.
-     * 
+     *
      * @param message
      *            The detail message
      * @param exitValue The exit value
@@ -56,7 +56,7 @@
 
     /**
      * Construct a new exception with the specified detail message and cause.
-     * 
+     *
      * @param message
      *            The detail message
      * @param exitValue The exit value
diff --git a/src/main/java/org/apache/commons/exec/ExecuteResultHandler.java b/src/main/java/org/apache/commons/exec/ExecuteResultHandler.java
index a92b14b..abbd40d 100644
--- a/src/main/java/org/apache/commons/exec/ExecuteResultHandler.java
+++ b/src/main/java/org/apache/commons/exec/ExecuteResultHandler.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -21,7 +21,7 @@
 /**
  * The callback handlers for the result of asynchronous process execution. When a
  * process is started asynchronously the callback provides you with the result of
- * the executed process, i.e. the exit value or an exception. 
+ * the executed process, i.e. the exit value or an exception.
  *
  * @see org.apache.commons.exec.Executor#execute(CommandLine, java.util.Map, ExecuteResultHandler)
  *
diff --git a/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java b/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
index caf285e..e3b4273 100644
--- a/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
+++ b/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -31,7 +31,7 @@
 
     /**
      * Install a handler for the input stream of the subprocess.
-     * 
+     *
      * @param os
      *            output stream to write to the standard input stream of the subprocess
      * @throws IOException
@@ -41,7 +41,7 @@
 
     /**
      * Install a handler for the error stream of the subprocess.
-     * 
+     *
      * @param is
      *            input stream to read from the error stream from the subprocess
      * @throws IOException
@@ -51,7 +51,7 @@
 
     /**
      * Install a handler for the output stream of the subprocess.
-     * 
+     *
      * @param is
      *            input stream to read from the error stream from the subprocess
      * @throws IOException
@@ -61,7 +61,7 @@
 
     /**
      * Start handling of the streams.
-     * 
+     *
      * @throws IOException
      *             thrown when an I/O exception occurs.
      */
@@ -69,7 +69,7 @@
 
     /**
      * Stop handling of the streams - will not be restarted. Will wait for pump threads to complete.
-     * 
+     *
      * @throws IOException
      *             thrown when an I/O exception occurs.
      */
diff --git a/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java b/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java
index 862149f..2cfb561 100644
--- a/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java
+++ b/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -40,7 +40,7 @@
  * using 'destroyProcess()'.
  * <p>
  * Please note that ExecuteWatchdog is processed asynchronously, e.g. it might
- * be still attached to a process even after the DefaultExecutor.execute 
+ * be still attached to a process even after the DefaultExecutor.execute
  * has returned.
  *
  * @see org.apache.commons.exec.Executor
@@ -51,7 +51,7 @@
 
     /** The marker for an infinite timeout */
     public static final long INFINITE_TIMEOUT = -1;
-    
+
     /** The process to execute and watch for duration. */
     private Process process;
 
@@ -75,7 +75,7 @@
 
     /**
      * Creates a new watchdog with a given timeout.
-     * 
+     *
      * @param timeout
      *            the timeout for the process in milliseconds. It must be
      *            greater than 0 or 'INFINITE_TIMEOUT'
@@ -97,7 +97,7 @@
     /**
      * Watches the given process and terminates it, if it runs for too long. All
      * information from the previous run are reset.
-     * 
+     *
      * @param processToMonitor
      *            the process to monitor. It cannot be {@code null}
      * @throws IllegalStateException
@@ -188,7 +188,7 @@
      * the run of the process. It will only remains valid once the process has
      * been terminated either by 'error', timeout or manual intervention.
      * Information will be discarded once a new process is ran.
-     * 
+     *
      * @throws Exception
      *             a wrapped exception over the one that was silently swallowed
      *             and stored during the process run.
@@ -201,7 +201,7 @@
 
     /**
      * Indicates whether or not the watchdog is still monitoring the process.
-     * 
+     *
      * @return {@code true} if the process is still running, otherwise
      *         {@code false}.
      */
@@ -212,7 +212,7 @@
 
     /**
      * Indicates whether the last process run was killed.
-     * 
+     *
      * @return {@code true} if the process was killed
      *         {@code false}.
      */
diff --git a/src/main/java/org/apache/commons/exec/Executor.java b/src/main/java/org/apache/commons/exec/Executor.java
index 2f5a69f..80478a5 100644
--- a/src/main/java/org/apache/commons/exec/Executor.java
+++ b/src/main/java/org/apache/commons/exec/Executor.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -54,7 +54,7 @@
      * Define the {@code exitValue} of the process to be considered
      * successful. If a different exit value is returned by
      * the process then {@link org.apache.commons.exec.Executor#execute(CommandLine)}
-     * will throw an {@link org.apache.commons.exec.ExecuteException} 
+     * will throw an {@link org.apache.commons.exec.ExecuteException}
      *
      * @param value the exit code representing successful execution
      */
@@ -91,8 +91,8 @@
     /**
      * Get the StreamHandler used for providing input and
      * retrieving the output.
-     * 
-     * @return the StreamHandler 
+     *
+     * @return the StreamHandler
      */
     ExecuteStreamHandler getStreamHandler();
 
@@ -116,7 +116,7 @@
     ExecuteWatchdog getWatchdog();
 
     /**
-     * Set the watchdog used to kill of processes running, 
+     * Set the watchdog used to kill of processes running,
      * typically, too long time.
      *
      * @param watchDog the watchdog
@@ -180,7 +180,7 @@
      */
     int execute(CommandLine command, Map<String, String> environment)
         throws ExecuteException, IOException;
-    
+
     /**
      * Methods for starting asynchronous execution. The child process inherits
      * all environment variables of the parent process. Result provided to
@@ -201,8 +201,8 @@
      * @param command the command to execute
      * @param environment The environment for the new process. If null, the
      *          environment of the current process is used.
-     * @param handler capture process termination and exit code 
-     * @throws ExecuteException execution of subprocess failed     
+     * @param handler capture process termination and exit code
+     * @throws ExecuteException execution of subprocess failed
      */
     void execute(CommandLine command, Map<String, String> environment, ExecuteResultHandler handler)
         throws ExecuteException, IOException;
diff --git a/src/main/java/org/apache/commons/exec/LogOutputStream.java b/src/main/java/org/apache/commons/exec/LogOutputStream.java
index 80f78b8..ea30e45 100644
--- a/src/main/java/org/apache/commons/exec/LogOutputStream.java
+++ b/src/main/java/org/apache/commons/exec/LogOutputStream.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
diff --git a/src/main/java/org/apache/commons/exec/ProcessDestroyer.java b/src/main/java/org/apache/commons/exec/ProcessDestroyer.java
index ac89fa7..db1eee8 100644
--- a/src/main/java/org/apache/commons/exec/ProcessDestroyer.java
+++ b/src/main/java/org/apache/commons/exec/ProcessDestroyer.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
diff --git a/src/main/java/org/apache/commons/exec/PumpStreamHandler.java b/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
index 1c13321..a75fdc5 100644
--- a/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
+++ b/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
diff --git a/src/main/java/org/apache/commons/exec/ShutdownHookProcessDestroyer.java b/src/main/java/org/apache/commons/exec/ShutdownHookProcessDestroyer.java
index c47d807..5e6dc6e 100644
--- a/src/main/java/org/apache/commons/exec/ShutdownHookProcessDestroyer.java
+++ b/src/main/java/org/apache/commons/exec/ShutdownHookProcessDestroyer.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -112,7 +112,7 @@
 
     /**
      * Tests emptiness (size == 0).
-     * 
+     *
      * @return Whether or not this is empty.
      * @since 1.4.0
      */
@@ -137,7 +137,7 @@
             return processRemoved;
         }
     }
-    
+
     /**
      * Removes this {@code ProcessDestroyer} as a shutdown hook, uses reflection to ensure pre-JDK 1.3 compatibility
      */
diff --git a/src/main/java/org/apache/commons/exec/StreamPumper.java b/src/main/java/org/apache/commons/exec/StreamPumper.java
index 68aa7ea..33621cb 100644
--- a/src/main/java/org/apache/commons/exec/StreamPumper.java
+++ b/src/main/java/org/apache/commons/exec/StreamPumper.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -39,7 +39,7 @@
     /** the output stream to pmp into */
     private final OutputStream os;
 
-    /** the size of the internal buffer for copying the streams */ 
+    /** the size of the internal buffer for copying the streams */
     private final int size;
 
     /** was the end of the stream reached */
@@ -47,10 +47,10 @@
 
     /** close the output stream when exhausted */
     private final boolean closeWhenExhausted;
-    
+
     /**
      * Create a new stream pumper.
-     * 
+     *
      * @param is input stream to read data from
      * @param os output stream to write data to.
      * @param closeWhenExhausted if true, the output stream will be closed when the input is exhausted.
@@ -81,7 +81,7 @@
 
     /**
      * Create a new stream pumper.
-     * 
+     *
      * @param is input stream to read data from
      * @param os output stream to write data to.
      */
@@ -127,7 +127,7 @@
 
     /**
      * Tells whether the end of the stream has been reached.
-     * 
+     *
      * @return true is the stream has been exhausted.
      */
     public synchronized boolean isFinished() {
@@ -136,7 +136,7 @@
 
     /**
      * This method blocks until the stream pumper finishes.
-     * 
+     *
      * @throws InterruptedException
      *                if any thread interrupted the current thread before or while the current thread was waiting for a
      *                notification.
diff --git a/src/main/java/org/apache/commons/exec/TimeoutObserver.java b/src/main/java/org/apache/commons/exec/TimeoutObserver.java
index e7c2ce9..0c24eea 100644
--- a/src/main/java/org/apache/commons/exec/TimeoutObserver.java
+++ b/src/main/java/org/apache/commons/exec/TimeoutObserver.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -20,7 +20,7 @@
 
 /**
  * Interface for classes that want to be notified by Watchdog.
- * 
+ *
  * @see org.apache.commons.exec.Watchdog
  *
  */
@@ -28,7 +28,7 @@
 
     /**
      * Called when the watchdog times out.
-     * 
+     *
      * @param w the watchdog that timed out.
      */
     void timeoutOccured(Watchdog w);
diff --git a/src/main/java/org/apache/commons/exec/Watchdog.java b/src/main/java/org/apache/commons/exec/Watchdog.java
index eb32791..1213ea4 100644
--- a/src/main/java/org/apache/commons/exec/Watchdog.java
+++ b/src/main/java/org/apache/commons/exec/Watchdog.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -23,7 +23,7 @@
 
 /**
  * Generalization of {@code ExecuteWatchdog}
- * 
+ *
  * @see org.apache.commons.exec.ExecuteWatchdog
  *
  */
@@ -91,5 +91,5 @@
             fireTimeoutOccured();
         }
     }
-    
+
 }
diff --git a/src/main/java/org/apache/commons/exec/environment/EnvironmentUtils.java b/src/main/java/org/apache/commons/exec/environment/EnvironmentUtils.java
index b77c693..97a66a5 100644
--- a/src/main/java/org/apache/commons/exec/environment/EnvironmentUtils.java
+++ b/src/main/java/org/apache/commons/exec/environment/EnvironmentUtils.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -32,7 +32,7 @@
 {
 
     private static final DefaultProcessingEnvironment PROCESSING_ENVIRONMENT_IMPLEMENTATION;
-    
+
     static {
 //        if (OS.isFamilyOpenVms()) {
 //            PROCESSING_ENVIRONMENT_IMPLEMENTATION = new OpenVmsProcessingEnvironment();
@@ -40,7 +40,7 @@
             PROCESSING_ENVIRONMENT_IMPLEMENTATION = new DefaultProcessingEnvironment();
 //        }
     }
-    
+
     /**
      * Disable constructor.
      */
@@ -88,13 +88,13 @@
      * If the key matches an existing key, the previous setting is replaced.
      *
      * @param environment the current environment
-     * @param keyAndValue the key/value pair 
+     * @param keyAndValue the key/value pair
      */
     public static void addVariableToEnvironment(final Map<String, String> environment, final String keyAndValue) {
-        final String[] parsedVariable = parseEnvironmentVariable(keyAndValue);        
+        final String[] parsedVariable = parseEnvironmentVariable(keyAndValue);
         environment.put(parsedVariable[0], parsedVariable[1]);
     }
-    
+
     /**
      * Split a key/value pair into a String[]. It is assumed
      * that the ky/value pair contains a '=' character.
@@ -116,5 +116,5 @@
 
         return result;
     }
-    
+
 }
diff --git a/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java b/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
index 4c648ef..28413c2 100644
--- a/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
+++ b/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -35,7 +35,7 @@
 
     /*
      * Hopefully removing super-class overrides won't cause Clirr error.
-     * If necessary can just delegate to super-class. 
+     * If necessary can just delegate to super-class.
      */
 
 //    /**
@@ -43,7 +43,7 @@
 //     *
 //     * @return a map containing the environment variables
 //     * @throws IOException the operation failed
-//     */    
+//     */
 //    @Override
 //    protected Map<String, String> createProcEnvironment() throws IOException {
 //        if (procEnvironment == null) {
@@ -59,7 +59,7 @@
 //     * variables.
 //     *
 //     * @return the command line
-//     */    
+//     */
 //    @Override
 //    protected CommandLine getProcEnvCommand() {
 //        final CommandLine commandLine = new CommandLine("show");
diff --git a/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java b/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java
index db752cb..b8fb4bf 100644
--- a/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java
+++ b/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -33,13 +33,13 @@
 
     /**
      * Launches the given command in a new process.
-     * 
+     *
      * @param cmd
      *            The command to execute
      * @param env
      *            The environment for the new process. If null, the environment
      *            of the current process is used.
-     * 
+     *
      * @return the newly created process
      * @throws IOException
      *             if attempting to run a command in a specific directory
@@ -50,7 +50,7 @@
     /**
      * Launches the given command in a new process, in the given working
      * directory.
-     * 
+     *
      * @param cmd
      *            The command to execute
      * @param env
diff --git a/src/main/java/org/apache/commons/exec/launcher/CommandLauncherFactory.java b/src/main/java/org/apache/commons/exec/launcher/CommandLauncherFactory.java
index a47319e..c6c0e80 100644
--- a/src/main/java/org/apache/commons/exec/launcher/CommandLauncherFactory.java
+++ b/src/main/java/org/apache/commons/exec/launcher/CommandLauncherFactory.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
diff --git a/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java b/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java
index 47d9074..97274a0 100644
--- a/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java
+++ b/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -44,7 +44,7 @@
     public abstract Process exec(final CommandLine cmd, final Map<String, String> env,
             final File workingDir) throws IOException;
 
-    /** @see org.apache.commons.exec.launcher.CommandLauncher#isFailure(int) */    
+    /** @see org.apache.commons.exec.launcher.CommandLauncher#isFailure(int) */
     @Override
     public boolean isFailure(final int exitValue)
     {
diff --git a/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java b/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java
index f11bfb9..f4fa059 100644
--- a/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java
+++ b/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -39,7 +39,7 @@
     /**
      * Launches the given command in a new process. Delegates this method to the
      * proxied launcher
-     * 
+     *
      * @param cmd
      *            the command line to execute as an array of strings
      * @param env
diff --git a/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java b/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java
index e8b31d2..e71e469 100644
--- a/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java
+++ b/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -41,7 +41,7 @@
     /**
      * Launches the given command in a new process, in the given working
      * directory
-     * 
+     *
      * @param cmd
      *            the command line to execute as an array of strings
      * @param env
diff --git a/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java b/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java
index a4bfce5..01698cc 100644
--- a/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java
+++ b/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -44,7 +44,7 @@
     /**
      * Launches the given command in a new process, in the given working
      * directory.
-     * 
+     *
      * @param cmd
      *            the command line to execute as an array of strings
      * @param env
diff --git a/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java b/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
index 819ce08..6c6d437 100644
--- a/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
+++ b/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -126,7 +126,7 @@
                 out.print(parts[lastPart]);
             } else {
                 out.print("$ ");
-                out.print(command);                
+                out.print(command);
             }
             final String[] args = cmd.getArguments();
             for (final String arg : args) {
diff --git a/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java b/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java
index 44e0a71..b83fda8 100644
--- a/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java
+++ b/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -37,7 +37,7 @@
     /**
      * Launches the given command in a new process, in the given working
      * directory.
-     * 
+     *
      * @param cmd
      *            the command line to execute as an array of strings
      * @param env
diff --git a/src/main/java/org/apache/commons/exec/util/MapUtils.java b/src/main/java/org/apache/commons/exec/util/MapUtils.java
index dbe3547..cead70d 100644
--- a/src/main/java/org/apache/commons/exec/util/MapUtils.java
+++ b/src/main/java/org/apache/commons/exec/util/MapUtils.java
@@ -30,7 +30,7 @@
 {
     /**
      * Clones a map.
-     * 
+     *
      * @param source
      *            the Map to clone
      * @param <K>
@@ -108,7 +108,7 @@
             result = copy(lhs);
             result.putAll(rhs);
         }
-        
+
         return result;
     }
 }
diff --git a/src/main/java/org/apache/commons/exec/util/StringUtils.java b/src/main/java/org/apache/commons/exec/util/StringUtils.java
index c2e2a68..812cd70 100644
--- a/src/main/java/org/apache/commons/exec/util/StringUtils.java
+++ b/src/main/java/org/apache/commons/exec/util/StringUtils.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -113,7 +113,7 @@
                                 value = fixFileSeparatorChar(((File) temp).getAbsolutePath());
                             }
                             else {
-                                value = temp != null ? temp.toString() : null;    
+                                value = temp != null ? temp.toString() : null;
                             }
 
                             if (value != null) {
@@ -174,14 +174,14 @@
     /**
      * Fixes the file separator char for the target platform
      * using the following replacement.
-     * 
+     *
      * <ul>
      *  <li>'/' &#x2192; File.separatorChar</li>
      *  <li>'\\' &#x2192; File.separatorChar</li>
      * </ul>
      *
      * @param arg the argument to fix
-     * @return the transformed argument 
+     * @return the transformed argument
      */
     public static String fixFileSeparatorChar(final String arg) {
         return arg.replace(SLASH_CHAR, File.separatorChar).replace(
@@ -226,7 +226,7 @@
         while (cleanedArgument.startsWith(SINGLE_QUOTE) || cleanedArgument.startsWith(DOUBLE_QUOTE)) {
             cleanedArgument = cleanedArgument.substring(1);
         }
-        
+
         while (cleanedArgument.endsWith(SINGLE_QUOTE) || cleanedArgument.endsWith(DOUBLE_QUOTE)) {
             cleanedArgument = cleanedArgument.substring(0, cleanedArgument.length() - 1);
         }
diff --git a/src/test/java/org/apache/commons/exec/CommandLineTest.java b/src/test/java/org/apache/commons/exec/CommandLineTest.java
index 9ae4c97..6219310 100644
--- a/src/test/java/org/apache/commons/exec/CommandLineTest.java
+++ b/src/test/java/org/apache/commons/exec/CommandLineTest.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -303,7 +303,7 @@
         assertEquals("/C", args[0]);
         assertEquals("\"c:\\was51\\Web Sphere\\AppServer\\bin\\versionInfo.bat\"", args[1]);
     }
-        
+
    /**
     * Create a command line with pre-quoted strings to test SANDBOX-192,
     * e.g. "runMemorySud.cmd", "10", "30", "-XX:+UseParallelGC", "\"-XX:ParallelGCThreads=2\""
@@ -434,7 +434,7 @@
         assertEquals("\"C:\\Document And Settings\\documents\\432431.pdf\"", arguments[2]);
 
         // build the second command line with updated parameters resulting in  a different command line
-        substitutionMap.put("file", "C:\\Document And Settings\\documents\\432432.pdf");        
+        substitutionMap.put("file", "C:\\Document And Settings\\documents\\432432.pdf");
         result = cmdl.toStrings();
         assertEquals(StringUtils.fixFileSeparatorChar("C:\\Programme\\jdk1.5.0_12\\bin\\java"), result[0]);
         assertEquals("-class", result[1]);
diff --git a/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java b/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
index 7ebbece..c58b929 100644
--- a/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
+++ b/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -334,7 +334,7 @@
     /**
      * [EXEC-68] Synchronously starts a short script with a Watchdog attached with an extremely large timeout. Checks
      * to see if the script terminated naturally or if it was killed by the Watchdog. Fail if killed by Watchdog.
-     * 
+     *
      * @throws Exception
      *             the test failed
      */
@@ -589,7 +589,7 @@
 
     /**
      * Start a process and connect it to no stream.
-     * 
+     *
      * @throws Exception
      *             the test failed
      */
diff --git a/src/test/java/org/apache/commons/exec/StandAloneTest.java b/src/test/java/org/apache/commons/exec/StandAloneTest.java
index 293926c..e5ade3d 100644
--- a/src/test/java/org/apache/commons/exec/StandAloneTest.java
+++ b/src/test/java/org/apache/commons/exec/StandAloneTest.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
diff --git a/src/test/java/org/apache/commons/exec/TestUtil.java b/src/test/java/org/apache/commons/exec/TestUtil.java
index ba90303..133086e 100644
--- a/src/test/java/org/apache/commons/exec/TestUtil.java
+++ b/src/test/java/org/apache/commons/exec/TestUtil.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -40,7 +40,7 @@
             throw new AssertionFailedError("Test not supported for this OS");
         }
     }
-    
+
     /**
      * Get success and fail return codes used by the test scripts
      * @return int array[2] = {ok, success}
diff --git a/src/test/java/org/apache/commons/exec/TutorialTest.java b/src/test/java/org/apache/commons/exec/TutorialTest.java
index 20bae1b..c3db4e3 100644
--- a/src/test/java/org/apache/commons/exec/TutorialTest.java
+++ b/src/test/java/org/apache/commons/exec/TutorialTest.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
@@ -54,7 +54,7 @@
         PrintResultHandler printResult;
 
         try {
-            // printing takes around 10 seconds            
+            // printing takes around 10 seconds
             System.out.println("[main] Preparing print job ...");
             printResult = print(pdfFile, printJobTimeout, printInBackground);
             System.out.println("[main] Successfully sent the print job ...");
@@ -99,7 +99,7 @@
         // create the executor and consider the exitValue '1' as success
         final Executor executor = new DefaultExecutor();
         executor.setExitValue(1);
-        
+
         // create a watchdog if requested
         if (printJobTimeout > 0) {
             watchdog = new ExecuteWatchdog(printJobTimeout);
@@ -133,7 +133,7 @@
         public PrintResultHandler(final int exitValue) {
             super.onProcessComplete(exitValue);
         }
-        
+
         @Override
         public void onProcessComplete(final int exitValue) {
             super.onProcessComplete(exitValue);
diff --git a/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilsTest.java b/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilsTest.java
index 1b3a423..b2e456b 100644
--- a/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilsTest.java
+++ b/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilsTest.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  See the NOTICE file distributed with
  *  this work for additional information regarding copyright ownership.
diff --git a/src/test/java/org/apache/commons/exec/issues/Exec65Test.java b/src/test/java/org/apache/commons/exec/issues/Exec65Test.java
index 33cf63c..bcaaa5d 100644
--- a/src/test/java/org/apache/commons/exec/issues/Exec65Test.java
+++ b/src/test/java/org/apache/commons/exec/issues/Exec65Test.java
@@ -91,7 +91,7 @@
         Thread.sleep(WATCHDOG_TIMEOUT);
 
         process.destroy();
-        
+
         process.waitFor();
 
         assertTrue(process.exitValue() != 0);
diff --git a/src/test/java/org/apache/commons/exec/util/StringUtilTest.java b/src/test/java/org/apache/commons/exec/util/StringUtilTest.java
index 1745a3f..9459ba8 100644
--- a/src/test/java/org/apache/commons/exec/util/StringUtilTest.java
+++ b/src/test/java/org/apache/commons/exec/util/StringUtilTest.java
@@ -47,7 +47,7 @@
      * are expanded.
      */
     @Test
-    public void testDefaultStringSubstitution() throws Exception 
+    public void testDefaultStringSubstitution() throws Exception
     {
         final Map<String, String> vars = new HashMap<>();
         vars.put("foo", "FOO");
