diff --git a/modules/audio_coding/codecs/isac/fix/interface/isacfix.h b/modules/audio_coding/codecs/isac/fix/interface/isacfix.h
index 7cd2954..942727a 100644
--- a/modules/audio_coding/codecs/isac/fix/interface/isacfix.h
+++ b/modules/audio_coding/codecs/isac/fix/interface/isacfix.h
@@ -130,7 +130,7 @@
 
   int16_t WebRtcIsacfix_Encode(ISACFIX_MainStruct *ISAC_main_inst,
                                const int16_t *speechIn,
-                               int16_t *encoded);
+                               uint8_t* encoded);
 
 
 
diff --git a/modules/audio_coding/codecs/isac/fix/source/isacfix.c b/modules/audio_coding/codecs/isac/fix/source/isacfix.c
index e855dae..48631b5 100644
--- a/modules/audio_coding/codecs/isac/fix/source/isacfix.c
+++ b/modules/audio_coding/codecs/isac/fix/source/isacfix.c
@@ -17,6 +17,7 @@
 
 #include "webrtc/modules/audio_coding/codecs/isac/fix/interface/isacfix.h"
 
+#include <assert.h>
 #include <stdlib.h>
 
 #include "webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.h"
@@ -355,7 +356,7 @@
 
 int16_t WebRtcIsacfix_Encode(ISACFIX_MainStruct *ISAC_main_inst,
                              const int16_t    *speechIn,
-                             int16_t          *encoded)
+                             uint8_t* encoded)
 {
   ISACFIX_SubStruct *ISAC_inst;
   int16_t stream_len;
@@ -382,16 +383,20 @@
     return -1;
   }
 
-
-  /* convert from bytes to int16_t */
+  assert(stream_len % 2 == 0);
 #ifndef WEBRTC_ARCH_BIG_ENDIAN
-  for (k=0;k<(stream_len+1)>>1;k++) {
-    encoded[k] = (int16_t)( ( (uint16_t)(ISAC_inst->ISACenc_obj.bitstr_obj).stream[k] >> 8 )
-                                  | (((ISAC_inst->ISACenc_obj.bitstr_obj).stream[k] & 0x00FF) << 8));
+  /* The encoded data vector is supposesd to be big-endian, but our internal
+     representation is little-endian. So byteswap. */
+  for (k = 0; k < stream_len / 2; ++k) {
+    uint16_t s = ISAC_inst->ISACenc_obj.bitstr_obj.stream[k];
+    /* In big-endian, we have... */
+    encoded[2 * k] = s >> 8;  /* ...most significant byte at low address... */
+    encoded[2 * k + 1] = s;  /* ...least significant byte at high address. */
   }
-
 #else
-  WEBRTC_SPL_MEMCPY_W16(encoded, (ISAC_inst->ISACenc_obj.bitstr_obj).stream, (stream_len + 1)>>1);
+  /* The encoded data vector and our internal representation are both
+     big-endian. */
+  memcpy(encoded, ISAC_inst->ISACenc_obj.bitstr_obj.stream, stream_len);
 #endif
 
 
diff --git a/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc b/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc
index 3582751..207ee8c 100644
--- a/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc
+++ b/modules/audio_coding/codecs/isac/fix/test/isac_speed_test.cc
@@ -71,7 +71,7 @@
   size_t pointer = 0;
   for (int idx = 0; idx < subblocks; idx++, pointer += subblock_length) {
     value = WebRtcIsacfix_Encode(ISACFIX_main_inst_, &in_data[pointer],
-                                 reinterpret_cast<int16_t*>(bit_stream));
+                                 bit_stream);
   }
   clocks = clock() - clocks;
   EXPECT_GT(value, 0);
