diff --git a/extend.c b/extend.c
index 92abe93..b91edf1 100644
--- a/extend.c
+++ b/extend.c
@@ -90,7 +90,7 @@ int mode_add_get(struct sockaddr_ina *dst, int m)
 }
 
 
-inline bool check_port(uint16_t *p, struct sockaddr_in6 *dst)
+static inline bool check_port(uint16_t *p, struct sockaddr_in6 *dst)
 {
     return (dst->sin6_port >= p[0] 
             && dst->sin6_port <= p[1]);
diff --git a/packets.c b/packets.c
index 52fd278..f669796 100644
--- a/packets.c
+++ b/packets.c
@@ -17,6 +17,10 @@
 #define ANTOHS(data, i) \
     (uint16_t)((data[i] << 8) + (uint8_t)data[i + 1])
     
+#define SHTONA(data, i, x) \
+    data[i] = (uint8_t)(x >> 8); \
+    data[i + 1] = x & 0xff;
+
 
 char tls_data[517] = {
     "\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03\x03\x5f"
@@ -137,10 +141,10 @@ int change_tls_sni(const char *host, char *buffer, size_t bsize)
             || free_sz < diff) {
         return -1;
     }
-    *(uint16_t *)(sni + 2) = htons(old_sz + diff + 5);
-    *(uint16_t *)(sni + 4) = htons(old_sz + diff + 3);
-    *(uint16_t *)(sni + 7) = htons(old_sz + diff);
-    *(uint16_t *)(pad + 2) = htons(free_sz - diff);
+    SHTONA(sni, 2, old_sz + diff + 5);
+    SHTONA(sni, 4, old_sz + diff + 3);
+    SHTONA(sni, 7, old_sz + diff);
+    SHTONA(pad, 2, free_sz - diff);
     
     char *host_end = sni + 9 + old_sz;
     int oth_sz = bsize - (sni_offs + 9 + old_sz);
@@ -410,7 +414,7 @@ int part_tls(char *buffer, size_t bsize, ssize_t n, long pos)
     memmove(buffer + 5 + pos + 5, buffer + 5 + pos, n - (5 + pos));
     memcpy(buffer + 5 + pos, buffer, 3);
     
-    *(uint16_t *)(buffer + 3) = htons(pos);
-    *(uint16_t *)(buffer + 5 + pos + 3) = htons(r_sz - pos);
+    SHTONA(buffer, 3, pos);
+    SHTONA(buffer, 5 + pos + 3, r_sz - pos);
     return 5;
 }
diff --git a/proxy.c b/proxy.c
index c631d88..de5ad7a 100644
--- a/proxy.c
+++ b/proxy.c
@@ -274,7 +274,7 @@ int s5_get_addr(char *buffer, size_t n,
                 addr->in6.sin6_addr = r->i6;
             }
     }
-    addr->in.sin_port = *(uint16_t *)&buffer[o - 2];
+    memcpy(&addr->in.sin_port, &buffer[o - 2], sizeof(uint16_t));
     return o;
 }