diff --git a/daemon/libs/iax2/md5.c b/daemon/libs/iax2/md5.c
index d84c66b892db0c669258ddb057537078e6cfc77f..3830a61fda83e0cd2bbb1e93f21e279896da1c50 100644
--- a/daemon/libs/iax2/md5.c
+++ b/daemon/libs/iax2/md5.c
@@ -116,7 +116,7 @@ void IAX_MD5Update(struct IAX_MD5Context *ctx, uint8_t const *buf, unsigned int
 	}
 	memcpy(p, buf, t);
 	IAX_byteReverse(ctx->in, 16);
-	IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in);
+	IAX_MD5Transform(ctx->buf, ctx->in_32);
 	buf += t;
 	len -= t;
     }
@@ -171,10 +171,10 @@ void IAX_MD5Final(uint8_t digest[16], struct IAX_MD5Context *ctx)
     IAX_byteReverse(ctx->in, 14);
 
     /* Append length in bits and transform */
-    ((uint32_t *) ctx->in)[14] = ctx->bits[0];
-    ((uint32_t *) ctx->in)[15] = ctx->bits[1];
+    ctx->in_32[14] = ctx->bits[0];
+    ctx->in_32[15] = ctx->bits[1];
 
-    IAX_MD5Transform(ctx->buf, (uint32_t *) ctx->in);
+    IAX_MD5Transform(ctx->buf, ctx->in_32);
     IAX_byteReverse((uint8_t *) ctx->buf, 4);
     memcpy(digest, ctx->buf, 16);
     memset(ctx, 0, sizeof(*ctx));	/* In case it's sensitive */
diff --git a/daemon/libs/iax2/md5.h b/daemon/libs/iax2/md5.h
index b3ad37a9b36532268cc9f3e62d909963c70e8e01..f54b68bfb27de352d4143230a5cbffddd175606b 100644
--- a/daemon/libs/iax2/md5.h
+++ b/daemon/libs/iax2/md5.h
@@ -11,7 +11,10 @@ typedef unsigned char uint8_t;
 struct IAX_MD5Context {
 	uint32_t buf[4];
 	uint32_t bits[2];
-	uint8_t in[64];
+	union {
+	    uint8_t in[64];
+	    uint32_t in_32[16];
+	};
 };
 
 void IAX_MD5Init(struct IAX_MD5Context *context);