diff --git a/.github/workflows/master-pr-build.yml b/.github/workflows/master-pr-build.yml
index 9d7d686..1ee27b3 100644
--- a/.github/workflows/master-pr-build.yml
+++ b/.github/workflows/master-pr-build.yml
@@ -27,7 +27,7 @@
   checks:
     runs-on: ubuntu-latest
     container:
-      image: tmio/tuweni-build:1.0
+      image: tmio/tuweni-build:1.1
     steps:
       - uses: actions/checkout@v1
         with:
@@ -43,7 +43,7 @@
   assemble:
     runs-on: ubuntu-latest
     container:
-      image: tmio/tuweni-build:1.0
+      image: tmio/tuweni-build:1.1
     steps:
       - uses: actions/checkout@v1
         with:
@@ -70,10 +70,37 @@
         with:
           name: Libs
           path: build/libs
+  package-checks:
+    runs-on: ubuntu-latest
+    container:
+      image: tmio/tuweni-build:1.1
+    steps:
+      - uses: actions/checkout@v1
+        with:
+          submodules: true
+      - name: Set up GPG key
+        run: gpg --import gradle/tuweni-test.asc
+      - name: Cache Maven Repository
+        uses: actions/cache@v1
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-m2-${{ hashFiles('**/dependency-versions.gradle') }}
+          restore-keys: ${{ runner.os }}-m2
+      - name: gradle assemble
+        uses: eskatos/gradle-command-action@v1
+        env:
+          ENABLE_SIGNING: true
+        with:
+          gradle-version: 6.3
+          arguments: assemble -x test -Psignatory.keyId=38F6C7215DD49C32 -Psigning.gnupg.keyName=38F6C7215DD49C32 -Psigning.gnupg.executable=gpg
+      - name: Unzip source
+        run: unzip -o dist/build/distributions/tuweni-src-*.zip -d distsrc
+      - name: Build from source
+        run: cd distsrc/$(ls distsrc) && gradle setup && ./gradlew assemble
   test:
     runs-on: ubuntu-latest
     container:
-      image: tmio/tuweni-build:1.0
+      image: tmio/tuweni-build:1.1
     steps:
       - uses: actions/checkout@v1
         with:
@@ -94,7 +121,39 @@
         uses: eskatos/gradle-command-action@v1
         with:
           gradle-version: 6.3
-          arguments: test
+          arguments: test jacocoTestReport
+      - name: Upload test reports
+        uses: actions/upload-artifact@v2
+        with:
+          name: Reports
+          path: "**/build/reports"
+      - name: Upload to Codecov
+        uses: codecov/codecov-action@v1
+  integration-tests:
+    runs-on: ubuntu-latest
+    container:
+      image: tmio/tuweni-build:1.1
+    steps:
+      - uses: actions/checkout@v1
+        with:
+          submodules: true
+      - name: Cache Gradle packages
+        uses: actions/cache@v1
+        with:
+          path: ~/.gradle/caches
+          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+          restore-keys: ${{ runner.os }}-gradle
+      - name: Cache Maven Repository
+        uses: actions/cache@v1
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-m2-${{ hashFiles('**/dependency-versions.gradle') }}
+          restore-keys: ${{ runner.os }}-m2
+      - name: gradle integrationTest
+        uses: eskatos/gradle-command-action@v1
+        with:
+          gradle-version: 6.3
+          arguments: integrationTest
       - name: Upload test reports
         uses: actions/upload-artifact@v2
         with:
diff --git a/Jenkinsfile b/Jenkinsfile
index 36b4866..a4e4bf9 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -10,6 +10,9 @@
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
+
+// This pipeline runs on master and pushes builds to repository.apache.org.
+
 pipeline {
     agent { label 'ubuntu' }
 
@@ -33,22 +36,6 @@
                 }
             }
         }
-        stage('Integration tests') {
-            steps {
-                timeout(time: 60, unit: 'MINUTES') {
-                    sh "./gradlew clean integrationTest sourcesDistZip distZip"
-                }
-            }
-        }
-        stage('Check source build') {
-            steps {
-                timeout(time: 60, unit: 'MINUTES') {
-                    sh "unzip dist/build/distributions/tuweni-src-*.zip -d distsrc"
-                    sh "cd distsrc/$(ls distsrc) && ./build.sh"
-                }
-            }
-        }
-        if(env.BRANCH_NAME == 'master'){
         stage('Publish') {
             steps {
                 timeout(time: 30, unit: 'MINUTES') {
@@ -56,11 +43,5 @@
                 }
             }
         }
-        }
-    }
-    post {
-        always {
-           junit '**/build/test-results/test/*.xml'
-        }
     }
 }
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index b2145c6..3bcba54 100644
--- a/build.gradle
+++ b/build.gradle
@@ -94,6 +94,7 @@
       // And some of the files that we have checked in should also be excluded from this check
       list.addAll([
         '.*\\.asc',
+        'gradle/tuweni-test.asc',
         '\\w+/out/.*',
         'eth-reference-tests/**',
         'build',
@@ -240,8 +241,6 @@
   sourceCompatibility = '1.11'
   targetCompatibility = '1.11'
 
-  jacoco { toolVersion = '0.8.5' }
-
   dependencies {
     errorprone 'com.google.errorprone:error_prone_core'
     if (JavaVersion.current().isJava8()) {
@@ -283,6 +282,13 @@
 
       disableWarningsInGeneratedCode = true
     }
+
+    jacocoTestReport {
+      reports {
+        xml.enabled true
+        html.enabled true
+      }
+    }
   }
 
   tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
@@ -295,6 +301,13 @@
         '-Xuse-experimental=kotlin.Experimental'
       ]
     }
+
+    jacocoTestReport {
+      reports {
+        xml.enabled true
+        html.enabled true
+      }
+    }
   }
 
 
@@ -565,6 +578,10 @@
       }
     }
 
