diff --git a/core/vpn/engine/engine.go b/core/vpn/engine/engine.go
index 68900b0..17bced6 100644
--- a/core/vpn/engine/engine.go
+++ b/core/vpn/engine/engine.go
@@ -15,10 +15,6 @@
 	Configure(netMap *types.NetworkMap) error
 	// Unique public discovery key of the current device.
 	DiscoKey() types.DiscoKey
-	// Unique public endpoint of the given device.
-	// Communication between devices happen throughs such endpoints
-	// instead of IP addresses.
-	DiscoEndpoint() string
 	// Sends ping to the given IP address and invokes callback with results.
 	Ping(ip netaddr.IP, cb func(*ipnstate.PingResult))
 }
diff --git a/core/vpn/engine/wireguard.go b/core/vpn/engine/wireguard.go
index 35e4747..cbe5ab9 100644
--- a/core/vpn/engine/wireguard.go
+++ b/core/vpn/engine/wireguard.go
@@ -5,15 +5,17 @@
 	"log"
 
 	"github.com/giolekva/pcloud/core/vpn/types"
+	"golang.zx2c4.com/wireguard/tun"
 
-	"github.com/tailscale/wireguard-go/wgcfg"
 	"inet.af/netaddr"
-	"tailscale.com/control/controlclient"
 	"tailscale.com/ipn/ipnstate"
+	"tailscale.com/net/dns"
 	"tailscale.com/tailcfg"
+	"tailscale.com/types/netmap"
 	"tailscale.com/types/wgkey"
 	"tailscale.com/wgengine"
 	"tailscale.com/wgengine/router"
+	"tailscale.com/wgengine/wgcfg"
 )
 
 // Wireguard specific implementation of the Engine interface.
@@ -25,7 +27,14 @@
 
 // Creates Wireguard engine.
 func NewWireguardEngine(tunName string, port uint16, privKey types.PrivateKey) (Engine, error) {
-	e, err := wgengine.NewUserspaceEngine(log.Printf, tunName, port)
+	tun, err := tun.CreateTUN(tunName, 1500)
+	if err != nil {
+		return nil, err
+	}
+	e, err := wgengine.NewUserspaceEngine(log.Printf, wgengine.Config{
+		Tun:        tun,
+		ListenPort: port,
+	})
 	if err != nil {
 		return nil, err
 	}
@@ -38,7 +47,7 @@
 
 // Used for unit testing.
 func NewFakeWireguardEngine(port uint16, privKey types.PrivateKey) (Engine, error) {
-	e, err := wgengine.NewFakeUserspaceEngine(log.Printf, port, nil)
+	e, err := wgengine.NewFakeUserspaceEngine(log.Printf, port)
 	if err != nil {
 		return nil, err
 	}
@@ -55,22 +64,24 @@
 		// TODO(giolekva): we shoudld probably use hostname and share
 		// it with the controller
 		Name:       "local-node",
-		PrivateKey: wgcfg.PrivateKey(privKey),
-		Addresses: []netaddr.IPPrefix{netaddr.IPPrefix{
-			IP:   netMap.Self.VPNIP,
-			Bits: 32, // TODO(giolekva): adapt for IPv6
-		}},
-		ListenPort: port,
-		Peers:      make([]wgcfg.Peer, 0, len(netMap.Peers)),
+		PrivateKey: wgkey.Private(privKey),
+		Addresses: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+			netMap.Self.VPNIP,
+			32, // TODO(giolekva): adapt for IPv6
+		)},
+		// ListenPort: port,
+		Peers: make([]wgcfg.Peer, 0, len(netMap.Peers)),
 	}
 	for _, peer := range netMap.Peers {
 		c.Peers = append(c.Peers, wgcfg.Peer{
-			PublicKey: wgcfg.Key(peer.PublicKey),
-			AllowedIPs: []netaddr.IPPrefix{netaddr.IPPrefix{
-				IP:   peer.VPNIP,
-				Bits: 32,
-			}},
-			Endpoints:           peer.DiscoEndpoint,
+			PublicKey: wgkey.Key(peer.PublicKey),
+			AllowedIPs: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+				peer.VPNIP,
+				32,
+			)},
+			Endpoints: wgcfg.Endpoints{
+				DiscoKey: tailcfg.DiscoKey(peer.DiscoKey),
+			},
 			PersistentKeepalive: 15, // TODO(giolekva): make it configurable
 		})
 	}
@@ -79,33 +90,33 @@
 
 func genRouterConf(netMap *types.NetworkMap) *router.Config {
 	c := &router.Config{
-		LocalAddrs: []netaddr.IPPrefix{netaddr.IPPrefix{
-			IP:   netMap.Self.VPNIP,
-			Bits: 32,
-		}},
+		LocalAddrs: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+			netMap.Self.VPNIP,
+			32,
+		)},
 		Routes: make([]netaddr.IPPrefix, 0, len(netMap.Peers)),
 	}
 	for _, peer := range netMap.Peers {
-		c.Routes = append(c.Routes, netaddr.IPPrefix{
-			IP:   peer.VPNIP,
-			Bits: 32,
-		})
+		c.Routes = append(c.Routes, netaddr.IPPrefixFrom(
+			peer.VPNIP,
+			32,
+		))
 	}
 	return c
 }
 
