diff --git a/routingtable/locRIB/loc_rib_test.go b/routingtable/locRIB/loc_rib_test.go
index beefc93d3b4e69e70be4e52f3508261b02c9cc02..6b3e24e0715ec5ec8a670c9d6bd94f1a28fab5ad 100644
--- a/routingtable/locRIB/loc_rib_test.go
+++ b/routingtable/locRIB/loc_rib_test.go
@@ -3,7 +3,6 @@ package locRIB
 import (
 	"testing"
 
-	"github.com/bio-routing/bio-rd/net"
 	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/route"
 
@@ -11,7 +10,7 @@ import (
 )
 
 type pfxPath struct {
-	pfx  net.Prefix
+	pfx  bnet.Prefix
 	path *route.Path
 }
 
@@ -26,7 +25,7 @@ func TestContainsPfxPath(t *testing.T) {
 		{
 			in: []pfxPath{},
 			check: pfxPath{
-				pfx:  net.NewPfx(1, 32),
+				pfx:  bnet.NewPfx(bnet.IPv4(1), 32),
 				path: nil,
 			},
 			expected: false,
@@ -35,7 +34,7 @@ func TestContainsPfxPath(t *testing.T) {
 		{
 			in: []pfxPath{
 				{
-					pfx: net.NewPfx(1, 32),
+					pfx: bnet.NewPfx(bnet.IPv4(1), 32),
 					path: &route.Path{
 						Type: route.StaticPathType,
 						StaticPath: &route.StaticPath{
@@ -45,7 +44,7 @@ func TestContainsPfxPath(t *testing.T) {
 				},
 			},
 			check: pfxPath{
-				pfx:  net.NewPfx(1, 32),
+				pfx:  bnet.NewPfx(bnet.IPv4(1), 32),
 				path: nil,
 			},
 			expected: false,
@@ -54,7 +53,7 @@ func TestContainsPfxPath(t *testing.T) {
 		{
 			in: []pfxPath{
 				{
-					pfx: net.NewPfx(1, 32),
+					pfx: bnet.NewPfx(bnet.IPv4(1), 32),
 					path: &route.Path{
 						Type: route.StaticPathType,
 						StaticPath: &route.StaticPath{
@@ -64,7 +63,7 @@ func TestContainsPfxPath(t *testing.T) {
 				},
 			},
 			check: pfxPath{
-				pfx: net.NewPfx(1, 32),
+				pfx: bnet.NewPfx(bnet.IPv4(1), 32),
 				path: &route.Path{
 					Type: route.StaticPathType,
 					StaticPath: &route.StaticPath{
@@ -88,7 +87,7 @@ func TestContainsPfxPath(t *testing.T) {
 
 func TestLocRIB_RemovePathUnknown(t *testing.T) {
 	rib := New()
-	assert.True(t, rib.RemovePath(net.NewPfx(1, 32),
+	assert.True(t, rib.RemovePath(bnet.NewPfx(bnet.IPv4(1), 32),
 		&route.Path{
 			Type: route.StaticPathType,
 			StaticPath: &route.StaticPath{
diff --git a/routingtable/table_test.go b/routingtable/table_test.go
index acc5373857e2a202a6874a7d39331edbad430fab..d0c00092f7750143c09ad2d2171eb4b3a23f8bcc 100644
--- a/routingtable/table_test.go
+++ b/routingtable/table_test.go
@@ -17,59 +17,59 @@ func TestAddPath(t *testing.T) {
 		{
 			name: "Insert first node",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 			},
 			expected: &node{
-				route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+				route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 				skip:  8,
 			},
 		},
 		{
 			name: "Insert duplicate node",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 			},
 			expected: &node{
-				route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+				route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 				skip:  8,
 			},
 		},
 		{
 			name: "Insert triangle",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 9), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.128.0.0"), 9), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 128, 0, 0), 9), nil),
 			},
 			expected: &node{
-				route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+				route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 				skip:  8,
 				l: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 9), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9), nil),
 				},
 				h: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("10.128.0.0"), 9), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 128, 0, 0), 9), nil),
 				},
 			},
 		},
 		{
 			name: "Insert disjunct prefixes",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 			},
 			expected: &node{
-				route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 7), nil),
+				route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 7), nil),
 				skip:  7,
 				dummy: true,
 				l: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 				},
 				h: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 					skip:  16,
 				},
 			},
@@ -77,28 +77,28 @@ func TestAddPath(t *testing.T) {
 		{
 			name: "Insert disjunct prefixes plus one child low",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
 			expected: &node{
-				route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 7), nil),
+				route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 7), nil),
 				skip:  7,
 				dummy: true,
 				l: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 					l: &node{
 						skip:  1,
-						route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+						route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 						l: &node{
 							skip:  1,
-							route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
+							route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
 						},
 					},
 				},
 				h: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 					skip:  16,
 				},
 			},
@@ -106,32 +106,32 @@ func TestAddPath(t *testing.T) {
 		{
 			name: "Insert disjunct prefixes plus one child high",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.128"), 25), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 128), 25), nil),
 			},
 			expected: &node{
-				route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 7), nil),
+				route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 7), nil),
 				skip:  7,
 				dummy: true,
 				l: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 					l: &node{
 						skip:  1,
-						route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+						route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 						l: &node{
 							skip:  1,
-							route: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
+							route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
 						},
 					},
 				},
 				h: &node{
-					route: route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+					route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 					skip:  16,
 					h: &node{
-						route: route.NewRoute(net.NewPfx(strAddr("11.100.123.128"), 25), nil),
+						route: route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 128), 25), nil),
 					},
 				},
 			},
