diff --git a/whisper/whisperv6/envelope.go b/whisper/whisperv6/envelope.go
index 5d9d350811a8dff02fa49329e9504f09c7fb7bac..5b6925edb3b58b9ef18e4abae1fb4ace5ea135c0 100644
--- a/whisper/whisperv6/envelope.go
+++ b/whisper/whisperv6/envelope.go
@@ -91,16 +91,18 @@ func (e *Envelope) Seal(options *MessageParams) error {
 		target = e.powToFirstBit(options.PoW)
 	}
 
-	buf := make([]byte, 64)
-	h := crypto.Keccak256(e.rlpWithoutNonce())
-	copy(buf[:32], h)
+	rlp := e.rlpWithoutNonce()
+	buf := make([]byte, len(rlp)+8)
+	copy(buf, rlp)
+	asAnInt := new(big.Int)
 
 	finish := time.Now().Add(time.Duration(options.WorkTime) * time.Second).UnixNano()
 	for nonce := uint64(0); time.Now().UnixNano() < finish; {
 		for i := 0; i < 1024; i++ {
-			binary.BigEndian.PutUint64(buf[56:], nonce)
-			d := new(big.Int).SetBytes(crypto.Keccak256(buf))
-			leadingZeros := 256 - d.BitLen()
+			binary.BigEndian.PutUint64(buf[len(rlp):], nonce)
+			h := crypto.Keccak256(buf)
+			asAnInt.SetBytes(h)
+			leadingZeros := 256 - asAnInt.BitLen()
 			if leadingZeros > bestLeadingZeros {
 				e.Nonce, bestLeadingZeros = nonce, leadingZeros
 				if target > 0 && bestLeadingZeros >= target {
@@ -128,11 +130,10 @@ func (e *Envelope) PoW() float64 {
 }
 
 func (e *Envelope) calculatePoW(diff uint32) {
-	buf := make([]byte, 64)
 	rlp := e.rlpWithoutNonce()
-	h := crypto.Keccak256(rlp)
-	copy(buf[:32], h)
-	binary.BigEndian.PutUint64(buf[56:], e.Nonce)
+	buf := make([]byte, len(rlp)+8)
+	copy(buf, rlp)
+	binary.BigEndian.PutUint64(buf[len(rlp):], e.Nonce)
 	powHash := new(big.Int).SetBytes(crypto.Keccak256(buf))
 	leadingZeroes := 256 - powHash.BitLen()
 	x := gmath.Pow(2, float64(leadingZeroes))
diff --git a/whisper/whisperv6/envelope_test.go b/whisper/whisperv6/envelope_test.go
index d6e38e683eb5dda7f3df4305dd80906cf8deec74..c0bb4373b884fc14507da1cae2e675b5efd78c1f 100644
--- a/whisper/whisperv6/envelope_test.go
+++ b/whisper/whisperv6/envelope_test.go
@@ -43,12 +43,12 @@ func TestPoWCalculationsWith8LeadingZeros(t *testing.T) {
 	e := Envelope{
 		TTL:   1,
 		Data:  []byte{0xde, 0xad, 0xbe, 0xef},
-		Nonce: 48159,
+		Nonce: 276,
 	}
 	e.calculatePoW(0)
 
-	if e.pow != 40329.846153846156 {
-		t.Fatalf("invalid PoW calculation. Expected 0.07692307692307693, got %v", e.pow)
+	if e.pow != 19.692307692307693 {
+		t.Fatalf("invalid PoW calculation. Expected 19.692307692307693, got %v", e.pow)
 	}
 }