diff --git a/channels/chan_unistim.c b/channels/chan_unistim.c
index c1328c1f9a4a0f978bef7b4e1e4ddb14e378a5c6..c8dfaff83a73a6e53b5fa6c924f5c033b075c34e 100644
--- a/channels/chan_unistim.c
+++ b/channels/chan_unistim.c
@@ -62,6 +62,7 @@
 #include "asterisk/module.h"
 #include "asterisk/pbx.h"
 #include "asterisk/rtp_engine.h"
+#include "asterisk/unaligned.h"
 #include "asterisk/netsock2.h"
 #include "asterisk/acl.h"
 #include "asterisk/callerid.h"
@@ -575,7 +576,7 @@ static const unsigned char packet_send_stream_based_tone_on[] =
 	{ 0x16, 0x06, 0x1b, 0x00, 0x00, 0x05 };
 static const unsigned char packet_send_stream_based_tone_single_freq[] =
 	{ 0x16, 0x06, 0x1d, 0x00, 0x01, 0xb8 };
-static const unsigned char packet_send_stream_based_tone_dial_freq[] =
+static const unsigned char packet_send_stream_based_tone_dual_freq[] =
 	{ 0x16, 0x08, 0x1d, 0x00, 0x01, 0xb8, 0x01, 0x5e };
 static const unsigned char packet_send_select_output[] =
 	{ 0x16, 0x06, 0x32, 0xc0, 0x01, 0x00 };
