diff --git a/src/csn1.cpp b/src/csn1.cpp
index e30eb35..b0ed73d 100644
--- a/src/csn1.cpp
+++ b/src/csn1.cpp
@@ -52,7 +52,7 @@
 /* Returns no_of_bits (up to 8) masked with 0x2B */
 
 static guint8
-get_masked_bits8( bitvec *vector, size_t& readIndex, gint bit_offset,  const gint no_of_bits)
+get_masked_bits8( bitvec *vector, unsigned& readIndex, gint bit_offset,  const gint no_of_bits)
 {
   static const guint8 maskBits[] = {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};
   //gint byte_offset = bit_offset >> 3;          /* divide by 8 */
@@ -104,7 +104,7 @@
 };
 
 static gint16
-ProcessError( size_t readIndex, const char* sz, gint16 err, const CSN_DESCR* pDescr)
+ProcessError( unsigned readIndex, const char* sz, gint16 err, const CSN_DESCR* pDescr)
 {
   gint16 i = MIN(-err, ((gint16) ElementsOf(ErrCodes)-1));
   if (i >= 0)
@@ -166,7 +166,7 @@
  */
 
 static gboolean
-existNextElement(bitvec *vector, size_t& readIndex, guint8 Tag)
+existNextElement(bitvec *vector, unsigned& readIndex, guint8 Tag)
 {
   guint8 res = bitvec_read_field(vector, readIndex, 1);
   if (Tag == STANDARD_TAG)
@@ -178,7 +178,7 @@
 
 
 gint16
-csnStreamDecoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, size_t& readIndex, void* data)
+csnStreamDecoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, unsigned& readIndex, void* data)
 {
   gint  remaining_bits_len = ar->remaining_bits_len;
   gint  bit_offset         = ar->bit_offset;
@@ -1405,7 +1405,7 @@
 
 
 
-gint16 csnStreamEncoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, size_t& writeIndex, void* data)
+gint16 csnStreamEncoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, unsigned& writeIndex, void* data)
 {
   gint  remaining_bits_len = ar->remaining_bits_len;
   gint  bit_offset         = ar->bit_offset;
@@ -1767,7 +1767,7 @@
         StreamSerializeFcn_t serialize = pDescr->serialize.fcn;
         csnStream_t          arT       = *ar;
         gint16               Status = -1;
-        size_t lengthIndex;
+        unsigned lengthIndex;
 
         // store writeIndex for length value (7 bit)
 	lengthIndex = writeIndex;
diff --git a/src/csn1.h b/src/csn1.h
index a50b6cd..2d84f7e 100644
--- a/src/csn1.h
+++ b/src/csn1.h
@@ -82,7 +82,7 @@
   gint  direction;           /* 0 - decode; 1 - encode */
 } csnStream_t;
 
-typedef gint16 (*StreamSerializeFcn_t)(csnStream_t* ar, bitvec *vector, size_t& readIndex, void* data);
+typedef gint16 (*StreamSerializeFcn_t)(csnStream_t* ar, bitvec *vector, unsigned& readIndex, void* data);
 typedef enum
 {
   CSN_END = 0,
@@ -187,7 +187,7 @@
     void*     ptr;
     guint32   value;
   } descr;
-  size_t      offset;
+  unsigned      offset;
   const char* sz;
   union
   {
@@ -223,9 +223,9 @@
 * RETURNS:  int  Number of bits left to be unpacked. Negative Error code if failed to unpack all bits
 ******************************************************************************/
 
-gint16 csnStreamDecoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, size_t& readIndex, void* data);
+gint16 csnStreamDecoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, unsigned& readIndex, void* data);
 
-gint16 csnStreamEncoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, size_t& readIndex, void* data);
+gint16 csnStreamEncoder(csnStream_t* ar, const CSN_DESCR* pDescr, bitvec *vector, unsigned& readIndex, void* data);
 
 /* CSN struct macro's */
 #define  CSN_DESCR_BEGIN(_STRUCT)\
diff --git a/src/gsm_rlcmac.cpp b/src/gsm_rlcmac.cpp
index 211d7af..e4afd7b 100644
--- a/src/gsm_rlcmac.cpp
+++ b/src/gsm_rlcmac.cpp
@@ -714,7 +714,7 @@
   M_UINT       (Receive_N_PDU_Number_t,  value,  8),
 CSN_DESCR_END  (Receive_N_PDU_Number_t)
 
-gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, bitvec *vector, size_t& readIndex, void* data)
+gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, bitvec *vector, unsigned& readIndex, void* data)
 {
   if (ar->direction == 0)
   {
@@ -825,7 +825,7 @@
   M_UINT              (Content_t,  PS_HandoverCapability,  1),
 CSN_DESCR_END         (Content_t)
 
-gint16 Content_Dissector(csnStream_t* ar, bitvec *vector, size_t& readIndex, void* data)
+gint16 Content_Dissector(csnStream_t* ar, bitvec *vector, unsigned& readIndex, void* data)
 {
   if (ar->direction == 0)
     {
@@ -849,7 +849,7 @@
   M_REC_TARRAY        (Additional_access_technologies_t, Additional_access_technologies[0], Additional_access_technologies_struct_t, Count_additional_access_technologies),
 CSN_DESCR_END         (Additional_access_technologies_t)
 
-gint16 Additional_access_technologies_Dissector(csnStream_t* ar, bitvec* vector, size_t& readIndex, void* data)
+gint16 Additional_access_technologies_Dissector(csnStream_t* ar, bitvec* vector, unsigned& readIndex, void* data)
 {
   if (ar->direction == 0)
   {
@@ -4719,7 +4719,7 @@
 void decode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data)
 {
   csnStream_t      ar;
-  size_t readIndex = 0;
+  unsigned readIndex = 0;
   guint8 payload_type = bitvec_read_field(vector, readIndex, 2);
 
   if (payload_type == PAYLOAD_TYPE_DATA)
@@ -4827,7 +4827,7 @@
   /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
   gint bit_offset = 0;
   gint bit_length;
-  size_t readIndex = 0;
+  unsigned readIndex = 0;
   data->PAYLOAD_TYPE = bitvec_read_field(vector, readIndex, 2);
   data->RRBP = bitvec_read_field(vector, readIndex, 2);
   data->SP = bitvec_read_field(vector, readIndex, 1);
@@ -5016,7 +5016,7 @@
 void encode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data)
 {
   csnStream_t      ar;
-  size_t writeIndex = 0;
+  unsigned writeIndex = 0;
   data->NrOfBits = (23 - 1) * 8;
   csnStreamInit(&ar, 0, data->NrOfBits);
   writeIndex = 0;
@@ -5111,7 +5111,7 @@
   /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
   gint bit_offset = 0;
   gint bit_length;
-  size_t writeIndex = 0;
+  unsigned writeIndex = 0;
 
   if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
   {
@@ -5297,7 +5297,7 @@
 
 void decode_gsm_rlcmac_uplink_data(bitvec * vector, RlcMacUplinkDataBlock_t * data)
 {
-  size_t readIndex = 0;
+  unsigned readIndex = 0;
   //unsigned dataLen = 0;
   guint8 payload_type = bitvec_read_field(vector, readIndex, 2);
   if (payload_type == PAYLOAD_TYPE_DATA)
@@ -5374,7 +5374,7 @@
 
 void encode_gsm_rlcmac_downlink_data(bitvec * vector, RlcMacDownlinkDataBlock_t * data)
 {
-  size_t writeIndex = 0;
+  unsigned writeIndex = 0;
 
   if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
   {