+    tasks.withType(GenerateModuleMetadata) {
+      enabled = false
+    }
+
     model {
       tasks.generatePomFileForMavenDeploymentPublication {
         destination = file("$buildDir/generated-pom.xml")
diff --git a/build.sh b/build.sh
index a4a9fc8..ef3e2f6 100755
--- a/build.sh
+++ b/build.sh
@@ -13,5 +13,4 @@
 pushd gradle/docker
 docker build -t tuweni_test -f test.Dockerfile ../..
 popd
-docker run tuweni_test bash -c 'gradle --version >> /dev/null && gradle -Dorg.gradle.jvmargs="-Xmx4g -XX:MaxMetaspaceSize=512m" test'
-docker run -v `pwd`/build/libs:/home/gradle/build/libs tuweni_test bash -c 'gradle --version >> /dev/null && gradle -Dorg.gradle.jvmargs="-Xmx4g -XX:MaxMetcaspaceSize=512m" assemble integrationTest -x test'
\ No newline at end of file
+docker run -v `pwd`/build/libs:/home/gradle/build/libs tuweni_test bash -c 'gradle -Dorg.gradle.jvmargs="-Xmx2g -XX:MaxMetaspaceSize=512m" assemble'
diff --git a/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/DiscoveryServiceJavaTest.java b/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/DiscoveryServiceJavaTest.java
index 33272ff..6dbf19b 100644
--- a/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/DiscoveryServiceJavaTest.java
+++ b/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/DiscoveryServiceJavaTest.java
@@ -33,7 +33,7 @@
 
   @Test
   void setUpAndShutDownAsync() throws Exception {
-    DiscoveryService service = DiscoveryService.Companion.open(SECP256K1.KeyPair.random());
+    DiscoveryService service = DiscoveryService.Companion.open(SECP256K1.KeyPair.random(), 0, "127.0.0.1");
     service.shutdown();
     AsyncCompletion completion = service.awaitTerminationAsync();
     completion.join();
@@ -42,7 +42,7 @@
 
   @Test
   void lookupAsync() throws Exception {
-    DiscoveryService service = DiscoveryService.Companion.open(SECP256K1.KeyPair.random());
+    DiscoveryService service = DiscoveryService.Companion.open(SECP256K1.KeyPair.random(), 0, "127.0.0.1");
     AsyncResult<List<Peer>> result = service.lookupAsync(SECP256K1.KeyPair.random().publicKey());
     List<Peer> peers = result.get();
     service.shutdown();
diff --git a/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/v5/NodeDiscoveryServiceTest.java b/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/v5/NodeDiscoveryServiceTest.java
index d4e4654..da1c200 100644
--- a/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/v5/NodeDiscoveryServiceTest.java
+++ b/devp2p/src/integrationTest/java/org/apache/tuweni/devp2p/v5/NodeDiscoveryServiceTest.java
@@ -15,6 +15,8 @@
 import org.apache.tuweni.crypto.SECP256K1;
 import org.apache.tuweni.junit.BouncyCastleExtension;
 
+import java.net.InetSocketAddress;
+
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
@@ -23,7 +25,8 @@
 
   @Test
   void testStartAndStop() throws InterruptedException {
-    NodeDiscoveryService service = DefaultNodeDiscoveryService.open(SECP256K1.KeyPair.random(), 10000);
+    NodeDiscoveryService service =
+        DefaultNodeDiscoveryService.open(SECP256K1.KeyPair.random(), 10000, new InetSocketAddress("localhost", 10000));
     service.startAsync().join();
     service.terminateAsync().join();
   }
diff --git a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/DiscoveryServiceTest.kt b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/DiscoveryServiceTest.kt
index e933bfb..e958823 100644
--- a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/DiscoveryServiceTest.kt
+++ b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/DiscoveryServiceTest.kt
@@ -53,7 +53,9 @@
 
   @Test
   fun shouldStartAndShutdownService() {
-    val discoveryService = DiscoveryService.open(SECP256K1.KeyPair.random())
+    val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
+      keyPair = SECP256K1.KeyPair.random())
     assertFalse(discoveryService.isShutdown)
     assertFalse(discoveryService.isTerminated)
     discoveryService.shutdown()
@@ -69,10 +71,11 @@
   fun shouldRespondToPingAndRecordEndpoint() = runBlocking {
     val peerRepository = EphemeralPeerRepository()
     val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
       keyPair = SECP256K1.KeyPair.random(),
       peerRepository = peerRepository
     )
-    val address = InetSocketAddress(InetAddress.getLocalHost(), discoveryService.localPort)
+    val address = InetSocketAddress(InetAddress.getLoopbackAddress(), discoveryService.localPort)
 
     val clientKeyPair = SECP256K1.KeyPair.random()
     val client = CoroutineDatagramChannel.open()
@@ -94,12 +97,13 @@
   @Test
   fun shouldPingBootstrapNodeAndValidate() = runBlocking {
     val bootstrapKeyPair = SECP256K1.KeyPair.random()
-    val bootstrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress(0))
+    val bootstrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress("127.0.0.1", 0))
 
     val serviceKeyPair = SECP256K1.KeyPair.random()
     val peerRepository = EphemeralPeerRepository()
     val routingTable = DevP2PPeerRoutingTable(serviceKeyPair.publicKey())
     val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
       keyPair = serviceKeyPair,
       bootstrapURIs = listOf(
         URI("enode://" + bootstrapKeyPair.publicKey().toHexString() + "@127.0.0.1:" + bootstrapClient.localPort)
@@ -107,7 +111,7 @@
       peerRepository = peerRepository,
       routingTable = routingTable
     )
-    val address = InetSocketAddress(InetAddress.getLocalHost(), discoveryService.localPort)
+    val address = InetSocketAddress(InetAddress.getLoopbackAddress(), discoveryService.localPort)
 
     val ping = bootstrapClient.receivePacket() as PingPacket
     assertEquals(discoveryService.nodeId, ping.nodeId)
@@ -135,12 +139,13 @@
   @Test
   fun shouldIgnoreBootstrapNodeRespondingWithDifferentNodeId() = runBlocking {
     val bootstrapKeyPair = SECP256K1.KeyPair.random()
-    val bootstrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress(0))
+    val bootstrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress("127.0.0.1", 0))
 
     val serviceKeyPair = SECP256K1.KeyPair.random()
     val peerRepository = EphemeralPeerRepository()
     val routingTable = DevP2PPeerRoutingTable(serviceKeyPair.publicKey())
     val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
       keyPair = serviceKeyPair,
       bootstrapURIs = listOf(
         URI("enode://" + bootstrapKeyPair.publicKey().toHexString() + "@127.0.0.1:" + bootstrapClient.localPort)
@@ -148,7 +153,7 @@
       peerRepository = peerRepository,
       routingTable = routingTable
     )
-    val address = InetSocketAddress(InetAddress.getLocalHost(), discoveryService.localPort)
+    val address = InetSocketAddress(InetAddress.getLoopbackAddress(), discoveryService.localPort)
 
     val ping = bootstrapClient.receivePacket() as PingPacket
     assertEquals(discoveryService.nodeId, ping.nodeId)
@@ -170,9 +175,10 @@
   @Test
   fun shouldPingBootstrapNodeWithAdvertisedAddress() = runBlocking {
     val bootstrapKeyPair = SECP256K1.KeyPair.random()
-    val boostrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress(0))
+    val boostrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress("localhost", 0))
 
     val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
       keyPair = SECP256K1.KeyPair.random(),
       bootstrapURIs = listOf(
         URI("enode://" + bootstrapKeyPair.publicKey().bytes().toHexString() + "@127.0.0.1:" + boostrapClient.localPort)
@@ -193,9 +199,10 @@
   @Test
   fun shouldRetryPingsToBootstrapNodes() = runBlocking {
     val bootstrapKeyPair = SECP256K1.KeyPair.random()
-    val boostrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress(0))
+    val boostrapClient = CoroutineDatagramChannel.open().bind(InetSocketAddress("localhost", 0))
 
     val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
       keyPair = SECP256K1.KeyPair.random(),
       bootstrapURIs = listOf(
         URI("enode://" + bootstrapKeyPair.publicKey().bytes().toHexString() + "@127.0.0.1:" + boostrapClient.localPort)
@@ -221,10 +228,11 @@
   fun shouldRequirePingPongBeforeRespondingToFindNodesFromUnverifiedPeer() = runBlocking {
     val peerRepository = EphemeralPeerRepository()
     val discoveryService = DiscoveryService.open(
+      host = "127.0.0.1",
       keyPair = SECP256K1.KeyPair.random(),
       peerRepository = peerRepository
     )
-    val address = InetSocketAddress(InetAddress.getLocalHost(), discoveryService.localPort)
+    val address = InetSocketAddress(InetAddress.getLoopbackAddress(), discoveryService.localPort)
 
     val clientKeyPair = SECP256K1.KeyPair.random()
     val client = CoroutineDatagramChannel.open()
@@ -262,7 +270,8 @@
     ).map { s -> URI.create(s) }
     /* ktlint-enable */
     val discoveryService = DiscoveryService.open(
-      SECP256K1.KeyPair.random(),
+      host = "127.0.0.1",
+      keyPair = SECP256K1.KeyPair.random(),
       bootstrapURIs = boostrapNodes
     )
 
diff --git a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/AbstractIntegrationTest.kt b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/AbstractIntegrationTest.kt
index 621534b..b386bd4 100644
--- a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/AbstractIntegrationTest.kt
+++ b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/AbstractIntegrationTest.kt
@@ -48,9 +48,9 @@
     bootList: List<String> = emptyList(),
     enrStorage: ENRStorage = DefaultENRStorage(),
     keyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random(),
-    enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLocalHost(), udp = port),
+    enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLoopbackAddress(), udp = port),
     routingTable: RoutingTable = RoutingTable(enr),
-    address: InetSocketAddress = InetSocketAddress(InetAddress.getLocalHost(), port),
+    address: InetSocketAddress = InetSocketAddress(InetAddress.getLoopbackAddress(), port),
     authenticationProvider: AuthenticationProvider = DefaultAuthenticationProvider(keyPair, routingTable),
     topicTable: TopicTable = TopicTable(),
     ticketHolder: TicketHolder = TicketHolder(),
diff --git a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/DefaultNodeDiscoveryServiceTest.kt b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/DefaultNodeDiscoveryServiceTest.kt
index adb3556..15d6d88 100644
--- a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/DefaultNodeDiscoveryServiceTest.kt
+++ b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/DefaultNodeDiscoveryServiceTest.kt
@@ -39,11 +39,11 @@
 
   private val recipientKeyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random()
   private val recipientEnr: Bytes =
-    EthereumNodeRecord.toRLP(recipientKeyPair, ip = InetAddress.getLocalHost(), udp = 9001)
+    EthereumNodeRecord.toRLP(recipientKeyPair, ip = InetAddress.getLoopbackAddress(), udp = 9001)
   private val encodedEnr: String = "enr:${Base64URLSafe.encode(recipientEnr)}"
   private val keyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random()
   private val localPort: Int = 9000
-  private val bindAddress: InetSocketAddress = InetSocketAddress(localPort)
+  private val bindAddress: InetSocketAddress = InetSocketAddress("localhost", localPort)
   private val bootstrapENRList: List<String> = listOf(encodedEnr)
   private val enrSeq: Long = Instant.now().toEpochMilli()
   private val selfENR: Bytes = EthereumNodeRecord.toRLP(
@@ -66,7 +66,7 @@
   @Test
   fun startInitializesConnectorAndBootstraps() = runBlocking {
     val recipientSocket = CoroutineDatagramChannel.open()
-    recipientSocket.bind(InetSocketAddress(9001))
+    recipientSocket.bind(InetSocketAddress("localhost", 9001))
 
     nodeDiscoveryService.start()
 
diff --git a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultUdpConnectorTest.kt b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultUdpConnectorTest.kt
index b7ff405..93ea1d6 100644
--- a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultUdpConnectorTest.kt
+++ b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultUdpConnectorTest.kt
@@ -55,7 +55,7 @@
 
   @BeforeEach
   fun setUp() {
-    val address = InetSocketAddress(9090 + counter)
+    val address = InetSocketAddress(InetAddress.getLoopbackAddress(), 9090 + counter)
     val keyPair = SECP256K1.KeyPair.random()
     val selfEnr = EthereumNodeRecord.toRLP(keyPair, ip = address.address)
     connector = DefaultUdpConnector(address, keyPair, selfEnr)
@@ -97,7 +97,7 @@
 
     val destNodeId = Bytes.random(32)
 
-    val receiverAddress = InetSocketAddress(InetAddress.getLocalHost(), 5000)
+    val receiverAddress = InetSocketAddress(InetAddress.getLoopbackAddress(), 5000)
     val socketChannel = CoroutineDatagramChannel.open()
     socketChannel.bind(receiverAddress)
 
@@ -119,6 +119,7 @@
   @ExperimentalCoroutinesApi
   @Test
   fun attachObserverRegistersListener() = runBlocking {
+    println("yup")
     val observer = object : MessageObserver {
       var result: Channel<RandomMessage> = Channel()
       override fun observe(message: UdpMessage) {
@@ -127,19 +128,27 @@
         }
       }
     }
+    println("yup1")
     connector!!.attachObserver(observer)
+    println("yup2")
     connector!!.start()
+    println("yup3")
     assertTrue(observer.result.isEmpty)
     val codec = DefaultPacketCodec(
       SECP256K1.KeyPair.random(),
       RoutingTable(Bytes.random(32))
     )
+    println("yup4")
     val socketChannel = CoroutineDatagramChannel.open()
+    println("yup5")
     val message = RandomMessage()
+    println("yup6")
     val encodedRandomMessage = codec.encode(message, Hash.sha2_256(connector!!.getEnrBytes()))
     val buffer = ByteBuffer.wrap(encodedRandomMessage.content.toArray())
-    socketChannel.send(buffer, InetSocketAddress(InetAddress.getLocalHost(), 9090))
+    socketChannel.send(buffer, InetSocketAddress(InetAddress.getLoopbackAddress(), 9090))
+    println("yup7")
     val expectedResult = observer.result.receive()
+    println("yup8")
     assertEquals(expectedResult.data, message.data)
   }
 
@@ -166,7 +175,7 @@
     val message = RandomMessage()
     val encodedRandomMessage = codec.encode(message, Hash.sha2_256(connector!!.getEnrBytes()))
     val buffer = ByteBuffer.wrap(encodedRandomMessage.content.toArray())
-    socketChannel.send(buffer, InetSocketAddress(InetAddress.getLocalHost(), 9090))
+    socketChannel.send(buffer, InetSocketAddress(InetAddress.getLoopbackAddress(), 9090 + counter))
     assertTrue(observer.result.isEmpty)
   }
 }
diff --git a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicIntegrationTest.kt b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicIntegrationTest.kt
index 55e50bc..3057166 100644
--- a/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicIntegrationTest.kt
+++ b/devp2p/src/integrationTest/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicIntegrationTest.kt
@@ -66,7 +66,10 @@
 
     val topic = Topic("0x41")
     node2.topicTable.put(topic, node2.enr)
-    node2.topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost()))
+    node2.topicTable.put(
+      topic,
+      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress())
+    )
     val requestId = UdpMessage.requestId()
     val message = RegTopicMessage(requestId, node1.enr, topic.toBytes(), Bytes.EMPTY)
     val ticketMessage = sendAndAwait<TicketMessage>(node1, node2, message)
