diff --git a/.gitignore b/.gitignore
index dfc265e5fd5043b02c7d5fb89f4697ae81bb7d47..3ea29586ec5243c2fd836556d7e843a4ddbb3116 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ libjitsi.jar
 .idea
 *.swp
 dist
+*.class
diff --git a/lib/native/linux-64/libjnopus.so b/lib/native/linux-64/libjnopus.so
index 045fa4c9380c3edd33a2f64ea52f38de125bca99..a8d1c93ad9b1854ffd4992feabb6280ec59a0657 100755
Binary files a/lib/native/linux-64/libjnopus.so and b/lib/native/linux-64/libjnopus.so differ
diff --git a/lib/native/linux/libjnopus.so b/lib/native/linux/libjnopus.so
index 6fa870980561270879197d815d78ca7928b8b7d9..aa5ff67f6b29604fecc1143d8913ffd50fc8bb1a 100755
Binary files a/lib/native/linux/libjnopus.so and b/lib/native/linux/libjnopus.so differ
diff --git a/lib/native/mac/libjnopus.jnilib b/lib/native/mac/libjnopus.jnilib
index 72550c2d067d739a2f1019366379b6bcff8d9049..7b31380451f5d649d49d9e54efd790fea61be9d6 100755
Binary files a/lib/native/mac/libjnopus.jnilib and b/lib/native/mac/libjnopus.jnilib differ
diff --git a/lib/native/windows-64/jnopus.dll b/lib/native/windows-64/jnopus.dll
index 0eac2cb0529996423f9a729151b49b7f7f6ccb8f..90b5d1522d02ba63d6cb050abfc964456ce5d04e 100755
Binary files a/lib/native/windows-64/jnopus.dll and b/lib/native/windows-64/jnopus.dll differ
diff --git a/lib/native/windows/jnopus.dll b/lib/native/windows/jnopus.dll
index 4004023e170aa00d1c76db276c7da4e43cac0969..2fea6df13ba17cab44e83535fc9004413b14b2c1 100755
Binary files a/lib/native/windows/jnopus.dll and b/lib/native/windows/jnopus.dll differ
diff --git a/src/native/build.xml b/src/native/build.xml
index e8e270f623c7346288875e29297853d41d977cae..cadbf79cff9137ca1ed8e54dfac1623d95f28cf8 100644
--- a/src/native/build.xml
+++ b/src/native/build.xml
@@ -688,12 +688,12 @@
             <compilerarg value="-Wall" />
             <compilerarg value="-fPIC"/>
             <compilerarg value="-O2" />
-            <compilerarg value="-I${opus}/include" unless="is.running.linux"/>
-            <compilerarg value="-I/usr/include/opus" if="is.running.linux"/>
+            <compilerarg value="-I${opus}/include" unless="is.running.debian"/>
+            <compilerarg value="-I/usr/include/opus" if="is.running.debian"/>
             <compilerarg value="-D_JNI_IMPLEMENTATION_" />
 
             <linkerarg value="-Wl,-z,relro" if="is.running.debian"/>
-            <linkerarg value="-L${opus}/.libs" />
+            <linkerarg value="-L${opus}/.libs" unless="is.running.debian"/>
 
             <!-- Linux specific flags -->
             <compilerarg value="-m32" if="cross_32" unless="is.running.macos" />
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..833495903254b0bb296e0e5a47e01abd7ca8d479 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_INBAND_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..12ba9fb60b84ecebd7660b2ae697fbfee0bd26a0 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()
@@ -293,10 +293,10 @@ else if("nb".equals(str))
                     : b == Opus.BANDWIDTH_SUPERWIDEBAND ? "swb"
                     : b == Opus.BANDWIDTH_WIDEBAND ? "wb"
                     : b == Opus.BANDWIDTH_MEDIUMBAND ? "mb"
-                    : "nb") +
-                ", bitrate " + Opus.encoder_get_bitrate(encoder) + ", DTX " +
-                Opus.encoder_get_dtx(encoder) + ", FEC " + useFecConfig);
-                // TODO Add Opus.encoder_get_inband_fec().
+                    : "nb")
+                + ", bitrate " + Opus.encoder_get_bitrate(encoder)
+                + ", DTX " + Opus.encoder_get_dtx(encoder)
+                + ", FEC " + Opus.encoder_get_inband_fec(encoder));
         }
     }
 
@@ -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.