diff --git a/net/ip_test.go b/net/ip_test.go
index cb97d5bd3951a67557897cc8b098d4c049fbeb70..613e342d7ffe46460007aeec692da8c39286258f 100644
--- a/net/ip_test.go
+++ b/net/ip_test.go
@@ -260,3 +260,33 @@ func TestToNetIP(t *testing.T) {
 		})
 	}
 }
+
+func TestBitAtPosition(t *testing.T) {
+	tests := []struct {
+		name     string
+		input    IP
+		position uint8
+		expected bool
+	}{
+		{
+			name:     "Bit 8 from 1.0.0.0 -> 0",
+			input:    IPv4FromOctets(10, 0, 0, 0),
+			position: 8,
+			expected: false,
+		},
+		{
+			name:     "Bit 8 from 11.0.0.0 -> 1",
+			input:    IPv4FromOctets(11, 0, 0, 0),
+			position: 8,
+			expected: true,
+		},
+	}
+
+	for _, test := range tests {
+		b := test.input.BitAtPosition(test.position)
+		if b != test.expected {
+			t.Errorf("%s: Unexpected failure: Bit %d of %d is %v. Expected %v",
+				test.name, test.position, test.input, b, test.expected)
+		}
+	}
+}
diff --git a/routingtable/adjRIBIn/adj_rib_in_test.go b/routingtable/adjRIBIn/adj_rib_in_test.go
index 9939e805d0dc73bd9e9f6555463c343f6ca16bcc..761e6293dad71fb76bde56ef9010b4da353ceea4 100644
--- a/routingtable/adjRIBIn/adj_rib_in_test.go
+++ b/routingtable/adjRIBIn/adj_rib_in_test.go
@@ -22,17 +22,17 @@ func TestAddPath(t *testing.T) {
 		{
 			name: "Add route",
 			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: 100,
 					},
 				}),
 			},
-			removePfx:  net.NewPfx(0, 0),
+			removePfx:  net.NewPfx(net.IPv4(0), 0),
 			removePath: nil,
 			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: 100,
@@ -43,20 +43,20 @@ func TestAddPath(t *testing.T) {
 		{
 			name: "Overwrite routes",
 			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: 100,
 					},
 				}),
-				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: 200,
 					},
 				}),
 			},
-			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{
@@ -64,7 +64,7 @@ func TestAddPath(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: 200,
@@ -105,30 +105,30 @@ func TestRemovePath(t *testing.T) {
 		{
 			name: "Remove an existing route",
 			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{},
 				}),
@@ -138,26 +138,26 @@ func TestRemovePath(t *testing.T) {
 		{
 			name: "Remove non existing route",
 			routes: []*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{},
 				}),
 			},
-			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{},
 				}),
@@ -184,7 +184,7 @@ func TestRemovePath(t *testing.T) {
 			assert.Equal(t, test.removePath, removePathParams.Path)
 		} else {
 			removePathParams := mc.GetRemovePathParams()
-			if removePathParams.Pfx != net.NewPfx(0, 0) {
+			if removePathParams.Pfx != net.NewPfx(net.IPv4(0), 0) {
 				t.Errorf("Test %q failed: Call to RemovePath propagated unexpectedly", test.name)
 			}
 		}
@@ -192,8 +192,3 @@ func TestRemovePath(t *testing.T) {
 		assert.Equal(t, test.expected, adjRIBIn.rt.Dump())
 	}
 }
-
-func strAddr(s string) uint32 {
-	ret, _ := net.StrToAddr(s)
-	return ret
-}
diff --git a/routingtable/adjRIBOutAddPath/BUILD.bazel b/routingtable/adjRIBOutAddPath/BUILD.bazel
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/routingtable/filter/actions/as_path_prepend_action_test.go b/routingtable/filter/actions/as_path_prepend_action_test.go
index 702a9497cc767cb6b240805a7b4af6f20e17277b..f7c7af59394670a51c6062d43df19ae45ec69eb2 100644
--- a/routingtable/filter/actions/as_path_prepend_action_test.go
+++ b/routingtable/filter/actions/as_path_prepend_action_test.go
@@ -3,9 +3,9 @@ package actions
 import (
 	"testing"
 
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/protocols/bgp/types"
 
-	"github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/route"
 	"github.com/stretchr/testify/assert"
 )