diff --git a/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/DiscoveryService.kt b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/DiscoveryService.kt
index 039f5bc..dd54a9f 100644
--- a/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/DiscoveryService.kt
+++ b/devp2p/src/main/kotlin/org/apache/tuweni/devp2p/DiscoveryService.kt
@@ -16,7 +16,6 @@
  */
 package org.apache.tuweni.devp2p
 
-import org.slf4j.LoggerFactory
 import com.google.common.cache.Cache
 import com.google.common.cache.CacheBuilder
 import kotlinx.coroutines.CancellationException
@@ -54,6 +53,7 @@
 import org.apache.tuweni.net.coroutines.CommonCoroutineGroup
 import org.apache.tuweni.net.coroutines.CoroutineChannelGroup
 import org.apache.tuweni.net.coroutines.CoroutineDatagramChannel
+import org.slf4j.LoggerFactory
 import java.io.IOException
 import java.net.InetAddress
 import java.net.InetSocketAddress
@@ -348,8 +348,10 @@
       advertiseTcpPort
     )
 
-    enr = EthereumNodeRecord.toRLP(keyPair, seq, enrData, selfEndpoint.address, selfEndpoint.tcpPort,
-      selfEndpoint.udpPort)
+    enr = EthereumNodeRecord.toRLP(
+      keyPair, seq, enrData, selfEndpoint.address, selfEndpoint.tcpPort,
+      selfEndpoint.udpPort
+    )
 
     val bootstrapping = bootstrapURIs.map { uri ->
       activityLatch.countUp()
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultAuthenticationProviderTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultAuthenticationProviderTest.kt
index 4b6d188..217d2ab 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultAuthenticationProviderTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultAuthenticationProviderTest.kt
@@ -31,7 +31,7 @@
 class DefaultAuthenticationProviderTest {
 
   private val providerKeyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random()
-  private val providerEnr: Bytes = EthereumNodeRecord.toRLP(providerKeyPair, ip = InetAddress.getLocalHost())
+  private val providerEnr: Bytes = EthereumNodeRecord.toRLP(providerKeyPair, ip = InetAddress.getLoopbackAddress())
   private val routingTable: RoutingTable = RoutingTable(providerEnr)
   private val authenticationProvider = DefaultAuthenticationProvider(providerKeyPair, routingTable)
 
@@ -40,7 +40,7 @@
     val keyPair = SECP256K1.KeyPair.random()
     val nonce = Bytes.fromHexString("0x012715E4EFA2464F51BE49BBC40836E5816B3552249F8AC00AD1BBDB559E44E9")
     val authTag = Bytes.fromHexString("0x39BBC27C8CFA3735DF436AC6")
-    val destEnr = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLocalHost())
+    val destEnr = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLoopbackAddress())
     val params = HandshakeInitParameters(nonce, authTag, destEnr)
 
     val result = authenticationProvider.authenticate(params)