@@ -158,67 +158,67 @@ func TestGet(t *testing.T) {
 		{
 			name: "Test 1: Search pfx and dump route + more specifics",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 8),
-			expected: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
+			expected: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 		},
 		{
 			name: "Test 2: Search pfx and don't dump more specifics",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 8),
-			expected: route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
+			expected: route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
 		},
 		{
 			name:     "Test 3: Empty table",
 			routes:   []*route.Route{},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 32),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 32),
 			expected: nil,
 		},
 		{
 			name: "Test 4: Get Dummy",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 			},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 7),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 7),
 			expected: nil,
 		},
 		{
 			name: "Test 5",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
-			needle:   net.NewPfx(strAddr("11.100.123.0"), 24),
-			expected: route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+			needle:   net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24),
+			expected: route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 		},
 		{
 			name: "Test 4: Get nonexistent #1",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
 			},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 10),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10),
 			expected: nil,
 		},
 		{
 			name: "Test 4: Get nonexistent #2",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
 			},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 10),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10),
 			expected: nil,
 		},
 	}
@@ -250,22 +250,22 @@ func TestGetLonger(t *testing.T) {
 		{
 			name: "Test 1: Search pfx and dump route + more specifics",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
-			needle: net.NewPfx(strAddr("10.0.0.0"), 8),
+			needle: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
 			},
 		},
 		{
 			name:     "Test 2: Empty root",
 			routes:   nil,
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 8),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			expected: []*route.Route{},
 		},
 	}
@@ -297,36 +297,36 @@ func TestLPM(t *testing.T) {
 		{
 			name:     "LPM for non-existent route",
 			routes:   []*route.Route{},
-			needle:   net.NewPfx(strAddr("10.0.0.0"), 32),
+			needle:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 32),
 			expected: nil,
 		},
 		{
 			name: "Positive LPM test",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
-			needle: net.NewPfx(167772160, 32), // 10.0.0.0/32
+			needle: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 32),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
 			},
 		},
 		{
 			name: "Exact match",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("11.100.123.0"), 24), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 12), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 100, 123, 0), 24), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 12), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
-			needle: net.NewPfx(strAddr("10.0.0.0"), 10),
+			needle: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), nil),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 10), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), nil),
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 10), nil),
 			},
 		},
 	}
@@ -351,30 +351,30 @@ func TestRemovePath(t *testing.T) {
 		{
 			name: "Remove a path that is the only one for a prefix",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.128.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 128, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
 			},
-			removePfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+			removePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			removePath: &route.Path{
 				Type:    route.BGPPathType,
 				BGPPath: &route.BGPPath{},
 			},
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.128.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 128, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
@@ -383,28 +383,28 @@ func TestRemovePath(t *testing.T) {
 		{
 			name: "Remove a path that is one of two for a prefix",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1000,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 2000,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.128.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 128, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
 			},
-			removePfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+			removePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			removePath: &route.Path{
 				Type: route.BGPPathType,
 				BGPPath: &route.BGPPath{
@@ -412,17 +412,17 @@ func TestRemovePath(t *testing.T) {
 				},
 			},
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 2000,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.128.0.0"), 9), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 128, 0, 0), 9), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
@@ -462,13 +462,13 @@ func TestReplacePath(t *testing.T) {
 	}{
 		{
 			name:       "replace in empty table",
-			replacePfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+			replacePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			replacePath: &route.Path{
 				Type:    route.BGPPathType,
 				BGPPath: &route.BGPPath{},
 			},
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type:    route.BGPPathType,
 					BGPPath: &route.BGPPath{},
 				}),
@@ -478,14 +478,14 @@ func TestReplacePath(t *testing.T) {
 		{
 			name: "replace not existing prefix with multiple paths",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1001,
 						NextHop:   net.IPv4(101),
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -493,7 +493,7 @@ func TestReplacePath(t *testing.T) {
 					},
 				}),
 			},
-			replacePfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+			replacePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			replacePath: &route.Path{
 				Type: route.BGPPathType,
 				BGPPath: &route.BGPPath{
@@ -501,13 +501,13 @@ func TestReplacePath(t *testing.T) {
 				},
 			},
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1000,
 					},
 				}),
