diff --git a/ChangeLog b/ChangeLog
index 8f8f2aa948e6f71b34cf8ed140e4e366176fe28a..7ceffa1549c4441a0cd71027d1aa265dacc6516e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
 
 	* salsa20.c: (salsa20_set_iv): Deleted size argument, only one
 	size allowed.
+	(U8TO32_LITTLE): Deleted macro. Use LE_READ_UINT32 instead, which
+	avoids unaligned reads.
+
 	* nettle-internal.c (salsa20_set_key_hack): Updated salsa20_set_iv
 	call.
 	* testsuite/salsa20-test.c (test_salsa20): Deleted iv_length
diff --git a/salsa20.c b/salsa20.c
index 4627637d3f843e9976d2ed42e2fa902ed3dcce16..c93d47332714c487ffbec451e685bbcb339388c4 100644
--- a/salsa20.c
+++ b/salsa20.c
@@ -49,7 +49,6 @@
 #define U32TO32_LITTLE(v) (v)
 #endif
 
-#define U8TO32_LITTLE(p) U32TO32_LITTLE(((uint32_t*)(p))[0])
 #define U32TO8_LITTLE(p, v) (((uint32_t*)(p))[0] = U32TO32_LITTLE(v))
 
 static void salsa20_wordtobyte(uint8_t output[SALSA20_BLOCK_SIZE],const uint32_t input[_SALSA20_INPUT_LENGTH])
@@ -107,31 +106,31 @@ salsa20_set_key(struct salsa20_ctx *ctx,
 
   assert (length == SALSA20_MIN_KEY_SIZE || length == SALSA20_MAX_KEY_SIZE);
 
-  ctx->input[1] = U8TO32_LITTLE(key + 0);
-  ctx->input[2] = U8TO32_LITTLE(key + 4);
-  ctx->input[3] = U8TO32_LITTLE(key + 8);
-  ctx->input[4] = U8TO32_LITTLE(key + 12);
+  ctx->input[1] = LE_READ_UINT32(key + 0);
+  ctx->input[2] = LE_READ_UINT32(key + 4);
+  ctx->input[3] = LE_READ_UINT32(key + 8);
+  ctx->input[4] = LE_READ_UINT32(key + 12);
   if (length == SALSA20_MAX_KEY_SIZE) { /* recommended */
     key += 16;
     constants = sigma;
   } else { /* kbits == 128 */
     constants = tau;
   }
-  ctx->input[11] = U8TO32_LITTLE(key + 0);
-  ctx->input[12] = U8TO32_LITTLE(key + 4);
-  ctx->input[13] = U8TO32_LITTLE(key + 8);
-  ctx->input[14] = U8TO32_LITTLE(key + 12);
-  ctx->input[0] = U8TO32_LITTLE(constants + 0);
-  ctx->input[5] = U8TO32_LITTLE(constants + 4);
-  ctx->input[10] = U8TO32_LITTLE(constants + 8);
-  ctx->input[15] = U8TO32_LITTLE(constants + 12);
+  ctx->input[11] = LE_READ_UINT32(key + 0);
+  ctx->input[12] = LE_READ_UINT32(key + 4);
+  ctx->input[13] = LE_READ_UINT32(key + 8);
+  ctx->input[14] = LE_READ_UINT32(key + 12);
+  ctx->input[0]  = LE_READ_UINT32(constants + 0);
+  ctx->input[5]  = LE_READ_UINT32(constants + 4);
+  ctx->input[10] = LE_READ_UINT32(constants + 8);
+  ctx->input[15] = LE_READ_UINT32(constants + 12);
 }
 
 void
 salsa20_set_iv(struct salsa20_ctx *ctx, const uint8_t *iv)
 {
-  ctx->input[6] = U8TO32_LITTLE(iv + 0);
-  ctx->input[7] = U8TO32_LITTLE(iv + 4);
+  ctx->input[6] = LE_READ_UINT32(iv + 0);
+  ctx->input[7] = LE_READ_UINT32(iv + 4);
   ctx->input[8] = 0;
   ctx->input[9] = 0;
 }