diff --git a/pom.xml b/pom.xml
index 7639d32..912da3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,7 @@
 		
 		<!-- dependecy versions -->
 		<jackson-datatype-json-org.version>1.8.0</jackson-datatype-json-org.version>
-		<junit.version>4.12</junit.version>
+		<junit.jupiter.version>5.0.0-M2</junit.jupiter.version>
 		<log4j.version>1.2.17</log4j.version>
 		<tunit.version>0.0.0</tunit.version>
 		
@@ -78,12 +78,15 @@
 			<artifactId>jackson-datatype-json-org</artifactId>
 			<version>${jackson-datatype-json-org.version}</version>
 		</dependency>
+
 		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>${junit.version}</version>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-api</artifactId>
+			<version>${junit.jupiter.version}</version>
 			<scope>test</scope>
 		</dependency>
+
+
 		<dependency>
 			<groupId>io.teknek</groupId>
 			<artifactId>tunit</artifactId>
diff --git a/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java b/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java
index 98acb05..251550b 100644
--- a/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java
+++ b/src/test/java/org/apache/gossip/ShutdownDeadtimeTest.java
@@ -31,10 +31,10 @@
 
 
 import org.apache.log4j.Logger;
-import org.junit.Test;
 
 import org.apache.gossip.event.GossipListener;
 import org.apache.gossip.event.GossipState;
+import org.junit.jupiter.api.Test;
 
 public class ShutdownDeadtimeTest {
 
diff --git a/src/test/java/org/apache/gossip/StartupSettingsTest.java b/src/test/java/org/apache/gossip/StartupSettingsTest.java
index 4b064ec..ed069c3 100644
--- a/src/test/java/org/apache/gossip/StartupSettingsTest.java
+++ b/src/test/java/org/apache/gossip/StartupSettingsTest.java
@@ -19,9 +19,9 @@
 
 import org.apache.log4j.Logger;
 import org.json.JSONException;
-import org.junit.Test;
 
 import io.teknek.tunit.TUnit;
+import org.junit.jupiter.api.Test;
 
 import java.io.File;
 import java.io.FileOutputStream;
diff --git a/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java b/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java
index dd7d021..350fc6f 100644
--- a/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java
+++ b/src/test/java/org/apache/gossip/TenNodeThreeSeedTest.java
@@ -30,10 +30,10 @@
 
 
 import org.apache.log4j.Logger;
-import org.junit.Test;
 
 import org.apache.gossip.event.GossipListener;
 import org.apache.gossip.event.GossipState;
+import org.junit.jupiter.api.Test;
 
 public class TenNodeThreeSeedTest {
   private static final Logger log = Logger.getLogger( TenNodeThreeSeedTest.class );
diff --git a/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java b/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java
index 4d77460..6c63516 100644
--- a/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java
+++ b/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java
@@ -23,8 +23,7 @@
 import org.apache.gossip.event.GossipListener;
 import org.apache.gossip.event.GossipState;
 import org.apache.gossip.manager.random.RandomGossipManager;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.management.Notification;
 import javax.management.NotificationListener;
@@ -34,6 +33,11 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.expectThrows;
+
+
 public class RandomGossipManagerBuilderTest {
 
   public static class TestGossipListener implements GossipListener {
@@ -50,21 +54,27 @@
     }
   }
 
-  @Test(expected=IllegalArgumentException.class)
+  @Test
   public void idShouldNotBeNull() {
-    RandomGossipManager.newBuilder().cluster("aCluster").build();
+    expectThrows(IllegalArgumentException.class,() -> {
+        RandomGossipManager.newBuilder().cluster("aCluster").build();
+    });
   }
 
-  @Test(expected=IllegalArgumentException.class)
+  @Test
   public void clusterShouldNotBeNull() {
-    RandomGossipManager.newBuilder().withId("id").build();
+      expectThrows(IllegalArgumentException.class,() -> {
+          RandomGossipManager.newBuilder().withId("id").build();
+      });
   }
 
-  @Test(expected=IllegalArgumentException.class)
+  @Test
   public void settingsShouldNotBeNull() {
-    RandomGossipManager.newBuilder().withId("id").cluster("aCluster").build();
-  }
+      expectThrows(IllegalArgumentException.class,() -> {
+          RandomGossipManager.newBuilder().withId("id").cluster("aCluster").build();
+      });
 
+  }
   @Test
   public void createMembersListIfNull() throws URISyntaxException {
     RandomGossipManager gossipManager = RandomGossipManager.newBuilder()
@@ -74,7 +84,7 @@
         .settings(new GossipSettings())
         .gossipMembers(null).build();
 
-    Assert.assertNotNull(gossipManager.getLiveMembers());
+    assertNotNull(gossipManager.getLiveMembers());
   }
 
   @Test
@@ -89,8 +99,8 @@
         .settings(new GossipSettings())
         .uri(new URI("udp://localhost:8000"))
         .gossipMembers(memberList).build();
-    Assert.assertEquals(1, gossipManager.getLiveMembers().size());
-    Assert.assertEquals(member.getId(), gossipManager.getLiveMembers().get(0).getId());
+    assertEquals(1, gossipManager.getLiveMembers().size());
+    assertEquals(member.getId(), gossipManager.getLiveMembers().get(0).getId());
   }
 
 }
\ No newline at end of file