@@ -60,7 +60,7 @@
     val keyPair = SECP256K1.KeyPair.random()
     val nonce = Bytes.fromHexString("0x012715E4EFA2464F51BE49BBC40836E5816B3552249F8AC00AD1BBDB559E44E9")
     val authTag = Bytes.fromHexString("0x39BBC27C8CFA3735DF436AC6")
-    val destEnr = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLocalHost())
+    val destEnr = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLoopbackAddress())
     val clientRoutingTable = RoutingTable(destEnr)
     val params = HandshakeInitParameters(nonce, authTag, providerEnr)
     val destNodeId = Hash.sha2_256(destEnr)
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultPacketCodecTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultPacketCodecTest.kt
index e04771f..82e5cba 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultPacketCodecTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/internal/DefaultPacketCodecTest.kt
@@ -38,7 +38,7 @@
 class DefaultPacketCodecTest {
 
   private val keyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random()
-  private val enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLocalHost())
+  private val enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLoopbackAddress())
   private val nodeId: Bytes = Hash.sha2_256(enr)
   private val routingTable: RoutingTable = RoutingTable(enr)
   private val authenticationProvider: AuthenticationProvider = DefaultAuthenticationProvider(keyPair, routingTable)
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/NodesMessageTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/NodesMessageTest.kt
index d65696d..f4f2a17 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/NodesMessageTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/NodesMessageTest.kt
@@ -32,9 +32,9 @@
     val requestId = Bytes.fromHexString("0xC6E32C5E89CAA754")
     val total = 10
     val nodeRecords = listOf(
-      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost(), udp = 9090),
-      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost(), udp = 9091),
-      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost(), udp = 9092)
+      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress(), udp = 9090),
+      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress(), udp = 9091),
+      EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress(), udp = 9092)
     )
     val message = NodesMessage(requestId, total, nodeRecords)
 
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/PongMessageTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/PongMessageTest.kt
index e0847c4..22204ac 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/PongMessageTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/packet/PongMessageTest.kt
@@ -25,7 +25,7 @@
   @Test
   fun encodeCreatesValidBytesSequence() {
     val requestId = Bytes.fromHexString("0xC6E32C5E89CAA754")
-    val message = PongMessage(requestId, 0, InetAddress.getLocalHost(), 9090)
+    val message = PongMessage(requestId, 0, InetAddress.getLoopbackAddress(), 9090)
 
     val encodingResult = message.encode()
 
@@ -39,7 +39,7 @@
 
   @Test
   fun getMessageTypeHasValidIndex() {
-    val message = PongMessage(recipientIp = InetAddress.getLocalHost(), recipientPort = 9090)
+    val message = PongMessage(recipientIp = InetAddress.getLoopbackAddress(), recipientPort = 9090)
 
     assert(2 == message.getMessageType().toInt())
   }
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/EnrStorageTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/EnrStorageTest.kt
index ede0d30..0db495d 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/EnrStorageTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/EnrStorageTest.kt
@@ -32,7 +32,7 @@
 
   @Test
   fun setPersistsAndFindRetrievesNodeRecord() {
-    val enr = EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost())
+    val enr = EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress())
 
     storage.set(enr)
 
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/RoutingTableTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/RoutingTableTest.kt
index fbf2ede..9792645 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/RoutingTableTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/storage/RoutingTableTest.kt
@@ -29,11 +29,11 @@
 class RoutingTableTest {
 
   private val keyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random()
-  private val enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLocalHost())
+  private val enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLoopbackAddress())
   private val routingTable: RoutingTable = RoutingTable(enr)
 
   private val newKeyPair = SECP256K1.KeyPair.random()
