diff --git a/include/ByteStream.h b/include/ByteStream.h
index 5d4b43615f8ca63c1cd5e83d1df68e6bb87c2b60..f8de93ab5037a371dd098931f304897ca7779d53 100644
--- a/include/ByteStream.h
+++ b/include/ByteStream.h
@@ -107,6 +107,20 @@ public:
     /// Gets the dimension of the stream
     dword size();
 
+	/// Create a copy of the stream with some additional padding. The stream is divided into chunks
+	/// with numberOfChunks = size() / chunkSize.
+	/// \param chunkSize the size of a chunk without padding.
+	/// \param padSize Size of the padding.
+	/// \return The padded copy of this byte stream.
+	ByteStreamPtr getPaddedCopy(dword chunkSize, dword padSize);
+
+	/// Create a copy of the stream removing some padding. The stream is divided into chunks
+	/// with numberOfChunks = size() / chunkSize.
+	/// \param chunkSize the size of a chunk with padding.
+	/// \param padSize Size of the padding.
+	/// \return The unpadded copy of this byte stream.
+	ByteStreamPtr getUnpaddedCopy(dword chunkSize, dword padSize);
+
     char* printStreamInHexadecimal();
 
     /// Get type of allocations.
diff --git a/src/ByteStream.cpp b/src/ByteStream.cpp
index 95ab024795e8a06e45a99476d0fad046b853cb13..717a9af242ad9d9cfaf35913a6c817b1039f3a90 100644
--- a/src/ByteStream.cpp
+++ b/src/ByteStream.cpp
@@ -496,6 +496,42 @@ void PacketLib::ByteStream::deleteStreamMemory()
         delete[] stream;
 }
 
+ByteStreamPtr PacketLib::ByteStream::getPaddedCopy(dword chunkSize, dword padSize)
+{
+	if(byteInTheStream % chunkSize != 0)
+		throw new PacketException("getPadCopy() error. Chunk size must be a divisor of ByteStream::size().");
+
+	dword nChunks = byteInTheStream / chunkSize;
+	dword newChunkSize = chunkSize + padSize;
+
+	ByteStreamPtr sPtr = ByteStreamPtr(new ByteStream(nChunks*(newChunkSize), bigendian));
+	byte* raw = sPtr->getStream();
+
+	for(dword i=0; i<nChunks; i++)
+		memcpy(raw+i*newChunkSize, stream+i*chunkSize, chunkSize);
+
+	return sPtr;
+}
+
+ByteStreamPtr PacketLib::ByteStream::getUnpaddedCopy(dword chunkSize, dword padSize)
+{
+	if(byteInTheStream % chunkSize != 0)
+		throw new PacketException("getUnpadCopy() error. Chunk size must be a divisor of ByteStream::size().");
+	if(chunkSize - padSize <= 0)
+		throw new PacketException("getUnpadCopy() error. Chunk size - pad size gives a value <= 0.");
+
+	dword nChunks = byteInTheStream / chunkSize;
+	dword newChunkSize = chunkSize - padSize;
+
+	ByteStreamPtr sPtr = ByteStreamPtr(new ByteStream(nChunks*(newChunkSize), bigendian));
+	byte* raw = sPtr->getStream();
+
+	for(dword i=0; i<nChunks; i++)
+		memcpy(raw+i*newChunkSize, stream+i*chunkSize, newChunkSize);
+
+	return sPtr;
+}
+
 void PacketLib::ByteStream::swapWord() {
 	dword dim =  byteInTheStream;
 	for(dword i = 0; i< dim; i+=2)