@@ -56,7 +56,7 @@ func TestAppendPath(t *testing.T) {
 	for _, test := range tests {
 		t.Run(test.name, func(te *testing.T) {
 			a := NewASPathPrependAction(12345, test.times)
-			p, _ := a.Do(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+			p, _ := a.Do(bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 				BGPPath: test.bgpPath,
 			})
 
diff --git a/routingtable/filter/actions/set_local_pref_action_test.go b/routingtable/filter/actions/set_local_pref_action_test.go
index 0f21a637379bf7c0018db89a0fab0a46deadd5b0..7b104d3949d127e794dcd34a2a05a7b7aa3f2b02 100644
--- a/routingtable/filter/actions/set_local_pref_action_test.go
+++ b/routingtable/filter/actions/set_local_pref_action_test.go
@@ -3,7 +3,7 @@ package actions
 import (
 	"testing"
 
-	"github.com/bio-routing/bio-rd/net"
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/route"
 	"github.com/stretchr/testify/assert"
 )
@@ -29,7 +29,7 @@ func TestSetLocalPref(t *testing.T) {
 	for _, test := range tests {
 		t.Run(test.name, func(te *testing.T) {
 			a := NewSetLocalPrefAction(150)
-			p, _ := a.Do(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+			p, _ := a.Do(bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 				BGPPath: test.bgpPath,
 			})
 
@@ -39,8 +39,3 @@ func TestSetLocalPref(t *testing.T) {
 		})
 	}
 }
-
-func strAddr(s string) uint32 {
-	ret, _ := net.StrToAddr(s)
-	return ret
-}
diff --git a/routingtable/filter/actions/set_nexthop_action_test.go b/routingtable/filter/actions/set_nexthop_action_test.go
index 269970adbc33d0b3a39375acc966f49e0927e3ab..7f691d235f288e1155980ea997b4e6fddaa6a4de 100644
--- a/routingtable/filter/actions/set_nexthop_action_test.go
+++ b/routingtable/filter/actions/set_nexthop_action_test.go
@@ -31,7 +31,7 @@ func TestSetNextHopTest(t *testing.T) {
 	for _, test := range tests {
 		t.Run(test.name, func(t *testing.T) {
 			a := NewSetNextHopAction(bnet.IPv4FromOctets(100, 64, 2, 1))
-			p, _ := a.Do(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+			p, _ := a.Do(net.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 				BGPPath: test.bgpPath,
 			})
 
diff --git a/routingtable/filter/filter_test.go b/routingtable/filter/filter_test.go
index 273e986d29dc4e25a6788bfb8f750e54bff6beb4..52ebc8b9180aab9429b22489d75db95e210d2f65 100644
--- a/routingtable/filter/filter_test.go
+++ b/routingtable/filter/filter_test.go
@@ -20,7 +20,7 @@ func TestProcessTerms(t *testing.T) {
 	}{
 		{
 			name:   "accept",
-			prefix: net.NewPfx(0, 0),
+			prefix: net.NewPfx(net.IPv4(0), 0),
 			path:   &route.Path{},
 			term: &Term{
 				then: []FilterAction{
@@ -32,7 +32,7 @@ func TestProcessTerms(t *testing.T) {
 		},
 		{
 			name:   "reject",
-			prefix: net.NewPfx(0, 0),
+			prefix: net.NewPfx(net.IPv4(0), 0),
 			path:   &route.Path{},
 			term: &Term{
 				then: []FilterAction{
@@ -44,7 +44,7 @@ func TestProcessTerms(t *testing.T) {
 		},
 		{
 			name:   "modified",
-			prefix: net.NewPfx(0, 0),
+			prefix: net.NewPfx(net.IPv4(0), 0),
 			path:   &route.Path{},
 			term: &Term{
 				then: []FilterAction{
diff --git a/routingtable/filter/helper_test.go b/routingtable/filter/helper_test.go
index 19a444d4a5c8d656534cfb415f2b401a11ae4c57..485d1ae34f03f02e2f4dd1d1626450184cd6f58e 100644
--- a/routingtable/filter/helper_test.go
+++ b/routingtable/filter/helper_test.go
@@ -11,13 +11,13 @@ import (
 func TestNewAcceptAllFilter(t *testing.T) {
 	f := NewAcceptAllFilter()
 
-	_, reject := f.ProcessTerms(net.NewPfx(0, 0), &route.Path{})
+	_, reject := f.ProcessTerms(net.NewPfx(net.IPv4(0), 0), &route.Path{})
 	assert.Equal(t, false, reject)
 }
 
 func TestNewDrainFilter(t *testing.T) {
 	f := NewDrainFilter()
 
-	_, reject := f.ProcessTerms(net.NewPfx(0, 0), &route.Path{})
+	_, reject := f.ProcessTerms(net.NewPfx(net.IPv4(0), 0), &route.Path{})
 	assert.Equal(t, true, reject)
 }
diff --git a/routingtable/filter/route_filter_test.go b/routingtable/filter/route_filter_test.go
index 35d98f58ece6ed1a1a1755542d9c13d6f8f4f614..2384e0d8d182ca0fec1fe37f50e7c0266ef56ecc 100644
--- a/routingtable/filter/route_filter_test.go
+++ b/routingtable/filter/route_filter_test.go
@@ -18,56 +18,56 @@ func TestInRange(t *testing.T) {
 	}{
 		{
 			name:     "matches and in range (22-24)",
-			prefix:   net.NewPfx(strAddr("1.2.1.0"), 23),
-			pattern:  net.NewPfx(strAddr("1.2.0.0"), 22),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 1, 0), 23),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 22),
 			begin:    22,
 			end:      24,
 			expected: true,
 		},
 		{
 			name:     "matches begin of range (22-24)",
-			prefix:   net.NewPfx(strAddr("1.2.0.0"), 22),
-			pattern:  net.NewPfx(strAddr("1.2.0.0"), 22),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 22),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 22),
 			begin:    22,
 			end:      24,
 			expected: true,
 		},
 		{
 			name:     "matches end of range (22-24)",
-			prefix:   net.NewPfx(strAddr("1.2.3.0"), 24),
-			pattern:  net.NewPfx(strAddr("1.2.0.0"), 22),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 22),
 			begin:    22,
 			end:      24,
 			expected: true,
 		},
 		{
 			name:     "matches begin and end of range (24-24)",
-			prefix:   net.NewPfx(strAddr("1.2.0.0"), 24),
-			pattern:  net.NewPfx(strAddr("1.2.0.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 24),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 24),
 			begin:    24,
 			end:      24,
 			expected: true,
 		},
 		{
 			name:     "smaller (22-24)",
-			prefix:   net.NewPfx(strAddr("1.2.0.0"), 16),
-			pattern:  net.NewPfx(strAddr("1.2.4.0"), 22),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 16),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 4, 0), 22),
 			begin:    22,
 			end:      24,
 			expected: false,
 		},
 		{
 			name:     "longer (22-24)",
-			prefix:   net.NewPfx(strAddr("1.2.0.128"), 25),
-			pattern:  net.NewPfx(strAddr("1.2.0.0"), 22),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 0, 128), 25),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 22),
 			begin:    22,
 			end:      24,
 			expected: false,
 		},
 		{
 			name:     "does not match",
-			prefix:   net.NewPfx(strAddr("2.0.0.0"), 23),
-			pattern:  net.NewPfx(strAddr("1.2.0.0"), 22),
+			prefix:   net.NewPfx(net.IPv4FromOctets(2, 0, 0, 0), 23),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 0, 0), 22),
 			expected: false,
 		},
 	}
@@ -89,32 +89,32 @@ func TestExact(t *testing.T) {
 	}{
 		{
 			name:     "matches (0.0.0.0/0)",
-			prefix:   net.NewPfx(strAddr("0.0.0.0"), 0),
-			pattern:  net.NewPfx(strAddr("0.0.0.0"), 0),
+			prefix:   net.NewPfx(net.IPv4(0), 0),
+			pattern:  net.NewPfx(net.IPv4(0), 0),
 			expected: true,
 		},
 		{
 			name:     "matches (192.168.0.0)",
-			prefix:   net.NewPfx(strAddr("192.168.1.1"), 24),
-			pattern:  net.NewPfx(strAddr("192.168.1.1"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(192, 168, 1, 1), 24),
+			pattern:  net.NewPfx(net.IPv4FromOctets(192, 168, 1, 1), 24),
 			expected: true,
 		},
 		{
 			name:     "does not match",
-			prefix:   net.NewPfx(strAddr("1.0.0.0"), 8),
-			pattern:  net.NewPfx(strAddr("0.0.0.0"), 0),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 0, 0, 0), 8),
+			pattern:  net.NewPfx(net.IPv4FromOctets(0, 0, 0, 0), 0),
 			expected: false,
 		},
 		{
 			name:     "longer",
-			prefix:   net.NewPfx(strAddr("1.0.0.0"), 8),
-			pattern:  net.NewPfx(strAddr("1.0.0.0"), 7),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 0, 0, 0), 8),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 0, 0, 0), 7),
 			expected: false,
 		},
 		{
 			name:     "lesser",
-			prefix:   net.NewPfx(strAddr("1.0.0.0"), 7),
-			pattern:  net.NewPfx(strAddr("1.0.0.0"), 8),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 0, 0, 0), 7),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 0, 0, 0), 8),
 			expected: false,
 		},
 	}
