diff --git a/python/pystencils_walberla/templates/CpuPackInfo.tmpl.h b/python/pystencils_walberla/templates/CpuPackInfo.tmpl.h
index 66114de6ee87d58f37d08ef2e39251a2f1060717..716da04458518664fa050047b499023d90780be2 100644
--- a/python/pystencils_walberla/templates/CpuPackInfo.tmpl.h
+++ b/python/pystencils_walberla/templates/CpuPackInfo.tmpl.h
@@ -25,6 +25,8 @@
 #include "domain_decomposition/IBlock.h"
 #include "communication/UniformPackInfo.h"
 
+#include <memory>
+
 #define FUNC_PREFIX
 
 #ifdef __GNUC__
@@ -52,7 +54,10 @@ public:
 
    void unpackData(IBlock * receiver, stencil::Direction dir, mpi::RecvBuffer & buffer) {
         const auto dataSize = size(dir, receiver);
-        unpack(dir, buffer.skip(dataSize), receiver);
+        auto bufferSize = dataSize + sizeof({{dtype}});
+        auto bufferPtr = reinterpret_cast<void*>(buffer.skip(bufferSize));
+        std::align(alignof({{dtype}}), dataSize, bufferPtr, bufferSize);
+        unpack(dir, reinterpret_cast<unsigned char*>(bufferPtr), receiver);
    }
 
    void communicateLocal(const IBlock * sender, IBlock * receiver, stencil::Direction dir) {
@@ -65,7 +70,10 @@ public:
 
    void packDataImpl(const IBlock * sender, stencil::Direction dir, mpi::SendBuffer & outBuffer) const {
         const auto dataSize = size(dir, sender);
-        pack(dir, outBuffer.forward(dataSize), const_cast<IBlock*>(sender));
+        auto bufferSize = dataSize + sizeof({{dtype}});
+        auto bufferPtr = reinterpret_cast<void*>(outBuffer.forward(bufferSize));
+        std::align(alignof({{dtype}}), dataSize, bufferPtr, bufferSize);
+        pack(dir, reinterpret_cast<unsigned char*>(bufferPtr), const_cast<IBlock *>(sender));
    }
 
    void pack  (stencil::Direction dir, unsigned char * buffer, IBlock * block) const;
diff --git a/python/pystencils_walberla/templates/GpuPackInfo.tmpl.h b/python/pystencils_walberla/templates/GpuPackInfo.tmpl.h
index b301bced5b8bd159c028e6e75c26fd37df5a63b2..cd5b23677e963266ea02247be3473c57bc4aac43 100644
--- a/python/pystencils_walberla/templates/GpuPackInfo.tmpl.h
+++ b/python/pystencils_walberla/templates/GpuPackInfo.tmpl.h
@@ -59,7 +59,7 @@ public:
     void pack  (stencil::Direction dir, unsigned char * buffer, IBlock * block, gpuStream_t stream) override;
     void communicateLocal  ( stencil::Direction /*dir*/, const IBlock* /* sender */, IBlock* /* receiver */, gpuStream_t /* stream */ ) override
     {
-       WALBERLA_ABORT("Local Communication not implemented yet for standard PackInfos. To run your application turn of local communication in the Communication class")
+       WALBERLA_ABORT("Local Communication not implemented yet for standard PackInfos. To run your application, turn off local communication in the communication class, e.g. with useLocalCommunication=false")
     }
     void unpack(stencil::Direction dir, unsigned char * buffer, IBlock * block, gpuStream_t stream) override;
     uint_t size  (stencil::Direction dir, IBlock * block) override;
diff --git a/src/communication/UniformPackInfo.h b/src/communication/UniformPackInfo.h
index 168ce9685473619a897e0ebb85677a7f10f66cee..dd35b00879a514a174e847398f9e2ba33f013a93 100644
--- a/src/communication/UniformPackInfo.h
+++ b/src/communication/UniformPackInfo.h
@@ -100,6 +100,10 @@ public:
     *
     * If NOT thread-safe, \ref threadsafeReceiving must return false!
     *
+    * Implementations must reserve extra space and advance the send buffer
+    * pointer according to the alignment of the ghost layer data type!
+    * The buffer is char-aligned.
+    *
     * @param receiver the block where the unpacked data should be stored into
     * @param dir      receive data from neighbor in this direction
     * @param buffer   buffer for reading the data from
@@ -145,6 +149,10 @@ protected:
     *
     * Must be thread-safe!
     *
+    * Implementations must reserve extra space and advance the send buffer
+    * pointer according to the alignment of the ghost layer data type!
+    * The buffer is char-aligned.
+    *
     * @param sender     the block whose data should be packed into a buffer
     * @param dir        pack data for neighbor in this direction
     * @param buffer     buffer for writing the data into