diff --git a/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.c b/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.c
index 3ea5d8be3501017418d1bba3b186b90f6d87facb..1c8a2effd54ca1b37aef650b2d7f6a2b8b8d5f94 100644
--- a/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.c
+++ b/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.c
@@ -14,7 +14,7 @@ JNIEXPORT jint JNICALL
 Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_decode
     (JNIEnv *env, jclass clazz, jlong decoder, jbyteArray input,
         jint inputOffset, jint inputLength, jbyteArray output,
-        /* jint outputOffset, */ jint outputFrameSize, jint decodeFEC)
+        jint outputOffset, jint outputFrameSize, jint decodeFEC)
 {
     int ret;
 
@@ -44,7 +44,7 @@ Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_decode
                             (unsigned char *)
                                 (input_ ? (input_ + inputOffset) : NULL),
                             inputLength,
-                            (opus_int16 *) (output_ /* + outputOffset */),
+                            (opus_int16 *) (output_ + outputOffset),
                             outputFrameSize,
                             decodeFEC);
                 (*env)->ReleasePrimitiveArrayCritical(env, output, output_, 0);
@@ -124,7 +124,7 @@ JNIEXPORT jint JNICALL
 Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encode
     (JNIEnv *env, jclass clazz, jlong encoder, jbyteArray input,
         jint inputOffset, jint inputFrameSize, jbyteArray output,
-        /* jint outputOffset, */ jint outputLength)
+        jint outputOffset, jint outputLength)
 {
     int ret;
 
@@ -143,7 +143,7 @@ Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encode
                             (OpusEncoder *) (intptr_t) encoder,
                             (opus_int16 *) (input_ + inputOffset),
                             inputFrameSize,
-                            (unsigned char *) (output_ /* + outputOffset */),
+                            (unsigned char *) (output_ + outputOffset),
                             outputLength);
                 (*env)->ReleasePrimitiveArrayCritical(env, output, output_, 0);
             }
@@ -253,6 +253,19 @@ Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encoder_1get_1vbr_1constraint
     return (OPUS_OK == ret) ? x : ret;
 }
 
+JNIEXPORT jint JNICALL
+Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encoder_1get_1inband_1fec
+    (JNIEnv *env, jclass clazz, jlong encoder)
+{
+    opus_int32 x;
+    int ret
+        = opus_encoder_ctl(
+                (OpusEncoder *) (intptr_t) encoder,
+                OPUS_GET_INBAD_FEC(&x));
+
+    return (OPUS_OK == ret) ? x : ret;
+}
+
 JNIEXPORT jint JNICALL
 Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encoder_1set_1bandwidth
     (JNIEnv *env, jclass clazz, jlong encoder, jint bandwidth)