-func genTailNetMap(privKey types.PrivateKey, port uint16, netMap *types.NetworkMap) *controlclient.NetworkMap {
-	c := &controlclient.NetworkMap{
+func genTailNetMap(privKey types.PrivateKey, port uint16, netMap *types.NetworkMap) *netmap.NetworkMap {
+	c := &netmap.NetworkMap{
 		SelfNode: &tailcfg.Node{
 			ID:       0, // TODO(giolekva): maybe IDs should be stored server side.
 			StableID: "0",
 			Name:     "0",
 			Key:      tailcfg.NodeKey(netMap.Self.PublicKey),
 			DiscoKey: tailcfg.DiscoKey(netMap.Self.DiscoKey),
-			Addresses: []netaddr.IPPrefix{netaddr.IPPrefix{
-				IP:   netMap.Self.VPNIP,
-				Bits: 32,
-			}},
+			Addresses: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+				netMap.Self.VPNIP,
+				32,
+			)},
 			AllowedIPs: make([]netaddr.IPPrefix, 0, len(netMap.Peers)),
 			Endpoints:  []string{netMap.Self.IPPort.String()},
 			KeepAlive:  true, // TODO(giolekva): make it configurable
@@ -113,10 +124,10 @@
 		NodeKey:    tailcfg.NodeKey(netMap.Self.PublicKey),
 		PrivateKey: wgkey.Private(privKey),
 		Name:       "0",
-		Addresses: []netaddr.IPPrefix{netaddr.IPPrefix{
-			IP:   netMap.Self.VPNIP,
-			Bits: 32,
-		}},
+		Addresses: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+			netMap.Self.VPNIP,
+			32,
+		)},
 		LocalPort: port,
 		Peers:     make([]*tailcfg.Node, 0, len(netMap.Peers)),
 	}
@@ -127,14 +138,14 @@
 			Name:     fmt.Sprintf("%d", i+1),
 			Key:      tailcfg.NodeKey(peer.PublicKey),
 			DiscoKey: tailcfg.DiscoKey(peer.DiscoKey),
-			Addresses: []netaddr.IPPrefix{netaddr.IPPrefix{
-				IP:   peer.VPNIP,
-				Bits: 32,
-			}},
-			AllowedIPs: []netaddr.IPPrefix{netaddr.IPPrefix{
-				IP:   netMap.Self.VPNIP,
-				Bits: 32,
-			}},
+			Addresses: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+				peer.VPNIP,
+				32,
+			)},
+			AllowedIPs: []netaddr.IPPrefix{netaddr.IPPrefixFrom(
+				netMap.Self.VPNIP,
+				32,
+			)},
 			Endpoints: []string{peer.IPPort.String()},
 			KeepAlive: true,
 		})
@@ -145,7 +156,9 @@
 func (e *WireguardEngine) Configure(netMap *types.NetworkMap) error {
 	err := e.wg.Reconfig(
 		genWireguardConf(e.privKey, e.port, netMap),
-		genRouterConf(netMap))
+		genRouterConf(netMap),
+		&dns.Config{},
+		nil)
 	if err != nil {
 		return err
 	}
@@ -158,10 +171,6 @@
 	return types.DiscoKey(e.wg.DiscoPublicKey())
 }
 
-func (e *WireguardEngine) DiscoEndpoint() string {
-	return e.DiscoKey().Endpoint()
-}
-
 func (e *WireguardEngine) Ping(ip netaddr.IP, cb func(*ipnstate.PingResult)) {
-	e.wg.Ping(ip, cb)
+	e.wg.Ping(ip, false, cb)
 }
diff --git a/core/vpn/engine/wireguard_test.go b/core/vpn/engine/wireguard_test.go
index 04927af..02fdc19 100644
--- a/core/vpn/engine/wireguard_test.go
+++ b/core/vpn/engine/wireguard_test.go
@@ -28,13 +28,12 @@
 		return
 	}
 	n.node = types.Node{
-		PublicKey:     n.privKey.Public(),
-		DiscoKey:      n.e.DiscoKey(),
-		DiscoEndpoint: n.e.DiscoEndpoint(),
-		IPPort: netaddr.IPPort{
-			IP:   netaddr.IPv4(127, 0, 0, 1),
-			Port: localPort,
-		},
+		PublicKey: n.privKey.Public(),
+		DiscoKey:  n.e.DiscoKey(),
+		IPPort: netaddr.IPPortFrom(
+			netaddr.IPv4(127, 0, 0, 1),
+			localPort,
+		),
 		VPNIP: netaddr.MustParseIP(ip),
 	}
 	return