-  private val newEnr = EthereumNodeRecord.toRLP(newKeyPair, ip = InetAddress.getLocalHost())
+  private val newEnr = EthereumNodeRecord.toRLP(newKeyPair, ip = InetAddress.getLoopbackAddress())
 
   @Test
   fun addCreatesRecordInBucket() {
diff --git a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicTableTest.kt b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicTableTest.kt
index de31cad..4b570b8 100644
--- a/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicTableTest.kt
+++ b/devp2p/src/test/kotlin/org/apache/tuweni/devp2p/v5/topic/TopicTableTest.kt
@@ -28,7 +28,7 @@
 @ExtendWith(BouncyCastleExtension::class)
 class TopicTableTest {
   private val keyPair: SECP256K1.KeyPair = SECP256K1.KeyPair.random()
-  private val enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLocalHost())
+  private val enr: Bytes = EthereumNodeRecord.toRLP(keyPair, ip = InetAddress.getLoopbackAddress())
 
   private val topicTable = TopicTable(TABLE_CAPACITY, QUEUE_CAPACITY)
 
@@ -43,8 +43,8 @@
   @Test
   fun putAddNodeToNotEmptyQueueShouldReturnWaitingTime() {
     val topic = Topic("A")
-    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost()))
-    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost()))
+    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress()))
+    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress()))
 
     val waitTime = topicTable.put(topic, enr)
 
@@ -64,8 +64,8 @@
   @Test
   fun getNodesReturnNodesThatProvidesTopic() {
     val topic = Topic("A")
-    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost()))
-    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLocalHost()))
+    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress()))
+    topicTable.put(topic, EthereumNodeRecord.toRLP(SECP256K1.KeyPair.random(), ip = InetAddress.getLoopbackAddress()))
 
     val nodes = topicTable.getNodes(topic)
 
diff --git a/gossip/src/test/java/org/apache/tuweni/gossip/GossipCommandLineOptionsTest.java b/gossip/src/test/java/org/apache/tuweni/gossip/GossipCommandLineOptionsTest.java
index e8ad88b..d70328d 100644
--- a/gossip/src/test/java/org/apache/tuweni/gossip/GossipCommandLineOptionsTest.java
+++ b/gossip/src/test/java/org/apache/tuweni/gossip/GossipCommandLineOptionsTest.java
@@ -18,7 +18,6 @@
 import org.apache.tuweni.config.Configuration;
 
 import java.net.URI;
