diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java b/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
index 5d56394..16f3747 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
@@ -28,7 +28,6 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.util.FilenameUtils;
 import org.apache.maven.scm.util.ThreadSafeDateFormat;
@@ -302,7 +301,7 @@
      */
     public void setDate(String date, String userDatePattern) {
         try {
-            if (!StringUtils.isEmpty(userDatePattern)) {
+            if (!(userDatePattern == null || userDatePattern.isEmpty())) {
                 SimpleDateFormat format = new SimpleDateFormat(userDatePattern);
 
                 this.date = format.parse(date);
@@ -310,7 +309,7 @@
                 this.date = TIMESTAMP_FORMAT_3.parse(date);
             }
         } catch (ParseException e) {
-            if (!StringUtils.isEmpty(userDatePattern)) {
+            if (!(userDatePattern == null || userDatePattern.isEmpty())) {
                 try {
                     this.date = TIMESTAMP_FORMAT_3.parse(date);
                 } catch (ParseException pe) {
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
index 86d9bee..517325c 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
@@ -23,7 +23,6 @@
 import java.util.Date;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.CommandParameter;
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.NoSuchCommandScmException;
@@ -193,7 +192,7 @@
             throws ScmException {
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
 
-        if (StringUtils.isNotEmpty(message)) {
+        if (message != null && !message.isEmpty()) {
             scmBranchParameters.setMessage(message);
         }
 
@@ -251,7 +250,7 @@
             throws ScmException {
         ScmBranch scmBranch = null;
 
-        if (StringUtils.isNotEmpty(branch)) {
+        if (branch != null && !branch.isEmpty()) {
             scmBranch = new ScmBranch(branch);
         }
         return changeLog(repository, fileSet, startDate, endDate, numDays, scmBranch, null);
@@ -324,11 +323,11 @@
         ScmVersion startRevision = null;
         ScmVersion endRevision = null;
 
-        if (StringUtils.isNotEmpty(startTag)) {
+        if (startTag != null && !startTag.isEmpty()) {
             startRevision = new ScmRevision(startTag);
         }
 
-        if (StringUtils.isNotEmpty(endTag)) {
+        if (endTag != null && !endTag.isEmpty()) {
             endRevision = new ScmRevision(endTag);
         }
 
@@ -385,7 +384,7 @@
             throws ScmException {
         ScmVersion scmVersion = null;
 
-        if (StringUtils.isNotEmpty(tag)) {
+        if (tag != null && !tag.isEmpty()) {
             scmVersion = new ScmBranch(tag);
         }
 
@@ -444,7 +443,7 @@
             throws ScmException {
         ScmVersion scmVersion = null;
 
-        if (StringUtils.isNotEmpty(tag)) {
+        if (tag != null && !tag.isEmpty()) {
             scmVersion = new ScmBranch(tag);
         }
 
@@ -524,11 +523,11 @@
         ScmVersion startVersion = null;
         ScmVersion endVersion = null;
 
-        if (StringUtils.isNotEmpty(startRevision)) {
+        if (startRevision != null && !startRevision.isEmpty()) {
             startVersion = new ScmRevision(startRevision);
         }
 
-        if (StringUtils.isNotEmpty(endRevision)) {
+        if (endRevision != null && !endRevision.isEmpty()) {
             endVersion = new ScmRevision(endRevision);
         }
 
@@ -601,7 +600,7 @@
             throws ScmException {
         ScmVersion scmVersion = null;
 
-        if (StringUtils.isNotEmpty(tag)) {
+        if (tag != null && !tag.isEmpty()) {
             scmVersion = new ScmRevision(tag);
         }
 
@@ -656,7 +655,7 @@
             throws ScmException {
         ScmVersion scmVersion = null;
 
-        if (StringUtils.isNotEmpty(tag)) {
+        if (tag != null && !tag.isEmpty()) {
             scmVersion = new ScmRevision(tag);
         }
 
@@ -804,7 +803,7 @@
 
         parameters.setString(CommandParameter.TAG_NAME, tagName);
 
-        if (StringUtils.isNotEmpty(message)) {
+        if (message != null && !message.isEmpty()) {
             parameters.setString(CommandParameter.MESSAGE, message);
         }
 
@@ -957,7 +956,7 @@
             throws ScmException {
         ScmBranch scmBranch = null;
 
-        if (StringUtils.isNotEmpty(tag)) {
+        if (tag != null && !tag.isEmpty()) {
             scmBranch = new ScmBranch(tag);
         }
 
@@ -1017,7 +1016,7 @@
             throws ScmException {
         ScmBranch scmBranch = null;
 
-        if (StringUtils.isNotEmpty(tag)) {
+        if (tag != null && !tag.isEmpty()) {
             scmBranch = new ScmBranch(tag);
         }
 
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java b/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
index d6a27bf..37efa77 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
@@ -24,7 +24,6 @@
 import java.util.Date;
 import java.util.Locale;
 
-import org.apache.commons.lang3.StringUtils;
 import org.codehaus.plexus.util.cli.StreamConsumer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -63,7 +62,7 @@
         String patternUsed = null;
         Locale localeUsed = null;
 
-        if (StringUtils.isNotEmpty(userPattern)) {
+        if (userPattern != null && !userPattern.isEmpty()) {
             if (locale != null) {
                 format = new SimpleDateFormat(userPattern, locale);
                 localeUsed = locale;
@@ -73,7 +72,7 @@
             }
             patternUsed = userPattern;
         } else {
-            if (StringUtils.isNotEmpty(defaultPattern)) {
+            if (defaultPattern != null && !defaultPattern.isEmpty()) {
                 if (locale != null) {
                     format = new SimpleDateFormat(defaultPattern, locale);
                     localeUsed = locale;
diff --git a/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java b/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java
index b3fa4b4..e5a4f5e 100644
--- a/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java
+++ b/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java
@@ -21,7 +21,6 @@
 import java.io.File;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFile;
@@ -292,7 +291,7 @@
 
         String providerMessage = result.getProviderMessage();
 
-        if (!StringUtils.isEmpty(providerMessage)) {
+        if (!(providerMessage == null || providerMessage.isEmpty())) {
             System.err.println("Error message from the provider: " + providerMessage);
         } else {
             System.err.println("The provider didn't give a error message.");
@@ -300,7 +299,7 @@
 
         String output = result.getCommandOutput();
 
-        if (!StringUtils.isEmpty(output)) {
+        if (!(output == null || output.isEmpty())) {
             System.err.println("Command output:");
 
             System.err.println(output);
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
index 33706ee..2b52344 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
@@ -218,9 +218,9 @@
 
     public String getConnectionUrl() {
         boolean requireDeveloperConnection = !"connection".equals(connectionType.toLowerCase());
-        if (StringUtils.isNotEmpty(connectionUrl) && !requireDeveloperConnection) {
+        if ((connectionUrl != null && !connectionUrl.isEmpty()) && !requireDeveloperConnection) {
             return connectionUrl;
-        } else if (StringUtils.isNotEmpty(developerConnectionUrl)) {
+        } else if (developerConnectionUrl != null && !developerConnectionUrl.isEmpty()) {
             return developerConnectionUrl;
         }
         if (requireDeveloperConnection) {
@@ -272,15 +272,15 @@
 
             providerRepo.setPushChanges(pushChanges);
 
-            if (!StringUtils.isEmpty(workItem)) {
+            if (!(workItem == null || workItem.isEmpty())) {
                 providerRepo.setWorkItem(workItem);
             }
 
-            if (!StringUtils.isEmpty(username)) {
+            if (!(username == null || username.isEmpty())) {
                 providerRepo.setUser(username);
             }
 
-            if (!StringUtils.isEmpty(password)) {
+            if (!(password == null || password.isEmpty())) {
                 providerRepo.setPassword(password);
             }
 
@@ -289,24 +289,25 @@
 
                 loadInfosFromSettings(repo);
 
-                if (!StringUtils.isEmpty(username)) {
+                if (!(username == null || username.isEmpty())) {
                     repo.setUser(username);
                 }
 
-                if (!StringUtils.isEmpty(password)) {
+                if (!(password == null || password.isEmpty())) {
                     repo.setPassword(password);
                 }
 
-                if (!StringUtils.isEmpty(privateKey)) {
+                if (!(privateKey == null || privateKey.isEmpty())) {
                     repo.setPrivateKey(privateKey);
                 }
 
-                if (!StringUtils.isEmpty(passphrase)) {
+                if (!(passphrase == null || passphrase.isEmpty())) {
                     repo.setPassphrase(passphrase);
                 }
             }
 
-            if (!StringUtils.isEmpty(tagBase) && repository.getProvider().equals("svn")) {
+            if (!(tagBase == null || tagBase.isEmpty())
+                    && repository.getProvider().equals("svn")) {
                 SvnScmProviderRepository svnRepo = (SvnScmProviderRepository) repository.getProviderRepository();
 
                 svnRepo.setTagBase(tagBase);
@@ -405,11 +406,11 @@
     }
 
     public ScmVersion getScmVersion(String versionType, String version) throws MojoExecutionException {
-        if (StringUtils.isEmpty(versionType) && StringUtils.isNotEmpty(version)) {
+        if ((versionType == null || versionType.isEmpty()) && (version != null && !version.isEmpty())) {
             throw new MojoExecutionException("You must specify the version type.");
         }
 
-        if (StringUtils.isEmpty(version)) {
+        if (version == null || version.isEmpty()) {
             return null;
         }
 
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BootstrapMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BootstrapMojo.java
index b933029..c7c60a1 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BootstrapMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BootstrapMojo.java
@@ -159,13 +159,13 @@
     protected String determineWorkingDirectoryPath(
             File checkoutDirectory, String relativePathProjectDirectory, String goalsDirectory) {
         File projectDirectory;
-        if (StringUtils.isNotEmpty(relativePathProjectDirectory)) {
+        if (relativePathProjectDirectory != null && !relativePathProjectDirectory.isEmpty()) {
             projectDirectory = new File(checkoutDirectory, relativePathProjectDirectory);
         } else {
             projectDirectory = checkoutDirectory;
         }
 
-        if (StringUtils.isEmpty(goalsDirectory)) {
+        if (goalsDirectory == null || goalsDirectory.isEmpty()) {
             return projectDirectory.getPath();
         }
 
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ChangeLogMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ChangeLogMojo.java
index 5cae706..172ace9 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ChangeLogMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ChangeLogMojo.java
@@ -23,7 +23,6 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
@@ -143,24 +142,28 @@
 
             request.setDatePattern(dateFormat);
 
-            if (StringUtils.isNotEmpty(startDate)) {
+            if (startDate != null && !startDate.isEmpty()) {
                 request.setStartDate(parseDate(localFormat, startDate));
             }
 
-            if (StringUtils.isNotEmpty(endDate)) {
+            if (endDate != null && !endDate.isEmpty()) {
                 request.setEndDate(parseDate(localFormat, endDate));
             }
 
-            if (StringUtils.isNotEmpty(startScmVersion)) {
+            if (startScmVersion != null && !startScmVersion.isEmpty()) {
                 ScmVersion startRev = getScmVersion(
-                        StringUtils.isEmpty(startScmVersionType) ? VERSION_TYPE_REVISION : startScmVersionType,
+                        (startScmVersionType == null || startScmVersionType.isEmpty())
+                                ? VERSION_TYPE_REVISION
+                                : startScmVersionType,
                         startScmVersion);
                 request.setStartRevision(startRev);
             }
 
-            if (StringUtils.isNotEmpty(endScmVersion)) {
+            if (endScmVersion != null && !endScmVersion.isEmpty()) {
                 ScmVersion endRev = getScmVersion(
-                        StringUtils.isEmpty(endScmVersionType) ? VERSION_TYPE_REVISION : endScmVersionType,
+                        (endScmVersionType == null || endScmVersionType.isEmpty())
+                                ? VERSION_TYPE_REVISION
+                                : endScmVersionType,
                         endScmVersion);
                 request.setEndRevision(endRev);
             }
@@ -171,13 +174,14 @@
                 request.setNumDays(numDays);
             }
 
-            if (StringUtils.isNotEmpty(scmVersion)) {
+            if (scmVersion != null && !scmVersion.isEmpty()) {
                 ScmVersion rev = getScmVersion(
-                        StringUtils.isEmpty(scmVersionType) ? VERSION_TYPE_REVISION : scmVersionType, scmVersion);
+                        (scmVersionType == null || scmVersionType.isEmpty()) ? VERSION_TYPE_REVISION : scmVersionType,
+                        scmVersion);
                 request.setRevision(rev);
             }
 
-            if (StringUtils.isNotEmpty(scmBranch)) {
+            if (scmBranch != null && !scmBranch.isEmpty()) {
                 request.setScmBranch(new ScmBranch(scmBranch));
             }
 
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitConfigFileReader.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitConfigFileReader.java
index effe9d8..90687ea 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitConfigFileReader.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitConfigFileReader.java
@@ -26,8 +26,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
-
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  *
@@ -110,7 +108,7 @@
                         new BufferedReader(new FileReader(new File(getConfigDirectory(), "config")))) {
                     String line;
                     while ((line = reader.readLine()) != null) {
-                        if (!line.startsWith("#") && StringUtils.isNotEmpty(line)) {
+                        if (!line.startsWith("#") && (line != null && !line.isEmpty())) {
                             lines.add(line);
                         }
                     }
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitDiffRawConsumer.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitDiffRawConsumer.java
index 32d2d73..3664a31 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitDiffRawConsumer.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitDiffRawConsumer.java
@@ -21,7 +21,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.util.AbstractConsumer;
@@ -44,7 +43,7 @@
         if (logger.isDebugEnabled()) {
             logger.debug(line);
         }
-        if (StringUtils.isEmpty(line)) {
+        if (line == null || line.isEmpty()) {
             return;
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
index 3e96b47..7d8066e 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
@@ -52,7 +52,7 @@
         }
 
         if (infoItems.isEmpty()) {
-            if (!StringUtils.isEmpty(line)) {
+            if (!(line == null || line.isEmpty())) {
                 InfoItem infoItem = new InfoItem();
                 infoItem.setRevision(StringUtils.trim(line));
                 infoItem.setURL(scmFileSet.getBasedir().toPath().toUri().toASCIIString());
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.java
index 473db89..942a017 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.java
@@ -27,7 +27,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmFileStatus;
@@ -145,7 +144,7 @@
         if (logger.isDebugEnabled()) {
             logger.debug(line);
         }
-        if (StringUtils.isEmpty(line)) {
+        if (line == null || line.isEmpty()) {
             return;
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitLatestRevisionCommandConsumer.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitLatestRevisionCommandConsumer.java
index b9bd456..60307d7 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitLatestRevisionCommandConsumer.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitLatestRevisionCommandConsumer.java
@@ -21,7 +21,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.util.AbstractConsumer;
 
 /**
@@ -42,7 +41,7 @@
         if (logger.isDebugEnabled()) {
             logger.debug("GitLatestRevisionCommandConsumer consumeLine : " + line);
         }
-        if (line == null || StringUtils.isEmpty(line)) {
+        if (line == null || (line == null || line.isEmpty())) {
             return;
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java
index 2da1068..0172597 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java
@@ -18,8 +18,6 @@
  */
 package org.apache.maven.scm.provider.svn;
 
-import org.apache.commons.lang3.StringUtils;
-
 /**
  * Command utilities for svn commands.
  *
@@ -44,7 +42,7 @@
      * @throws NullPointerException if url is <code>null</code>
      */
     public static String fixUrl(String url, String username) {
-        if (!StringUtils.isEmpty(username) && url.startsWith("svn+ssh://")) {
+        if (!(username == null || username.isEmpty()) && url.startsWith("svn+ssh://")) {
             // is there a username to override ? If so we cut after
             int idx = url.indexOf('@');
             int cutIdx = idx < 0 ? "svn+ssh://".length() : idx + 1;
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java
index 74bae40..e3dd927 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java
@@ -26,7 +26,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.commons.lang3.StringUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.Os;
 
@@ -106,7 +105,7 @@
                 reader = new BufferedReader(new FileReader(new File(getConfigDirectory(), "config")));
                 String line;
                 while ((line = reader.readLine()) != null) {
-                    if (!line.startsWith("#") && StringUtils.isNotEmpty(line)) {
+                    if (!line.startsWith("#") && (line != null && !line.isEmpty())) {
                         lines.add(line);
                     }
                 }
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnTagBranchUtils.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnTagBranchUtils.java
index 0c2784a..6e2699e 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnTagBranchUtils.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnTagBranchUtils.java
@@ -49,7 +49,7 @@
     static String appendPath(String basePath, String addlPath) {
         basePath = StringUtils.stripEnd(basePath, "/");
 
-        if (StringUtils.isEmpty(addlPath)) {
+        if (addlPath == null || addlPath.isEmpty()) {
             return basePath;
         } else {
             return basePath + "/" + StringUtils.stripStart(addlPath, "/");
@@ -180,7 +180,7 @@
         String projectRoot = getProjectRoot(repositoryUrl);
         branchTagName = StringUtils.strip(branchTagName, "/");
 
-        if (StringUtils.isEmpty(branchTagName)) {
+        if (branchTagName == null || branchTagName.isEmpty()) {
             return null;
         }
 
@@ -198,7 +198,7 @@
         }
 
         // User has a tagBase specified so just return the name appended to the tagBase
-        if (StringUtils.isNotEmpty(tagBase)
+        if ((tagBase != null && !tagBase.isEmpty())
                 && !tagBase.equals(resolveTagBase(repositoryUrl))
                 && !tagBase.equals(resolveBranchBase(repositoryUrl))) {
             return appendPath(tagBase, branchTagName);
@@ -252,7 +252,7 @@
 
         String versionName = version.getName();
 
-        if (StringUtils.isEmpty(versionName)) {
+        if (versionName == null || versionName.isEmpty()) {
             return false;
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java
index 9ee5c85..d1fb2f1 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java
@@ -132,7 +132,7 @@
 
         cl.createArg().setValue(url + "@");
 
-        if (StringUtils.isNotEmpty(outputSirectory)) {
+        if (outputSirectory != null && !outputSirectory.isEmpty()) {
             cl.createArg().setValue(outputSirectory + "@");
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java
index 88c36ba..5609f2d 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java
@@ -21,7 +21,6 @@
 import java.io.File;
 import java.util.Iterator;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
@@ -96,7 +95,7 @@
             cl.createArg().setValue("--recursive");
         }
 
-        if (StringUtils.isNotEmpty(revision)) {
+        if (revision != null && !revision.isEmpty()) {
             cl.createArg().setValue("-r");
 
             cl.createArg().setValue(revision);
