diff --git a/src/org/sflphone/service/OpenSlParams.java b/src/org/sflphone/service/OpenSlParams.java
new file mode 100644
index 0000000..7701ab3
--- /dev/null
+++ b/src/org/sflphone/service/OpenSlParams.java
@@ -0,0 +1,86 @@
+package org.sflphone.service;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.media.AudioManager;
+import android.os.Build;
+import android.util.Log;
+
+/**
+ * This class illustrates how to query OpenSL config parameters on Jelly Bean MR1 while maintaining
+ * backward compatibility with older versions of Android. The trick is to place the new API calls in
+ * an inner class that will only be loaded if we're running on JB MR1 or later.
+ */
+public abstract class OpenSlParams {
+
+  /**
+   * @return The recommended sample rate in Hz.
+   */
+  public abstract int getSampleRate();
+
+  /**
+   * @return The recommended buffer size in frames.
+   */
+  public abstract int getBufferSize();
+
+  /**
+   * @param context, e.g., the current activity.
+   * @return OpenSlParams instance for the given context.
+   */
+  public static OpenSlParams createInstance(Context context) {
+    return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
+        ? new JellyBeanMr1OpenSlParams(context)
+        : new DefaultOpenSlParams();
+  }
+
+  private OpenSlParams() {
+    // Not meant to be instantiated except here.
+  }
+
+  // Implementation for Jelly Bean MR1 or later.
+  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
+  private static class JellyBeanMr1OpenSlParams extends OpenSlParams {
+
+    private final int sampleRate;
+    private final int bufferSize;
+
+    private JellyBeanMr1OpenSlParams(Context context) {
+      AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+      // Provide default values in case config lookup fails.
+      int sr = 44100;
+      int bs = 64;
+      try {
+        // If possible, query the native sample rate and buffer size.
+        sr = Integer.parseInt(am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
+        bs = Integer.parseInt(am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER));
+      } catch (NumberFormatException e) {
+        Log.w(getClass().getName(), "Failed to read native OpenSL config: " + e);
+      }
+      sampleRate = sr;
+      bufferSize = bs;
+    }
+
+    @Override
+    public int getSampleRate() {
+      return sampleRate;
+    }
+
+    @Override
+    public int getBufferSize() {
+      return bufferSize;
+    }
+  };
+
+  // Default factory for Jelly Bean or older.
+  private static class DefaultOpenSlParams extends OpenSlParams {
+    @Override
+    public int getSampleRate() {
+      return 44100;
+    }
+
+    @Override
+    public int getBufferSize() {
+      return 64;
+    }
+  };
+}
