diff --git a/src/FileEntry.cc b/src/FileEntry.cc
index f69466b8..50edcfde 100644
--- a/src/FileEntry.cc
+++ b/src/FileEntry.cc
@@ -234,6 +234,9 @@ FileEntry::findFasterRequest
   if(lastFasterReplace_.difference(global::wallclock) < startupIdleTime) {
     return SharedHandle<Request>();
   }
+  std::vector<std::string> inFlightHosts;
+  enumerateInFlightHosts(inFlightRequests_.begin(), inFlightRequests_.end(),
+                         std::back_inserter(inFlightHosts));
   const SharedHandle<PeerStat>& basestat = base->getPeerStat();
   A2_LOG_DEBUG("Search faster server using ServerStat.");
   // Use first 10 good URIs to introduce some randomness.
@@ -246,6 +249,13 @@ FileEntry::findFasterRequest
     if(!uri::parse(us, *i)) {
       continue;
     }
+    if(std::count(inFlightHosts.begin(), inFlightHosts.end(),us.host)
+       >= static_cast<int>(maxConnectionPerServer_)) {
+      A2_LOG_DEBUG(fmt("%s has already used %d times, not considered.",
+                       (*i).c_str(),
+                       static_cast<int>(maxConnectionPerServer_)));
+      continue;
+    }
     if(findSecond(usedHosts.begin(), usedHosts.end(), us.host) !=
        usedHosts.end()) {
       A2_LOG_DEBUG(fmt("%s is in usedHosts, not considered", (*i).c_str()));