 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 262690e..325b804 100644
+index 262690e..49ee5a4 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
 @@ -20,31 +20,43 @@

 	    }
 	};
 	// typedef std::chrono::microseconds microseconds;

 				Makes the library smaller and better optimized.
 				Only for gcc/clang.
 STDLIB		libc++,libstdc++. Choose the standard library to use.
diff --git a/src/De_Interleaver.hpp b/src/De_Interleaver.hpp
index 66fd29b..fcc5880 100644
--- a/src/De_Interleaver.hpp
+++ b/src/De_Interleaver.hpp
@@ -64,11 +64,12 @@ uint64_t De_Interleaver<Fwd_It>::operator() (Fwd_It &start, const Fwd_It end,
 	// to (start-1) during the decoding of the previous block.
 	uint8_t offset_al = skip;
 	using T = typename std::iterator_traits<Fwd_It>::value_type;
-	T element;
+	T element = static_cast<T> (0);
 	if (skip != 0) {
-		element = static_cast<T> (0);
-	} else {
-		element = *start;
+		uint8_t *p = reinterpret_cast<uint8_t *> (&start);
+		for (size_t keep = 0; keep < skip; ++keep) {
+			element += static_cast<T> (*(p++)) << keep * 8;
+		}
 	}
 	while (start != end && sub_blk < (_sub_blocks.num(0) + _sub_blocks.num(1))){
 		element += static_cast<T> (static_cast<uint8_t>((*_symbols)(esi, byte)))
diff --git a/src/Interleaver.hpp b/src/Interleaver.hpp
index 094927c..2da3329 100644
--- a/src/Interleaver.hpp
