diff --git a/pom.xml b/pom.xml
index 549685e..42fdb14 100644
--- a/pom.xml
+++ b/pom.xml
@@ -640,12 +640,12 @@
       <dependency>
         <groupId>org.apache.maven.shared</groupId>
         <artifactId>maven-verifier</artifactId>
-        <version>1.4</version>
+        <version>1.5</version>
       </dependency>
       <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpclient</artifactId>
-        <version>4.3.1</version>
+        <version>4.3.5</version>
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
@@ -660,12 +660,12 @@
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
-        <version>2.0-beta9</version>
+        <version>2.0.1</version>
       </dependency>
       <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-slf4j-impl</artifactId>
-        <version>2.0-beta9</version>
+        <version>2.0.1</version>
       </dependency>
     </dependencies>
   </dependencyManagement>
diff --git a/tomcat-maven-plugin-it/src/main/java/org/apache/tomcat/maven/it/AbstractWarProjectIT.java b/tomcat-maven-plugin-it/src/main/java/org/apache/tomcat/maven/it/AbstractWarProjectIT.java
index 87acee2..ea444f0 100644
--- a/tomcat-maven-plugin-it/src/main/java/org/apache/tomcat/maven/it/AbstractWarProjectIT.java
+++ b/tomcat-maven-plugin-it/src/main/java/org/apache/tomcat/maven/it/AbstractWarProjectIT.java
@@ -22,12 +22,12 @@
 
 import org.apache.http.HttpResponse;
 import org.apache.http.client.ResponseHandler;
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpHead;
 import org.apache.http.impl.client.BasicResponseHandler;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.maven.it.VerificationException;
 import org.apache.maven.it.Verifier;
 import org.apache.maven.it.util.ResourceExtractor;
@@ -67,7 +67,7 @@
     /**
      * HttpClient to use to connect to the deployed web-application.
      */
-    private DefaultHttpClient httpClient;
+    private CloseableHttpClient httpClient;
 
     /**
      * Helper for Maven-Integration-Tests.
@@ -83,11 +83,8 @@
     public void setUp()
         throws Exception
     {
-        httpClient = new DefaultHttpClient();
 
-        final HttpParams params = httpClient.getParams();
-        HttpConnectionParams.setConnectionTimeout( params, getTimeout() );
-        HttpConnectionParams.setSoTimeout( params, getTimeout() );
+        httpClient = HttpClientBuilder.create().build();
 
         webappHome = ResourceExtractor.simpleExtractResources( getClass(), "/" + getWarArtifactId() );
         verifier = new Verifier( webappHome.getAbsolutePath() );
@@ -105,7 +102,7 @@
     public void tearDown()
         throws Exception
     {
-        httpClient.getConnectionManager().shutdown();
+        httpClient.close();
         verifier.resetStreams();
         verifier.deleteArtifact( "org.apache.tomcat.maven.it", getWarArtifactId(), "1.0-SNAPSHOT", "war" );
     }
@@ -198,6 +195,8 @@
         throws IOException
     {
         HttpGet httpGet = new HttpGet( getWebappUrl() );
+        httpGet.setConfig(
+            RequestConfig.custom().setSocketTimeout( getTimeout() ).setConnectTimeout( getTimeout() ).build() );
         ResponseHandler<String> responseHandler = new BasicResponseHandler();
         return httpClient.execute( httpGet, responseHandler );
     }
diff --git a/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/RunMojo.java b/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/RunMojo.java
index eaf40cb..a0e412e 100644
--- a/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/RunMojo.java
+++ b/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/RunMojo.java
@@ -359,16 +359,21 @@
                             url = pluginRealm.getResource( StringUtils.removeStart( path, "/" ) );
                         }
 
-                        // try in reactors
-                        List<WebResource> webResources = findResourcesInDirectories( path, //
-                                                                                     classLoaderEntriesCalculatorResult.getBuildDirectories() );
-
-                        // so we return the first one
-                        if ( !webResources.isEmpty() )
+                        if (url == null)
                         {
-                            return webResources.get( 0 );
+                            // try in reactors
+                            List<WebResource> webResources = findResourcesInDirectories( path, //
+                                                                                         classLoaderEntriesCalculatorResult.getBuildDirectories() );
+
+                            // so we return the first one
+                            if ( !webResources.isEmpty() )
+                            {
+                                return webResources.get( 0 );
+                            }
                         }
 
+
+
                         if ( url == null )
                         {
                             return new EmptyResource( this, getPath() );
