diff --git a/peer.go b/peer.go
index 16340cda5dea5fdc0b37623d13d03b55a40d2d3d..ac4ba82abc8ac9d08245a2fbf38b34ebfff7ae66 100644
--- a/peer.go
+++ b/peer.go
@@ -177,10 +177,20 @@ func NewOutboundPeer(addr string, ethereum *Ethereum, caps Caps) *Peer {
 
 	// Set up the connection in another goroutine so we don't block the main thread
 	go func() {
-		conn, err := net.DialTimeout("tcp", addr, 10*time.Second)
+		var (
+			err  error
+			conn net.Conn
+		)
+
+		for attempts := 0; attempts < 5; attempts++ {
+			conn, err = net.DialTimeout("tcp", addr, 10*time.Second)
+			if err != nil {
+				peerlogger.Debugf("Peer connection failed. Retrying (%d/5)\n", attempts+1)
+			}
+		}
 
 		if err != nil {
-			peerlogger.Debugln("Connection to peer failed", err)
+			peerlogger.Debugln("Connection to peer failed. Giving up.", err)
 			p.Stop()
 			return
 		}