@@ -1208,19 +1209,16 @@ static void send_tone(struct unistimsession *pte, uint16_t tone1, uint16_t tone2
 	if (!tone2) {
 		memcpy(buffsend + SIZE_HEADER, packet_send_stream_based_tone_single_freq,
 			   sizeof(packet_send_stream_based_tone_single_freq));
-		buffsend[10] = (tone1 & 0xff00) >> 8;
-		buffsend[11] = (tone1 & 0x00ff);
+		put_unaligned_uint16(&buffsend[10], htons(tone1));
 		send_client(SIZE_HEADER + sizeof(packet_send_stream_based_tone_single_freq), buffsend,
 				   pte);
 	} else {
 		tone2 *= 8;
-		memcpy(buffsend + SIZE_HEADER, packet_send_stream_based_tone_dial_freq,
-			   sizeof(packet_send_stream_based_tone_dial_freq));
-		buffsend[10] = (tone1 & 0xff00) >> 8;
-		buffsend[11] = (tone1 & 0x00ff);
-		buffsend[12] = (tone2 & 0xff00) >> 8;
-		buffsend[13] = (tone2 & 0x00ff);
-		send_client(SIZE_HEADER + sizeof(packet_send_stream_based_tone_dial_freq), buffsend,
+		memcpy(buffsend + SIZE_HEADER, packet_send_stream_based_tone_dual_freq,
+			   sizeof(packet_send_stream_based_tone_dual_freq));
+		put_unaligned_uint16(&buffsend[10], htons(tone1));
+		put_unaligned_uint16(&buffsend[12], htons(tone2));
+		send_client(SIZE_HEADER + sizeof(packet_send_stream_based_tone_dual_freq), buffsend,
 				   pte);
 	}
 
@@ -2747,7 +2745,7 @@ static void send_start_rtp(struct unistim_subchannel *sub)
 		   sizeof(packet_send_jitter_buffer_conf));
 	send_client(SIZE_HEADER + sizeof(packet_send_jitter_buffer_conf), buffsend, pte);
 	if (pte->device->rtp_method != 0) {
-		uint16_t rtcpsin_port = htons(us.sin_port) + 1; /* RTCP port is RTP + 1 */
+		uint16_t rtcpsin_port = ntohs(us.sin_port) + 1; /* RTCP port is RTP + 1 */
 
 		if (unistimdebug) {
 			ast_verb(0, "Sending OpenAudioStreamTX using method #%d\n", pte->device->rtp_method);
@@ -2761,20 +2759,14 @@ static void send_start_rtp(struct unistim_subchannel *sub)
 		}
 		if (pte->device->rtp_method != 2) {
 			memcpy(buffsend + 28, &public.sin_addr, sizeof(public.sin_addr));
-			buffsend[20] = (htons(sin.sin_port) & 0xff00) >> 8;
-			buffsend[21] = (htons(sin.sin_port) & 0x00ff);
-			buffsend[23] = (rtcpsin_port & 0x00ff);
-			buffsend[22] = (rtcpsin_port & 0xff00) >> 8;
-			buffsend[25] = (us.sin_port & 0xff00) >> 8;
-			buffsend[24] = (us.sin_port & 0x00ff);
-			buffsend[27] = (rtcpsin_port & 0x00ff);
-			buffsend[26] = (rtcpsin_port & 0xff00) >> 8;
+			put_unaligned_uint16(&buffsend[20], sin.sin_port);
+			put_unaligned_uint16(&buffsend[22], htons(rtcpsin_port));
+			put_unaligned_uint16(&buffsend[24], us.sin_port);
+			put_unaligned_uint16(&buffsend[26], htons(rtcpsin_port));
 		} else {
 			memcpy(buffsend + 23, &public.sin_addr, sizeof(public.sin_addr));
-			buffsend[15] = (htons(sin.sin_port) & 0xff00) >> 8;
-			buffsend[16] = (htons(sin.sin_port) & 0x00ff);
-			buffsend[20] = (us.sin_port & 0xff00) >> 8;
-			buffsend[19] = (us.sin_port & 0x00ff);
+			put_unaligned_uint16(&buffsend[15], sin.sin_port);
+			put_unaligned_uint16(&buffsend[19], us.sin_port);
 		}
 		buffsend[11] = codec; /* rx */
 		buffsend[12] = codec; /* tx */
@@ -2792,20 +2784,14 @@ static void send_start_rtp(struct unistim_subchannel *sub)
 		}
 		if (pte->device->rtp_method != 2) {
 			memcpy(buffsend + 28, &public.sin_addr, sizeof(public.sin_addr));
-			buffsend[20] = (htons(sin.sin_port) & 0xff00) >> 8;
-			buffsend[21] = (htons(sin.sin_port) & 0x00ff);
-			buffsend[23] = (rtcpsin_port & 0x00ff);
-			buffsend[22] = (rtcpsin_port & 0xff00) >> 8;
-			buffsend[25] = (us.sin_port & 0xff00) >> 8;
-			buffsend[24] = (us.sin_port & 0x00ff);
-			buffsend[27] = (rtcpsin_port & 0x00ff);
-			buffsend[26] = (rtcpsin_port & 0xff00) >> 8;
+			put_unaligned_uint16(&buffsend[20], sin.sin_port);
+			put_unaligned_uint16(&buffsend[22], htons(rtcpsin_port));
+			put_unaligned_uint16(&buffsend[24], us.sin_port);
+			put_unaligned_uint16(&buffsend[26], htons(rtcpsin_port));
 		} else {
 			memcpy(buffsend + 23, &public.sin_addr, sizeof(public.sin_addr));
-			buffsend[15] = (htons(sin.sin_port) & 0xff00) >> 8;
-			buffsend[16] = (htons(sin.sin_port) & 0x00ff);
-			buffsend[20] = (us.sin_port & 0xff00) >> 8;
-			buffsend[19] = (us.sin_port & 0x00ff);
+			put_unaligned_uint16(&buffsend[15], sin.sin_port);
+			put_unaligned_uint16(&buffsend[19], us.sin_port);
 		}
 		buffsend[11] = codec; /* rx */
 		buffsend[12] = codec; /* tx */
@@ -2820,11 +2806,9 @@ static void send_start_rtp(struct unistim_subchannel *sub)
 		memcpy(buffsend + SIZE_HEADER, packet_send_call, sizeof(packet_send_call));
 		memcpy(buffsend + 53, &public.sin_addr, sizeof(public.sin_addr));
 		/* Destination port when sending RTP */
-		buffsend[49] = (us.sin_port & 0x00ff);
-		buffsend[50] = (us.sin_port & 0xff00) >> 8;
+		put_unaligned_uint16(&buffsend[49], us.sin_port);
 		/* Destination port when sending RTCP */
-		buffsend[52] = (rtcpsin_port & 0x00ff);
-		buffsend[51] = (rtcpsin_port & 0xff00) >> 8;
+		put_unaligned_uint16(&buffsend[51], htons(rtcpsin_port));
 		/* Codec */
 		buffsend[40] = codec;
 		buffsend[41] = codec;
@@ -2841,10 +2825,8 @@ static void send_start_rtp(struct unistim_subchannel *sub)
 				ast_format_get_name(ast_channel_readformat(sub->owner)));
 		}
 		/* Source port for transmit RTP and Destination port for receiving RTP */
-		buffsend[45] = (htons(sin.sin_port) & 0xff00) >> 8;
-		buffsend[46] = (htons(sin.sin_port) & 0x00ff);
-		buffsend[47] = (rtcpsin_port & 0xff00) >> 8;
-		buffsend[48] = (rtcpsin_port & 0x00ff);
+		put_unaligned_uint16(&buffsend[45], sin.sin_port);
+		put_unaligned_uint16(&buffsend[47], htons(rtcpsin_port));
 		send_client(SIZE_HEADER + sizeof(packet_send_call), buffsend, pte);
 	}
 }