diff --git a/modules/audio_coding/codecs/isac/fix/test/kenny.cc b/modules/audio_coding/codecs/isac/fix/test/kenny.cc
index c3c6f13..91c4d76 100644
--- a/modules/audio_coding/codecs/isac/fix/test/kenny.cc
+++ b/modules/audio_coding/codecs/isac/fix/test/kenny.cc
@@ -565,7 +565,7 @@
           /* Encode */
           stream_len = WebRtcIsacfix_Encode(ISAC_main_inst,
                                             shortdata,
-                                            (int16_t*)streamdata);
+                                            (uint8_t*)streamdata);
 
           /* If packet is ready, and CE testing, call the different API
              functions from the internal API. */
diff --git a/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c b/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c
index d5682b2..965f2bc 100644
--- a/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c
+++ b/modules/audio_coding/codecs/isac/fix/test/test_iSACfixfloat.c
@@ -439,7 +439,9 @@
 			/* iSAC encoding */
 
 			if (mode==0 || mode ==1) {
-				stream_len = WebRtcIsac_Encode(ISAC_main_inst, shortdata,	streamdata);
+                          stream_len = WebRtcIsac_Encode(ISAC_main_inst,
+                                                         shortdata,
+                                                         (uint8_t*)streamdata);
 				if (stream_len < 0) {
 					/* exit if returned with error */
 					errtype=WebRtcIsac_GetErrorCode(ISAC_main_inst);
@@ -449,7 +451,10 @@
 			} else if (mode==2 || mode==3) {
 				/* iSAC encoding */
 				if (nbTest != 1)
-					stream_len = WebRtcIsacfix_Encode(ISACFIX_main_inst, shortdata,	streamdata);
+                                  stream_len = WebRtcIsacfix_Encode(
+                                      ISACFIX_main_inst,
+                                      shortdata,
+                                      (uint8_t*)streamdata);
 				else
 					stream_len = WebRtcIsacfix_EncodeNb(ISACFIX_main_inst, shortdata, streamdata);
 		
diff --git a/modules/audio_coding/codecs/isac/main/interface/isac.h b/modules/audio_coding/codecs/isac/main/interface/isac.h
index 76a61e6..4067058 100644
--- a/modules/audio_coding/codecs/isac/main/interface/isac.h
+++ b/modules/audio_coding/codecs/isac/main/interface/isac.h
@@ -147,7 +147,7 @@
   int16_t WebRtcIsac_Encode(
       ISACStruct*        ISAC_main_inst,
       const int16_t* speechIn,
-      int16_t*       encoded);
+      uint8_t* encoded);
 
 
   /******************************************************************************
diff --git a/modules/audio_coding/codecs/isac/main/source/isac.c b/modules/audio_coding/codecs/isac/main/source/isac.c
index d47eb80..13170a0 100644
--- a/modules/audio_coding/codecs/isac/main/source/isac.c
+++ b/modules/audio_coding/codecs/isac/main/source/isac.c
@@ -496,7 +496,7 @@
  */
 int16_t WebRtcIsac_Encode(ISACStruct* ISAC_main_inst,
                           const int16_t* speechIn,
-                          int16_t* encoded) {
+                          uint8_t* encoded) {
   float inFrame[FRAMESAMPLES_10ms];
   int16_t speechInLB[FRAMESAMPLES_10ms];
   int16_t speechInUB[FRAMESAMPLES_10ms];
@@ -504,7 +504,6 @@
   int16_t streamLenUB = 0;
   int16_t streamLen = 0;
   int16_t k = 0;
-  uint8_t* ptrEncodedUW8 = (uint8_t*)encoded;
   int garbageLen = 0;
   int32_t bottleneck = 0;
   int16_t bottleneckIdx = 0;
@@ -643,23 +642,22 @@
       streamLenUB = 0;
     }
 
-    memcpy(ptrEncodedUW8, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
+    memcpy(encoded, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
     streamLen = streamLenLB;
     if (streamLenUB > 0) {
-      ptrEncodedUW8[streamLenLB] = (uint8_t)(streamLenUB + 1 +
-                                                   LEN_CHECK_SUM_WORD8);
-      memcpy(&ptrEncodedUW8[streamLenLB + 1],
-             instUB->ISACencUB_obj.bitstr_obj.stream, streamLenUB);
-      streamLen += ptrEncodedUW8[streamLenLB];
+      encoded[streamLenLB] = streamLenUB + 1 + LEN_CHECK_SUM_WORD8;
+      memcpy(&encoded[streamLenLB + 1],
+             instUB->ISACencUB_obj.bitstr_obj.stream,
+             streamLenUB);
+      streamLen += encoded[streamLenLB];
     } else {
-      ptrEncodedUW8[streamLenLB] = 0;
+      encoded[streamLenLB] = 0;
     }
   } else {
     if (streamLenLB == 0) {
       return 0;
     }
-    memcpy(ptrEncodedUW8, instLB->ISACencLB_obj.bitstr_obj.stream,
-           streamLenLB);
+    memcpy(encoded, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
     streamLenUB = 0;
     streamLen = streamLenLB;
   }
@@ -697,11 +695,11 @@
      * 255 is the max garbage length we can signal using 8 bits. */
     if ((instISAC->bandwidthKHz == isac8kHz) ||
         (streamLenUB == 0)) {
-      ptrGarbage = &ptrEncodedUW8[streamLenLB];
+      ptrGarbage = &encoded[streamLenLB];
       limit = streamLen + 255;
     } else {
-      ptrGarbage = &ptrEncodedUW8[streamLenLB + 1 + streamLenUB];
-      limit = streamLen + (255 - ptrEncodedUW8[streamLenLB]);
+      ptrGarbage = &encoded[streamLenLB + 1 + streamLenUB];
+      limit = streamLen + (255 - encoded[streamLenLB]);
     }
     minBytes = (minBytes > limit) ? limit : minBytes;
 
@@ -718,13 +716,12 @@
        * That is the only way to preserve backward compatibility. */
       if ((instISAC->bandwidthKHz == isac8kHz) ||
           (streamLenUB == 0)) {
-        ptrEncodedUW8[streamLenLB] = (uint8_t)garbageLen;
+        encoded[streamLenLB] = garbageLen;
       } else {
-        ptrEncodedUW8[streamLenLB] += (uint8_t)garbageLen;
+        encoded[streamLenLB] += garbageLen;
         /* Write the length of the garbage at the end of the upper-band
          *  bit-stream, if exists. This helps for sanity check. */
-        ptrEncodedUW8[streamLenLB + 1 + streamLenUB] =
-            (uint8_t)garbageLen;
+        encoded[streamLenLB + 1 + streamLenUB] = garbageLen;
 
       }
       streamLen += garbageLen;
@@ -741,16 +738,14 @@
   if ((instISAC->bandwidthKHz != isac8kHz) && (streamLenUB > 0)) {
     uint32_t crc;
 
-    WebRtcIsac_GetCrc((int16_t*)(&(ptrEncodedUW8[streamLenLB + 1])),
+    WebRtcIsac_GetCrc((int16_t*)(&(encoded[streamLenLB + 1])),
                       streamLenUB + garbageLen, &crc);
 #ifndef WEBRTC_ARCH_BIG_ENDIAN
     for (k = 0; k < LEN_CHECK_SUM_WORD8; k++) {
-      ptrEncodedUW8[streamLen - LEN_CHECK_SUM_WORD8 + k] =
-        (uint8_t)((crc >> (24 - k * 8)) & 0xFF);
+      encoded[streamLen - LEN_CHECK_SUM_WORD8 + k] = crc >> (24 - k * 8);
     }
 #else
-    memcpy(&ptrEncodedUW8[streamLenLB + streamLenUB + 1], &crc,
-           LEN_CHECK_SUM_WORD8);
+    memcpy(&encoded[streamLenLB + streamLenUB + 1], &crc, LEN_CHECK_SUM_WORD8);
 #endif
   }
   return streamLen;
diff --git a/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc b/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc
index 3c55bd3..1d65373 100644
--- a/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc
+++ b/modules/audio_coding/codecs/isac/main/source/isac_unittest.cc
@@ -31,7 +31,7 @@
 
   int16_t speech_data_[kIsacNumberOfSamples];
   int16_t output_data_[kIsacNumberOfSamples];
-  int16_t bitstream_[kMaxBytes / 2];
+  uint8_t bitstream_[kMaxBytes];
   uint8_t bitstream_small_[7];  // Simulate sync packets.
 };
 
diff --git a/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc b/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc
index c5f9561..8af4e6f 100644
--- a/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc
+++ b/modules/audio_coding/codecs/isac/main/test/ReleaseTest-API/ReleaseTest-API.cc
@@ -662,8 +662,8 @@
             if(!(testNum == 3 && framecnt == 0))
             {
                 stream_len = WebRtcIsac_Encode(ISAC_main_inst,
-                    shortdata,
-                    (int16_t*)streamdata);
+                                               shortdata,
+                                               (uint8_t*)streamdata);
                 if((payloadSize != 0) && (stream_len > payloadSize))
                 {
                     if(testNum == 0)
diff --git a/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc b/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc
index fd70eca..72d3fe8 100644
--- a/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc
+++ b/modules/audio_coding/codecs/isac/main/test/SwitchingSampRate/SwitchingSampRate.cc
@@ -283,7 +283,8 @@
 
 
       streamLen = WebRtcIsac_Encode(codecInstance[senderIdx],
-                                    audioBuff10ms, (short*)bitStream);
+                                    audioBuff10ms,
+                                    (uint8_t*)bitStream);
       int16_t ggg;
       if (streamLen > 0) {
         if((  WebRtcIsac_ReadFrameLen(codecInstance[receiverIdx],
diff --git a/modules/audio_coding/codecs/isac/main/test/simpleKenny.c b/modules/audio_coding/codecs/isac/main/test/simpleKenny.c
index 980465d..2df5a84 100644
--- a/modules/audio_coding/codecs/isac/main/test/simpleKenny.c
+++ b/modules/audio_coding/codecs/isac/main/test/simpleKenny.c
@@ -373,8 +373,10 @@
 				cur_framesmpls += samplesIn10Ms;
 
 				//-------- iSAC encoding ---------
-				stream_len = WebRtcIsac_Encode(ISAC_main_inst, shortdata,
-					(int16_t*)payload);
+                                stream_len = WebRtcIsac_Encode(
+                                        ISAC_main_inst,
+                                        shortdata,
+                                        (uint8_t*)payload);
 
 				if(stream_len < 0)
 				{
diff --git a/modules/audio_coding/main/acm2/acm_isac.cc b/modules/audio_coding/main/acm2/acm_isac.cc
index 850204f..f3682f1 100644
--- a/modules/audio_coding/main/acm2/acm_isac.cc
+++ b/modules/audio_coding/main/acm2/acm_isac.cc
@@ -347,8 +347,9 @@
       return -1;
     }
     *bitstream_len_byte = ACM_ISAC_ENCODE(
-        codec_inst_ptr_->inst, &in_audio_[in_audio_ix_read_],
-        reinterpret_cast<int16_t*>(bitstream));
+        codec_inst_ptr_->inst,
+        &in_audio_[in_audio_ix_read_],
+        bitstream);
     // increment the read index this tell the caller that how far
     // we have gone forward in reading the audio buffer
     in_audio_ix_read_ += samples_in_10ms_audio_;
diff --git a/modules/audio_coding/neteq/audio_decoder_unittest.cc b/modules/audio_coding/neteq/audio_decoder_unittest.cc
index d33c8f2..624e6a4 100644
--- a/modules/audio_coding/neteq/audio_decoder_unittest.cc
+++ b/modules/audio_coding/neteq/audio_decoder_unittest.cc
@@ -348,14 +348,11 @@
   virtual int EncodeFrame(const int16_t* input, size_t input_len_samples,
                           uint8_t* output) {
     // Insert 3 * 10 ms. Expect non-zero output on third call.
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    int enc_len_bytes =
-        WebRtcIsac_Encode(encoder_, input, reinterpret_cast<int16_t*>(output));
+    int enc_len_bytes = WebRtcIsac_Encode(encoder_, input, output);
     EXPECT_GT(enc_len_bytes, 0);
     return enc_len_bytes;
   }
@@ -388,14 +385,11 @@
   virtual int EncodeFrame(const int16_t* input, size_t input_len_samples,
                           uint8_t* output) {
     // Insert 3 * 10 ms. Expect non-zero output on third call.
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input,
-                                   reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsac_Encode(encoder_, input, output));
     input += input_size_;
-    int enc_len_bytes =
-        WebRtcIsac_Encode(encoder_, input, reinterpret_cast<int16_t*>(output));
+    int enc_len_bytes = WebRtcIsac_Encode(encoder_, input, output);
     EXPECT_GT(enc_len_bytes, 0);
     return enc_len_bytes;
   }
@@ -441,14 +435,11 @@
   virtual int EncodeFrame(const int16_t* input, size_t input_len_samples,
                           uint8_t* output) {
     // Insert 3 * 10 ms. Expect non-zero output on third call.
-    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input,
-                                      reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input, output));
     input += input_size_;
-    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input,
-                                      reinterpret_cast<int16_t*>(output)));
+    EXPECT_EQ(0, WebRtcIsacfix_Encode(encoder_, input, output));
     input += input_size_;
-    int enc_len_bytes = WebRtcIsacfix_Encode(
-        encoder_, input, reinterpret_cast<int16_t*>(output));
+    int enc_len_bytes = WebRtcIsacfix_Encode(encoder_, input, output);
     EXPECT_GT(enc_len_bytes, 0);
     return enc_len_bytes;
   }
diff --git a/modules/audio_coding/neteq/test/RTPencode.cc b/modules/audio_coding/neteq/test/RTPencode.cc
index 93b366b..92bccee 100644
--- a/modules/audio_coding/neteq/test/RTPencode.cc
+++ b/modules/audio_coding/neteq/test/RTPencode.cc
@@ -1632,9 +1632,13 @@
             cdlen=0;
             while (cdlen<=0) {
 #ifdef CODEC_ISAC /* floating point */
-                cdlen=WebRtcIsac_Encode(ISAC_inst[k],&indata[noOfCalls*160],(int16_t*)encoded);
+                cdlen = WebRtcIsac_Encode(ISAC_inst[k],
+                                          &indata[noOfCalls * 160],
+                                          encoded);
 #else /* fixed point */
-                cdlen=WebRtcIsacfix_Encode(ISAC_inst[k],&indata[noOfCalls*160],(int16_t*)encoded);
+                cdlen = WebRtcIsacfix_Encode(ISAC_inst[k],
+                                             &indata[noOfCalls * 160],
+                                             encoded);
 #endif
                 noOfCalls++;
             }
@@ -1645,7 +1649,9 @@
             int noOfCalls=0;
             cdlen=0;
             while (cdlen<=0) {
-                cdlen=WebRtcIsac_Encode(ISACSWB_inst[k],&indata[noOfCalls*320],(int16_t*)encoded);
+                cdlen = WebRtcIsac_Encode(ISACSWB_inst[k],
+                                          &indata[noOfCalls * 320],
+                                          encoded);
                 noOfCalls++;
             }
         }
diff --git a/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc b/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc
index 6b0f482..b672a0c 100644
--- a/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc
+++ b/modules/audio_coding/neteq/test/neteq_isac_quality_test.cc
@@ -138,8 +138,7 @@
     // The Isac encoder does not perform encoding (and returns 0) until it
     // receives a sequence of sub-blocks that amount to the frame duration.
     EXPECT_EQ(0, value);
-    value = WebRtcIsacfix_Encode(isac_encoder_, &in_data[pointer],
-                                 reinterpret_cast<int16_t*>(payload));
+    value = WebRtcIsacfix_Encode(isac_encoder_, &in_data[pointer], payload);
   }
   EXPECT_GT(value, 0);
   return value;