@@ -136,20 +136,20 @@ func TestOrLonger(t *testing.T) {
 	}{
 		{
 			name:     "longer",
-			prefix:   net.NewPfx(strAddr("1.2.3.128"), 25),
-			pattern:  net.NewPfx(strAddr("1.2.3.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 128), 25),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
 			expected: true,
 		},
 		{
 			name:     "exact",
-			prefix:   net.NewPfx(strAddr("1.2.3.0"), 24),
-			pattern:  net.NewPfx(strAddr("1.2.3.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
 			expected: true,
 		},
 		{
 			name:     "lesser",
-			prefix:   net.NewPfx(strAddr("1.2.3.0"), 23),
-			pattern:  net.NewPfx(strAddr("1.2.3.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 23),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
 			expected: false,
 		},
 	}
@@ -171,20 +171,20 @@ func TestLonger(t *testing.T) {
 	}{
 		{
 			name:     "longer",
-			prefix:   net.NewPfx(strAddr("1.2.3.128"), 25),
-			pattern:  net.NewPfx(strAddr("1.2.3.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 128), 25),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
 			expected: true,
 		},
 		{
 			name:     "exact",
-			prefix:   net.NewPfx(strAddr("1.2.3.0"), 24),
-			pattern:  net.NewPfx(strAddr("1.2.3.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
 			expected: false,
 		},
 		{
 			name:     "lesser",
-			prefix:   net.NewPfx(strAddr("1.2.3.0"), 23),
-			pattern:  net.NewPfx(strAddr("1.2.3.0"), 24),
+			prefix:   net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 23),
+			pattern:  net.NewPfx(net.IPv4FromOctets(1, 2, 3, 0), 24),
 			expected: false,
 		},
 	}
diff --git a/routingtable/filter/term_condition_test.go b/routingtable/filter/term_condition_test.go
index 5217feaaacc67a57539a90369664a81663f4e642..2e142ff1cad6da79bea9d92dcd84cff35061748c 100644
--- a/routingtable/filter/term_condition_test.go
+++ b/routingtable/filter/term_condition_test.go
@@ -22,90 +22,90 @@ func TestMatches(t *testing.T) {
 	}{
 		{
 			name:   "one prefix matches in prefix list, no route filters set",
-			prefix: net.NewPfx(strAddr("127.0.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(127, 0, 0, 1), 8),
 			prefixLists: []*PrefixList{
-				NewPrefixList(net.NewPfx(strAddr("127.0.0.1"), 8)),
+				NewPrefixList(net.NewPfx(net.IPv4FromOctets(127, 0, 0, 1), 8)),
 			},
 			expected: true,
 		},
 		{
 			name:   "one prefix in prefix list and no match, no route filters set",
-			prefix: net.NewPfx(strAddr("127.0.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(127, 0, 0, 1), 8),
 			prefixLists: []*PrefixList{
-				NewPrefixList(net.NewPfx(0, 32)),
+				NewPrefixList(net.NewPfx(net.IPv4(0), 32)),
 			},
 			expected: false,
 		},
 		{
 			name:   "one prefix of 2 matches in prefix list, no route filters set",
-			prefix: net.NewPfx(strAddr("127.0.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(127, 0, 0, 1), 8),
 			prefixLists: []*PrefixList{
-				NewPrefixList(net.NewPfx(strAddr("10.0.0.0"), 8)),
-				NewPrefixList(net.NewPfx(strAddr("127.0.0.1"), 8)),
+				NewPrefixList(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8)),
+				NewPrefixList(net.NewPfx(net.IPv4FromOctets(127, 0, 0, 1), 8)),
 			},
 			expected: true,
 		},
 		{
 			name:   "no prefixes in prefix list, only route filter matches",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			routeFilters: []*RouteFilter{
-				NewRouteFilter(net.NewPfx(strAddr("10.0.0.0"), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), Longer()),
 			},
 			expected: true,
 		},
 		{
 			name:   "no prefixes in prefix list, one route filter matches",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			routeFilters: []*RouteFilter{
-				NewRouteFilter(net.NewPfx(strAddr("8.0.0.0"), 8), Longer()),
-				NewRouteFilter(net.NewPfx(strAddr("10.0.0.0"), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(8, 0, 0, 0), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), Longer()),
 			},
 			expected: true,
 		},
 		{
 			name:   "no prefixes in prefix list, one of many route filters matches",
-			prefix: net.NewPfx(strAddr("127.0.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(127, 0, 0, 1), 8),
 			routeFilters: []*RouteFilter{
-				NewRouteFilter(net.NewPfx(strAddr("10.0.0.0"), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), Longer()),
 			},
 			expected: false,
 		},
 		{
 			name:   "no match in prefix list, no macht in route filter",
-			prefix: net.NewPfx(strAddr("9.9.9.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(9, 9, 9, 0), 24),
 			prefixLists: []*PrefixList{
-				NewPrefixList(net.NewPfx(strAddr("8.0.0.0"), 8)),
+				NewPrefixList(net.NewPfx(net.IPv4FromOctets(8, 0, 0, 0), 8)),
 			},
 			routeFilters: []*RouteFilter{
-				NewRouteFilter(net.NewPfx(strAddr("10.0.0.0"), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), Longer()),
 			},
 			expected: false,
 		},
 		{
 			name:   "one prefix in prefixlist, one route filter, only prefix list matches",
-			prefix: net.NewPfx(strAddr("8.8.8.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(8, 8, 8, 0), 24),
 			prefixLists: []*PrefixList{
-				NewPrefixList(net.NewPfx(strAddr("8.0.0.0"), 8)),
+				NewPrefixList(net.NewPfx(net.IPv4FromOctets(8, 0, 0, 0), 8)),
 			},
 			routeFilters: []*RouteFilter{
-				NewRouteFilter(net.NewPfx(strAddr("10.0.0.0"), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), Longer()),
 			},
 			expected: false,
 		},
 		{
 			name:   "one prefix in prefixlist, one route filter, only route filter matches",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			prefixLists: []*PrefixList{
-				NewPrefixList(net.NewPfx(strAddr("8.0.0.0"), 8)),
+				NewPrefixList(net.NewPfx(net.IPv4FromOctets(8, 0, 0, 0), 8)),
 			},
 			routeFilters: []*RouteFilter{
-				NewRouteFilter(net.NewPfx(strAddr("10.0.0.0"), 8), Longer()),
+				NewRouteFilter(net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 8), Longer()),
 			},
 			expected: false,
 		},
 		{
 			name:   "community matches",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			bgpPath: &route.BGPPath{
 				Communities: []uint32{65538, 196612, 327686}, // (1,2) (3,4) (5,6)
 			},
@@ -116,7 +116,7 @@ func TestMatches(t *testing.T) {
 		},
 		{
 			name:   "community does not match",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			bgpPath: &route.BGPPath{
 				Communities: []uint32{65538, 196612, 327686}, // (1,2) (3,4) (5,6)
 			},
@@ -127,7 +127,7 @@ func TestMatches(t *testing.T) {
 		},
 		{
 			name:   "community filter, bgp path is nil",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			communityFilters: []*CommunityFilter{
 				&CommunityFilter{196608}, // (3,0)
 			},
@@ -135,7 +135,7 @@ func TestMatches(t *testing.T) {
 		},
 		{
 			name:   "large community matches",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			bgpPath: &route.BGPPath{
 				LargeCommunities: []types.LargeCommunity{
 					types.LargeCommunity{
@@ -163,7 +163,7 @@ func TestMatches(t *testing.T) {
 		},
 		{
 			name:    "large community does not match",
-			prefix:  net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix:  net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			bgpPath: &route.BGPPath{},
 			largeCommunityFilters: []*LargeCommunityFilter{
 				{
@@ -178,7 +178,7 @@ func TestMatches(t *testing.T) {
 		},
 		{
 			name:   "large community filter, bgp path is nil",
-			prefix: net.NewPfx(strAddr("10.0.0.0"), 24),
+			prefix: net.NewPfx(net.IPv4FromOctets(10, 0, 0, 0), 24),
 			largeCommunityFilters: []*LargeCommunityFilter{
 				{
 					types.LargeCommunity{
diff --git a/routingtable/filter/term_test.go b/routingtable/filter/term_test.go
index d3abef87b52d2679084827283744e9b73599b433..876eb6691ec33a0a95697267f171ace3307d8a83 100644
--- a/routingtable/filter/term_test.go
+++ b/routingtable/filter/term_test.go
@@ -31,7 +31,7 @@ func TestProcess(t *testing.T) {
 	}{
 		{
 			name:   "empty from",
-			prefix: net.NewPfx(strAddr("100.64.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8),
 			path:   &route.Path{},
 			from:   []*TermCondition{},
 			then: []FilterAction{
@@ -42,11 +42,11 @@ func TestProcess(t *testing.T) {
 		},
 		{
 			name:   "from matches",
-			prefix: net.NewPfx(strAddr("100.64.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8),
 			path:   &route.Path{},
 			from: []*TermCondition{
 				NewTermConditionWithPrefixLists(
-					NewPrefixList(net.NewPfx(strAddr("100.64.0.1"), 8))),
+					NewPrefixList(net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8))),
 			},
 			then: []FilterAction{
 				&actions.AcceptAction{},
@@ -56,11 +56,11 @@ func TestProcess(t *testing.T) {
 		},
 		{
 			name:   "from does not match",
-			prefix: net.NewPfx(strAddr("100.64.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8),
 			path:   &route.Path{},
 			from: []*TermCondition{
 				NewTermConditionWithPrefixLists(
-					NewPrefixList(net.NewPfx(0, 32))),
+					NewPrefixList(net.NewPfx(net.IPv4(0), 32))),
 			},
 			then: []FilterAction{
 				&actions.AcceptAction{},
@@ -70,11 +70,11 @@ func TestProcess(t *testing.T) {
 		},
 		{
 			name:   "modified",
-			prefix: net.NewPfx(strAddr("100.64.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8),
 			path:   &route.Path{},
 			from: []*TermCondition{
 				NewTermConditionWithPrefixLists(
-					NewPrefixList(net.NewPfx(strAddr("100.64.0.1"), 8))),
+					NewPrefixList(net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8))),
 			},
 			then: []FilterAction{
 				&mockAction{},
@@ -84,11 +84,11 @@ func TestProcess(t *testing.T) {
 		},
 		{
 			name:   "modified and accepted (2 actions)",
-			prefix: net.NewPfx(strAddr("100.64.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8),
 			path:   &route.Path{},
 			from: []*TermCondition{
 				NewTermConditionWithRouteFilters(
-					NewRouteFilter(net.NewPfx(strAddr("100.64.0.1"), 8), Exact())),
+					NewRouteFilter(net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8), Exact())),
 			},
 			then: []FilterAction{
 				&mockAction{},
@@ -99,13 +99,13 @@ func TestProcess(t *testing.T) {
 		},
 		{
 			name:   "one of the prefix filters matches",
-			prefix: net.NewPfx(strAddr("100.64.0.1"), 8),
+			prefix: net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8),
 			path:   &route.Path{},
 			from: []*TermCondition{
 				{
 					prefixLists: []*PrefixList{
-						NewPrefixListWithMatcher(Exact(), net.NewPfx(0, 32)),
-						NewPrefixList(net.NewPfx(strAddr("100.64.0.1"), 8)),
+						NewPrefixListWithMatcher(Exact(), net.NewPfx(net.IPv4(0), 32)),
+						NewPrefixList(net.NewPfx(net.IPv4FromOctets(100, 64, 0, 1), 8)),
 					},
 				},
 			},
@@ -134,8 +134,3 @@ func TestProcess(t *testing.T) {
 		})
 	}
 }
-
-func strAddr(s string) uint32 {
-	ret, _ := net.StrToAddr(s)
-	return ret
-}
diff --git a/routingtable/trie_test.go b/routingtable/trie_test.go
deleted file mode 100644
index 7bbf46e11dcc2a19e3af36a012e81b65be326cad..0000000000000000000000000000000000000000
--- a/routingtable/trie_test.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package routingtable
-
-import (
-	"testing"
-)
-
-func TestGetBitUint32(t *testing.T) {
-	tests := []struct {
-		name     string
-		input    uint32
-		offset   uint8
-		expected bool
-	}{
-		{
-			name:     "test 1",
-			input:    167772160, // 10.0.0.0
-			offset:   8,
-			expected: false,
-		},
-		{
-			name:     "test 2",
-			input:    184549376, // 11.0.0.0
-			offset:   8,
-			expected: true,
-		},
-	}
-
-	for _, test := range tests {
-		b := getBitUint32(test.input, test.offset)
-		if b != test.expected {
-			t.Errorf("%s: Unexpected failure: Bit %d of %d is %v. Expected %v", test.name, test.offset, test.input, b, test.expected)
-		}
-	}
-}