diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml
index cc430d85..d3ddc08f 100644
--- a/iabgpp-encoder/pom.xml
+++ b/iabgpp-encoder/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>com.iabgpp</groupId>
         <artifactId>iabgpp-core</artifactId>
-        <version>3.0.4-SNAPSHOT</version>
+        <version>3.0.8-SNAPSHOT</version>
     </parent>
 
     <artifactId>iabgpp-encoder</artifactId>
@@ -17,11 +17,27 @@
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-engine</artifactId>
-            <version>5.9.0</version>
+            <version>5.9.2</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.22.2</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.junit.platform</groupId>
+                        <artifactId>junit-platform-surefire-provider</artifactId>
+                        <version>1.3.2</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
+
     <profiles>
         <profile>
             <id>release</id>
diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java
index 3afec30d..b22dee66 100644
--- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java
+++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java
@@ -224,18 +224,18 @@ public Boolean getUseNonStandardStacks() {
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getSpecialFeatureExpressConsent() {
-    return (List<Integer>) this.fields.get(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT).getValue();
+  public List<Boolean> getSpecialFeatureExpressConsent() {
+    return (List<Boolean>) this.fields.get(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT).getValue();
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPurposesExpressConsent() {
-    return (List<Integer>) this.fields.get(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT).getValue();
+  public List<Boolean> getPurposesExpressConsent() {
+    return (List<Boolean>) this.fields.get(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT).getValue();
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPurposesImpliedConsent() {
-    return (List<Integer>) this.fields.get(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT).getValue();
+  public List<Boolean> getPurposesImpliedConsent() {
+    return (List<Boolean>) this.fields.get(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT).getValue();
   }
 
   @SuppressWarnings("unchecked")
@@ -253,13 +253,13 @@ public Integer getPubPurposesSegmentType() {
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPubPurposesExpressConsent() {
-    return (List<Integer>) this.fields.get(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT).getValue();
+  public List<Boolean> getPubPurposesExpressConsent() {
+    return (List<Boolean>) this.fields.get(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT).getValue();
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPubPurposesImpliedConsent() {
-    return (List<Integer>) this.fields.get(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT).getValue();
+  public List<Boolean> getPubPurposesImpliedConsent() {
+    return (List<Boolean>) this.fields.get(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT).getValue();
   }
 
   public Integer getNumCustomPurposes() {
diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java
index 1b1b2489..5ef06409 100644
--- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java
+++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java
@@ -276,18 +276,18 @@ public Boolean getUseNonStandardStacks() {
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getSpecialFeatureOptins() {
-    return (List<Integer>) this.fields.get(TcfEuV2Field.SPECIAL_FEATURE_OPTINS).getValue();
+  public List<Boolean> getSpecialFeatureOptins() {
+    return (List<Boolean>) this.fields.get(TcfEuV2Field.SPECIAL_FEATURE_OPTINS).getValue();
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPurposeConsents() {
-    return (List<Integer>) this.fields.get(TcfEuV2Field.PURPOSE_CONSENTS).getValue();
+  public List<Boolean> getPurposeConsents() {
+    return (List<Boolean>) this.fields.get(TcfEuV2Field.PURPOSE_CONSENTS).getValue();
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPurposeLegitimateInterests() {
-    return (List<Integer>) this.fields.get(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS).getValue();
+  public List<Boolean> getPurposeLegitimateInterests() {
+    return (List<Boolean>) this.fields.get(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS).getValue();
   }
 
   public Boolean getPurposeOneTreatment() {
@@ -318,13 +318,13 @@ public Integer getPublisherPurposesSegmentType() {
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPublisherConsents() {
-    return (List<Integer>) this.fields.get(TcfEuV2Field.PUBLISHER_CONSENTS).getValue();
+  public List<Boolean> getPublisherConsents() {
+    return (List<Boolean>) this.fields.get(TcfEuV2Field.PUBLISHER_CONSENTS).getValue();
   }
 
   @SuppressWarnings("unchecked")
-  public List<Integer> getPublisherLegitimateInterests() {
-    return (List<Integer>) this.fields.get(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS).getValue();
+  public List<Boolean> getPublisherLegitimateInterests() {
+    return (List<Boolean>) this.fields.get(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS).getValue();
   }
 
   public Integer getNumCustomPurposes() {
diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml
index a0b3d28f..47cef939 100644
--- a/iabgpp-extras-jackson/pom.xml
+++ b/iabgpp-extras-jackson/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>iabgpp-core</artifactId>
         <groupId>com.iabgpp</groupId>
-        <version>3.0.4-SNAPSHOT</version>
+        <version>3.0.8-SNAPSHOT</version>
     </parent>
 
     <artifactId>iabgpp-extras-jackson</artifactId>
@@ -15,32 +15,48 @@
 
     <dependencies>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.2</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.9.2</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>com.iabgpp</groupId>
             <artifactId>iabgpp-extras</artifactId>
-            <version>3.0.4-SNAPSHOT</version>
+            <version>3.0.8-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
-            <version>2.10.3</version>
+            <version>2.14.1</version>
         </dependency>
 
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
             <artifactId>jackson-datatype-jsr310</artifactId>
-            <version>2.10.3</version>
+            <version>2.14.1</version>
         </dependency>
 
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.22.2</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.junit.platform</groupId>
+                        <artifactId>junit-platform-surefire-provider</artifactId>
+                        <version>1.3.2</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
+
     <profiles>
         <profile>
             <id>release</id>
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java
index 98ca8447..671a5321 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java
@@ -1,5 +1,11 @@
 package com.iab.gpp.extras.jackson.cmp;
 
+import java.io.IOException;
+import java.time.Instant;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
 /*-
  * #%L
  * IAB TCF Java CMP List Jackson
@@ -21,20 +27,14 @@
  */
 
 import com.iab.gpp.extras.cmp.CmpList;
-import com.iab.gpp.extras.jackson.TestUtil;
 import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.time.Instant;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class CmpListTest {
 
     private static CmpList cmpList;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws IOException {
         Loader loader = new Loader();
         cmpList = loader.cmpList(TestUtil.getCmpList());
@@ -42,11 +42,11 @@ public static void setUpBeforeClass() throws IOException {
 
     @Test
     public void getLastUpdated() {
-        Assert.assertEquals(Instant.parse("2020-04-09T17:03:06Z"), cmpList.getLastUpdated());
+        Assertions.assertEquals(Instant.parse("2020-04-09T17:03:06Z"), cmpList.getLastUpdated());
     }
 
     @Test
     public void getCmps() {
-        Assert.assertEquals(12, cmpList.getCmps().size());
+        Assertions.assertEquals(12, cmpList.getCmps().size());
     }
 }
\ No newline at end of file
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java
index d6f54381..93b17cfa 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpTest.java
@@ -1,5 +1,11 @@
 package com.iab.gpp.extras.jackson.cmp;
 
+import java.io.IOException;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
 /*-
  * #%L
  * IAB TCF Java CMP List Jackson
@@ -21,14 +27,8 @@
  */
 
 import com.iab.gpp.extras.cmp.Cmp;
-import com.iab.gpp.extras.jackson.TestUtil;
 import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.List;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class CmpTest {
 
@@ -37,7 +37,7 @@ public class CmpTest {
     private static final int CMP_ID_SELECTED_FOR_TEST = 3;
     private static final int DELETED_CMP_ID_SELECTED_FOR_TEST = 23;
 
-    @BeforeClass
+    @BeforeAll
     public static void setupBeforeClass() throws IOException {
         Loader loader = new Loader();
         List<Cmp> cmps = loader.cmpList(TestUtil.getCmpList()).getCmps();
@@ -48,29 +48,29 @@ public static void setupBeforeClass() throws IOException {
 
     @Test
     public void getId() {
-        Assert.assertEquals(3, cmpThree.getId());
+        Assertions.assertEquals(3, cmpThree.getId());
     }
 
     @Test
     public void getName() {
         String name = "LiveRamp";
-        Assert.assertEquals(name, cmpThree.getName());
+        Assertions.assertEquals(name, cmpThree.getName());
     }
 
     @Test
     public void isCommercial() {
-        Assert.assertTrue(cmpThree.isCommercial());
+        Assertions.assertTrue(cmpThree.isCommercial());
     }
 
     @Test
     public void getDeletedDate() {
-        Assert.assertNull(cmpThree.getDeletedDate().orElse(null));
-        Assert.assertNotNull(cmpTwentyThree.getDeletedDate().orElse(null));
+        Assertions.assertNull(cmpThree.getDeletedDate().orElse(null));
+        Assertions.assertNotNull(cmpTwentyThree.getDeletedDate().orElse(null));
     }
 
     @Test
     public void isDeleted() {
-        Assert.assertFalse(cmpThree.isDeleted());
-        Assert.assertTrue(cmpTwentyThree.isDeleted());
+        Assertions.assertFalse(cmpThree.isDeleted());
+        Assertions.assertTrue(cmpTwentyThree.isDeleted());
     }
 }
\ No newline at end of file
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java
index 261ee812..5b74f5f7 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/FeatureTest.java
@@ -1,5 +1,11 @@
 package com.iab.gpp.extras.jackson.gvl;
 
+import java.io.IOException;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
 /*-
  * #%L
  * IAB TCF Java GVL Jackson
@@ -21,21 +27,15 @@
  */
 
 import com.iab.gpp.extras.gvl.Feature;
-import com.iab.gpp.extras.jackson.TestUtil;
 import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.List;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class FeatureTest {
 
     private static Feature featureTwo;
     private static final int FEATURE_ID_SELECTED_FOR_TEST = 2;
 
-    @BeforeClass
+    @BeforeAll
     public static void setupBeforeClass() throws IOException {
         Loader loader = new Loader();
         List<Feature> features = loader.globalVendorList(TestUtil.getGlobalVendorList()).getFeatures();
@@ -44,26 +44,26 @@ public static void setupBeforeClass() throws IOException {
 
     @Test
     public void testGetId() {
-        Assert.assertEquals(2, featureTwo.getId());
+        Assertions.assertEquals(2, featureTwo.getId());
     }
 
     @Test
     public void testGetName() {
         String expectedName = "Link different devices";
-        Assert.assertEquals(expectedName, featureTwo.getName());
+        Assertions.assertEquals(expectedName, featureTwo.getName());
     }
 
     @Test
     public void testGetDescription() {
         String expectedDescription =
                 "Different devices can be determined as belonging to you or your household in support of one or more of purposes.";
-        Assert.assertEquals(expectedDescription, featureTwo.getDescription());
+        Assertions.assertEquals(expectedDescription, featureTwo.getDescription());
     }
 
     @Test
     public void testGetDescriptionLegal() {
         String expectedDescriptionLegal =
                 "Vendors can:\n* Deterministically determine that two or more devices belong to the same user or household\n* Probabilistically determine that two or more devices belong to the same user or household\n* Actively scan device characteristics for identification for probabilistic identification if users have allowed vendors to actively scan device characteristics for identification (Special Feature 2)";
-        Assert.assertEquals(expectedDescriptionLegal, featureTwo.getDescriptionLegal());
+        Assertions.assertEquals(expectedDescriptionLegal, featureTwo.getDescriptionLegal());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java
index 2ffeae12..5d590d55 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlTest.java
@@ -25,19 +25,17 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.TimeZone;
-
-import com.iab.gpp.extras.jackson.TestUtil;
-import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import com.iab.gpp.extras.gvl.Gvl;
+import com.iab.gpp.extras.jackson.Loader;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class GvlTest {
     private static Gvl gvl;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws IOException {
         Loader loader = new Loader();
         gvl = loader.globalVendorList(TestUtil.getGlobalVendorList());
@@ -45,17 +43,17 @@ public static void setUpBeforeClass() throws IOException {
 
     @Test
     public void testGetGvlSpecificationVersion() {
-        Assert.assertEquals(2, gvl.getGvlSpecificationVersion());
+        Assertions.assertEquals(2, gvl.getGvlSpecificationVersion());
     }
 
     @Test
     public void testGetVendorListVersion() {
-        Assert.assertEquals(26, gvl.getVendorListVersion());
+        Assertions.assertEquals(26, gvl.getVendorListVersion());
     }
 
     @Test
     public void testGetTcfPolicyVersion() {
-        Assert.assertEquals(2, gvl.getTcfPolicyVersion());
+        Assertions.assertEquals(2, gvl.getTcfPolicyVersion());
     }
 
     @Test
@@ -63,36 +61,36 @@ public void testGetLastUpdated() throws ParseException {
         SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
         parser.setTimeZone(TimeZone.getTimeZone("GMT"));
         Date parsed = parser.parse("2020-02-20T16:05:20");
-        Assert.assertEquals(parsed.toInstant(), gvl.getLastUpdated());
+        Assertions.assertEquals(parsed.toInstant(), gvl.getLastUpdated());
     }
 
     @Test
     public void testGetPurposes() {
-        Assert.assertEquals(10, gvl.getPurposes().size());
+        Assertions.assertEquals(10, gvl.getPurposes().size());
     }
 
     @Test
     public void testGetSpecialPurposes() {
-        Assert.assertEquals(2, gvl.getSpecialPurposes().size());
+        Assertions.assertEquals(2, gvl.getSpecialPurposes().size());
     }
 
     @Test
     public void testGetFeatures() {
-        Assert.assertEquals(3, gvl.getFeatures().size());
+        Assertions.assertEquals(3, gvl.getFeatures().size());
     }
 
     @Test
     public void testGetSpecialFeatures() {
-        Assert.assertEquals(2, gvl.getSpecialFeatures().size());
+        Assertions.assertEquals(2, gvl.getSpecialFeatures().size());
     }
 
     @Test
     public void testGetStacks() {
-        Assert.assertEquals(37, gvl.getStacks().size());
+        Assertions.assertEquals(37, gvl.getStacks().size());
     }
 
     @Test
     public void testGetVendors() {
-        Assert.assertEquals(3, gvl.getVendors().size());
+        Assertions.assertEquals(3, gvl.getVendors().size());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java
index ea7b188e..3d9ad22b 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/OverflowTest.java
@@ -21,22 +21,20 @@
  */
 
 import java.util.List;
-
-import com.iab.gpp.extras.jackson.TestUtil;
-import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import com.iab.gpp.extras.gvl.Overflow;
 import com.iab.gpp.extras.gvl.Vendor;
+import com.iab.gpp.extras.jackson.Loader;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class OverflowTest {
 
     private static Overflow vendorEightOverflow;
     private static final int VENDOR_ID_SELECTED_FOR_TEST = 8;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws Exception {
         Loader loader = new Loader();
         List<Vendor> vendors = loader.globalVendorList(TestUtil.getGlobalVendorList()).getVendors();
@@ -47,6 +45,6 @@ public static void setUpBeforeClass() throws Exception {
 
     @Test
     public void getHttpGetLimit() {
-        Assert.assertEquals(32, vendorEightOverflow.getHttpGetLimit());
+        Assertions.assertEquals(32, vendorEightOverflow.getHttpGetLimit());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java
index a75bf04b..f5957354 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/PurposeTest.java
@@ -22,21 +22,19 @@
 
 import java.io.IOException;
 import java.util.List;
-
-import com.iab.gpp.extras.jackson.TestUtil;
-import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import com.iab.gpp.extras.gvl.Purpose;
+import com.iab.gpp.extras.jackson.Loader;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class PurposeTest {
 
     private static Purpose purposeTen;
     private static final int PURPOSE_SELECTED_FOR_TEST = 10;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws IOException {
         Loader loader = new Loader();
         List<Purpose> purposes = loader.globalVendorList(TestUtil.getGlobalVendorList()).getPurposes();
@@ -45,36 +43,36 @@ public static void setUpBeforeClass() throws IOException {
 
     @Test
     public void testGetId() {
-        Assert.assertEquals(10, purposeTen.getId());
+        Assertions.assertEquals(10, purposeTen.getId());
     }
 
     @Test
     public void testGetName() {
         String expectedName = "Develop and improve products";
-        Assert.assertEquals(expectedName, purposeTen.getName());
+        Assertions.assertEquals(expectedName, purposeTen.getName());
     }
 
     @Test
     public void testGetDescription() {
         String expectedDescription =
                 "Your data can be used to improve existing systems and software, and to develop new products";
-        Assert.assertEquals(expectedDescription, purposeTen.getDescription());
+        Assertions.assertEquals(expectedDescription, purposeTen.getDescription());
     }
 
     @Test
     public void testGetDescriptionLegal() {
         String expectedDescriptionLegal =
                 "To develop new products and improve products vendors can:\n* Use information to improve their existing products with new features and to develop new products\n* Create new models and algorithms through machine learning\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose";
-        Assert.assertEquals(expectedDescriptionLegal, purposeTen.getDescriptionLegal());
+        Assertions.assertEquals(expectedDescriptionLegal, purposeTen.getDescriptionLegal());
     }
 
     @Test
     public void testGetConsentable() {
-        Assert.assertTrue(purposeTen.getConsentable());
+        Assertions.assertTrue(purposeTen.getConsentable());
     }
 
     @Test
     public void testGetRightToObject() {
-        Assert.assertFalse(purposeTen.getRightToObject());
+        Assertions.assertFalse(purposeTen.getRightToObject());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java
index 362d6c75..005f58ae 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialFeatureTest.java
@@ -21,22 +21,20 @@
  */
 
 import java.util.List;
-
-import com.iab.gpp.extras.jackson.TestUtil;
-import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import com.iab.gpp.extras.gvl.SpecialFeature;
+import com.iab.gpp.extras.jackson.Loader;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class SpecialFeatureTest {
 
     private static SpecialFeature specialFeatureOne;
     private final static int SPECIAL_FEAUTRE_ID_SELECTED_FOR_TEST = 1;
 
-    @Before
-    public void setUp() throws Exception {
+    @BeforeAll
+    public static void setUp() throws Exception {
         Loader loader = new Loader();
         List<SpecialFeature> specialFeatures = loader.globalVendorList(TestUtil.getGlobalVendorList()).getSpecialFeatures();
         specialFeatureOne =
@@ -48,26 +46,26 @@ public void setUp() throws Exception {
 
     @Test
     public void testGetId() {
-        Assert.assertEquals(1, specialFeatureOne.getId());
+        Assertions.assertEquals(1, specialFeatureOne.getId());
     }
 
     @Test
     public void testGetName() {
         String expectedName = "Use precise geolocation data";
-        Assert.assertEquals(expectedName, specialFeatureOne.getName());
+        Assertions.assertEquals(expectedName, specialFeatureOne.getName());
     }
 
     @Test
     public void testGetDescription() {
         String expectedDescription =
                 "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.";
-        Assert.assertEquals(expectedDescription, specialFeatureOne.getDescription());
+        Assertions.assertEquals(expectedDescription, specialFeatureOne.getDescription());
     }
 
     @Test
     public void testGetDescriptionLegal() {
         String expectedDescriptionLegal =
                 "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters.";
-        Assert.assertEquals(expectedDescriptionLegal, specialFeatureOne.getDescriptionLegal());
+        Assertions.assertEquals(expectedDescriptionLegal, specialFeatureOne.getDescriptionLegal());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java
index 3ec1e289..3f250276 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/SpecialPurposeTest.java
@@ -1,5 +1,11 @@
 package com.iab.gpp.extras.jackson.gvl;
 
+import java.io.IOException;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
 /*-
  * #%L
  * IAB TCF Java GVL Jackson
@@ -21,21 +27,15 @@
  */
 
 import com.iab.gpp.extras.gvl.SpecialPurpose;
-import com.iab.gpp.extras.jackson.TestUtil;
 import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.List;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class SpecialPurposeTest {
 
     private static SpecialPurpose specialPurposeOne;
     private static final int SPECIAL_PURPOSE_SELECTED_FOR_TEST = 1;
 
-    @BeforeClass
+    @BeforeAll
     public static void setupBeforeClass() throws IOException {
         Loader loader = new Loader();
         List<SpecialPurpose> specialPurposes = loader.globalVendorList(TestUtil.getGlobalVendorList()).getSpecialPurposes();
@@ -48,36 +48,36 @@ public static void setupBeforeClass() throws IOException {
 
     @Test
     public void testGetId() {
-        Assert.assertEquals(1, specialPurposeOne.getId());
+        Assertions.assertEquals(1, specialPurposeOne.getId());
     }
 
     @Test
     public void testGetName() {
         String expectedName = "Ensure security, prevent fraud, and debug";
-        Assert.assertEquals(expectedName, specialPurposeOne.getName());
+        Assertions.assertEquals(expectedName, specialPurposeOne.getName());
     }
 
     @Test
     public void testGetDescription() {
         String expectedDescription =
                 "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.";
-        Assert.assertEquals(expectedDescription, specialPurposeOne.getDescription());
+        Assertions.assertEquals(expectedDescription, specialPurposeOne.getDescription());
     }
 
     @Test
     public void testGetDescriptionLegal() {
         String expectedDescriptionLegal =
                 "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.";
-        Assert.assertEquals(expectedDescriptionLegal, specialPurposeOne.getDescriptionLegal());
+        Assertions.assertEquals(expectedDescriptionLegal, specialPurposeOne.getDescriptionLegal());
     }
 
     @Test
     public void testGetConsentable() {
-        Assert.assertTrue(specialPurposeOne.getConsentable());
+        Assertions.assertTrue(specialPurposeOne.getConsentable());
     }
 
     @Test
     public void testGetRightToObject() {
-        Assert.assertFalse(specialPurposeOne.getRightToObject());
+        Assertions.assertFalse(specialPurposeOne.getRightToObject());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java
index 5a5f6b5f..a353268a 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/StackTest.java
@@ -1,5 +1,11 @@
 package com.iab.gpp.extras.jackson.gvl;
 
+import java.util.Arrays;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
 /*-
  * #%L
  * IAB TCF Java GVL Jackson
@@ -21,21 +27,15 @@
  */
 
 import com.iab.gpp.extras.gvl.Stack;
-import com.iab.gpp.extras.jackson.TestUtil;
 import com.iab.gpp.extras.jackson.Loader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.List;
+import com.iab.gpp.extras.jackson.TestUtil;
 
 public class StackTest {
 
     private static Stack stackTwenty;
     private final static int STACK_ID_SELECTED_FOR_TEST = 20;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws Exception {
         Loader loader = new Loader();
         List<Stack> stacks = loader.globalVendorList(TestUtil.getGlobalVendorList()).getStacks();
@@ -44,32 +44,32 @@ public static void setUpBeforeClass() throws Exception {
 
     @Test
     public void testGetId() {
-        Assert.assertEquals(20, stackTwenty.getId());
+        Assertions.assertEquals(20, stackTwenty.getId());
     }
 
     @Test
     public void testGetSpecialFeatures() {
-        Assert.assertNotNull(stackTwenty.getSpecialFeatures());
-        Assert.assertEquals(0, stackTwenty.getSpecialFeatures().size());
+        Assertions.assertNotNull(stackTwenty.getSpecialFeatures());
+        Assertions.assertEquals(0, stackTwenty.getSpecialFeatures().size());
     }
 
     @Test
     public void testGetPurposes() {
-        Assert.assertNotNull(stackTwenty.getPurposes());
-        Assert.assertEquals(4, stackTwenty.getPurposes().size());
-        Assert.assertEquals(Arrays.asList(7, 8, 9, 10), stackTwenty.getPurposes());
+        Assertions.assertNotNull(stackTwenty.getPurposes());
+        Assertions.assertEquals(4, stackTwenty.getPurposes().size());
+        Assertions.assertEquals(Arrays.asList(7, 8, 9, 10), stackTwenty.getPurposes());
     }
 
     @Test
     public void testGetName() {
         String expectedName = "Ad and content measurement, audience insights, and product development";
-        Assert.assertEquals(expectedName, stackTwenty.getName());
+        Assertions.assertEquals(expectedName, stackTwenty.getName());
     }
 
     @Test
     public void testGetDescription() {
         String expectedDescription =
                 "Ad and content performance can be measured.  Insights about the audiences who saw the ads and content can be derived. Data can be used to build or improve user experience, systems, and software. Insights about the audiences who saw the ads and content can be derived.";
-        Assert.assertEquals(expectedDescription, stackTwenty.getDescription());
+        Assertions.assertEquals(expectedDescription, stackTwenty.getDescription());
     }
 }
diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java
index b906ec93..57000bbb 100644
--- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java
+++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/VendorTest.java
@@ -22,11 +22,9 @@
 
 import java.time.Instant;
 import java.util.Arrays;
-
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import com.iab.gpp.extras.gvl.Gvl;
 import com.iab.gpp.extras.gvl.Vendor;
 import com.iab.gpp.extras.jackson.Loader;
@@ -38,7 +36,7 @@ public class VendorTest {
     private static Vendor vendorTwo;
     private static final int VENDOR_ID_SELECTED_FOR_TEST = 8;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws Exception {
         Loader loader = new Loader();
         Gvl gvl = loader.globalVendorList(TestUtil.getGlobalVendorList());
@@ -48,114 +46,114 @@ public static void setUpBeforeClass() throws Exception {
 
     @Test
     public void testGetId() {
-        Assert.assertEquals(8, vendorEight.getId());
+        Assertions.assertEquals(8, vendorEight.getId());
     }
 
     @Test
     public void testGetName() {
         String expectedName = "Emerse Sverige AB";
-        Assert.assertEquals(expectedName, vendorEight.getName());
+        Assertions.assertEquals(expectedName, vendorEight.getName());
     }
 
     @Test
     public void testGetPurposes() {
-        Assert.assertNotNull(vendorEight.getPurposes());
-        Assert.assertEquals(3, vendorEight.getPurposes().size());
-        Assert.assertEquals(Arrays.asList(1, 3, 4), vendorEight.getPurposes());
+        Assertions.assertNotNull(vendorEight.getPurposes());
+        Assertions.assertEquals(3, vendorEight.getPurposes().size());
+        Assertions.assertEquals(Arrays.asList(1, 3, 4), vendorEight.getPurposes());
     }
 
     @Test
     public void testGetLegIntPurposes() {
-        Assert.assertNotNull(vendorEight.getLegIntPurposes());
-        Assert.assertEquals(4, vendorEight.getLegIntPurposes().size());
-        Assert.assertEquals(Arrays.asList(2, 7, 8, 9), vendorEight.getLegIntPurposes());
+        Assertions.assertNotNull(vendorEight.getLegIntPurposes());
+        Assertions.assertEquals(4, vendorEight.getLegIntPurposes().size());
+        Assertions.assertEquals(Arrays.asList(2, 7, 8, 9), vendorEight.getLegIntPurposes());
     }
 
     @Test
     public void testGetFlexiblePurposes() {
-        Assert.assertNotNull(vendorEight.getFlexiblePurposes());
-        Assert.assertEquals(2, vendorEight.getFlexiblePurposes().size());
-        Assert.assertEquals(Arrays.asList(2, 9), vendorEight.getFlexiblePurposes());
+        Assertions.assertNotNull(vendorEight.getFlexiblePurposes());
+        Assertions.assertEquals(2, vendorEight.getFlexiblePurposes().size());
+        Assertions.assertEquals(Arrays.asList(2, 9), vendorEight.getFlexiblePurposes());
     }
 
     @Test
     public void testGetSpecialPurposes() {
-        Assert.assertNotNull(vendorEight.getSpecialPurposes());
-        Assert.assertEquals(2, vendorEight.getSpecialPurposes().size());
-        Assert.assertEquals(Arrays.asList(1, 2), vendorEight.getSpecialPurposes());
+        Assertions.assertNotNull(vendorEight.getSpecialPurposes());
+        Assertions.assertEquals(2, vendorEight.getSpecialPurposes().size());
+        Assertions.assertEquals(Arrays.asList(1, 2), vendorEight.getSpecialPurposes());
     }
 
     @Test
     public void testGetFeatures() {
-        Assert.assertNotNull(vendorEight.getFeatures());
-        Assert.assertEquals(2, vendorEight.getFeatures().size());
-        Assert.assertEquals(Arrays.asList(1, 2), vendorEight.getFeatures());
+        Assertions.assertNotNull(vendorEight.getFeatures());
+        Assertions.assertEquals(2, vendorEight.getFeatures().size());
+        Assertions.assertEquals(Arrays.asList(1, 2), vendorEight.getFeatures());
     }
 
     @Test
     public void testGetSpecialFeatures() {
-        Assert.assertNotNull(vendorEight.getSpecialFeatures());
-        Assert.assertEquals(0, vendorEight.getSpecialFeatures().size());
+        Assertions.assertNotNull(vendorEight.getSpecialFeatures());
+        Assertions.assertEquals(0, vendorEight.getSpecialFeatures().size());
     }
 
     @Test
     public void testGetPolicyUrl() {
         String expectedPolicyUrl = "https://www.emerse.com/privacy-policy/";
-        Assert.assertEquals(expectedPolicyUrl, vendorEight.getPolicyUrl());
+        Assertions.assertEquals(expectedPolicyUrl, vendorEight.getPolicyUrl());
     }
 
     @Test
     public void testGetDeletedDate() {
-        Assert.assertEquals(Instant.parse("2020-06-28T00:00:00Z"), vendorEight.getDeletedDate().get());
+        Assertions.assertEquals(Instant.parse("2020-06-28T00:00:00Z"), vendorEight.getDeletedDate().get());
     }
 
     @Test
     public void testGetOverflow() {
-        Assert.assertNotNull(vendorEight.getOverflow());
+        Assertions.assertNotNull(vendorEight.getOverflow());
     }
 
     @Test
     public void testIsDeleted() {
-        Assert.assertTrue(vendorEight.isDeleted());
+        Assertions.assertTrue(vendorEight.isDeleted());
     }
 
     @Test
     public void testCookieMaxAgeSeconds() {
         long expectedCookieMaxAgeSeconds = 31557600000L;
-        Assert.assertTrue(vendorEight.getCookieMaxAgeSeconds().isPresent());
-        Assert.assertEquals(expectedCookieMaxAgeSeconds, vendorEight.getCookieMaxAgeSeconds().get().longValue());
+        Assertions.assertTrue(vendorEight.getCookieMaxAgeSeconds().isPresent());
+        Assertions.assertEquals(expectedCookieMaxAgeSeconds, vendorEight.getCookieMaxAgeSeconds().get().longValue());
     }
 
     @Test
     public void testUsesCookies() {
-        Assert.assertTrue(vendorEight.getUsesCookies());
+        Assertions.assertTrue(vendorEight.getUsesCookies());
     }
 
     @Test
     public void testCookieRefresh() {
-        Assert.assertFalse(vendorEight.getHasCookieRefresh());
+        Assertions.assertFalse(vendorEight.getHasCookieRefresh());
     }
 
     @Test
     public void testUsesNonCookieAccess() {
-        Assert.assertTrue(vendorEight.getUsesNonCookieAccess());
+        Assertions.assertTrue(vendorEight.getUsesNonCookieAccess());
     }
 
     @Test
     public void testNullDeviceStorageDisclosureUrl() {
-        Assert.assertFalse(vendorEight.getDeviceStorageDisclosureUrl().isPresent());
+        Assertions.assertFalse(vendorEight.getDeviceStorageDisclosureUrl().isPresent());
     }
 
     @Test
     public void testNullCookieMaxAgeSeconds() {
-        Assert.assertFalse(vendorTwo.getUsesCookies());
-        Assert.assertFalse(vendorTwo.getCookieMaxAgeSeconds().isPresent());
+        Assertions.assertFalse(vendorTwo.getUsesCookies());
+        Assertions.assertFalse(vendorTwo.getCookieMaxAgeSeconds().isPresent());
     }
 
     @Test
     public void testDeviceStorageDisclosureUrl() {
         String expectedDeviceStorageDisclosureUrl = "https://privacy.blismedia.com/.well-known/deviceStorage.json";
-        Assert.assertTrue(vendorTwo.getDeviceStorageDisclosureUrl().isPresent());
-        Assert.assertEquals(expectedDeviceStorageDisclosureUrl, vendorTwo.getDeviceStorageDisclosureUrl().get());
+        Assertions.assertTrue(vendorTwo.getDeviceStorageDisclosureUrl().isPresent());
+        Assertions.assertEquals(expectedDeviceStorageDisclosureUrl, vendorTwo.getDeviceStorageDisclosureUrl().get());
     }
 }
diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml
index f156674e..bf1979a0 100644
--- a/iabgpp-extras/pom.xml
+++ b/iabgpp-extras/pom.xml
@@ -7,13 +7,29 @@
     <parent>
         <groupId>com.iabgpp</groupId>
         <artifactId>iabgpp-core</artifactId>
-        <version>3.0.4-SNAPSHOT</version>
+        <version>3.0.8-SNAPSHOT</version>
     </parent>
 
     <artifactId>iabgpp-extras</artifactId>
     <packaging>jar</packaging>
 
-     <profiles>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.22.2</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.junit.platform</groupId>
+                        <artifactId>junit-platform-surefire-provider</artifactId>
+                        <version>1.3.2</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
         <profile>
             <id>release</id>
             <build>
diff --git a/pom.xml b/pom.xml
index ce9ce0c3..dbd2062f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>com.iabgpp</groupId>
     <artifactId>iabgpp-core</artifactId>
-    <version>3.0.4-SNAPSHOT</version>
+    <version>3.0.8-SNAPSHOT</version>
     <name>IAB GPP Core Library</name>
     <url>https://github.com/IABTechLabs/iabtcf-java</url>
     <description>Encode and decode consent information with the IAB GPP v3.0.</description>