-import java.net.UnknownHostException;
 
 import org.junit.jupiter.api.Test;
 
@@ -55,7 +54,7 @@
   }
 
   @Test
-  void operateFromConfig() throws UnknownHostException {
+  void operateFromConfig() {
     Configuration config = Configuration
         .fromToml(
             ""
@@ -74,7 +73,7 @@
   }
 
   @Test
-  void invalidConfigFilePort() throws UnknownHostException {
+  void invalidConfigFilePort() {
     Configuration config = Configuration
         .fromToml(
             ""
@@ -99,7 +98,7 @@
   }
 
   @Test
-  void cliConfigOverConfigFile() throws UnknownHostException {
+  void cliConfigOverConfigFile() {
     Configuration config = Configuration
         .fromToml(
             ""
diff --git a/gradle/build.Dockerfile b/gradle/build.Dockerfile
index 358d45c..afee8d4 100644
--- a/gradle/build.Dockerfile
+++ b/gradle/build.Dockerfile
@@ -12,4 +12,4 @@
 # Build image used for github actions
 FROM gradle:6.3-jdk11
 
-RUN apt-get update && apt-get install -y libsodium-dev && apt-get clean
\ No newline at end of file
+RUN apt-get update && apt-get install -y libsodium-dev gpg && apt-get clean
\ No newline at end of file
diff --git a/gradle/tuweni-test.asc b/gradle/tuweni-test.asc
new file mode 100644
index 0000000..9505d0d
--- /dev/null
+++ b/gradle/tuweni-test.asc
@@ -0,0 +1,157 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+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
+=6qjl
+-----END PGP PRIVATE KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+g3bCbgyoJoU=
+=9Wkn
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/hobbits-relayer/src/integrationTest/kotlin/org/apache/tuweni/relayer/RelayerAppTest.kt b/hobbits-relayer/src/integrationTest/kotlin/org/apache/tuweni/relayer/RelayerAppTest.kt
index 1829197..a8794df 100644
--- a/hobbits-relayer/src/integrationTest/kotlin/org/apache/tuweni/relayer/RelayerAppTest.kt
+++ b/hobbits-relayer/src/integrationTest/kotlin/org/apache/tuweni/relayer/RelayerAppTest.kt
@@ -38,9 +38,9 @@
     val ref = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
-    RelayerApp.main(arrayOf("-b", "tcp://localhost:21000", "-t", "tcp://0.0.0.0:22000"))
+    RelayerApp.main(arrayOf("-b", "tcp://localhost:21000", "-t", "tcp://localhost:22000"))
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 22000, handler = ref::set)
+      client1.createTCPEndpoint("foo", networkInterface = "127.0.0.1", port = 22000, handler = ref::set)
       client1.start()
       client2.start()
       client2.sendMessage(
diff --git a/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt b/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt
index 0c46e2b..c3e1d47 100644
--- a/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt
+++ b/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt
@@ -38,13 +38,19 @@
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
+      client1.createTCPEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        portUpdateListener = newPort::set
+      )
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort.get()
       )
     }
@@ -62,13 +68,20 @@
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 0, handler = ref::set, tls = true, portUpdateListener = newPort::set)
+      client1.createTCPEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        tls = true,
+        portUpdateListener = newPort::set
+      )
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort.get()
       )
     }
@@ -87,20 +100,32 @@
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
-      client1.createTCPEndpoint("bar", port = 0, handler = ref2::set, portUpdateListener = newPort2::set)
+      client1.createTCPEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        portUpdateListener = newPort::set
+      )
+      client1.createTCPEndpoint(
+        "bar",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref2::set,
+        portUpdateListener = newPort2::set
+      )
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort.get()
       )
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort2.get()
       )
     }
@@ -122,11 +147,21 @@
     val newPort = AtomicInteger()
 
     runBlocking {
-      client1.createHTTPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
+      client1.createHTTPEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        portUpdateListener = newPort::set
+      )
       client1.start()
       client2.start()
-      client2.sendMessage(Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
-        headers = Bytes.random(16)), Transport.HTTP, "0.0.0.0", newPort.get())
+      client2.sendMessage(
+        Message(
+          protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
+          headers = Bytes.random(16)
+        ), Transport.HTTP, "127.0.0.1", newPort.get()
+      )
     }
     Thread.sleep(200)
     assertEquals(Bytes.fromHexString("deadbeef"), ref.get().body)
@@ -143,20 +178,32 @@
     val newPort = AtomicInteger()
     val newPort2 = AtomicInteger()
     runBlocking {
-      client1.createHTTPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
-      client1.createHTTPEndpoint("bar", port = 0, handler = ref2::set, portUpdateListener = newPort2::set)
+      client1.createHTTPEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        portUpdateListener = newPort::set
+      )
+      client1.createHTTPEndpoint(
+        "bar",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref2::set,
+        portUpdateListener = newPort2::set
+      )
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.HTTP,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort.get()
       )
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.HTTP,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort2.get()
       )
     }
@@ -180,8 +227,12 @@
       client1.createUDPEndpoint("foo", "localhost", 15000, ref::set)
       client1.start()
       client2.start()
-      client2.sendMessage(Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
-        headers = Bytes.random(16)), Transport.UDP, "localhost", 15000)
+      client2.sendMessage(
+        Message(
+          protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
+          headers = Bytes.random(16)
+        ), Transport.UDP, "localhost", 15000
+      )
     }
     Thread.sleep(200)
     assertEquals(Bytes.fromHexString("deadbeef"), ref.get().body)
@@ -232,11 +283,21 @@
     val newPort = AtomicInteger()
 
     runBlocking {
-      client1.createWSEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
+      client1.createWSEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        portUpdateListener = newPort::set
+      )
       client1.start()
       client2.start()
