diff --git a/gtp/gtp.c b/gtp/gtp.c
index 0de69a4..a20b71c 100644
--- a/gtp/gtp.c
+++ b/gtp/gtp.c
@@ -179,7 +179,7 @@
  * to hold the packet header.
  * returns the length of the header. 0 on error.
  **/
-static int get_default_gtp(int version, u_int8_t type, void *packet) {
+static int get_default_gtp(int version, uint8_t type, void *packet) {
   struct gtp0_header *gtp0_default = (struct gtp0_header*) packet;
   struct gtp1_header_long *gtp1_default = (struct gtp1_header_long*) packet;
   switch (version) {
diff --git a/gtp/gtp.h b/gtp/gtp.h
index d1f0e22..7e09f6d 100644
--- a/gtp/gtp.h
+++ b/gtp/gtp.h
@@ -153,67 +153,67 @@
  *   redundant because the header also includes flow. */
 
 struct gtp0_header {    /*    Descriptions from 3GPP 09.60 */
-  u_int8_t  flags;      /* 01 bitfield, with typical values */
+  uint8_t  flags;      /* 01 bitfield, with typical values */
                         /*    000..... Version: 1 (0) */
                         /*    ...1111. Spare (7) */
                         /*    .......0 SNDCP N-PDU Number flag (0) */
-  u_int8_t  type;	        /* 02 Message type. T-PDU = 0xff */
-  u_int16_t length;	/* 03 Length (of G-PDU excluding header) */
-  u_int16_t seq;	        /* 05 Sequence Number */
-  u_int16_t flow;	        /* 07 Flow Label ( = 0 for signalling) */
-  u_int8_t  number;	/* 09 SNDCP N-PDU LCC Number ( 0 = 0xff) */
-  u_int8_t  spare1;	/* 10 Spare */
-  u_int8_t  spare2;	/* 11 Spare */
-  u_int8_t  spare3;	/* 12 Spare */
-  u_int64_t tid;	/* 13 Tunnel ID */
+  uint8_t  type;	        /* 02 Message type. T-PDU = 0xff */
+  uint16_t length;	/* 03 Length (of G-PDU excluding header) */
+  uint16_t seq;	        /* 05 Sequence Number */
+  uint16_t flow;	        /* 07 Flow Label ( = 0 for signalling) */
+  uint8_t  number;	/* 09 SNDCP N-PDU LCC Number ( 0 = 0xff) */
+  uint8_t  spare1;	/* 10 Spare */
+  uint8_t  spare2;	/* 11 Spare */
+  uint8_t  spare3;	/* 12 Spare */
+  uint64_t tid;	/* 13 Tunnel ID */
 };                      /* 20 */
 
 struct gtp1_header_short { /*    Descriptions from 3GPP 29060 */
-  u_int8_t  flags;         /* 01 bitfield, with typical values */
+  uint8_t  flags;         /* 01 bitfield, with typical values */
                            /*    001..... Version: 1 */
                            /*    ...1.... Protocol Type: GTP=1, GTP'=0 */
                            /*    ....0... Spare = 0 */
                            /*    .....0.. Extension header flag: 0 */
                            /*    ......0. Sequence number flag: 0 */
                            /*    .......0 PN: N-PDU Number flag */
-  u_int8_t  type;	   /* 02 Message type. T-PDU = 0xff */
-  u_int16_t length;	   /* 03 Length (of IP packet or signalling) */
-  u_int32_t tei;           /* 05 - 08 Tunnel Endpoint ID */
+  uint8_t  type;	   /* 02 Message type. T-PDU = 0xff */
+  uint16_t length;	   /* 03 Length (of IP packet or signalling) */
+  uint32_t tei;           /* 05 - 08 Tunnel Endpoint ID */
 };
 
 struct gtp1_header_long {  /*    Descriptions from 3GPP 29060 */
-  u_int8_t  flags;         /* 01 bitfield, with typical values */
+  uint8_t  flags;         /* 01 bitfield, with typical values */
                            /*    001..... Version: 1 */
                            /*    ...1.... Protocol Type: GTP=1, GTP'=0 */
                            /*    ....0... Spare = 0 */
                            /*    .....0.. Extension header flag: 0 */
                            /*    ......1. Sequence number flag: 1 */
                            /*    .......0 PN: N-PDU Number flag */
-  u_int8_t  type;	   /* 02 Message type. T-PDU = 0xff */
-  u_int16_t length;	   /* 03 Length (of IP packet or signalling) */
-  u_int32_t tei;	   /* 05 Tunnel Endpoint ID */
-  u_int16_t seq;	   /* 10 Sequence Number */
-  u_int8_t  npdu;	   /* 11 N-PDU Number */
-  u_int8_t  next;	   /* 12 Next extension header type. Empty = 0 */
+  uint8_t  type;	   /* 02 Message type. T-PDU = 0xff */
+  uint16_t length;	   /* 03 Length (of IP packet or signalling) */
+  uint32_t tei;	   /* 05 Tunnel Endpoint ID */
+  uint16_t seq;	   /* 10 Sequence Number */
+  uint8_t  npdu;	   /* 11 N-PDU Number */
+  uint8_t  next;	   /* 12 Next extension header type. Empty = 0 */
 };
 
 struct gtp0_packet {
   struct gtp0_header h;
-  u_int8_t p[GTP_MAX];
+  uint8_t p[GTP_MAX];
 } __attribute__((packed));
 
 struct gtp1_packet_short {
   struct gtp1_header_short h;
-  u_int8_t p[GTP_MAX];
+  uint8_t p[GTP_MAX];
 } __attribute__((packed));
 
 struct gtp1_packet_long {
   struct gtp1_header_long h;
-  u_int8_t p[GTP_MAX];
+  uint8_t p[GTP_MAX];
 } __attribute__((packed));
 
 union gtp_packet {
-  u_int8_t flags;
+  uint8_t flags;
   struct gtp0_packet        gtp0;
   struct gtp1_packet_short  gtp1s;
   struct gtp1_packet_long   gtp1l;
diff --git a/gtp/gtpie.c b/gtp/gtpie.c
index 68f912f..ac98294 100644
--- a/gtp/gtpie.c
+++ b/gtp/gtpie.c
@@ -38,7 +38,7 @@
 
 #include "gtpie.h"
 
-int gtpie_tlv(void *p, int *length, int size, u_int8_t t, int l, void *v) {
+int gtpie_tlv(void *p, int *length, int size, uint8_t t, int l, void *v) {
   if ((*length + 3 + l) >= size) return 1;
   ((union gtpie_member*) (p + *length))->tlv.t = hton8(t);
   ((union gtpie_member*) (p + *length))->tlv.l = hton16(l);
@@ -47,7 +47,7 @@
   return 0;
 }
 
-int gtpie_tv0(void *p, int *length, int size, u_int8_t t, int l, u_int8_t *v) {
+int gtpie_tv0(void *p, int *length, int size, uint8_t t, int l, uint8_t *v) {
   if ((*length + 1 + l) >= size) return 1;
   ((union gtpie_member*) (p + *length))->tv0.t = hton8(t);
   memcpy((void*) (p + *length +1), v, l);
@@ -55,7 +55,7 @@
   return 0;
 }
 
-int gtpie_tv1(void *p, int *length, int size, u_int8_t t, u_int8_t v) {
+int gtpie_tv1(void *p, int *length, int size, uint8_t t, uint8_t v) {
   if ((*length + 2) >= size) return 1;
   ((union gtpie_member*) (p + *length))->tv1.t = hton8(t);
   ((union gtpie_member*) (p + *length))->tv1.v = hton8(v);
@@ -63,7 +63,7 @@
   return 0;
 }
 
-int gtpie_tv2(void *p, int *length, int size, u_int8_t t, u_int16_t v) {
+int gtpie_tv2(void *p, int *length, int size, uint8_t t, uint16_t v) {
   if ((*length + 3) >= size) return 1;
   ((union gtpie_member*) (p + *length))->tv2.t = hton8(t);
   ((union gtpie_member*) (p + *length))->tv2.v = hton16(v);
@@ -71,7 +71,7 @@
   return 0;
 }
 
-int gtpie_tv4(void *p, int *length, int size, u_int8_t t, u_int32_t v) {
+int gtpie_tv4(void *p, int *length, int size, uint8_t t, uint32_t v) {
   if ((*length + 5) >= size) return 1;
   ((union gtpie_member*) (p + *length))->tv4.t = hton8(t);
   ((union gtpie_member*) (p + *length))->tv4.v = hton32(v);
@@ -79,7 +79,7 @@
   return 0;
 }
 
-int gtpie_tv8(void *p, int *length, int size, u_int8_t t, u_int64_t v) {
+int gtpie_tv8(void *p, int *length, int size, uint8_t t, uint64_t v) {
   if ((*length + 9) >= size) return 1;
   ((union gtpie_member*) (p + *length))->tv8.t = hton8(t);
   ((union gtpie_member*) (p + *length))->tv8.v = hton64(v);
diff --git a/gtp/gtpie.h b/gtp/gtpie.h
index f8990dc..c376124 100644
--- a/gtp/gtpie.h
+++ b/gtp/gtpie.h
@@ -26,14 +26,14 @@
 #define ntoh32(x) ntohl(x)
 
 #if BYTE_ORDER == LITTLE_ENDIAN
-static __inline u_int64_t
-hton64(u_int64_t q)
+static __inline uint64_t
+hton64(uint64_t q)
 {
-        register u_int32_t u, l;
+        register uint32_t u, l;
         u = q >> 32;
-        l = (u_int32_t) q;
+        l = (uint32_t) q;
 
-        return htonl(u) | ((u_int64_t)htonl(l) << 32);
+        return htonl(u) | ((uint64_t)htonl(l) << 32);
 }
 
 #define ntoh64(_x)        hton64(_x)
@@ -117,45 +117,45 @@
 
 /* GTP information element structs in network order */
 struct gtpie_ext {              /* Extension header */
-  u_int8_t t;                   /* Type */
-  u_int8_t l;                   /* Length */
-  u_int8_t *p;                  /* Value */
+  uint8_t t;                   /* Type */
+  uint8_t l;                   /* Length */
+  uint8_t *p;                  /* Value */
 } __attribute__((packed));
 
 struct gtpie_tlv {              /* Type length value pair */
-  u_int8_t t;                   /* Type */
-  u_int16_t l;                  /* Length */
-  u_int8_t v[GTPIE_MAX_TLV];    /* Value */
+  uint8_t t;                   /* Type */
+  uint16_t l;                  /* Length */
+  uint8_t v[GTPIE_MAX_TLV];    /* Value */
 } __attribute__((packed));
 
 struct gtpie_tv0 {              /* 1 byte type value pair */
-  u_int8_t t;                   /* Type */
-  u_int8_t v[GTPIE_MAX_TV];     /* Pointer to value */
+  uint8_t t;                   /* Type */
+  uint8_t v[GTPIE_MAX_TV];     /* Pointer to value */
 }__attribute__((packed));
 
 struct gtpie_tv1 {              /* 1 byte type value pair */
-  u_int8_t t;                   /* Type */
-  u_int8_t v;                   /* Value */
+  uint8_t t;                   /* Type */
+  uint8_t v;                   /* Value */
 }__attribute__((packed));
 
 struct gtpie_tv2 {              /* 2 byte type value pair */
-  u_int8_t t;                   /* Type */
-  u_int16_t v;                  /* Value */
+  uint8_t t;                   /* Type */
+  uint16_t v;                  /* Value */
 }__attribute__((packed));
 
 struct gtpie_tv4 {              /* 4 byte type value pair */
-  u_int8_t t;                   /* Type */
-  u_int32_t v;                  /* Value */
+  uint8_t t;                   /* Type */
+  uint32_t v;                  /* Value */
 }__attribute__((packed));
 
 struct gtpie_tv8 {              /* 8 byte type value pair */
-  u_int8_t t;                   /* Type */
-  u_int64_t v;                  /* Value */
+  uint8_t t;                   /* Type */
+  uint64_t v;                  /* Value */
 }__attribute__((packed));
 
 
 union gtpie_member {
-  u_int8_t t;
+  uint8_t t;
   struct gtpie_ext ext;
   struct gtpie_tlv tlv;
   struct gtpie_tv0 tv0;
@@ -215,23 +215,23 @@
 */
 
 struct tlv1 {
-  u_int8_t  type;
-  u_int8_t  length;
+  uint8_t  type;
+  uint8_t  length;
 }__attribute__((packed));
 
 struct tlv2 {
-  u_int8_t  type;
-  u_int16_t length;
+  uint8_t  type;
+  uint16_t length;
 }__attribute__((packed));
 
 extern int gtpie_tlv(void *p, int *length, int size,
-		     u_int8_t t, int l, void *v);
+		     uint8_t t, int l, void *v);
 extern int gtpie_tv0(void *p, int *length, int size, 
-		     u_int8_t t, int l, u_int8_t *v);
-extern int gtpie_tv1(void *p, int *length, int size, u_int8_t t, u_int8_t v);
-extern int gtpie_tv2(void *p, int *length, int size, u_int8_t t, u_int16_t v);
-extern int gtpie_tv4(void *p, int *length, int size, u_int8_t t, u_int32_t v);
-extern int gtpie_tv8(void *p, int *length, int size, u_int8_t t, u_int64_t v);
+		     uint8_t t, int l, uint8_t *v);
+extern int gtpie_tv1(void *p, int *length, int size, uint8_t t, uint8_t v);
+extern int gtpie_tv2(void *p, int *length, int size, uint8_t t, uint16_t v);
+extern int gtpie_tv4(void *p, int *length, int size, uint8_t t, uint32_t v);
+extern int gtpie_tv8(void *p, int *length, int size, uint8_t t, uint64_t v);
 extern int gtpie_getie(union gtpie_member* ie[], int type, int instance);
 extern int gtpie_exist(union gtpie_member* ie[], int type, int instance);
 extern int gtpie_gettlv(union gtpie_member* ie[], int type, int instance,
diff --git a/gtp/pdp.h b/gtp/pdp.h
index 62175ef..a6780cd 100644
--- a/gtp/pdp.h
+++ b/gtp/pdp.h
@@ -199,7 +199,7 @@
   int         version;  /* Protocol version currently in use. 0 or 1 */
 
   uint64_t    tid;      /* Combination of imsi and nsapi */
-  u_int16_t   seq;      /* Sequence number of last request */
+  uint16_t   seq;      /* Sequence number of last request */
   struct sockaddr_in sa_peer; /* Address of last request */
   int fd;               /* File descriptor request was received on */
 
diff --git a/gtp/queue.h b/gtp/queue.h
index 5169598..1e95676 100644
--- a/gtp/queue.h
+++ b/gtp/queue.h
@@ -30,7 +30,7 @@
 struct qmsg_t {           /* Holder for queued packets */
   int state;              /* 0=empty, 1=full */
   uint16_t seq;           /* The sequence number */
-  u_int8_t type;          /* The type of packet */
+  uint8_t type;          /* The type of packet */
   void *cbp;              /* Application specific pointer */
   union gtp_packet p;     /* The packet stored */
   int l;                  /* Length of the packet */
