diff --git a/route/bgp_path.go b/route/bgp_path.go
index bd42ac3b1a9404d2a46d845251549cb1dcb44f01..6fd0eb32321b1c830dbe52912318948008293e3d 100644
--- a/route/bgp_path.go
+++ b/route/bgp_path.go
@@ -172,8 +172,12 @@ func (b *BGPPath) Prepend(asn uint32, times uint16) {
 		return
 	}
 
+	if len(b.ASPath) == 0 {
+		b.insertNewASSequence()
+	}
+
 	first := b.ASPath[0]
-	if len(b.ASPath) == 0 || first.Type == packet.ASSet {
+	if first.Type == packet.ASSet {
 		b.insertNewASSequence()
 	}
 
@@ -228,11 +232,8 @@ func (b *BGPPath) ComputeHash() string {
 		b.LargeCommunities,
 		b.PathIdentifier)
 
-	r := strings.NewReader(s)
 	h := sha256.New()
-	r.WriteTo(h)
-
-	return fmt.Sprintf("%x", h.Sum(nil))
+	return fmt.Sprintf("%x", h.Sum([]byte(s)))
 }
 
 // CommunitiesString returns the formated communities
diff --git a/route/bgp_test.go b/route/bgp_test.go
index 2eb017c2a6b33e5174b94cb9d43e4325750e968d..23a7126dfe98cf37d9c5637fd5040a66b2d646a9 100644
--- a/route/bgp_test.go
+++ b/route/bgp_test.go
@@ -36,9 +36,9 @@ func TestComputeHash(t *testing.T) {
 		Source:         4,
 	}
 
-	assert.Equal(t, "45e238420552b88043edb8cb402034466b08d53b49f8e0fedc680747014ddeff", p.ComputeHash())
+	assert.Equal(t, "313030093130300931323320343536093009310966616c736509310934095b313233203435365d095b7b33203120327d5d0935e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", p.ComputeHash())
 
 	p.LocalPref = 150
 
-	assert.NotEqual(t, "45e238420552b88043edb8cb402034466b08d53b49f8e0fedc680747014ddeff", p.ComputeHash())
+	assert.NotEqual(t, "313030093130300931323320343536093009310966616c736509310934095b313233203435365d095b7b33203120327d5d0935e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", p.ComputeHash())
 }