-      client2.sendMessage(Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
-        headers = Bytes.random(16)), Transport.WS, "0.0.0.0", newPort.get())
+      client2.sendMessage(
+        Message(
+          protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
+          headers = Bytes.random(16)
+        ), Transport.WS, "127.0.0.1", newPort.get()
+      )
     }
     Thread.sleep(200)
     assertEquals(Bytes.fromHexString("deadbeef"), ref.get().body)
@@ -255,20 +316,32 @@
     runBlocking {
       client1.exceptionHandler { it.printStackTrace() }
       client2.exceptionHandler { it.printStackTrace() }
-      client1.createWSEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
-      client1.createWSEndpoint("bar", port = 0, handler = ref2::set, portUpdateListener = newPort2::set)
+      client1.createWSEndpoint(
+        "foo",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref::set,
+        portUpdateListener = newPort::set
+      )
+      client1.createWSEndpoint(
+        "bar",
+        networkInterface = "127.0.0.1",
+        port = 0,
+        handler = ref2::set,
+        portUpdateListener = newPort2::set
+      )
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.WS,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort.get()
       )
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.WS,
-        "0.0.0.0",
+        "127.0.0.1",
         newPort2.get()
       )
     }
diff --git a/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/RelayerTest.kt b/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/RelayerTest.kt
index 74bba8d..48a4130 100644
--- a/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/RelayerTest.kt
+++ b/hobbits/src/integrationTest/kotlin/org/apache/tuweni/hobbits/RelayerTest.kt
@@ -34,9 +34,9 @@
     val ref = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
-    val relayer = Relayer(vertx, "tcp://localhost:22000", "tcp://0.0.0.0:20000", { })
+    val relayer = Relayer(vertx, "tcp://localhost:22000", "tcp://localhost:20000", { })
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 20000, handler = ref::set)
+      client1.createTCPEndpoint("foo", networkInterface = "127.0.0.1", port = 20000, handler = ref::set)
       client1.start()
       client2.start()
       relayer.start()
@@ -59,9 +59,9 @@
     val ref = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
-    val relayer = Relayer(vertx, "http://localhost:13000", "http://0.0.0.0:11000", { })
+    val relayer = Relayer(vertx, "http://localhost:13000", "http://localhost:11000", { })
     runBlocking {
-      client1.createHTTPEndpoint("foo", port = 11000, handler = ref::set)
+      client1.createHTTPEndpoint("foo", networkInterface = "127.0.0.1", port = 11000, handler = ref::set)
       client1.start()
       client2.start()
       relayer.start()
@@ -109,7 +109,7 @@
     val ref = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
-    val relayer = Relayer(vertx, "ws://localhost:32000", "ws://0.0.0.0:30000", { })
+    val relayer = Relayer(vertx, "ws://localhost:32000", "ws://localhost:30000", { })
     runBlocking {
       client1.createWSEndpoint("foo", port = 30000, handler = ref::set)
       client1.start()
diff --git a/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt b/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt
index 7eee79f..593e77e 100644
--- a/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt
+++ b/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt
@@ -282,10 +282,10 @@
           if (it.failed()) {
             completion.completeExceptionally(it.cause())
           } else {
-            completion.complete()
             if (endpoint.port == 0) {
               endpoint.updatePort(it.result().actualPort())
             }
+            completion.complete()
           }
         }
         completions.add(completion)
@@ -307,10 +307,10 @@
           if (it.failed()) {
             completion.completeExceptionally(it.cause())
           } else {
-            completion.complete()
             if (endpoint.port == 0) {
               endpoint.updatePort(it.result().actualPort())
             }
+            completion.complete()
           }
         }
         completions.add(completion)
@@ -367,10 +367,10 @@
           if (it.failed()) {
             completion.completeExceptionally(it.cause())
           } else {
-            completion.complete()
             if (endpoint.port == 0) {
               endpoint.updatePort(it.result().actualPort())
             }
+            completion.complete()
           }
         }
         completions.add(completion)
diff --git a/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt b/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt
index 6088852..d04b0f0 100644
--- a/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt
+++ b/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt
@@ -57,7 +57,7 @@
     val server = HobbitsTransport(vertx)
     server.start()
     val exception: IllegalStateException = assertThrows {
-      server.createHTTPEndpoint(handler = {})
+      server.createHTTPEndpoint(networkInterface = "127.0.0.1", handler = {})
     }
     assertEquals("Server already started", exception.message)
   }
