diff --git a/config/BUILD.bazel b/config/BUILD.bazel
index b593df6146f658e92a526b07ffd7c2c9e0582d1c..0597dcfbcb0107809739ca60ba91eb748ba56d5c 100644
--- a/config/BUILD.bazel
+++ b/config/BUILD.bazel
@@ -9,6 +9,7 @@ go_library(
     importpath = "github.com/bio-routing/bio-rd/config",
     visibility = ["//visibility:public"],
     deps = [
+        "//net:go_default_library",
         "//routingtable:go_default_library",
         "//routingtable/filter:go_default_library",
         "//vendor/github.com/taktv6/tflow2/convert:go_default_library",
diff --git a/config/peer.go b/config/peer.go
index 5bcfa49af2c68951ed5aecb12d2402e6284a42f2..5f151fe56c59ffa4ca410eb174745e755b15c09d 100644
--- a/config/peer.go
+++ b/config/peer.go
@@ -1,20 +1,21 @@
 package config
 
 import (
-	"net"
 	"time"
 
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/routingtable"
 	"github.com/bio-routing/bio-rd/routingtable/filter"
 )
 
+// Peer defines the configuration for a BGP session
 type Peer struct {
 	AdminEnabled      bool
 	ReconnectInterval time.Duration
 	KeepAlive         time.Duration
 	HoldTime          time.Duration
-	LocalAddress      net.IP
-	PeerAddress       net.IP
+	LocalAddress      bnet.IP
+	PeerAddress       bnet.IP
 	LocalAS           uint32
 	PeerAS            uint32
 	Passive           bool
diff --git a/main.go b/main.go
index 7c5bd7f1ba15450a5679688079307d3e0428e626..6b924601418c4335d5c7ccb7878eb4281d29710c 100644
--- a/main.go
+++ b/main.go
@@ -42,8 +42,8 @@ func main() {
 		AdminEnabled:      true,
 		LocalAS:           65200,
 		PeerAS:            65300,
-		PeerAddress:       net.IP([]byte{172, 17, 0, 3}),
-		LocalAddress:      net.IP([]byte{169, 254, 200, 0}),
+		PeerAddress:       bnet.IPv4FromOctets(172, 17, 0, 3),
+		LocalAddress:      bnet.IPv4FromOctets(169, 254, 200, 0),
 		ReconnectInterval: time.Second * 15,
 		HoldTime:          time.Second * 90,
 		KeepAlive:         time.Second * 30,
@@ -61,8 +61,8 @@ func main() {
 		AdminEnabled:      true,
 		LocalAS:           65200,
 		PeerAS:            65100,
-		PeerAddress:       net.IP([]byte{172, 17, 0, 2}),
-		LocalAddress:      net.IP([]byte{169, 254, 100, 1}),
+		PeerAddress:       bnet.IPv4FromOctets(172, 17, 0, 2),
+		LocalAddress:      bnet.IPv4FromOctets(169, 254, 100, 1),
 		ReconnectInterval: time.Second * 15,
 		HoldTime:          time.Second * 90,
 		KeepAlive:         time.Second * 30,
diff --git a/net/BUILD.bazel b/net/BUILD.bazel
index 81111915c61f4963b5dfa5dc3ece2f221cf9e136..3c05c0de402d1317834cf2da3ea702a745db397f 100644
--- a/net/BUILD.bazel
+++ b/net/BUILD.bazel
@@ -4,17 +4,18 @@ go_library(
     name = "go_default_library",
     srcs = [
         "helper.go",
+        "ip.go",
         "prefix.go",
     ],
     importpath = "github.com/bio-routing/bio-rd/net",
     visibility = ["//visibility:public"],
-    deps = ["//vendor/github.com/taktv6/tflow2/convert:go_default_library"],
 )
 
 go_test(
     name = "go_default_test",
     srcs = [
         "helper_test.go",
+        "ip_test.go",
         "prefix_test.go",
     ],
     embed = [":go_default_library"],
diff --git a/net/ip.go b/net/ip.go
new file mode 100644
index 0000000000000000000000000000000000000000..2855235eae0e6c44753f351f2363ed790f2ed9e3
--- /dev/null
+++ b/net/ip.go
@@ -0,0 +1,165 @@
+package net
+
+import (
+	"fmt"
+	"net"
+)
+
+// IP represents an IPv4 or IPv6 address
+type IP struct {
+	higher    uint64
+	lower     uint64
+	ipVersion uint8
+}
+
+// IPv4 returns a new `IP` representing an IPv4 address
+func IPv4(val uint32) IP {
+	return IP{
+		lower:     uint64(val),
+		ipVersion: 4,
+	}
+}
+
+// IPv4FromOctets returns an IPv4 address for the given 4 octets
+func IPv4FromOctets(o1, o2, o3, o4 uint8) IP {
+	return IPv4(uint32(o1)<<24 + uint32(o2)<<16 + uint32(o3)<<8 + uint32(o4))
+}
+
+// IPv6 returns a new `IP` representing an IPv6 address
+func IPv6(higher, lower uint64) IP {
+	return IP{
+		higher:    higher,
+		lower:     lower,
+		ipVersion: 6,
+	}
+}
+
+// IPv6FromBlocks returns an IPv6 address for the given 8 blocks
+func IPv6FromBlocks(b1, b2, b3, b4, b5, b6, b7, b8 uint16) IP {
+	return IPv6(
+		uint64(uint64(b1)<<48+uint64(b2)<<32+uint64(b3)<<16+uint64(b4)),
+		uint64(uint64(b5)<<48+uint64(b6)<<32+uint64(b7)<<16+uint64(b8)))
+}
+
+// Equal returns true if ip is equal to other
+func (ip IP) Equal(other IP) bool {
+	return ip == other
+}
+
+// Compare compares two IP addresses (returns 0 if equal, -1 if `ip` is smaller than `other`, 1 if `ip` is greater than `other`)
+func (ip IP) Compare(other IP) int {
+	if ip.Equal(other) {
+		return 0
+	}
+
+	if ip.higher > other.higher {
+		return 1
+	}
+
+	if ip.higher < other.higher {
+		return -1
+	}
+
+	if ip.lower > other.lower {
+		return 1
+	}
+
+	return -1
+}
+
+func (ip IP) String() string {
+	if ip.ipVersion == 6 {
+		return ip.stringIPv6()
+	}
+
+	return ip.stringIPv4()
+}
+
+func (ip IP) stringIPv6() string {
+	return fmt.Sprintf("%X:%X:%X:%X:%X:%X:%X:%X",
+		ip.higher&0xFFFF000000000000>>48,
+		ip.higher&0x0000FFFF00000000>>32,
+		ip.higher&0x00000000FFFF0000>>16,
+		ip.higher&0x000000000000FFFF,
+		ip.lower&0xFFFF000000000000>>48,
+		ip.lower&0x0000FFFF00000000>>32,
+		ip.lower&0x00000000FFFF0000>>16,
+		ip.lower&0x000000000000FFFF)
+}
+
+func (ip IP) stringIPv4() string {
+	b := ip.Bytes()
+
+	return fmt.Sprintf("%d.%d.%d.%d", b[0], b[1], b[2], b[3])
+}
+
+// Bytes returns the byte representation of an IP address
+func (ip IP) Bytes() []byte {
+	if ip.ipVersion == 6 {
+		return ip.bytesIPv6()
+	}
+
+	return ip.bytesIPv4()
+}
+
+func (ip IP) bytesIPv4() []byte {
+	u := ip.ToUint32()
+	return []byte{
+		byte(u & 0xFF000000 >> 24),
+		byte(u & 0x00FF0000 >> 16),
+		byte(u & 0x0000FF00 >> 8),
+		byte(u & 0x000000FF),
+	}
+}
+
+// ToUint32 return the rightmost 32 bits of an 'IP'
+func (ip IP) ToUint32() uint32 {
+	return uint32(^uint64(0) >> 32 & ip.lower)
+}
+
+func (ip IP) bytesIPv6() []byte {
+	return []byte{
+		byte(ip.higher & 0xFF00000000000000 >> 56),
+		byte(ip.higher & 0x00FF000000000000 >> 48),
+		byte(ip.higher & 0x0000FF0000000000 >> 40),
+		byte(ip.higher & 0x000000FF00000000 >> 32),
+		byte(ip.higher & 0x00000000FF000000 >> 24),
+		byte(ip.higher & 0x0000000000FF0000 >> 16),
+		byte(ip.higher & 0x000000000000FF00 >> 8),
+		byte(ip.higher & 0x00000000000000FF),
+		byte(ip.lower & 0xFF00000000000000 >> 56),
+		byte(ip.lower & 0x00FF000000000000 >> 48),
+		byte(ip.lower & 0x0000FF0000000000 >> 40),
+		byte(ip.lower & 0x000000FF00000000 >> 32),
+		byte(ip.lower & 0x00000000FF000000 >> 24),
+		byte(ip.lower & 0x0000000000FF0000 >> 16),
+		byte(ip.lower & 0x000000000000FF00 >> 8),
+		byte(ip.lower & 0x00000000000000FF),
+	}
+}
+
+// ToNetIP converts the IP address in a `net.IP`
+func (ip IP) ToNetIP() net.IP {
+	return net.IP(ip.Bytes())
+}
+
+// BitAtPosition returns the bit at position pos
+func (ip IP) BitAtPosition(pos uint8) bool {
+	if ip.ipVersion == 6 {
+		return ip.bitAtPositionIPv6(pos)
+	}
+
+	return ip.bitAtPositionIPv4(pos)
+}
+
+func (ip IP) bitAtPositionIPv4(pos uint8) bool {
+	if pos > 32 {
+		return false
+	}
+
+	return (ip.ToUint32() & (1 << (32 - pos))) != 0
+}
+
+func (ip IP) bitAtPositionIPv6(pos uint8) bool {
+	panic("No IPv6 support yet!")
+}
diff --git a/net/ip_test.go b/net/ip_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..613e342d7ffe46460007aeec692da8c39286258f
--- /dev/null
+++ b/net/ip_test.go
@@ -0,0 +1,292 @@
+package net
+
+import (
+	"math"
+	"net"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestCompare(t *testing.T) {
+	tests := []struct {
+		name     string
+		ip       IP
+		other    IP
+		expected int
+	}{
+		{
+			name: "equal",
+			ip: IP{
+				lower:  100,
+				higher: 200,
+			},
+			other: IP{
+				lower:  100,
+				higher: 200,
+			},
+			expected: 0,
+		},
+		{
+			name: "greater higher word",
+			ip: IP{
+				lower:  123,
+				higher: 200,
+			},
+			other: IP{
+				lower:  456,
+				higher: 100,
+			},
+			expected: 1,
+		},
+		{
+			name: "lesser higher word",
+			ip: IP{
+				lower:  123,
+				higher: 100,
+			},
+			other: IP{
+				lower:  456,
+				higher: 200,
+			},
+			expected: -1,
+		},
+		{
+			name: "equal higher word but lesser lower word",
+			ip: IP{
+				lower:  456,
+				higher: 100,
+			},
+			other: IP{
+				lower:  123,
+				higher: 100,
+			},
+			expected: 1,
+		},
+		{
+			name: "equal higher word but lesser lower word",
+			ip: IP{
+				lower:  123,
+				higher: 100,
+			},
+			other: IP{
+				lower:  456,
+				higher: 100,
+			},
+			expected: -1,
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			assert.Equal(t, test.expected, test.ip.Compare(test.other))
+		})
+	}
+}
+
+func TestIPString(t *testing.T) {
+	tests := []struct {
+		ip       IP
+		expected string
+	}{
+		{
+			ip:       IPv4FromOctets(192, 168, 0, 1),
+			expected: "192.168.0.1",
+		},
+		{
+			ip:       IPv4FromOctets(0, 0, 0, 0),
+			expected: "0.0.0.0",
+		},
+		{
+			ip:       IPv4FromOctets(255, 255, 255, 255),
+			expected: "255.255.255.255",
+		},
+		{
+			ip:       IPv6(0, 0),
+			expected: "0:0:0:0:0:0:0:0",
+		},
+		{
+			ip:       IPv6(2306131596687708724, 6230974922281175806),
+			expected: "2001:678:1E0:1234:5678:DEAD:BEEF:CAFE",
+		},
+		{
+			ip:       IPv6(^uint64(0), ^uint64(0)),
+			expected: "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF",
+		},
+	}
+
+	for _, test := range tests {
+		assert.Equal(t, test.expected, test.ip.String())
+	}
+}
+
+func TestBytes(t *testing.T) {
+	tests := []struct {
+		name     string
+		ip       IP
+		expected []byte
+	}{
+		{
+			name:     "IPv4 172.217.16.195",
+			ip:       IPv4(2899906755),
+			expected: []byte{172, 217, 16, 195},
+		},
+		{
+			name:     "IPv6 2001:678:1E0:1234:5678:DEAD:BEEF:CAFE",
+			ip:       IPv6(2306131596687708724, 6230974922281175806),
+			expected: []byte{32, 1, 6, 120, 1, 224, 18, 52, 86, 120, 222, 173, 190, 239, 202, 254},
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			assert.Equal(t, test.expected, test.ip.Bytes())
+		})
+	}
+}
+
+func TestIPv4FromOctets(t *testing.T) {
+	tests := []struct {
+		name     string
+		octets   []uint8
+		expected IP
+	}{
+		{
+			name:   "172.217.16.195",
+			octets: []uint8{172, 217, 16, 195},
+			expected: IP{
+				higher:    0,
+				lower:     2899906755,
+				ipVersion: 4,
+			},
+		},
+		{
+			name:   "0.0.0.0",
+			octets: []uint8{0, 0, 0, 0},
+			expected: IP{
+				higher:    0,
+				lower:     0,
+				ipVersion: 4,
+			},
+		},
+		{
+			name:   "255.255.255.255",
+			octets: []uint8{255, 255, 255, 255},
+			expected: IP{
+				higher:    0,
+				lower:     math.MaxUint32,
+				ipVersion: 4,
+			},
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			assert.Equal(t, test.expected, IPv4FromOctets(test.octets[0], test.octets[1], test.octets[2], test.octets[3]))
+		})
+	}
+}
+
+func TestIPv6FromBlocks(t *testing.T) {
+	tests := []struct {
+		name     string
+		blocks   []uint16
+		expected IP
+	}{
+		{
+			name: "IPv6 2001:678:1E0:1234:5678:DEAD:BEEF:CAFE",
+			blocks: []uint16{
+				0x2001,
+				0x678,
+				0x1e0,
+				0x1234,
+				0x5678,
+				0xdead,
+				0xbeef,
+				0xcafe,
+			},
+			expected: IP{
+				higher:    2306131596687708724,
+				lower:     6230974922281175806,
+				ipVersion: 6,
+			},
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			assert.Equal(t, test.expected, IPv6FromBlocks(
+				test.blocks[0],
+				test.blocks[1],
+				test.blocks[2],
+				test.blocks[3],
+				test.blocks[4],
+				test.blocks[5],
+				test.blocks[6],
+				test.blocks[7]))
+		})
+	}
+}
+
+func TestToNetIP(t *testing.T) {
+	tests := []struct {
+		name     string
+		ip       IP
+		expected net.IP
+	}{
+		{
+			name:     "IPv4",
+			ip:       IPv4FromOctets(192, 168, 1, 1),
+			expected: net.IP{192, 168, 1, 1},
+		},
+		{
+			name: "IPv6",
+			ip: IPv6FromBlocks(
+				0x2001,
+				0x678,
+				0x1e0,
+				0x1234,
+				0x5678,
+				0xdead,
+				0xbeef,
+				0xcafe),
+			expected: net.IP{32, 1, 6, 120, 1, 224, 18, 52, 86, 120, 222, 173, 190, 239, 202, 254},
+		},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			assert.Equal(t, test.expected, test.ip.ToNetIP())
+		})
+	}
+}
+
+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/net/prefix.go b/net/prefix.go
index 126090fa3713f4331c80c3420dca969e9afe68d5..c40420247dfbfb11e8e05c01bae2fa1ed7d5e183 100644
--- a/net/prefix.go
+++ b/net/prefix.go
@@ -3,21 +3,18 @@ package net
 import (
 	"fmt"
 	"math"
-	"net"
 	"strconv"
 	"strings"
-
-	"github.com/taktv6/tflow2/convert"
 )
 
 // Prefix represents an IPv4 prefix
 type Prefix struct {
-	addr   uint32
+	addr   IP
 	pfxlen uint8
 }
 
 // NewPfx creates a new Prefix
-func NewPfx(addr uint32, pfxlen uint8) Prefix {
+func NewPfx(addr IP, pfxlen uint8) Prefix {
 	return Prefix{
 		addr:   addr,
 		pfxlen: pfxlen,
@@ -49,7 +46,7 @@ func StrToAddr(x string) (uint32, error) {
 }
 
 // Addr returns the address of the prefix
-func (pfx Prefix) Addr() uint32 {
+func (pfx Prefix) Addr() IP {
 	return pfx.addr
 }
 
@@ -60,7 +57,7 @@ func (pfx Prefix) Pfxlen() uint8 {
 
 // String returns a string representation of pfx
 func (pfx Prefix) String() string {
-	return fmt.Sprintf("%s/%d", net.IP(convert.Uint32Byte(pfx.addr)), pfx.pfxlen)
+	return fmt.Sprintf("%s/%d", pfx.addr, pfx.pfxlen)
 }
 
 // Contains checks if x is a subnet of or equal to pfx
@@ -69,8 +66,16 @@ func (pfx Prefix) Contains(x Prefix) bool {
 		return false
 	}
 
+	if pfx.addr.ipVersion == 4 {
+		return pfx.containsIPv4(x)
+	}
+
+	panic("No IPv6 support yet!")
+}
+
+func (pfx Prefix) containsIPv4(x Prefix) bool {
 	mask := uint32((math.MaxUint32 << (32 - pfx.pfxlen)))
-	return (pfx.addr & mask) == (x.addr & mask)
+	return (pfx.addr.ToUint32() & mask) == (x.addr.ToUint32() & mask)
 }
 
 // Equal checks if pfx and x are equal
@@ -80,9 +85,17 @@ func (pfx Prefix) Equal(x Prefix) bool {
 
 // GetSupernet gets the next common supernet of pfx and x
 func (pfx Prefix) GetSupernet(x Prefix) Prefix {
+	if pfx.addr.ipVersion == 4 {
+		return pfx.supernetIPv4(x)
+	}
+
+	panic("No IPv6 support yet!")
+}
+
+func (pfx Prefix) supernetIPv4(x Prefix) Prefix {
 	maxPfxLen := min(pfx.pfxlen, x.pfxlen) - 1
-	a := pfx.addr >> (32 - maxPfxLen)
-	b := x.addr >> (32 - maxPfxLen)
+	a := pfx.addr.ToUint32() >> (32 - maxPfxLen)
+	b := x.addr.ToUint32() >> (32 - maxPfxLen)
 
 	for i := 0; a != b; i++ {
 		a = a >> 1
@@ -91,7 +104,7 @@ func (pfx Prefix) GetSupernet(x Prefix) Prefix {
 	}
 
 	return Prefix{
-		addr:   a << (32 - maxPfxLen),
+		addr:   IPv4(a << (32 - maxPfxLen)),
 		pfxlen: maxPfxLen,
 	}
 }
diff --git a/net/prefix_test.go b/net/prefix_test.go
index 9ab908bca278be9a526c2570c9bbdc07a8d017a0..d886a49e4ae1ed49fede133df33ac4d90331dd16 100644
--- a/net/prefix_test.go
+++ b/net/prefix_test.go
@@ -7,8 +7,8 @@ import (
 )
 
 func TestNewPfx(t *testing.T) {
-	p := NewPfx(123, 11)
-	if p.addr != 123 || p.pfxlen != 11 {
+	p := NewPfx(IPv4(123), 11)
+	if p.addr != IPv4(123) || p.pfxlen != 11 {
 		t.Errorf("NewPfx() failed: Unexpected values")
 	}
 }
@@ -17,12 +17,12 @@ func TestAddr(t *testing.T) {
 	tests := []struct {
 		name     string
 		pfx      Prefix
-		expected uint32
+		expected IP
 	}{
 		{
 			name:     "Test 1",
-			pfx:      NewPfx(100, 5),
-			expected: 100,
+			pfx:      NewPfx(IPv4(100), 5),
+			expected: IPv4(100),
 		},
 	}
 
@@ -42,7 +42,7 @@ func TestPfxlen(t *testing.T) {
 	}{
 		{
 			name:     "Test 1",
-			pfx:      NewPfx(100, 5),
+			pfx:      NewPfx(IPv4(100), 5),
 			expected: 5,
 		},
 	}
@@ -65,30 +65,30 @@ func TestGetSupernet(t *testing.T) {
 		{
 			name: "Test 1",
 			a: Prefix{
-				addr:   167772160, // 10.0.0.0/8
+				addr:   IPv4FromOctets(10, 0, 0, 0),
 				pfxlen: 8,
 			},
 			b: Prefix{
-				addr:   191134464, // 11.100.123.0/24
+				addr:   IPv4FromOctets(11, 100, 123, 0),
 				pfxlen: 24,
 			},
 			expected: Prefix{
-				addr:   167772160, // 10.0.0.0/7
+				addr:   IPv4FromOctets(10, 0, 0, 0),
 				pfxlen: 7,
 			},
 		},
 		{
 			name: "Test 2",
 			a: Prefix{
-				addr:   167772160, // 10.0.0.0/8
+				addr:   IPv4FromOctets(10, 0, 0, 0),
 				pfxlen: 8,
 			},
 			b: Prefix{
-				addr:   3232235520, // 192.168.0.0/24
+				addr:   IPv4FromOctets(192, 168, 0, 0),
 				pfxlen: 24,
 			},
 			expected: Prefix{
-				addr:   0, // 0.0.0.0/0
+				addr:   IPv4(0), // 0.0.0.0/0
 				pfxlen: 0,
 			},
 		},
@@ -110,11 +110,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 1",
 			a: Prefix{
-				addr:   0,
+				addr:   IPv4(0),
 				pfxlen: 0,
 			},
 			b: Prefix{
-				addr:   100,
+				addr:   IPv4(100),
 				pfxlen: 24,
 			},
 			expected: true,
@@ -122,11 +122,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 2",
 			a: Prefix{
-				addr:   100,
+				addr:   IPv4(100),
 				pfxlen: 24,
 			},
 			b: Prefix{
-				addr:   0,
+				addr:   IPv4(0),
 				pfxlen: 0,
 			},
 			expected: false,
@@ -134,11 +134,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 3",
 			a: Prefix{
-				addr:   167772160,
+				addr:   IPv4(167772160),
 				pfxlen: 8,
 			},
 			b: Prefix{
-				addr:   167772160,
+				addr:   IPv4(167772160),
 				pfxlen: 9,
 			},
 			expected: true,
@@ -146,11 +146,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 4",
 			a: Prefix{
-				addr:   167772160,
+				addr:   IPv4(167772160),
 				pfxlen: 8,
 			},
 			b: Prefix{
-				addr:   174391040,
+				addr:   IPv4(174391040),
 				pfxlen: 24,
 			},
 			expected: true,
@@ -158,11 +158,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 5",
 			a: Prefix{
-				addr:   167772160,
+				addr:   IPv4(167772160),
 				pfxlen: 8,
 			},
 			b: Prefix{
-				addr:   184549377,
+				addr:   IPv4(184549377),
 				pfxlen: 24,
 			},
 			expected: false,
@@ -170,11 +170,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 6",
 			a: Prefix{
-				addr:   167772160,
+				addr:   IPv4(167772160),
 				pfxlen: 8,
 			},
 			b: Prefix{
-				addr:   191134464,
+				addr:   IPv4(191134464),
 				pfxlen: 24,
 			},
 			expected: false,
@@ -182,11 +182,11 @@ func TestContains(t *testing.T) {
 		{
 			name: "Test 7",
 			a: Prefix{
-				addr:   strAddr("169.0.0.0"),
+				addr:   IPv4FromOctets(169, 0, 0, 0),
 				pfxlen: 25,
 			},
 			b: Prefix{
-				addr:   strAddr("169.1.1.0"),
+				addr:   IPv4FromOctets(169, 1, 1, 0),
 				pfxlen: 26,
 			},
 			expected: false,
@@ -245,14 +245,14 @@ func TestEqual(t *testing.T) {
 	}{
 		{
 			name:     "Equal PFXs",
-			a:        NewPfx(100, 8),
-			b:        NewPfx(100, 8),
+			a:        NewPfx(IPv4(100), 8),
+			b:        NewPfx(IPv4(100), 8),
 			expected: true,
 		},
 		{
 			name:     "Unequal PFXs",
-			a:        NewPfx(100, 8),
-			b:        NewPfx(200, 8),
+			a:        NewPfx(IPv4(100), 8),
+			b:        NewPfx(IPv4(200), 8),
 			expected: false,
 		},
 	}
@@ -273,12 +273,12 @@ func TestString(t *testing.T) {
 	}{
 		{
 			name:     "Test 1",
-			pfx:      NewPfx(167772160, 8), // 10.0.0.0/8
+			pfx:      NewPfx(IPv4FromOctets(10, 0, 0, 0), 8),
 			expected: "10.0.0.0/8",
 		},
 		{
 			name:     "Test 2",
-			pfx:      NewPfx(167772160, 16), // 10.0.0.0/8
+			pfx:      NewPfx(IPv4FromOctets(10, 0, 0, 0), 16),
 			expected: "10.0.0.0/16",
 		},
 	}
@@ -345,7 +345,11 @@ func TestStrToAddr(t *testing.T) {
 	}
 }
 
-func strAddr(s string) uint32 {
-	ret, _ := StrToAddr(s)
-	return ret
+func TestEqualOperator(t *testing.T) {
+	p1 := NewPfx(IPv4(100), 4)
+	p2 := NewPfx(IPv4(100), 4)
+
+	if p1 != p2 {
+		assert.Fail(t, "p1 != p2 (even if attributes are equal)")
+	}
 }
diff --git a/protocols/bgp/packet/BUILD.bazel b/protocols/bgp/packet/BUILD.bazel
index 3a9b5fd463ba33831be932734b27a8c845e8069d..d6f4d73f49b4a5ec4eaf7b1d288a1e32bd2eb88d 100644
--- a/protocols/bgp/packet/BUILD.bazel
+++ b/protocols/bgp/packet/BUILD.bazel
@@ -15,6 +15,7 @@ go_library(
     importpath = "github.com/bio-routing/bio-rd/protocols/bgp/packet",
     visibility = ["//visibility:public"],
     deps = [
+        "//net:go_default_library",
         "//protocols/bgp/types:go_default_library",
         "//route:go_default_library",
         "//vendor/github.com/taktv6/tflow2/convert:go_default_library",
diff --git a/protocols/bgp/packet/decoder_test.go b/protocols/bgp/packet/decoder_test.go
index a874ba1041d35c3ca3476251096cef5320dbbc70..5613bbcb6c46a385492f5c38f5a837ae5e287ee7 100644
--- a/protocols/bgp/packet/decoder_test.go
+++ b/protocols/bgp/packet/decoder_test.go
@@ -10,6 +10,8 @@ import (
 	"github.com/bio-routing/bio-rd/protocols/bgp/types"
 	"github.com/stretchr/testify/assert"
 	"github.com/taktv6/tflow2/convert"
+
+	bnet "github.com/bio-routing/bio-rd/net"
 )
 
 type test struct {
@@ -723,7 +725,7 @@ func TestDecodeUpdateMsg(t *testing.T) {
 							ExtendedLength: false,
 							Length:         4,
 							TypeCode:       3,
-							Value:          strAddr("10.11.12.13"),
+							Value:          bnet.IPv4FromOctets(10, 11, 12, 13),
 						},
 					},
 				},
@@ -813,7 +815,7 @@ func TestDecodeUpdateMsg(t *testing.T) {
 							ExtendedLength: false,
 							Length:         4,
 							TypeCode:       3,
-							Value:          strAddr("10.11.12.13"),
+							Value:          bnet.IPv4FromOctets(10, 11, 12, 13),
 							Next: &PathAttribute{
 								Optional:       false,
 								Transitive:     false,
@@ -916,7 +918,7 @@ func TestDecodeUpdateMsg(t *testing.T) {
 							ExtendedLength: false,
 							Length:         4,
 							TypeCode:       3,
-							Value:          strAddr("10.11.12.13"),
+							Value:          bnet.IPv4FromOctets(10, 11, 12, 13),
 							Next: &PathAttribute{
 								Optional:       false,
 								Transitive:     false,
@@ -1032,7 +1034,7 @@ func TestDecodeUpdateMsg(t *testing.T) {
 							ExtendedLength: false,
 							Length:         4,
 							TypeCode:       3,
-							Value:          strAddr("10.11.12.13"),
+							Value:          bnet.IPv4FromOctets(10, 11, 12, 13),
 							Next: &PathAttribute{
 								Optional:       false,
 								Transitive:     false,
@@ -1164,7 +1166,7 @@ func TestDecodeUpdateMsg(t *testing.T) {
 							ExtendedLength: false,
 							Length:         4,
 							TypeCode:       3,
-							Value:          strAddr("10.11.12.13"),
+							Value:          bnet.IPv4FromOctets(10, 11, 12, 13),
 							Next: &PathAttribute{
 								Optional:       false,
 								Transitive:     false,
diff --git a/protocols/bgp/packet/path_attributes.go b/protocols/bgp/packet/path_attributes.go
index f592af68c359cae74837725d823d9cac5bc6075a..f1aae242153e09da32de808fabe40efbcc719456 100644
--- a/protocols/bgp/packet/path_attributes.go
+++ b/protocols/bgp/packet/path_attributes.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"fmt"
 
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/protocols/bgp/types"
 	"github.com/bio-routing/bio-rd/route"
 	"github.com/taktv6/tflow2/convert"
@@ -212,7 +213,14 @@ func (pa *PathAttribute) decode2ByteASN(buf *bytes.Buffer) (asn uint32, err erro
 }
 
 func (pa *PathAttribute) decodeNextHop(buf *bytes.Buffer) error {
-	return pa.decodeUint32(buf, "next hop")
+	nextHop := uint32(0)
+	err := decode(buf, []interface{}{&nextHop})
+	if err != nil {
+		return fmt.Errorf("Unable to decode next hop: %v", err)
+	}
+
+	pa.Value = bnet.IPv4(nextHop)
+	return nil
 }
 
 func (pa *PathAttribute) decodeMED(buf *bytes.Buffer) error {
@@ -441,8 +449,8 @@ func (pa *PathAttribute) serializeNextHop(buf *bytes.Buffer) uint8 {
 	buf.WriteByte(NextHopAttr)
 	length := uint8(4)
 	buf.WriteByte(length)
-	addr := pa.Value.(uint32)
-	buf.Write(convert.Uint32Byte(addr))
+	addr := pa.Value.(bnet.IP)
+	buf.Write(addr.Bytes())
 	return 7
 }
 
diff --git a/protocols/bgp/packet/path_attributes_test.go b/protocols/bgp/packet/path_attributes_test.go
index dea391e069527f65f33c946c421da91632d37373..4a0966e6b3dee2a6bbbf3bb4712247eefc7696e1 100644
--- a/protocols/bgp/packet/path_attributes_test.go
+++ b/protocols/bgp/packet/path_attributes_test.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"testing"
 
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/protocols/bgp/types"
 	"github.com/stretchr/testify/assert"
 )
@@ -35,7 +36,7 @@ func TestDecodePathAttrs(t *testing.T) {
 				Next: &PathAttribute{
 					TypeCode: 3,
 					Length:   4,
-					Value:    strAddr("10.20.30.40"),
+					Value:    bnet.IPv4FromOctets(10, 20, 30, 40),
 				},
 			},
 		},
@@ -396,7 +397,7 @@ func TestDecodeNextHop(t *testing.T) {
 			wantFail: false,
 			expected: &PathAttribute{
 				Length: 4,
-				Value:  strAddr("10.20.30.40"),
+				Value:  bnet.IPv4FromOctets(10, 20, 30, 40),
 			},
 		},
 		{
@@ -1004,7 +1005,7 @@ func TestSerializeNextHop(t *testing.T) {
 			name: "Test #1",
 			input: &PathAttribute{
 				TypeCode: NextHopAttr,
-				Value:    strAddr("100.110.120.130"),
+				Value:    bnet.IPv4FromOctets(100, 110, 120, 130),
 			},
 			expected:    []byte{64, 3, 4, 100, 110, 120, 130},
 			expectedLen: 7,
@@ -1503,7 +1504,7 @@ func TestSerialize(t *testing.T) {
 						},
 						Next: &PathAttribute{
 							TypeCode: NextHopAttr,
-							Value:    strAddr("10.20.30.40"),
+							Value:    bnet.IPv4FromOctets(10, 20, 30, 40),
 							Next: &PathAttribute{
 								TypeCode: MEDAttr,
 								Value:    uint32(100),
@@ -1712,7 +1713,7 @@ func TestSerializeAddPath(t *testing.T) {
 						},
 						Next: &PathAttribute{
 							TypeCode: NextHopAttr,
-							Value:    strAddr("10.20.30.40"),
+							Value:    bnet.IPv4FromOctets(10, 20, 30, 40),
 							Next: &PathAttribute{
 								TypeCode: MEDAttr,
 								Value:    uint32(100),
diff --git a/protocols/bgp/server/fsm.go b/protocols/bgp/server/fsm.go
index e85bda8cc21d6c47ac2c300639177aab8623859f..991f1b60853631a7b88d7fbb38c0e81ff551cc6e 100644
--- a/protocols/bgp/server/fsm.go
+++ b/protocols/bgp/server/fsm.go
@@ -170,7 +170,7 @@ func (fsm *FSM) tcpConnector() error {
 	for {
 		select {
 		case <-fsm.initiateCon:
-			c, err := net.DialTCP("tcp", &net.TCPAddr{IP: fsm.local}, &net.TCPAddr{IP: fsm.peer.addr, Port: BGPPORT})
+			c, err := net.DialTCP("tcp", &net.TCPAddr{IP: fsm.local}, &net.TCPAddr{IP: fsm.peer.addr.ToNetIP(), Port: BGPPORT})
 			if err != nil {
 				select {
 				case fsm.conErrCh <- err:
diff --git a/protocols/bgp/server/fsm_established.go b/protocols/bgp/server/fsm_established.go
index 9aced1fe480489ed116960262318750f74e7b5ee..b5740c57b9d32ef299d2e783c87b16d06a6e0b14 100644
--- a/protocols/bgp/server/fsm_established.go
+++ b/protocols/bgp/server/fsm_established.go
@@ -74,11 +74,11 @@ func (s *establishedState) init() error {
 
 	n := &routingtable.Neighbor{
 		Type:              route.BGPPathType,
-		Address:           bnet.IPv4ToUint32(s.fsm.peer.addr),
+		Address:           s.fsm.peer.addr,
 		IBGP:              s.fsm.peer.localASN == s.fsm.peer.peerASN,
 		LocalASN:          s.fsm.peer.localASN,
 		RouteServerClient: s.fsm.peer.routeServerClient,
-		LocalAddress:      bnet.IPv4ToUint32(hostIP),
+		LocalAddress:      bnet.IPv4(bnet.IPv4ToUint32(hostIP)),
 		CapAddPathRX:      s.fsm.options.AddPathRX,
 	}
 
@@ -207,19 +207,19 @@ func (s *establishedState) update(msg *packet.BGPMessage) (state, string) {
 
 func (s *establishedState) withdraws(u *packet.BGPUpdate) {
 	for r := u.WithdrawnRoutes; r != nil; r = r.Next {
-		pfx := bnet.NewPfx(r.IP, r.Pfxlen)
+		pfx := bnet.NewPfx(bnet.IPv4(r.IP), r.Pfxlen)
 		s.fsm.adjRIBIn.RemovePath(pfx, nil)
 	}
 }
 
 func (s *establishedState) updates(u *packet.BGPUpdate) {
 	for r := u.NLRI; r != nil; r = r.Next {
-		pfx := bnet.NewPfx(r.IP, r.Pfxlen)
+		pfx := bnet.NewPfx(bnet.IPv4(r.IP), r.Pfxlen)
 
 		path := &route.Path{
 			Type: route.BGPPathType,
 			BGPPath: &route.BGPPath{
-				Source: bnet.IPv4ToUint32(s.fsm.peer.addr),
+				Source: s.fsm.peer.addr,
 				EBGP:   s.fsm.peer.localASN != s.fsm.peer.peerASN,
 			},
 		}
@@ -240,7 +240,7 @@ func (s *establishedState) processAttributes(attrs *packet.PathAttribute, path *
 		case packet.MEDAttr:
 			path.BGPPath.MED = pa.Value.(uint32)
 		case packet.NextHopAttr:
-			path.BGPPath.NextHop = pa.Value.(uint32)
+			path.BGPPath.NextHop = pa.Value.(bnet.IP)
 		case packet.ASPathAttr:
 			path.BGPPath.ASPath = pa.Value.(types.ASPath)
 			path.BGPPath.ASPathLen = path.BGPPath.ASPath.Length()
diff --git a/protocols/bgp/server/fsm_test.go b/protocols/bgp/server/fsm_test.go
index 9cff29b3706dc30d11a1017a7d963d30bafcb1f2..2af938822e25b265831033c1b74fd690eef4e90d 100644
--- a/protocols/bgp/server/fsm_test.go
+++ b/protocols/bgp/server/fsm_test.go
@@ -1,7 +1,6 @@
 package server
 
 import (
-	"net"
 	"sync"
 	"testing"
 	"time"
@@ -10,12 +9,14 @@ import (
 	"github.com/bio-routing/bio-rd/routingtable/filter"
 	"github.com/bio-routing/bio-rd/routingtable/locRIB"
 	"github.com/stretchr/testify/assert"
+
+	bnet "github.com/bio-routing/bio-rd/net"
 )
 
 // TestFSM100Updates emulates receiving 100 BGP updates and withdraws. Checks route counts.
 func TestFSM100Updates(t *testing.T) {
 	fsmA := newFSM2(&peer{
-		addr:         net.ParseIP("169.254.100.100"),
+		addr:         bnet.IPv4FromOctets(169, 254, 100, 100),
 		rib:          locRIB.New(),
 		importFilter: filter.NewAcceptAllFilter(),
 		exportFilter: filter.NewAcceptAllFilter(),
diff --git a/protocols/bgp/server/peer.go b/protocols/bgp/server/peer.go
index 125393fb8fbfbfb5ed4bb626a5bc0aa352094d82..2772903061d6180c6d49ff48c70e3f96af4dfc33 100644
--- a/protocols/bgp/server/peer.go
+++ b/protocols/bgp/server/peer.go
@@ -1,11 +1,11 @@
 package server
 
 import (
-	"net"
 	"sync"
 	"time"
 
 	"github.com/bio-routing/bio-rd/config"
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/protocols/bgp/packet"
 	"github.com/bio-routing/bio-rd/routingtable"
 	"github.com/bio-routing/bio-rd/routingtable/filter"
@@ -13,14 +13,14 @@ import (
 )
 
 type PeerInfo struct {
-	PeerAddr net.IP
+	PeerAddr bnet.IP
 	PeerASN  uint32
 	LocalASN uint32
 }
 
 type peer struct {
 	server   *bgpServer
-	addr     net.IP
+	addr     bnet.IP
 	peerASN  uint32
 	localASN uint32
 
@@ -184,7 +184,7 @@ func filterOrDefault(f *filter.Filter) *filter.Filter {
 }
 
 // GetAddr returns the IP address of the peer
-func (p *peer) GetAddr() net.IP {
+func (p *peer) GetAddr() bnet.IP {
 	return p.addr
 }
 
diff --git a/protocols/bgp/server/server_test.go b/protocols/bgp/server/server_test.go
index baf30a19344cb12c284ec22eb364809d7dc4cd72..fffe879ce078deaa77a6a795d357f64ef74e3796 100644
--- a/protocols/bgp/server/server_test.go
+++ b/protocols/bgp/server/server_test.go
@@ -1,7 +1,6 @@
 package server
 
 import (
-	"net"
 	"testing"
 	"time"
 
@@ -9,6 +8,8 @@ import (
 	"github.com/bio-routing/bio-rd/routingtable"
 	"github.com/bio-routing/bio-rd/routingtable/filter"
 	"github.com/bio-routing/bio-rd/routingtable/locRIB"
+
+	bnet "github.com/bio-routing/bio-rd/net"
 )
 
 func TestBgpServerPeerSnapshot(t *testing.T) {
@@ -30,8 +31,8 @@ func TestBgpServerPeerSnapshot(t *testing.T) {
 	pc := config.Peer{
 		AdminEnabled:      true,
 		PeerAS:            65300,
-		PeerAddress:       net.IP([]byte{169, 254, 200, 1}),
-		LocalAddress:      net.IP([]byte{169, 254, 200, 0}),
+		PeerAddress:       bnet.IPv4FromOctets(169, 254, 200, 1),
+		LocalAddress:      bnet.IPv4FromOctets(169, 254, 200, 0),
 		ReconnectInterval: time.Second * 15,
 		HoldTime:          time.Second * 90,
 		KeepAlive:         time.Second * 30,
@@ -56,7 +57,7 @@ func TestBgpServerPeerSnapshot(t *testing.T) {
 		break
 	}
 
-	if want, got := net.ParseIP("169.254.200.1"), peer.PeerAddr; !want.Equal(got) {
+	if want, got := bnet.IPv4FromOctets(169, 254, 200, 1), peer.PeerAddr; !want.Equal(got) {
 		t.Errorf("PeerAddr: got %v, want %v", got, want)
 	}
 	if want, got := uint32(65300), peer.PeerASN; want != got {
diff --git a/protocols/bgp/server/update_sender.go b/protocols/bgp/server/update_sender.go
index dedae8ef54a63f3afc73a355636534150c69492a..a223ee1752b63775a32a4715bbbb3232575a86ab 100644
--- a/protocols/bgp/server/update_sender.go
+++ b/protocols/bgp/server/update_sender.go
@@ -130,7 +130,7 @@ func (u *UpdateSender) sendUpdates(pathAttrs *packet.PathAttribute, updatePrefix
 		for _, pfx := range updatePrefix {
 			nlri = &packet.NLRI{
 				PathIdentifier: pathID,
-				IP:             pfx.Addr(),
+				IP:             pfx.Addr().ToUint32(),
 				Pfxlen:         pfx.Pfxlen(),
 				Next:           update.NLRI,
 			}
diff --git a/protocols/bgp/server/update_sender_test.go b/protocols/bgp/server/update_sender_test.go
index 1683c23d12434c711edeb5f2d62bd54882709303..1335c15385d42b4fba6e616a2bf297bce20f671d 100644
--- a/protocols/bgp/server/update_sender_test.go
+++ b/protocols/bgp/server/update_sender_test.go
@@ -1,7 +1,6 @@
 package server
 
 import (
-	"net"
 	"reflect"
 	"testing"
 	"time"
@@ -35,10 +34,10 @@ func TestSender(t *testing.T) {
 						},
 					},
 					pfxs: []bnet.Prefix{
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{10, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{11, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{12, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{13, 0, 0, 0})), 32),
+						bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(11, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(12, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(13, 0, 0, 0), 32),
 					},
 				},
 				{
@@ -49,10 +48,10 @@ func TestSender(t *testing.T) {
 						},
 					},
 					pfxs: []bnet.Prefix{
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{20, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{21, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{22, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{23, 0, 0, 0})), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(20, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(21, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(22, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(23, 0, 0, 0), 8),
 					},
 				},
 			},
@@ -97,10 +96,10 @@ func TestSender(t *testing.T) {
 						},
 					},
 					pfxs: []bnet.Prefix{
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{10, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{11, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{12, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{13, 0, 0, 0})), 32),
+						bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(11, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(12, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(13, 0, 0, 0), 32),
 					},
 				},
 				{
@@ -111,10 +110,10 @@ func TestSender(t *testing.T) {
 						},
 					},
 					pfxs: []bnet.Prefix{
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{20, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{21, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{22, 0, 0, 0})), 8),
-						bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{23, 0, 0, 0})), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(20, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(21, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(22, 0, 0, 0), 8),
+						bnet.NewPfx(bnet.IPv4FromOctets(23, 0, 0, 0), 8),
 					},
 				},
 			},
@@ -334,7 +333,7 @@ func TestSender(t *testing.T) {
 
 	for _, test := range tests {
 		fsmA := newFSM2(&peer{
-			addr:         net.ParseIP("169.254.100.100"),
+			addr:         bnet.IPv4FromOctets(169, 254, 100, 100),
 			rib:          locRIB.New(),
 			importFilter: filter.NewAcceptAllFilter(),
 			exportFilter: filter.NewAcceptAllFilter(),
@@ -362,7 +361,7 @@ func TestSender(t *testing.T) {
 				for i := uint64(0); i < test.generateNLRIs; i++ {
 					x := i / 256
 					y := i - x
-					pfx := bnet.NewPfx(bnet.IPv4ToUint32(net.IP([]byte{10, 0, uint8(x), uint8(y)})), 32)
+					pfx := bnet.NewPfx(bnet.IPv4FromOctets(10, 0, uint8(x), uint8(y)), 32)
 					updateSender.AddPath(pfx, pathPfx.path)
 				}
 			}
diff --git a/protocols/bgp/server/withdraw.go b/protocols/bgp/server/withdraw.go
index e3f1137e1e96469dfa69f3bd825a3a644a582fc2..98243560f929952ab7c26e47e3c797af17016772 100644
--- a/protocols/bgp/server/withdraw.go
+++ b/protocols/bgp/server/withdraw.go
@@ -21,13 +21,13 @@ func withDrawPrefixes(out io.Writer, opt *types.Options, prefixes ...net.Prefix)
 	for _, pfx := range prefixes {
 		if rootNLRI == nil {
 			rootNLRI = &packet.NLRI{
-				IP:     pfx.Addr(),
+				IP:     pfx.Addr().ToUint32(),
 				Pfxlen: pfx.Pfxlen(),
 			}
 			currentNLRI = rootNLRI
 		} else {
 			currentNLRI.Next = &packet.NLRI{
-				IP:     pfx.Addr(),
+				IP:     pfx.Addr().ToUint32(),
 				Pfxlen: pfx.Pfxlen(),
 			}
 			currentNLRI = currentNLRI.Next
@@ -52,7 +52,7 @@ func withDrawPrefixesAddPath(out io.Writer, opt *types.Options, pfx net.Prefix,
 	update := &packet.BGPUpdate{
 		WithdrawnRoutes: &packet.NLRI{
 			PathIdentifier: p.BGPPath.PathIdentifier,
-			IP:             pfx.Addr(),
+			IP:             pfx.Addr().ToUint32(),
 			Pfxlen:         pfx.Pfxlen(),
 		},
 	}
diff --git a/protocols/bgp/server/withdraw_test.go b/protocols/bgp/server/withdraw_test.go
index c21b6ada956e4c694a8408e962a67efe611574c2..cfe0a0283c0af493317284b495b150ae27f1edc8 100644
--- a/protocols/bgp/server/withdraw_test.go
+++ b/protocols/bgp/server/withdraw_test.go
@@ -23,7 +23,7 @@ func TestWithDrawPrefixes(t *testing.T) {
 	}{
 		{
 			Name:   "One withdraw",
-			Prefix: []net.Prefix{net.NewPfx(1413010532, 24)},
+			Prefix: []net.Prefix{net.NewPfx(net.IPv4(1413010532), 24)},
 			Expected: []byte{
 				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // BGP Marker
 				0x00, 0x1b, // BGP Message Length
@@ -37,7 +37,7 @@ func TestWithDrawPrefixes(t *testing.T) {
 		},
 		{
 			Name:   "two withdraws",
-			Prefix: []net.Prefix{net.NewPfx(1413010532, 24), net.NewPfx(1413010534, 25)},
+			Prefix: []net.Prefix{net.NewPfx(net.IPv4(1413010532), 24), net.NewPfx(net.IPv4(1413010534), 25)},
 			Expected: []byte{
 				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // BGP Marker
 				0x00, 0x20, // BGP Message Length
@@ -71,7 +71,7 @@ func TestWithDrawPrefixesAddPath(t *testing.T) {
 	}{
 		{
 			Name:   "Normal withdraw",
-			Prefix: net.NewPfx(1413010532, 24),
+			Prefix: net.NewPfx(net.IPv4(1413010532), 24),
 			Path: &route.Path{
 				Type: route.BGPPathType,
 				BGPPath: &route.BGPPath{
@@ -92,7 +92,7 @@ func TestWithDrawPrefixesAddPath(t *testing.T) {
 		},
 		{
 			Name:   "Non bgp withdraw",
-			Prefix: net.NewPfx(1413010532, 24),
+			Prefix: net.NewPfx(net.IPv4(1413010532), 24),
 			Path: &route.Path{
 				Type: route.StaticPathType,
 			},
@@ -101,7 +101,7 @@ func TestWithDrawPrefixesAddPath(t *testing.T) {
 		},
 		{
 			Name:   "Nil BGPPathType",
-			Prefix: net.NewPfx(1413010532, 24),
+			Prefix: net.NewPfx(net.IPv4(1413010532), 24),
 			Path: &route.Path{
 				Type: route.BGPPathType,
 			},
diff --git a/route/bgp_path.go b/route/bgp_path.go
index fbca2255f620b8b49a9d7bc57490754316b412de..ee9aca8343129a52aebf5eac6cd487dc489cb466 100644
--- a/route/bgp_path.go
+++ b/route/bgp_path.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"strings"
 
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/protocols/bgp/types"
 	"github.com/taktv6/tflow2/convert"
 )
@@ -12,7 +13,7 @@ import (
 // BGPPath represents a set of BGP path attributes
 type BGPPath struct {
 	PathIdentifier    uint32
-	NextHop           uint32
+	NextHop           bnet.IP
 	LocalPref         uint32
 	ASPath            types.ASPath
 	ASPathLen         uint16
@@ -22,7 +23,7 @@ type BGPPath struct {
 	AtomicAggregate   bool
 	Aggregator        *types.Aggregator
 	BGPIdentifier     uint32
-	Source            uint32
+	Source            bnet.IP
 	Communities       []uint32
 	LargeCommunities  []types.LargeCommunity
 	UnknownAttributes []types.UnknownPathAttribute
@@ -119,19 +120,19 @@ func (b *BGPPath) Compare(c *BGPPath) int8 {
 	}
 
 	// g)
-	if c.Source < b.Source {
+	if c.Source.Compare(b.Source) == -1 {
 		return 1
 	}
 
-	if c.Source > b.Source {
+	if c.Source.Compare(b.Source) == 1 {
 		return -1
 	}
 
-	if c.NextHop < b.NextHop {
+	if c.NextHop.Compare(b.NextHop) == -1 {
 		return 1
 	}
 
-	if c.NextHop > b.NextHop {
+	if c.NextHop.Compare(b.NextHop) == 1 {
 		return -1
 	}
 
@@ -183,7 +184,7 @@ func (b *BGPPath) better(c *BGPPath) bool {
 		return true
 	}
 
-	if c.Source < b.Source {
+	if c.Source.Compare(b.Source) == -1 {
 		return true
 	}
 
@@ -211,12 +212,10 @@ func (b *BGPPath) Print() string {
 	ret += fmt.Sprintf("\t\tOrigin: %s\n", origin)
 	ret += fmt.Sprintf("\t\tAS Path: %v\n", b.ASPath)
 	ret += fmt.Sprintf("\t\tBGP type: %s\n", bgpType)
-	nh := uint32To4Byte(b.NextHop)
-	ret += fmt.Sprintf("\t\tNEXT HOP: %d.%d.%d.%d\n", nh[0], nh[1], nh[2], nh[3])
+	ret += fmt.Sprintf("\t\tNEXT HOP: %s\n", b.NextHop)
 	ret += fmt.Sprintf("\t\tMED: %d\n", b.MED)
 	ret += fmt.Sprintf("\t\tPath ID: %d\n", b.PathIdentifier)
-	src := uint32To4Byte(b.Source)
-	ret += fmt.Sprintf("\t\tSource: %d.%d.%d.%d\n", src[0], src[1], src[2], src[3])
+	ret += fmt.Sprintf("\t\tSource: %s\n", b.Source)
 	ret += fmt.Sprintf("\t\tCommunities: %v\n", b.Communities)
 	ret += fmt.Sprintf("\t\tLargeCommunities: %v\n", b.LargeCommunities)
 
@@ -286,7 +285,7 @@ func (b *BGPPath) Copy() *BGPPath {
 
 // ComputeHash computes an hash over all attributes of the path
 func (b *BGPPath) ComputeHash() string {
-	s := fmt.Sprintf("%d\t%d\t%v\t%d\t%d\t%v\t%d\t%d\t%v\t%v\t%d",
+	s := fmt.Sprintf("%s\t%d\t%v\t%d\t%d\t%v\t%d\t%s\t%v\t%v\t%d",
 		b.NextHop,
 		b.LocalPref,
 		b.ASPath,
diff --git a/route/bgp_test.go b/route/bgp_test.go
index 46ceb9af2364746aba48711400e9091cc882457f..f399d5d51ab96ad1a5b789a22aceb4d7b2490932 100644
--- a/route/bgp_test.go
+++ b/route/bgp_test.go
@@ -5,6 +5,8 @@ import (
 
 	"github.com/bio-routing/bio-rd/protocols/bgp/types"
 	"github.com/stretchr/testify/assert"
+
+	bnet "github.com/bio-routing/bio-rd/net"
 )
 
 func TestComputeHash(t *testing.T) {
@@ -29,14 +31,14 @@ func TestComputeHash(t *testing.T) {
 		},
 		LocalPref:      100,
 		MED:            1,
-		NextHop:        100,
+		NextHop:        bnet.IPv4(100),
 		PathIdentifier: 5,
-		Source:         4,
+		Source:         bnet.IPv4(4),
 	}
 
-	assert.Equal(t, "45e238420552b88043edb8cb402034466b08d53b49f8e0fedc680747014ddeff", p.ComputeHash())
+	assert.Equal(t, "98d68e69d993f8807c561cc7d63de759f7edc732887f88a7ebf42f61b9e54821", p.ComputeHash())
 
 	p.LocalPref = 150
 
-	assert.NotEqual(t, "45e238420552b88043edb8cb402034466b08d53b49f8e0fedc680747014ddeff", p.ComputeHash())
+	assert.NotEqual(t, "98d68e69d993f8807c561cc7d63de759f7edc732887f88a7ebf42f61b9e54821", p.ComputeHash())
 }
diff --git a/route/route.go b/route/route.go
index 300f5dcb96c07453cbee03c964935dad028a10da..f9251bbcef51371005215b99b1efa58fae17d26a 100644
--- a/route/route.go
+++ b/route/route.go
@@ -63,7 +63,7 @@ func (r *Route) Prefix() net.Prefix {
 }
 
 // Addr gets a routes address
-func (r *Route) Addr() uint32 {
+func (r *Route) Addr() net.IP {
 	return r.pfx.Addr()
 }
 
diff --git a/route/route_test.go b/route/route_test.go
index aece08b7e592a2d4fd6119ba3562e5d15cbf5553..4aaeb92804618918f8306364448c47521fa19cea 100644
--- a/route/route_test.go
+++ b/route/route_test.go
@@ -5,25 +5,25 @@ import (
 
 	"github.com/stretchr/testify/assert"
 
-	"github.com/bio-routing/bio-rd/net"
+	bnet "github.com/bio-routing/bio-rd/net"
 )
 
 func TestNewRoute(t *testing.T) {
 	tests := []struct {
 		name     string
-		pfx      net.Prefix
+		pfx      bnet.Prefix
 		path     *Path
 		expected *Route
 	}{
 		{
 			name: "BGP Path",
-			pfx:  net.NewPfx(strAddr("10.0.0.0"), 8),
+			pfx:  bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 			path: &Path{
 				Type:    BGPPathType,
 				BGPPath: &BGPPath{},
 			},
 			expected: &Route{
-				pfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 				paths: []*Path{
 					&Path{
 						Type:    BGPPathType,
@@ -34,9 +34,9 @@ func TestNewRoute(t *testing.T) {
 		},
 		{
 			name: "Empty Path",
-			pfx:  net.NewPfx(strAddr("10.0.0.0"), 8),
+			pfx:  bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 			expected: &Route{
-				pfx:   net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx:   bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 				paths: []*Path{},
 			},
 		},
@@ -52,14 +52,14 @@ func TestPrefix(t *testing.T) {
 	tests := []struct {
 		name     string
 		route    *Route
-		expected net.Prefix
+		expected bnet.Prefix
 	}{
 		{
 			name: "Prefix",
 			route: &Route{
-				pfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 			},
-			expected: net.NewPfx(strAddr("10.0.0.0"), 8),
+			expected: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 		},
 	}
 
@@ -73,14 +73,14 @@ func TestAddr(t *testing.T) {
 	tests := []struct {
 		name     string
 		route    *Route
-		expected uint32
+		expected bnet.IP
 	}{
 		{
 			name: "Prefix",
 			route: &Route{
-				pfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 			},
-			expected: 0xa000000,
+			expected: bnet.IPv4(0xa000000),
 		},
 	}
 
@@ -99,7 +99,7 @@ func TestPfxlen(t *testing.T) {
 		{
 			name: "Prefix",
 			route: &Route{
-				pfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 			},
 			expected: 8,
 		},
@@ -120,7 +120,7 @@ func TestAddPath(t *testing.T) {
 	}{
 		{
 			name: "Regular BGP path",
-			route: NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &Path{
+			route: NewRoute(bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8), &Path{
 				Type:    BGPPathType,
 				BGPPath: &BGPPath{},
 			}),
@@ -129,7 +129,7 @@ func TestAddPath(t *testing.T) {
 				BGPPath: &BGPPath{},
 			},
 			expected: &Route{
-				pfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 				paths: []*Path{
 					{
 						Type:    BGPPathType,
@@ -144,13 +144,13 @@ func TestAddPath(t *testing.T) {
 		},
 		{
 			name: "Nil path",
-			route: NewRoute(net.NewPfx(strAddr("10.0.0.0"), 8), &Path{
+			route: NewRoute(bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8), &Path{
 				Type:    BGPPathType,
 				BGPPath: &BGPPath{},
 			}),
 			newPath: nil,
 			expected: &Route{
-				pfx: net.NewPfx(strAddr("10.0.0.0"), 8),
+				pfx: bnet.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8),
 				paths: []*Path{
 					{
 						Type:    BGPPathType,
@@ -271,7 +271,7 @@ func TestCopy(t *testing.T) {
 		{
 			name: "",
 			route: &Route{
-				pfx:       net.NewPfx(1000, 8),
+				pfx:       bnet.NewPfx(bnet.IPv4(1000), 8),
 				ecmpPaths: 2,
 				paths: []*Path{
 					{
@@ -280,7 +280,7 @@ func TestCopy(t *testing.T) {
 				},
 			},
 			expected: &Route{
-				pfx:       net.NewPfx(1000, 8),
+				pfx:       bnet.NewPfx(bnet.IPv4(1000), 8),
 				ecmpPaths: 2,
 				paths: []*Path{
 					{
@@ -328,7 +328,7 @@ func TestBestPath(t *testing.T) {
 					{
 						Type: StaticPathType,
 						StaticPath: &StaticPath{
-							NextHop: 32,
+							NextHop: bnet.IPv4(32),
 						},
 					},
 				},
@@ -336,7 +336,7 @@ func TestBestPath(t *testing.T) {
 			expected: &Path{
 				Type: StaticPathType,
 				StaticPath: &StaticPath{
-					NextHop: 32,
+					NextHop: bnet.IPv4(32),
 				},
 			},
 		},
@@ -366,13 +366,13 @@ func TestECMPPaths(t *testing.T) {
 					{
 						Type: StaticPathType,
 						StaticPath: &StaticPath{
-							NextHop: 32,
+							NextHop: bnet.IPv4(32),
 						},
 					},
 					{
 						Type: StaticPathType,
 						StaticPath: &StaticPath{
-							NextHop: 32,
+							NextHop: bnet.IPv4(32),
 						},
 					},
 				},
@@ -381,13 +381,13 @@ func TestECMPPaths(t *testing.T) {
 				{
 					Type: StaticPathType,
 					StaticPath: &StaticPath{
-						NextHop: 32,
+						NextHop: bnet.IPv4(32),
 					},
 				},
 				{
 					Type: StaticPathType,
 					StaticPath: &StaticPath{
-						NextHop: 32,
+						NextHop: bnet.IPv4(32),
 					},
 				},
 			},
@@ -397,8 +397,3 @@ func TestECMPPaths(t *testing.T) {
 		assert.Equal(t, tc.expected, tc.route.ECMPPaths())
 	}
 }
-
-func strAddr(s string) uint32 {
-	ret, _ := net.StrToAddr(s)
-	return ret
-}
diff --git a/route/static.go b/route/static.go
index 0ab6b26e3dc01c58b756efca28935b2e8e4e9d5a..af2990f25ba164346587bf1b3ebb0dae2011ffea 100644
--- a/route/static.go
+++ b/route/static.go
@@ -1,8 +1,10 @@
 package route
 
+import bnet "github.com/bio-routing/bio-rd/net"
+
 // StaticPath represents a static path of a route
 type StaticPath struct {
-	NextHop uint32
+	NextHop bnet.IP
 }
 
 func (r *Route) staticPathSelection() {
diff --git a/routingtable/BUILD.bazel b/routingtable/BUILD.bazel
index 78434b1aa57a1173a8cd8f202763a0498236f0c5..02ae5d697f23572ae7e82037e0055dd6bfb220ff 100644
--- a/routingtable/BUILD.bazel
+++ b/routingtable/BUILD.bazel
@@ -28,7 +28,6 @@ go_test(
         "client_manager_test.go",
         "contributing_asn_list_test.go",
         "table_test.go",
-        "trie_test.go",
         "update_helper_test.go",
     ],
     embed = [":go_default_library"],
diff --git a/routingtable/adjRIBIn/adj_rib_in_test.go b/routingtable/adjRIBIn/adj_rib_in_test.go
index 9939e805d0dc73bd9e9f6555463c343f6ca16bcc..0fb052db2a5e34f26eb2132cf86cd03632f420c7 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.Prefix{},
 			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,8 @@ func TestRemovePath(t *testing.T) {
 			assert.Equal(t, test.removePath, removePathParams.Path)
 		} else {
 			removePathParams := mc.GetRemovePathParams()
-			if removePathParams.Pfx != net.NewPfx(0, 0) {
+			uninitialized := net.Prefix{}
+			if removePathParams.Pfx != uninitialized {
 				t.Errorf("Test %q failed: Call to RemovePath propagated unexpectedly", test.name)
 			}
 		}
@@ -192,8 +193,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.go b/routingtable/filter/actions/set_nexthop_action.go
index f178f61802882157856fc1f4bf15c8d9f0b08dc6..de1e9bc959b8f9d827c48c844699aa2aed92fda9 100644
--- a/routingtable/filter/actions/set_nexthop_action.go
+++ b/routingtable/filter/actions/set_nexthop_action.go
@@ -2,16 +2,17 @@ package actions
 
 import (
 	"github.com/bio-routing/bio-rd/net"
+	bnet "github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/route"
 )
 
 type SetNextHopAction struct {
-	addr uint32
+	ip bnet.IP
 }
 
-func NewSetNextHopAction(addr uint32) *SetNextHopAction {
+func NewSetNextHopAction(ip bnet.IP) *SetNextHopAction {
 	return &SetNextHopAction{
-		addr: addr,
+		ip: ip,
 	}
 }
 
@@ -21,7 +22,7 @@ func (a *SetNextHopAction) Do(p net.Prefix, pa *route.Path) (modPath *route.Path
 	}
 
 	modified := pa.Copy()
-	modified.BGPPath.NextHop = a.addr
+	modified.BGPPath.NextHop = a.ip
 
 	return modified, false
 }
diff --git a/routingtable/filter/actions/set_nexthop_action_test.go b/routingtable/filter/actions/set_nexthop_action_test.go
index 7501e6bdcc388c65577cea8ce0a425acf8b7d3e3..7f691d235f288e1155980ea997b4e6fddaa6a4de 100644
--- a/routingtable/filter/actions/set_nexthop_action_test.go
+++ b/routingtable/filter/actions/set_nexthop_action_test.go
@@ -6,13 +6,15 @@ import (
 	"github.com/bio-routing/bio-rd/net"
 	"github.com/bio-routing/bio-rd/route"
 	"github.com/stretchr/testify/assert"
+
+	bnet "github.com/bio-routing/bio-rd/net"
 )
 
 func TestSetNextHopTest(t *testing.T) {
 	tests := []struct {
 		name     string
 		bgpPath  *route.BGPPath
-		expected uint32
+		expected net.IP
 	}{
 		{
 			name: "BGPPath is nil",
@@ -20,21 +22,21 @@ func TestSetNextHopTest(t *testing.T) {
 		{
 			name: "modify path",
 			bgpPath: &route.BGPPath{
-				NextHop: strAddr("100.64.2.1"),
+				NextHop: bnet.IPv4FromOctets(192, 168, 1, 1),
 			},
-			expected: strAddr("100.64.2.1"),
+			expected: bnet.IPv4FromOctets(100, 64, 2, 1),
 		},
 	}
 
 	for _, test := range tests {
-		t.Run(test.name, func(te *testing.T) {
-			a := NewSetNextHopAction(strAddr("100.64.2.1"))
-			p, _ := a.Do(net.NewPfx(strAddr("10.0.0.0"), 8), &route.Path{
+		t.Run(test.name, func(t *testing.T) {
+			a := NewSetNextHopAction(bnet.IPv4FromOctets(100, 64, 2, 1))
+			p, _ := a.Do(net.NewPfx(bnet.IPv4FromOctets(10, 0, 0, 0), 8), &route.Path{
 				BGPPath: test.bgpPath,
 			})
 
-			if test.expected > 0 {
-				assert.Equal(te, test.expected, p.BGPPath.NextHop)
+			if test.bgpPath != nil {
+				assert.Equal(t, test.expected, p.BGPPath.NextHop)
 			}
 		})
 	}
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/locRIB/loc_rib_test.go b/routingtable/locRIB/loc_rib_test.go
index ea4d9c6c30e5596f4b0685d92a20b86eb182bf16..6b3e24e0715ec5ec8a670c9d6bd94f1a28fab5ad 100644
--- a/routingtable/locRIB/loc_rib_test.go
+++ b/routingtable/locRIB/loc_rib_test.go
@@ -3,14 +3,14 @@ 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"
 
 	"github.com/stretchr/testify/assert"
 )
 
 type pfxPath struct {
-	pfx  net.Prefix
+	pfx  bnet.Prefix
 	path *route.Path
 }
 
@@ -25,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,
@@ -34,17 +34,17 @@ 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{
-							NextHop: 2,
+							NextHop: bnet.IPv4(2),
 						},
 					},
 				},
 			},
 			check: pfxPath{
-				pfx:  net.NewPfx(1, 32),
+				pfx:  bnet.NewPfx(bnet.IPv4(1), 32),
 				path: nil,
 			},
 			expected: false,
@@ -53,21 +53,21 @@ 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{
-							NextHop: 2,
+							NextHop: bnet.IPv4(2),
 						},
 					},
 				},
 			},
 			check: pfxPath{
-				pfx: net.NewPfx(1, 32),
+				pfx: bnet.NewPfx(bnet.IPv4(1), 32),
 				path: &route.Path{
 					Type: route.StaticPathType,
 					StaticPath: &route.StaticPath{
-						NextHop: 2,
+						NextHop: bnet.IPv4(2),
 					},
 				},
 			},
@@ -87,11 +87,11 @@ 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{
-				NextHop: 2,
+				NextHop: bnet.IPv4(2),
 			},
 		}))
 }
diff --git a/routingtable/neighbor.go b/routingtable/neighbor.go
index f298356fa73ef40de0293b76d55c28cc0c363dfe..bf6e97c6af46da590dd071e6e40b9978410f78ce 100644
--- a/routingtable/neighbor.go
+++ b/routingtable/neighbor.go
@@ -1,12 +1,14 @@
 package routingtable
 
+import bnet "github.com/bio-routing/bio-rd/net"
+
 // Neighbor represents the attributes identifying a neighbor relationsship
 type Neighbor struct {
 	// Addres is the IPv4 address of the neighbor as integer representation
-	Address uint32
+	Address bnet.IP
 
 	// Local address is the local address of the BGP TCP connection
-	LocalAddress uint32
+	LocalAddress bnet.IP
 
 	// Type is the type / protocol used for routing inforation communitation
 	Type uint8
diff --git a/routingtable/table_test.go b/routingtable/table_test.go
index ef18c5175533a649504f4d6ade2a43edcda102ff..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,22 +478,22 @@ 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:   101,
+						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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
-			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,23 +501,23 @@ 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,
-						NextHop:   101,
+						NextHop:   net.IPv4(101),
 					},
 				}, &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
@@ -526,34 +526,34 @@ 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:   101,
+						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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
-			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,23 +561,23 @@ 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,
-						NextHop:   101,
+						NextHop:   net.IPv4(101),
 					},
 				}, &route.Path{
 					Type: route.BGPPathType,
 					BGPPath: &route.BGPPath{
 						LocalPref: 1002,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
@@ -624,42 +624,42 @@ 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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
-			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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
@@ -668,35 +668,35 @@ 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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
-			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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
@@ -705,35 +705,35 @@ 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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
-			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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
@@ -742,33 +742,33 @@ 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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
-			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,
-						NextHop:   100,
+						NextHop:   net.IPv4(100),
 					},
 				}),
 			},
@@ -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/trie.go b/routingtable/trie.go
index 5e719f086ec9b60d1466775d495a34cf35159eed..25a4262e6d4001383c5a2bd095b13d44fd47401b 100644
--- a/routingtable/trie.go
+++ b/routingtable/trie.go
@@ -14,10 +14,6 @@ type node struct {
 	h     *node
 }
 
-func getBitUint32(x uint32, pos uint8) bool {
-	return ((x) & (1 << (32 - pos))) != 0
-}
-
 func newNode(pfx net.Prefix, path *route.Path, skip uint8, dummy bool) *node {
 	n := &node{
 		route: route.NewRoute(pfx, path),
@@ -46,7 +42,7 @@ func (n *node) removePath(pfx net.Prefix, p *route.Path) (final bool) {
 		return nPathsAfterDel == 0
 	}
 
-	b := getBitUint32(pfx.Addr(), n.route.Pfxlen()+1)
+	b := pfx.Addr().BitAtPosition(n.route.Pfxlen() + 1)
 	if !b {
 		return n.l.removePath(pfx, p)
 	}
@@ -111,7 +107,7 @@ func (n *node) get(pfx net.Prefix) *node {
 		return nil
 	}
 
-	b := getBitUint32(pfx.Addr(), n.route.Pfxlen()+1)
+	b := pfx.Addr().BitAtPosition(n.route.Pfxlen() + 1)
 	if !b {
 		return n.l.get(pfx)
 	}
@@ -136,7 +132,7 @@ func (n *node) addPath(pfx net.Prefix, p *route.Path) (*node, bool) {
 	}
 
 	// pfx is a subnet of this node
-	b := getBitUint32(pfx.Addr(), n.route.Pfxlen()+1)
+	b := pfx.Addr().BitAtPosition(n.route.Pfxlen() + 1)
 
 	if !b {
 		return n.insertLow(pfx, p, currentPfx.Pfxlen())
@@ -177,7 +173,7 @@ func (n *node) newSuperNode(pfx net.Prefix, p *route.Path) *node {
 
 func (n *node) insertChildren(old *node, newPfx net.Prefix, newPath *route.Path) {
 	// Place the old node
-	b := getBitUint32(old.route.Prefix().Addr(), n.route.Pfxlen()+1)
+	b := old.route.Prefix().Addr().BitAtPosition(n.route.Pfxlen() + 1)
 	if !b {
 		n.l = old
 		n.l.skip = old.route.Pfxlen() - n.route.Pfxlen() - 1
@@ -188,7 +184,7 @@ func (n *node) insertChildren(old *node, newPfx net.Prefix, newPath *route.Path)
 
 	// Place the new Prefix
 	newNode := newNode(newPfx, newPath, newPfx.Pfxlen()-n.route.Pfxlen()-1, false)
-	b = getBitUint32(newPfx.Addr(), n.route.Pfxlen()+1)
+	b = newPfx.Addr().BitAtPosition(n.route.Pfxlen() + 1)
 	if !b {
 		n.l = newNode
 	} else {
@@ -203,7 +199,7 @@ func (n *node) insertBefore(pfx net.Prefix, p *route.Path, parentPfxLen uint8) *
 	skip := n.skip - pfxLenDiff
 	new := newNode(pfx, p, skip, false)
 
-	b := getBitUint32(pfx.Addr(), parentPfxLen)
+	b := pfx.Addr().BitAtPosition(parentPfxLen)
 	if !b {
 		new.l = tmp
 		new.l.skip = tmp.route.Pfxlen() - pfx.Pfxlen() - 1
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)
-		}
-	}
-}
diff --git a/routingtable/update_helper_test.go b/routingtable/update_helper_test.go
index 451b983beae4df2ce289b60be0be8d1b7bd7f67a..b6527e39c4180a6a7c2b7788793d8dcdfb6fc7d8 100644
--- a/routingtable/update_helper_test.go
+++ b/routingtable/update_helper_test.go
@@ -1,7 +1,6 @@
 package routingtable
 
 import (
-	"net"
 	"strings"
 	"testing"
 
@@ -27,7 +26,7 @@ func TestShouldPropagateUpdate(t *testing.T) {
 			communities: "(1,2)",
 			neighbor: Neighbor{
 				Type:    route.BGPPathType,
-				Address: bnet.IPv4ToUint32(net.ParseIP("192.168.1.1")),
+				Address: bnet.IPv4FromOctets(192, 168, 1, 1),
 			},
 			expected: false,
 		},
@@ -74,12 +73,12 @@ 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{
 					Communities: comms,
-					Source:      bnet.IPv4ToUint32(net.ParseIP("192.168.1.1")),
+					Source:      bnet.IPv4FromOctets(192, 168, 1, 1),
 				},
 			}
 
diff --git a/vendor/github.com/Masterminds/semver/BUILD.bazel b/vendor/github.com/Masterminds/semver/BUILD.bazel
index 501de4ec1a18ecb59402f7b162965c56eb7e8786..bf7d35c81e3bd31ef56f80d8d2d344275048525f 100644
--- a/vendor/github.com/Masterminds/semver/BUILD.bazel
+++ b/vendor/github.com/Masterminds/semver/BUILD.bazel
@@ -13,7 +13,7 @@ go_library(
         "union.go",
         "version.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/Masterminds/semver",
+    importmap = "vendor/github.com/Masterminds/semver",
     importpath = "github.com/Masterminds/semver",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/Masterminds/vcs/BUILD.bazel b/vendor/github.com/Masterminds/vcs/BUILD.bazel
index 25a38e72e1c0b651fd4486751f6709322a548bef..d5544f95e2f1331450898c29a481e06792b5d39b 100644
--- a/vendor/github.com/Masterminds/vcs/BUILD.bazel
+++ b/vendor/github.com/Masterminds/vcs/BUILD.bazel
@@ -12,7 +12,7 @@ go_library(
         "vcs_local_lookup.go",
         "vcs_remote_lookup.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/Masterminds/vcs",
+    importmap = "vendor/github.com/Masterminds/vcs",
     importpath = "github.com/Masterminds/vcs",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/armon/go-radix/BUILD.bazel b/vendor/github.com/armon/go-radix/BUILD.bazel
index 7f2d8cc3e915f7a0c611751b8241b96ebe8de8b6..e9b05f2ca2c5d8946a9a3cf1c2b89da835fe36f3 100644
--- a/vendor/github.com/armon/go-radix/BUILD.bazel
+++ b/vendor/github.com/armon/go-radix/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["radix.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/armon/go-radix",
+    importmap = "vendor/github.com/armon/go-radix",
     importpath = "github.com/armon/go-radix",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/boltdb/bolt/BUILD.bazel b/vendor/github.com/boltdb/bolt/BUILD.bazel
index e44ac9afc0e1ddfc14210cb96827ed60647f39ca..f2b6acbede3f24e2a8688c1cc4530f7f1acfca05 100644
--- a/vendor/github.com/boltdb/bolt/BUILD.bazel
+++ b/vendor/github.com/boltdb/bolt/BUILD.bazel
@@ -26,7 +26,7 @@ go_library(
         "page.go",
         "tx.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/boltdb/bolt",
+    importmap = "vendor/github.com/boltdb/bolt",
     importpath = "github.com/boltdb/bolt",
     visibility = ["//visibility:public"],
     deps = select({
diff --git a/vendor/github.com/davecgh/go-spew/spew/BUILD.bazel b/vendor/github.com/davecgh/go-spew/spew/BUILD.bazel
index d2c31e00c111bd66e601740791122d71a8ee0015..be40c1a667e4ae7ee4dfcdcef73efe74d18fa1d6 100644
--- a/vendor/github.com/davecgh/go-spew/spew/BUILD.bazel
+++ b/vendor/github.com/davecgh/go-spew/spew/BUILD.bazel
@@ -11,7 +11,7 @@ go_library(
         "format.go",
         "spew.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/davecgh/go-spew/spew",
+    importmap = "vendor/github.com/davecgh/go-spew/spew",
     importpath = "github.com/davecgh/go-spew/spew",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/go-yaml/yaml/BUILD.bazel b/vendor/github.com/go-yaml/yaml/BUILD.bazel
index 5a950bd804e1e122e011eb13cb8c4582685cde91..48a837c2d7107a2e2a7b54cf16fb971361188b50 100644
--- a/vendor/github.com/go-yaml/yaml/BUILD.bazel
+++ b/vendor/github.com/go-yaml/yaml/BUILD.bazel
@@ -17,7 +17,7 @@ go_library(
         "yamlh.go",
         "yamlprivateh.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/go-yaml/yaml",
+    importmap = "vendor/github.com/go-yaml/yaml",
     importpath = "github.com/go-yaml/yaml",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/golang/dep/BUILD.bazel b/vendor/github.com/golang/dep/BUILD.bazel
index 890fa4720a4a2120b76bc0185988a2b6ae3a2f2d..e5fa67015561b614abde2a9c800c3c5acb116bf6 100644
--- a/vendor/github.com/golang/dep/BUILD.bazel
+++ b/vendor/github.com/golang/dep/BUILD.bazel
@@ -11,7 +11,7 @@ go_library(
         "project.go",
         "txn_writer.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep",
+    importmap = "vendor/github.com/golang/dep",
     importpath = "github.com/golang/dep",
     visibility = ["//visibility:public"],
     deps = [
diff --git a/vendor/github.com/golang/dep/cmd/dep/BUILD.bazel b/vendor/github.com/golang/dep/cmd/dep/BUILD.bazel
index a60622cd81dea5af0951ef405047ff4e11d337d6..69276c90879818b0f1c81b25ce3b032c3413579c 100644
--- a/vendor/github.com/golang/dep/cmd/dep/BUILD.bazel
+++ b/vendor/github.com/golang/dep/cmd/dep/BUILD.bazel
@@ -16,7 +16,7 @@ go_library(
         "status.go",
         "version.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/cmd/dep",
+    importmap = "vendor/github.com/golang/dep/cmd/dep",
     importpath = "github.com/golang/dep/cmd/dep",
     visibility = ["//visibility:private"],
     deps = [
diff --git a/vendor/github.com/golang/dep/gps/BUILD.bazel b/vendor/github.com/golang/dep/gps/BUILD.bazel
index 7665f62fa3acc65e4e4af1f5e7289b4fa21a1d1e..a86871b51919587edbcb2c8baadfe45d60f29732 100644
--- a/vendor/github.com/golang/dep/gps/BUILD.bazel
+++ b/vendor/github.com/golang/dep/gps/BUILD.bazel
@@ -42,7 +42,7 @@ go_library(
         "version_queue.go",
         "version_unifier.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/gps",
+    importmap = "vendor/github.com/golang/dep/gps",
     importpath = "github.com/golang/dep/gps",
     visibility = ["//visibility:public"],
     deps = [
diff --git a/vendor/github.com/golang/dep/gps/internal/pb/BUILD.bazel b/vendor/github.com/golang/dep/gps/internal/pb/BUILD.bazel
index 490ae09fcfcbb1cb4baf3c4142a924ade5dc759b..fafa65ddf55f1bb7cb543eee99e6d98b0976a4fe 100644
--- a/vendor/github.com/golang/dep/gps/internal/pb/BUILD.bazel
+++ b/vendor/github.com/golang/dep/gps/internal/pb/BUILD.bazel
@@ -6,7 +6,7 @@ go_library(
         "pb.go",
         "source_cache.pb.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/gps/internal/pb",
+    importmap = "vendor/github.com/golang/dep/gps/internal/pb",
     importpath = "github.com/golang/dep/gps/internal/pb",
     visibility = ["//vendor/github.com/golang/dep/gps:__subpackages__"],
     deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"],
diff --git a/vendor/github.com/golang/dep/gps/paths/BUILD.bazel b/vendor/github.com/golang/dep/gps/paths/BUILD.bazel
index dcac6f2b33ff5c3245996af0d01260be7705ef60..4dad14b3c38fe2737a8e1fc1f0d3f28bd00cc7db 100644
--- a/vendor/github.com/golang/dep/gps/paths/BUILD.bazel
+++ b/vendor/github.com/golang/dep/gps/paths/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["paths.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/gps/paths",
+    importmap = "vendor/github.com/golang/dep/gps/paths",
     importpath = "github.com/golang/dep/gps/paths",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/golang/dep/gps/pkgtree/BUILD.bazel b/vendor/github.com/golang/dep/gps/pkgtree/BUILD.bazel
index c6e0d12728171e1fa7b93294ff5b28d1bd991131..2c64bdfad3ed5ced70decbd41a3279534b283e7d 100644
--- a/vendor/github.com/golang/dep/gps/pkgtree/BUILD.bazel
+++ b/vendor/github.com/golang/dep/gps/pkgtree/BUILD.bazel
@@ -9,7 +9,7 @@ go_library(
         "pkgtree.go",
         "reachmap.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/gps/pkgtree",
+    importmap = "vendor/github.com/golang/dep/gps/pkgtree",
     importpath = "github.com/golang/dep/gps/pkgtree",
     visibility = ["//visibility:public"],
     deps = [
diff --git a/vendor/github.com/golang/dep/hack/licenseok/BUILD.bazel b/vendor/github.com/golang/dep/hack/licenseok/BUILD.bazel
index 269168018559980ff3c2879c2ce532ba049f2ab8..f1194382b165c29f44dab43eb11adfeb75f28947 100644
--- a/vendor/github.com/golang/dep/hack/licenseok/BUILD.bazel
+++ b/vendor/github.com/golang/dep/hack/licenseok/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["main.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/hack/licenseok",
+    importmap = "vendor/github.com/golang/dep/hack/licenseok",
     importpath = "github.com/golang/dep/hack/licenseok",
     visibility = ["//visibility:private"],
 )
diff --git a/vendor/github.com/golang/dep/internal/feedback/BUILD.bazel b/vendor/github.com/golang/dep/internal/feedback/BUILD.bazel
index 4fe3726b2ec3382412446ea04c99489498b26947..10a231192ad633adb6101fb572486d4749df5348 100644
--- a/vendor/github.com/golang/dep/internal/feedback/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/feedback/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["feedback.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/feedback",
+    importmap = "vendor/github.com/golang/dep/internal/feedback",
     importpath = "github.com/golang/dep/internal/feedback",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = ["//vendor/github.com/golang/dep/gps:go_default_library"],
diff --git a/vendor/github.com/golang/dep/internal/fs/BUILD.bazel b/vendor/github.com/golang/dep/internal/fs/BUILD.bazel
index 418f2d3ca5a255edce129a788cbcbba3789a9afb..10e60f08a648cf669b64ce6bd9bfafe06f771ecf 100644
--- a/vendor/github.com/golang/dep/internal/fs/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/fs/BUILD.bazel
@@ -7,7 +7,7 @@ go_library(
         "rename.go",
         "rename_windows.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/fs",
+    importmap = "vendor/github.com/golang/dep/internal/fs",
     importpath = "github.com/golang/dep/internal/fs",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = ["//vendor/github.com/pkg/errors:go_default_library"],
diff --git a/vendor/github.com/golang/dep/internal/importers/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/BUILD.bazel
index 153c3a59ba280c35fcd483faab8118a2920759cb..7d4330ccf931e7f74c62cd00aa46394a11c6f2cf 100644
--- a/vendor/github.com/golang/dep/internal/importers/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importers.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers",
+    importmap = "vendor/github.com/golang/dep/internal/importers",
     importpath = "github.com/golang/dep/internal/importers",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/base/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/base/BUILD.bazel
index e0689249cb4847e0938446e324e8b4034c7f0611..dd342c3138c515f98e89b5d317e4c2a4392e86ee 100644
--- a/vendor/github.com/golang/dep/internal/importers/base/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/base/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/base",
+    importmap = "vendor/github.com/golang/dep/internal/importers/base",
     importpath = "github.com/golang/dep/internal/importers/base",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/glide/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/glide/BUILD.bazel
index dc945ddeff342fe9db78e8022f277fc16286a5e6..68dd5efb0f014d6d76f99c6140c92415746579d1 100644
--- a/vendor/github.com/golang/dep/internal/importers/glide/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/glide/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/glide",
+    importmap = "vendor/github.com/golang/dep/internal/importers/glide",
     importpath = "github.com/golang/dep/internal/importers/glide",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/glock/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/glock/BUILD.bazel
index 00a24a995074874944d7b62b4ed47caccde030c2..43742756bfa5bc9dd7e67eefba01dbc4aef1b0dc 100644
--- a/vendor/github.com/golang/dep/internal/importers/glock/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/glock/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/glock",
+    importmap = "vendor/github.com/golang/dep/internal/importers/glock",
     importpath = "github.com/golang/dep/internal/importers/glock",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/godep/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/godep/BUILD.bazel
index 0f244ede8c70f163eb94f70cf74596278b68efd4..86849a916d4e605a9553e181c7510e4f4c568323 100644
--- a/vendor/github.com/golang/dep/internal/importers/godep/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/godep/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/godep",
+    importmap = "vendor/github.com/golang/dep/internal/importers/godep",
     importpath = "github.com/golang/dep/internal/importers/godep",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/govend/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/govend/BUILD.bazel
index 58ed9c5b0f6bd2f79ba5efd796f6cc949b758dee..dd3d3b485805eacbc3b011be4f98173da9eff411 100644
--- a/vendor/github.com/golang/dep/internal/importers/govend/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/govend/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/govend",
+    importmap = "vendor/github.com/golang/dep/internal/importers/govend",
     importpath = "github.com/golang/dep/internal/importers/govend",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/govendor/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/govendor/BUILD.bazel
index b48ee6f19cd6dcdf60dfc0706c3e58b1c6b5338e..26dc082e35140e1a1cadae8d476b2e77dfda74dc 100644
--- a/vendor/github.com/golang/dep/internal/importers/govendor/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/govendor/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/govendor",
+    importmap = "vendor/github.com/golang/dep/internal/importers/govendor",
     importpath = "github.com/golang/dep/internal/importers/govendor",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/gvt/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/gvt/BUILD.bazel
index 425445f1033972fc1e1d63708eb5bc51db560471..a22b94389803339fef8f522821396691f737b390 100644
--- a/vendor/github.com/golang/dep/internal/importers/gvt/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/gvt/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/gvt",
+    importmap = "vendor/github.com/golang/dep/internal/importers/gvt",
     importpath = "github.com/golang/dep/internal/importers/gvt",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/importertest/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/importertest/BUILD.bazel
index 507928a84cacb8c562bba675e646690f1736e0c0..e11ed7d2475cc3a5a42a178e33728d2809620c92 100644
--- a/vendor/github.com/golang/dep/internal/importers/importertest/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/importertest/BUILD.bazel
@@ -6,7 +6,7 @@ go_library(
         "testcase.go",
         "testdata.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/importertest",
+    importmap = "vendor/github.com/golang/dep/internal/importers/importertest",
     importpath = "github.com/golang/dep/internal/importers/importertest",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/importers/vndr/BUILD.bazel b/vendor/github.com/golang/dep/internal/importers/vndr/BUILD.bazel
index 8e40fcceda4d29f0c7e59b2d27d0e39257ee37d3..72cc72322cd432346ce7b4957849265c881b1630 100644
--- a/vendor/github.com/golang/dep/internal/importers/vndr/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/importers/vndr/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["importer.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/importers/vndr",
+    importmap = "vendor/github.com/golang/dep/internal/importers/vndr",
     importpath = "github.com/golang/dep/internal/importers/vndr",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/dep/internal/test/BUILD.bazel b/vendor/github.com/golang/dep/internal/test/BUILD.bazel
index 4017b6da593c40bf1fe206c6f933e92c4868314d..b0e3e57fc044d5e118565efaba0f0e073065bda9 100644
--- a/vendor/github.com/golang/dep/internal/test/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/test/BUILD.bazel
@@ -6,7 +6,7 @@ go_library(
         "test.go",
         "writer.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/test",
+    importmap = "vendor/github.com/golang/dep/internal/test",
     importpath = "github.com/golang/dep/internal/test",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = ["//vendor/github.com/pkg/errors:go_default_library"],
diff --git a/vendor/github.com/golang/dep/internal/test/integration/BUILD.bazel b/vendor/github.com/golang/dep/internal/test/integration/BUILD.bazel
index a2c964aa02019fd22c24c30437094faf04d77099..928ded317b831494f4d9b5494efa1ef31af64be3 100644
--- a/vendor/github.com/golang/dep/internal/test/integration/BUILD.bazel
+++ b/vendor/github.com/golang/dep/internal/test/integration/BUILD.bazel
@@ -6,7 +6,7 @@ go_library(
         "testcase.go",
         "testproj.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/dep/internal/test/integration",
+    importmap = "vendor/github.com/golang/dep/internal/test/integration",
     importpath = "github.com/golang/dep/internal/test/integration",
     visibility = ["//vendor/github.com/golang/dep:__subpackages__"],
     deps = [
diff --git a/vendor/github.com/golang/protobuf/proto/BUILD.bazel b/vendor/github.com/golang/protobuf/proto/BUILD.bazel
index 9d5aafd83380464a9f48c492698a8a01d0f5f8d6..98590c1c2793ef88a7790d37a8241c2b0d16d8e5 100644
--- a/vendor/github.com/golang/protobuf/proto/BUILD.bazel
+++ b/vendor/github.com/golang/protobuf/proto/BUILD.bazel
@@ -19,7 +19,7 @@ go_library(
         "text.go",
         "text_parser.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/golang/protobuf/proto",
+    importmap = "vendor/github.com/golang/protobuf/proto",
     importpath = "github.com/golang/protobuf/proto",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/jmank88/nuts/BUILD.bazel b/vendor/github.com/jmank88/nuts/BUILD.bazel
index 72db5e47f7dcd7c8f03d5c429368e22ca71631be..920f2b554e5325aafe6d1eec46e28aa4a9f79771 100644
--- a/vendor/github.com/jmank88/nuts/BUILD.bazel
+++ b/vendor/github.com/jmank88/nuts/BUILD.bazel
@@ -8,7 +8,7 @@ go_library(
         "paths.go",
         "types.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/jmank88/nuts",
+    importmap = "vendor/github.com/jmank88/nuts",
     importpath = "github.com/jmank88/nuts",
     visibility = ["//visibility:public"],
     deps = ["//vendor/github.com/boltdb/bolt:go_default_library"],
diff --git a/vendor/github.com/nightlyone/lockfile/BUILD.bazel b/vendor/github.com/nightlyone/lockfile/BUILD.bazel
index 8b1c688bca89ed5bb9caae81fdab35cd1c912209..0a74fcf8fb203c8ffa147d183c97661a0f8faf92 100644
--- a/vendor/github.com/nightlyone/lockfile/BUILD.bazel
+++ b/vendor/github.com/nightlyone/lockfile/BUILD.bazel
@@ -7,7 +7,7 @@ go_library(
         "lockfile_unix.go",
         "lockfile_windows.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/nightlyone/lockfile",
+    importmap = "vendor/github.com/nightlyone/lockfile",
     importpath = "github.com/nightlyone/lockfile",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/pelletier/go-toml/BUILD.bazel b/vendor/github.com/pelletier/go-toml/BUILD.bazel
index 8130328c049d880232a298fb7213cc55e10e50d7..526e4aeca6d915a4f18a420ac9de331d194e34dd 100644
--- a/vendor/github.com/pelletier/go-toml/BUILD.bazel
+++ b/vendor/github.com/pelletier/go-toml/BUILD.bazel
@@ -14,7 +14,7 @@ go_library(
         "tomltree_create.go",
         "tomltree_write.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/pelletier/go-toml",
+    importmap = "vendor/github.com/pelletier/go-toml",
     importpath = "github.com/pelletier/go-toml",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/pkg/errors/BUILD.bazel b/vendor/github.com/pkg/errors/BUILD.bazel
index b1eb9941074b0da6982111f122d750abafa7b994..02e03382df2b88e8d286b8ee8eccb0d9ea754a28 100644
--- a/vendor/github.com/pkg/errors/BUILD.bazel
+++ b/vendor/github.com/pkg/errors/BUILD.bazel
@@ -6,7 +6,7 @@ go_library(
         "errors.go",
         "stack.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/pkg/errors",
+    importmap = "vendor/github.com/pkg/errors",
     importpath = "github.com/pkg/errors",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/pmezard/go-difflib/difflib/BUILD.bazel b/vendor/github.com/pmezard/go-difflib/difflib/BUILD.bazel
index 8a8fca20454989179efb5cfa46a8542fc30c5845..f6d4fa72e45f482c4cb676837b518e6d5be14450 100644
--- a/vendor/github.com/pmezard/go-difflib/difflib/BUILD.bazel
+++ b/vendor/github.com/pmezard/go-difflib/difflib/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["difflib.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/pmezard/go-difflib/difflib",
+    importmap = "vendor/github.com/pmezard/go-difflib/difflib",
     importpath = "github.com/pmezard/go-difflib/difflib",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/q3k/goveralls/BUILD.bazel b/vendor/github.com/q3k/goveralls/BUILD.bazel
index df180746db3e3d43e3b4692f17747a679186c80b..04249c71ebd3067a7084271ba6fc909d316ae87b 100644
--- a/vendor/github.com/q3k/goveralls/BUILD.bazel
+++ b/vendor/github.com/q3k/goveralls/BUILD.bazel
@@ -7,7 +7,7 @@ go_library(
         "gocover.go",
         "goveralls.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/q3k/goveralls",
+    importmap = "vendor/github.com/q3k/goveralls",
     importpath = "github.com/q3k/goveralls",
     visibility = ["//visibility:private"],
     deps = ["//vendor/golang.org/x/tools/cover:go_default_library"],
diff --git a/vendor/github.com/sdboyer/constext/BUILD.bazel b/vendor/github.com/sdboyer/constext/BUILD.bazel
index effb8ca864561db47f40692afd71632eddebf5d5..ee94b66945d935ba8431de6870cfd7947ffe3d84 100644
--- a/vendor/github.com/sdboyer/constext/BUILD.bazel
+++ b/vendor/github.com/sdboyer/constext/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["constext.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/sdboyer/constext",
+    importmap = "vendor/github.com/sdboyer/constext",
     importpath = "github.com/sdboyer/constext",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/github.com/sirupsen/logrus/BUILD.bazel b/vendor/github.com/sirupsen/logrus/BUILD.bazel
index 57ae49599a33ea71cb1c88dfbee68b1c92cde40a..8ddbd66e796eca4e59145cca34fc95cdc257feca 100644
--- a/vendor/github.com/sirupsen/logrus/BUILD.bazel
+++ b/vendor/github.com/sirupsen/logrus/BUILD.bazel
@@ -18,7 +18,7 @@ go_library(
         "text_formatter.go",
         "writer.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/sirupsen/logrus",
+    importmap = "vendor/github.com/sirupsen/logrus",
     importpath = "github.com/sirupsen/logrus",
     visibility = ["//visibility:public"],
     deps = [
diff --git a/vendor/github.com/stretchr/testify/assert/BUILD.bazel b/vendor/github.com/stretchr/testify/assert/BUILD.bazel
index 5fc04335b69097cb28abf6363cbc53e98a917aa6..84915770c4ea7ff0b7db3bd5f755c5a8f5c7df3f 100644
--- a/vendor/github.com/stretchr/testify/assert/BUILD.bazel
+++ b/vendor/github.com/stretchr/testify/assert/BUILD.bazel
@@ -11,7 +11,7 @@ go_library(
         "forward_assertions.go",
         "http_assertions.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/stretchr/testify/assert",
+    importmap = "vendor/github.com/stretchr/testify/assert",
     importpath = "github.com/stretchr/testify/assert",
     visibility = ["//visibility:public"],
     deps = [
diff --git a/vendor/github.com/taktv6/tflow2/convert/BUILD.bazel b/vendor/github.com/taktv6/tflow2/convert/BUILD.bazel
index 5506643341e1e3a4ea891167b92208d92d0931cb..b6d8a418d173754e2d28152a5a674c26ad27a76e 100644
--- a/vendor/github.com/taktv6/tflow2/convert/BUILD.bazel
+++ b/vendor/github.com/taktv6/tflow2/convert/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["convert.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/github.com/taktv6/tflow2/convert",
+    importmap = "vendor/github.com/taktv6/tflow2/convert",
     importpath = "github.com/taktv6/tflow2/convert",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/BUILD.bazel b/vendor/golang.org/x/crypto/ssh/terminal/BUILD.bazel
index f1dbddae821cfbbdda8f70941472708f75ddf41d..593a697cd9117b5d197fa40ea741b4da68685b20 100644
--- a/vendor/golang.org/x/crypto/ssh/terminal/BUILD.bazel
+++ b/vendor/golang.org/x/crypto/ssh/terminal/BUILD.bazel
@@ -11,7 +11,7 @@ go_library(
         "util_solaris.go",
         "util_windows.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/golang.org/x/crypto/ssh/terminal",
+    importmap = "vendor/golang.org/x/crypto/ssh/terminal",
     importpath = "golang.org/x/crypto/ssh/terminal",
     visibility = ["//visibility:public"],
     deps = select({
diff --git a/vendor/golang.org/x/net/context/BUILD.bazel b/vendor/golang.org/x/net/context/BUILD.bazel
index 8a09a3615ea3ef3a023ed3ca7a5dc82d3b7ca79d..79dde6dff60ca5ed498faadc52bc0af430537f4b 100644
--- a/vendor/golang.org/x/net/context/BUILD.bazel
+++ b/vendor/golang.org/x/net/context/BUILD.bazel
@@ -9,7 +9,7 @@ go_library(
         "pre_go17.go",
         "pre_go19.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/golang.org/x/net/context",
+    importmap = "vendor/golang.org/x/net/context",
     importpath = "golang.org/x/net/context",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/golang.org/x/sync/errgroup/BUILD.bazel b/vendor/golang.org/x/sync/errgroup/BUILD.bazel
index 9090cd0a8fb216e140ee77e5f9410f28874be014..50a4d6452a81b27bafb5accd7f061473c3175315 100644
--- a/vendor/golang.org/x/sync/errgroup/BUILD.bazel
+++ b/vendor/golang.org/x/sync/errgroup/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["errgroup.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/golang.org/x/sync/errgroup",
+    importmap = "vendor/golang.org/x/sync/errgroup",
     importpath = "golang.org/x/sync/errgroup",
     visibility = ["//visibility:public"],
     deps = ["//vendor/golang.org/x/net/context:go_default_library"],
diff --git a/vendor/golang.org/x/sys/unix/BUILD.bazel b/vendor/golang.org/x/sys/unix/BUILD.bazel
index aa6151ab66e8e90b6f8e8cc946dc94fb1bf41e1b..a2505682d8e61d2ebcde3fe2affc8334f0f1417d 100644
--- a/vendor/golang.org/x/sys/unix/BUILD.bazel
+++ b/vendor/golang.org/x/sys/unix/BUILD.bazel
@@ -200,7 +200,7 @@ go_library(
         "ztypes_solaris_amd64.go",
     ],
     cgo = True,
-    importmap = "github.com/bio-routing/bio-rd/vendor/golang.org/x/sys/unix",
+    importmap = "vendor/golang.org/x/sys/unix",
     importpath = "golang.org/x/sys/unix",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/golang.org/x/sys/windows/BUILD.bazel b/vendor/golang.org/x/sys/windows/BUILD.bazel
index b4ed609cba4449ca6cb18529dcb491fd705d808c..8dd57def4faf7ccff521cb81875e463962b42fe9 100644
--- a/vendor/golang.org/x/sys/windows/BUILD.bazel
+++ b/vendor/golang.org/x/sys/windows/BUILD.bazel
@@ -22,7 +22,7 @@ go_library(
         "types_windows_amd64.go",
         "zsyscall_windows.go",
     ],
-    importmap = "github.com/bio-routing/bio-rd/vendor/golang.org/x/sys/windows",
+    importmap = "vendor/golang.org/x/sys/windows",
     importpath = "golang.org/x/sys/windows",
     visibility = ["//visibility:public"],
 )
diff --git a/vendor/golang.org/x/tools/cover/BUILD.bazel b/vendor/golang.org/x/tools/cover/BUILD.bazel
index 85feea167867389c8dcfe6a82669ea915359276f..599c3ebc6b9e73701e26299c299a4694e20d0ff2 100644
--- a/vendor/golang.org/x/tools/cover/BUILD.bazel
+++ b/vendor/golang.org/x/tools/cover/BUILD.bazel
@@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 go_library(
     name = "go_default_library",
     srcs = ["profile.go"],
-    importmap = "github.com/bio-routing/bio-rd/vendor/golang.org/x/tools/cover",
+    importmap = "vendor/golang.org/x/tools/cover",
     importpath = "golang.org/x/tools/cover",
     visibility = ["//visibility:public"],
 )