-				newMultiPathRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				newMultiPathRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1001,
@@ -526,26 +526,26 @@ func TestReplacePath(t *testing.T) {
 		{
 			name: "replace existing prefix with multiple paths",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 2,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1001,
 						NextHop:   net.IPv4(101),
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -553,7 +553,7 @@ func TestReplacePath(t *testing.T) {
 					},
 				}),
 			},
-			replacePfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+			replacePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			replacePath: &route.Path{
 				Type: route.BGPPathType,
 				BGPPath: &route.BGPPath{
@@ -561,13 +561,13 @@ func TestReplacePath(t *testing.T) {
 				},
 			},
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1000,
 					},
 				}),
-				newMultiPathRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				newMultiPathRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1001,
@@ -624,21 +624,21 @@ func TestRemovePrefix(t *testing.T) {
 	}{
 		{
 			name:        "remove in empty table",
-			removePfx:   net.NewPfx(strAddr("10.0.0.0"), 8),
+			removePfx:   net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			expected:    []*route.Route{},
 			expectedOld: nil,
 		},
 		{
 			name: "remove not exist prefix",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
 
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -646,16 +646,16 @@ func TestRemovePrefix(t *testing.T) {
 					},
 				}),
 			},
-			removePfx: net.NewPfx(strAddr("12.0.0.0"), 8),
+			removePfx: net.NewPfx(net.IPv4FromOctets(12, 0, 0, 0), 8),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
 
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -668,14 +668,14 @@ func TestRemovePrefix(t *testing.T) {
 		{
 			name: "remove not existing more specific prefix",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
 
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -683,16 +683,16 @@ func TestRemovePrefix(t *testing.T) {
 					},
 				}),
 			},
-			removePfx: net.NewPfx(strAddr("10.0.0.0"), 9),
+			removePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 9),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
 
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -705,14 +705,14 @@ func TestRemovePrefix(t *testing.T) {
 		{
 			name: "remove not existing more less prefix",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
 
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -720,16 +720,16 @@ func TestRemovePrefix(t *testing.T) {
 					},
 				}),
 			},
-			removePfx: net.NewPfx(strAddr("10.0.0.0"), 7),
+			removePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 7),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
 
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -742,19 +742,19 @@ func TestRemovePrefix(t *testing.T) {
 		{
 			name: "remove existing prefix",
 			routes: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 2,
 					},
 				}),
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -762,9 +762,9 @@ func TestRemovePrefix(t *testing.T) {
 					},
 				}),
 			},
-			removePfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+			removePfx: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8),
 			expected: []*route.Route{
-				route.NewRoute(net.NewPfx(strAddr("11.0.0.0"), 8), &route.Path{
+				route.NewRoute(net.NewPfx(net.IPv4FromOctets(11, 0, 0, 0), 8), &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
@@ -816,8 +816,3 @@ func newMultiPathRoute(pfx net.Prefix, paths ...*route.Path) *route.Route {
 	return r
 
 }
-
-func strAddr(s string) uint32 {
-	ret, _ := net.StrToAddr(s)
-	return ret
-}
diff --git a/routingtable/update_helper_test.go b/routingtable/update_helper_test.go
index 226be1b3c10c9fffe500aa48a1bccc14b018bf62..b6527e39c4180a6a7c2b7788793d8dcdfb6fc7d8 100644
--- a/routingtable/update_helper_test.go
+++ b/routingtable/update_helper_test.go
@@ -73,7 +73,7 @@ func TestShouldPropagateUpdate(t *testing.T) {
 				comms = append(comms, com)
 			}
 
-			pfx := bnet.NewPfx(0, 32)
+			pfx := bnet.NewPfx(bnet.IPv4(0), 32)
 			pa := &route.Path{
 				Type: route.BGPPathType,
 				BGPPath: &route.BGPPath{