diff --git a/junit/src/main/java/org/apache/tuweni/junit/RedisServerExtension.java b/junit/src/main/java/org/apache/tuweni/junit/RedisServerExtension.java
index fab43e7..ec81477 100644
--- a/junit/src/main/java/org/apache/tuweni/junit/RedisServerExtension.java
+++ b/junit/src/main/java/org/apache/tuweni/junit/RedisServerExtension.java
@@ -53,7 +53,7 @@
     int port = range;
     while (port < range + 100) {
       try {
-        ServerSocket socket = new ServerSocket(port, 0, InetAddress.getLocalHost());
+        ServerSocket socket = new ServerSocket(port, 0, InetAddress.getLoopbackAddress());
         socket.setReuseAddress(false);
         socket.close();
         return port;
diff --git a/net-coroutines/src/integrationTest/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannelTest.kt b/net-coroutines/src/integrationTest/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannelTest.kt
index 559059a..db62e8f 100644
--- a/net-coroutines/src/integrationTest/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannelTest.kt
+++ b/net-coroutines/src/integrationTest/kotlin/org/apache/tuweni/net/coroutines/CoroutineSocketChannelTest.kt
@@ -39,7 +39,7 @@
     listenChannel.bind(null)
     assertNotNull(listenChannel.localAddress)
     assertTrue(listenChannel.localPort > 0)
-    val addr = InetSocketAddress(InetAddress.getLocalHost(), listenChannel.localPort)
+    val addr = InetSocketAddress(InetAddress.getLoopbackAddress(), listenChannel.localPort)
 
     var didBlock = false
     val job = async {
@@ -60,7 +60,8 @@
   fun shouldBlockSocketChannelWhileReading() = runBlocking {
     val listenChannel = CoroutineServerSocketChannel.open()
     listenChannel.bind(null)
-    val addr = InetSocketAddress(InetAddress.getLocalHost(), (listenChannel.localAddress as InetSocketAddress).port)
+    val addr =
+      InetSocketAddress(InetAddress.getLoopbackAddress(), (listenChannel.localAddress as InetSocketAddress).port)
 
     val serverJob = async {
       val serverChannel = listenChannel.accept()
@@ -105,7 +106,8 @@
   fun shouldCloseSocketChannelWhenRemoteClosed() = runBlocking {
     val listenChannel = CoroutineServerSocketChannel.open()
     listenChannel.bind(null)
-    val addr = InetSocketAddress(InetAddress.getLocalHost(), (listenChannel.localAddress as InetSocketAddress).port)
+    val addr =
+      InetSocketAddress(InetAddress.getLoopbackAddress(), (listenChannel.localAddress as InetSocketAddress).port)
 
     val serverJob = async {
       val serverChannel = listenChannel.accept()
diff --git a/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannelTest.kt b/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannelTest.kt
index b8acdaa..3df1a54 100644
--- a/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannelTest.kt
+++ b/net-coroutines/src/test/kotlin/org/apache/tuweni/net/coroutines/CoroutineDatagramChannelTest.kt
@@ -52,7 +52,7 @@
     didBlock = true
 
     val socket = DatagramSocket()
-    socket.connect(InetAddress.getLocalHost(), (channel.localAddress as InetSocketAddress).port)
+    socket.connect(InetAddress.getLoopbackAddress(), (channel.localAddress as InetSocketAddress).port)
 
     val testData = byteArrayOf(1, 2, 3, 4, 5)
     socket.send(DatagramPacket(testData, 5))
@@ -72,7 +72,7 @@
     val socket = DatagramSocket()
 
     val channel = CoroutineDatagramChannel.open()
-    val address = InetSocketAddress(InetAddress.getLocalHost(), socket.localPort)
+    val address = InetSocketAddress(InetAddress.getLoopbackAddress(), socket.localPort)
 
     val testData = byteArrayOf(1, 2, 3, 4, 5)
     val src = ByteBuffer.wrap(testData)
diff --git a/scuttlebutt-discovery/src/integrationTest/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java b/scuttlebutt-discovery/src/integrationTest/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
index 6b8c1ed..5942cf6 100644
--- a/scuttlebutt-discovery/src/integrationTest/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
+++ b/scuttlebutt-discovery/src/integrationTest/java/org/apache/tuweni/scuttlebutt/discovery/ScuttlebuttLocalDiscoveryServiceTest.java
@@ -40,14 +40,16 @@
 
   @Test
   void startStop(@VertxInstance Vertx vertx) throws Exception {
-    ScuttlebuttLocalDiscoveryService service = new ScuttlebuttLocalDiscoveryService(vertx, 0, "0.0.0.0", "233.0.10.0");
+    ScuttlebuttLocalDiscoveryService service =
+        new ScuttlebuttLocalDiscoveryService(vertx, 0, "127.0.0.1", "233.0.10.0");
     service.start().join();
     service.stop().join();
   }
 
   @Test
   void startStart(@VertxInstance Vertx vertx) throws Exception {
-    ScuttlebuttLocalDiscoveryService service = new ScuttlebuttLocalDiscoveryService(vertx, 0, "0.0.0.0", "233.0.10.0");
+    ScuttlebuttLocalDiscoveryService service =
+        new ScuttlebuttLocalDiscoveryService(vertx, 0, "127.0.0.1", "233.0.10.0");
     service.start().join();
     service.start().join();
     service.stop().join();
@@ -57,12 +59,13 @@
   void invalidMulticastAddress(@VertxInstance Vertx vertx) throws Exception {
     assertThrows(
         IllegalArgumentException.class,
-        () -> new ScuttlebuttLocalDiscoveryService(vertx, 8008, "0.0.0.0", "10.0.0.0"));
+        () -> new ScuttlebuttLocalDiscoveryService(vertx, 8008, "127.0.0.1", "10.0.0.0"));
   }
 
   @Test
   void stopFirst(@VertxInstance Vertx vertx) throws Exception {
-    ScuttlebuttLocalDiscoveryService service = new ScuttlebuttLocalDiscoveryService(vertx, 0, "0.0.0.0", "233.0.10.0");
+    ScuttlebuttLocalDiscoveryService service =
+        new ScuttlebuttLocalDiscoveryService(vertx, 0, "127.0.0.1", "233.0.10.0");
     service.stop().join();
     service.start().join();
     service.stop().join();
diff --git a/scuttlebutt-handshake/src/integrationTest/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java b/scuttlebutt-handshake/src/integrationTest/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
index 6e39a67..1822508 100644
--- a/scuttlebutt-handshake/src/integrationTest/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
+++ b/scuttlebutt-handshake/src/integrationTest/java/org/apache/tuweni/scuttlebutt/handshake/vertx/VertxIntegrationTest.java
@@ -97,7 +97,7 @@
     AtomicReference<MyServerHandler> serverHandlerRef = new AtomicReference<>();
     SecureScuttlebuttVertxServer server = new SecureScuttlebuttVertxServer(
         vertx,
-        new InetSocketAddress("0.0.0.0", 20000),
+        new InetSocketAddress("localhost", 20000),
         serverKeyPair,
         networkIdentifier,
         (streamServer, fn) -> {
@@ -109,7 +109,8 @@
 
     SecureScuttlebuttVertxClient client =
         new SecureScuttlebuttVertxClient(vertx, Signature.KeyPair.random(), networkIdentifier);
-    MyClientHandler handler = client.connectTo(20000, "0.0.0.0", serverKeyPair.publicKey(), MyClientHandler::new).get();
+    MyClientHandler handler =
+        client.connectTo(20000, "localhost", serverKeyPair.publicKey(), MyClientHandler::new).get();
 
     Thread.sleep(1000);
     assertNotNull(handler);