diff --git a/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.h b/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.h
index 2e57ad5efd87b33ae9dd029b23155242aaf29a95..8122e26a68c663947d0b2cfca2c3aba62de77c6e 100644
--- a/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.h
+++ b/src/native/opus/org_jitsi_impl_neomedia_codec_audio_opus_Opus.h
@@ -10,10 +10,10 @@ extern "C" {
 /*
  * Class:     org_jitsi_impl_neomedia_codec_audio_opus_Opus
  * Method:    decode
- * Signature: (J[BII[BII)I
+ * Signature: (J[BII[BIII)I
  */
 JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_decode
-  (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jbyteArray, jint, jint);
+  (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jbyteArray, jint, jint, jint);
 
 /*
  * Class:     org_jitsi_impl_neomedia_codec_audio_opus_Opus
@@ -50,10 +50,10 @@ JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_decode
 /*
  * Class:     org_jitsi_impl_neomedia_codec_audio_opus_Opus
  * Method:    encode
- * Signature: (J[BII[BI)I
- */
-JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encode
-  (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jbyteArray, jint);
+ * Signature: (J[BII[BII)I
+     */
+ JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_codec_audio_opus_Opus_encode
+   (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jbyteArray, jint, jint);
 
 /*
  * Class:     org_jitsi_impl_neomedia_codec_audio_opus_Opus
diff --git a/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIDecoder.java b/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIDecoder.java
index b448ce5ad27f6e6130ee8418279a64b58c40a589..ccebdbe2e956466b95f843ec22c3cf6dc590949c 100644
--- a/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIDecoder.java
+++ b/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIDecoder.java
@@ -123,7 +123,7 @@ public JNIDecoder()
     }
 
     /**
-     * @see AbstractCodecExt#doClose()
+     * @see AbstractCodec2#doClose()
      */
     @Override
     protected void doClose()
@@ -144,7 +144,7 @@ protected void doClose()
      *
      * @throws ResourceUnavailableException if any of the resources that this
      * <tt>Codec</tt> needs to operate cannot be acquired
-     * @see AbstractCodecExt#doOpen()
+     * @see AbstractCodec2#doOpen()
      */
     @Override
     protected void doOpen()
@@ -168,7 +168,7 @@ protected void doOpen()
      * @param outBuffer output <tt>Buffer</tt>
      * @return <tt>BUFFER_PROCESSED_OK</tt> if <tt>inBuffer</tt> has been
      * successfully processed
-     * @see AbstractCodecExt#doProcess(Buffer, Buffer)
+     * @see AbstractCodec2#doProcess(Buffer, Buffer)
      */
     @Override
     protected int doProcess(Buffer inBuffer, Buffer outBuffer)
@@ -229,7 +229,7 @@ protected int doProcess(Buffer inBuffer, Buffer outBuffer)
                 = Opus.decode(
                         decoder,
                         in, inOffset, inLength,
-                        out, /* outOffset, */ lastFrameSizeInSamplesPerChannel,
+                        out, outOffset, lastFrameSizeInSamplesPerChannel,
                         /* decodeFEC */ 1);
 
             if (frameSizeInSamplesPerChannel > 0)
@@ -267,7 +267,7 @@ protected int doProcess(Buffer inBuffer, Buffer outBuffer)
                 = Opus.decode(
                         decoder,
                         in, inOffset, inLength,
-                        out, /* outOffset, */ frameSizeInSamplesPerChannel,
+                        out, outOffset, frameSizeInSamplesPerChannel,
                         /* decodeFEC */ 0);
             if (frameSizeInSamplesPerChannel > 0)
             {
diff --git a/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIEncoder.java b/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIEncoder.java
index 8ecaec66bea489b43d6013c617b1736e4f6129f8..ec6b51c389b75e4ecb9768ec57b98fe7205cbd77 100644
--- a/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIEncoder.java
+++ b/src/org/jitsi/impl/neomedia/codec/audio/opus/JNIEncoder.java
@@ -210,7 +210,7 @@ public JNIEncoder()
     /**
      * {@inheritDoc}
      *
-     * @see AbstractCodecExt#doClose()
+     * @see AbstractCodec2#doClose()
      */
     @Override
     protected void doClose()
@@ -231,7 +231,7 @@ protected void doClose()
      *
      * @throws ResourceUnavailableException if any of the resources that this
      * <tt>Codec</tt> needs to operate cannot be acquired
-     * @see AbstractCodecExt#doOpen()
+     * @see AbstractCodec2#doOpen()
      */
     @Override
     protected void doOpen()
@@ -309,7 +309,7 @@ else if("nb".equals(str))
      * be written
      * @return <tt>BUFFER_PROCESSED_OK</tt> if the specified <tt>inBuffer</tt>
      * has been processed successfully
-     * @see AbstractCodecExt#doProcess(Buffer, Buffer)
+     * @see AbstractCodec2#doProcess(Buffer, Buffer)
      */
     @Override
     protected int doProcess(Buffer inBuffer, Buffer outBuffer)
@@ -401,7 +401,7 @@ else if (inLength < frameSizeInBytes)
             = Opus.encode(
                     encoder,
                     in, inOffset, frameSizeInSamplesPerChannel,
-                    out, /* 0, */ out.length);
+                    out, 0, out.length);
 
         if (outLength < 0)  // error from opus_encode
             return BUFFER_PROCESSED_FAILED;
diff --git a/src/org/jitsi/impl/neomedia/codec/audio/opus/Opus.java b/src/org/jitsi/impl/neomedia/codec/audio/opus/Opus.java
index e739e9627698c1546b92ed5a125d66c742a00fbc..d7bcafa4adea366b3a8ddc3280c92f9b0edd72cd 100644
--- a/src/org/jitsi/impl/neomedia/codec/audio/opus/Opus.java
+++ b/src/org/jitsi/impl/neomedia/codec/audio/opus/Opus.java
@@ -109,7 +109,7 @@ public static void assertOpusIsFunctional()
     public static native int decode(
             long decoder,
             byte[] input, int inputOffset, int inputLength,
-            byte[] output, /* int outputOffset, */ int outputFrameSize,
+            byte[] output, int outputOffset, int outputFrameSize,
             int decodeFEC);
 
     /**
@@ -170,7 +170,7 @@ public static native int decoder_get_nb_samples(
     public static native int encode(
             long encoder,
             byte[] input, int inputOffset, int inputFrameSize,
-            byte[] output, /* int outputOffset, */ int outputLength);
+            byte[] output, int outputOffset, int outputLength);
 
     /**
      * Creates an OpusEncoder structure, returns a pointer to it casted to long.
@@ -250,6 +250,16 @@ public static native int encode(
      */
     public static native int encoder_get_vbr_constraint(long encoder);
 
+    /**
+     * Wrapper around the native <tt>opus_encoder_ctl</tt> function. Returns
+     * the current inband FEC encoder setting.
+     *
+     * @param encoder The encoder to use
+     *
+     * @return the current inband FEC encoder setting.
+     */
+    public static native int encoder_get_inband_fec(long encoder);
+
     /**
      * Wrapper around the native <tt>opus_encoder_ctl</tt> function. Sets the
      * encoder audio bandwidth.