diff --git a/src/org/jitsi/impl/neomedia/MediaServiceImpl.java b/src/org/jitsi/impl/neomedia/MediaServiceImpl.java
index c692b2ae8d2b5171955211cf4a8ed54e1d73d988..1835f133c55480ef110707727e16b8599f4b3c29 100644
--- a/src/org/jitsi/impl/neomedia/MediaServiceImpl.java
+++ b/src/org/jitsi/impl/neomedia/MediaServiceImpl.java
@@ -111,6 +111,12 @@ public class MediaServiceImpl
      */
     private static boolean postInitializeOnce;
 
+    /**
+     * The prefix that is used to store configuration for encodings preference.
+     */
+    private static final String ENCODING_CONFIG_PROP_PREFIX
+        = "net.java.sip.communicator.impl.neomedia.codec.EncodingConfiguration";
+
     /**
      * The <tt>CaptureDevice</tt> user choices such as the default audio and
      * video capture devices.
@@ -141,11 +147,10 @@ public void propertyChange(PropertyChangeEvent event)
         = new ArrayList<MediaDeviceImpl>();
 
     /**
-     * The format-related user choices such as the enabled and disabled codecs
-     * and the order of their preference.
+     * The {@link EncodingConfiguration} instance that holds the current (global)
+     * list of formats and their preference.
      */
-    private final EncodingConfiguration encodingConfiguration
-        = new EncodingConfigurationImpl();
+    private final EncodingConfiguration currentEncodingConfiguration;
 
     /**
      * The <tt>MediaFormatFactory</tt> through which <tt>MediaFormat</tt>
@@ -235,6 +240,10 @@ public MediaServiceImpl()
                 postInitializeOnce(this);
             }
         }
+
+        currentEncodingConfiguration = new EncodingConfigurationImpl();
+        currentEncodingConfiguration.loadFormatPreferencesFromConfig(
+                ENCODING_CONFIG_PROP_PREFIX);
     }
 
     /**
@@ -581,15 +590,16 @@ public List<MediaDevice> getDevices(
     }
 
     /**
-     * Gets the format-related user choices such as the enabled and disabled
-     * codecs and the order of their preference.
+     * Returns the current encoding configuration -- the instance that contains
+     * the global settings. Note that any changes made to this instance will
+     * have immediate effect on the configuration.
      *
-     * @return the format-related user choices such as the enabled and disabled
-     * codecs and the order of their preference
+     * @return the current encoding configuration -- the instance that contains
+     * the global settings.
      */
-    public EncodingConfiguration getEncodingConfiguration()
+    public EncodingConfiguration getCurrentEncodingConfiguration()
     {
-        return encodingConfiguration;
+        return currentEncodingConfiguration;
     }
 
     /**
@@ -1514,7 +1524,7 @@ private static void setupFMJ()
      *
      * @return a new {@link EncodingConfiguration} instance.
      */
-    public EncodingConfiguration getNewEncodingConfiguration()
+    public EncodingConfiguration createEmptyEncodingConfiguration()
     {
         return new EncodingConfigurationImpl();
     }
diff --git a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java
index 358875d4ac266da419cb6acbeb9b7a854ede1f8c..071b8896555a8d51a03e580549309efad76363c4 100644
--- a/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java
+++ b/src/org/jitsi/impl/neomedia/codec/EncodingConfigurationImpl.java
@@ -13,15 +13,12 @@
 
 import org.jitsi.impl.neomedia.*;
 import org.jitsi.impl.neomedia.format.*;
-import org.jitsi.service.configuration.*;
 import org.jitsi.service.libjitsi.*;
-import org.jitsi.service.neomedia.*;
 import org.jitsi.service.neomedia.codec.*;
 import org.jitsi.service.neomedia.format.*;
-import org.jitsi.util.*;
 
 /**
- * Simple configuration of encoding priorities.
+ * Configuration of encoding priorities.
  *
  * @author Damian Minkov
  * @author Lyubomir Marinov
@@ -29,12 +26,6 @@
  */
 public class EncodingConfigurationImpl extends EncodingConfiguration
 {
-    /**
-     * The SDP preference property.
-     */
-    private static final String PROP_SDP_PREFERENCE
-        = "net.java.sip.communicator.impl.neomedia.codec.EncodingConfiguration";
-
     /**
      * The indicator which determines whether the G.729 codec is enabled.
      *
@@ -89,12 +80,12 @@ public class EncodingConfigurationImpl extends EncodingConfiguration
             "org.jitsi.impl.neomedia.codec.video.h264.Packetizer",
             "org.jitsi.impl.neomedia.codec.video.SwScaler"
         };
-    
+
     /**
      * Whether custom codecs have been registered with JFM
      */
     private static boolean codecsRegistered = false;
-    
+
     /**
      * Whether custom packages have been registered with JFM
      */
@@ -111,7 +102,7 @@ public class EncodingConfigurationImpl extends EncodingConfiguration
                     "net.java.sip.communicator.impl.neomedia.jmfext",
                     "net.sf.fmj"
                 };
-    
+
     /**
      * Constructor. Loads the hard-coded default preferences and registers
      * packages and codecs with JMF.
@@ -119,7 +110,7 @@ public class EncodingConfigurationImpl extends EncodingConfiguration
     public EncodingConfigurationImpl()
     {
         initializeFormatPreferences();
-        
+
         registerCustomPackages();
         registerCustomCodecs();
     }
@@ -202,8 +193,9 @@ public void setPriority(MediaFormat encoding, int priority,
             String encodingEncoding = encoding.getEncoding();
 
             // save the settings
+            //TODO: remove the whole method
             LibJitsi.getConfigurationService().setProperty(
-                    PROP_SDP_PREFERENCE
+                    "net.java.sip.communicator.impl.neomedia.codec.EncodingConfiguration"
                         + "."
                         + getEncodingPreferenceKey(encoding),
                     priority);
@@ -426,12 +418,5 @@ private void registerCustomPackages()
         
         packagesRegistered = true;
     }
-    
-    /**
-     * Loads the "global" preferences.
-     */
-    public void loadConfig()
-    {
-        loadFormatPreferencesFromConfig(PROP_SDP_PREFERENCE);
-    }
+
 }
diff --git a/src/org/jitsi/impl/neomedia/device/MediaDeviceImpl.java b/src/org/jitsi/impl/neomedia/device/MediaDeviceImpl.java
index b5a24b4b52d19257bb9a19e0e1b7d12a86b4b196..f76813eb8f50e2dcaef5f91ae8902b2a644967e6 100644
--- a/src/org/jitsi/impl/neomedia/device/MediaDeviceImpl.java
+++ b/src/org/jitsi/impl/neomedia/device/MediaDeviceImpl.java
@@ -16,7 +16,6 @@
 import javax.media.protocol.*;
 
 import org.jitsi.impl.neomedia.*;
-import org.jitsi.impl.neomedia.codec.*;
 import org.jitsi.impl.neomedia.format.*;
 import org.jitsi.impl.neomedia.jmfext.media.protocol.*;
 import org.jitsi.impl.neomedia.protocol.*;
@@ -332,8 +331,8 @@ public MediaType getMediaType()
 
     /**
      * Gets the list of <tt>MediaFormat</tt>s supported by this
-     * <tt>MediaDevice</tt>. Uses the <tt>EncodingConfiguration</tt> from the
-     * media service, which contains all known encodings.
+     * <tt>MediaDevice</tt>. Uses the current <tt>EncodingConfiguration</tt>
+     * from the media service (i.e. the global configuration).
      *
      * @param sendPreset the preset used to set some of the format parameters,
      * used for video and settings.
@@ -348,7 +347,7 @@ public List<MediaFormat> getSupportedFormats(
     {
         return getSupportedFormats(sendPreset, receivePreset,
                 NeomediaServiceUtils.getMediaServiceImpl()
-                    .getEncodingConfiguration());
+                    .getCurrentEncodingConfiguration());
     }
     
     /**
@@ -366,7 +365,7 @@ public List<MediaFormat> getSupportedFormats(
     {
             return getSupportedFormats(null, null, encodingConfiguration);
     }
-    
+
     /**
      * Gets the list of <tt>MediaFormat</tt>s supported by this
      * <tt>MediaDevice</tt> and enabled in <tt>encodingConfiguration</tt>.
@@ -388,14 +387,14 @@ public List<MediaFormat> getSupportedFormats(
     {
         MediaServiceImpl mediaServiceImpl
             = NeomediaServiceUtils.getMediaServiceImpl();
-        MediaFormat[] supportedEncodings
-            = encodingConfiguration.getSupportedEncodings(getMediaType());
+        MediaFormat[] enabledEncodings
+            = encodingConfiguration.getEnabledEncodings(getMediaType());
         List<MediaFormat> supportedFormats = new ArrayList<MediaFormat>();
 
         // If there is preset, check and set the format attributes where needed.
-        if (supportedEncodings != null)
+        if (enabledEncodings != null)
         {
-            for (MediaFormat f : supportedEncodings)
+            for (MediaFormat f : enabledEncodings)
             {
                 if("h264".equalsIgnoreCase(f.getEncoding()))
                 {
diff --git a/src/org/jitsi/impl/neomedia/format/MediaFormatFactoryImpl.java b/src/org/jitsi/impl/neomedia/format/MediaFormatFactoryImpl.java
index 4923402ea294bc85bc8c1ce2e5a8fd8c8e98139b..f9d93d23e18a45bc9b4668fc34fcabaaed482fe1 100644
--- a/src/org/jitsi/impl/neomedia/format/MediaFormatFactoryImpl.java
+++ b/src/org/jitsi/impl/neomedia/format/MediaFormatFactoryImpl.java
@@ -12,7 +12,6 @@
 import javax.media.format.*;
 
 import org.jitsi.impl.neomedia.*;
-import org.jitsi.impl.neomedia.codec.*;
 import org.jitsi.service.neomedia.*;
 import org.jitsi.service.neomedia.codec.*;
 import org.jitsi.service.neomedia.format.*;
@@ -469,10 +468,10 @@ private List<MediaFormat> getSupportedMediaFormats(
     {
         EncodingConfiguration encodingConfiguration
             = NeomediaServiceUtils.getMediaServiceImpl()
-                    .getEncodingConfiguration();
+                    .getCurrentEncodingConfiguration();
         List<MediaFormat> supportedMediaFormats
             = getMatchingMediaFormats(
-                encodingConfiguration.getAvailableEncodings(
+                encodingConfiguration.getAllEncodings(
                         MediaType.AUDIO),
                 encoding,
                 clockRate);
@@ -480,7 +479,7 @@ private List<MediaFormat> getSupportedMediaFormats(
         if (supportedMediaFormats.isEmpty())
             supportedMediaFormats
                 = getMatchingMediaFormats(
-                    encodingConfiguration.getAvailableEncodings(
+                    encodingConfiguration.getAllEncodings(
                             MediaType.VIDEO),
                     encoding,
                     clockRate);
diff --git a/src/org/jitsi/service/neomedia/MediaConfigurationService.java b/src/org/jitsi/service/neomedia/MediaConfigurationService.java
index ba6dfc5633d0492a82900ff2d0464f910ae8b324..112964f5bfcf2c265629dfa47995f25e60cab12c 100644
--- a/src/org/jitsi/service/neomedia/MediaConfigurationService.java
+++ b/src/org/jitsi/service/neomedia/MediaConfigurationService.java
@@ -46,10 +46,11 @@ public interface MediaConfigurationService
     public Component createEncodingControls(MediaType mediaType,
             EncodingConfiguration encodingConfiguration,
             boolean autoUpdateConfig);
-    
+
     /**
-     * Returns a new <tt>EncodingConfiguration</tt> instance
-     * @return a new <tt>EncodingConfiguration</tt> instance
+     * Returns the <tt>MediaService</tt> instance
+     *
+     * @return the <tt>MediaService</tt> instance
      */
-    public EncodingConfiguration getNewEncodingConfiguration();
+    public MediaService getMediaService();
 }
diff --git a/src/org/jitsi/service/neomedia/MediaService.java b/src/org/jitsi/service/neomedia/MediaService.java
index 72aa01e85fe6f9f4ae4d8c595683d599ab21b53e..d99775434ae2a44acc2d6d10f61a59a59f079844 100644
--- a/src/org/jitsi/service/neomedia/MediaService.java
+++ b/src/org/jitsi/service/neomedia/MediaService.java
@@ -318,9 +318,18 @@ public java.awt.Point getOriginForDesktopStreamingDevice(
      * notified about changes in the values of the properties of this instance
      */
     public void removePropertyChangeListener(PropertyChangeListener listener);
-    
+
     /**
      * Returns a new <tt>EncodingConfiguration</tt> instance.
+     *
+     * @return a new <tt>EncodingConfiguration</tt> instance.
+     */
+    public EncodingConfiguration createEmptyEncodingConfiguration();
+
+    /**
+     * Returns the current <tt>EncodingConfiguration</tt> instance.
+     *
+     * @return the current <tt>EncodingConfiguration</tt> instance.
      */
-    public EncodingConfiguration getNewEncodingConfiguration();
+    public EncodingConfiguration getCurrentEncodingConfiguration();
 }
diff --git a/src/org/jitsi/service/neomedia/codec/EncodingConfiguration.java b/src/org/jitsi/service/neomedia/codec/EncodingConfiguration.java
index bf8fa705f739b6cd95bcbe6cbee115bd9f66dd42..38e71960f5377993589dd913632486c2269d258e 100644
--- a/src/org/jitsi/service/neomedia/codec/EncodingConfiguration.java
+++ b/src/org/jitsi/service/neomedia/codec/EncodingConfiguration.java
@@ -33,7 +33,7 @@ public abstract class EncodingConfiguration
 
     /**
      * The <tt>Comparator</tt> which sorts the sets according to the settings in
-     * encodingPreferences.
+     * <tt>encodingPreferences</tt>.
      */
     private final Comparator<MediaFormat> encodingComparator
         = new Comparator<MediaFormat>()
@@ -95,7 +95,7 @@ private Set<MediaFormat> updateSupportedEncodings(MediaType type)
         Set<MediaFormat> enabled
             = new TreeSet<MediaFormat>(encodingComparator);
 
-        for (MediaFormat format : getAvailableEncodings(type))
+        for (MediaFormat format : getAllEncodings(type))
         {
             if (getPriority(format) > 0)
             {
@@ -168,7 +168,8 @@ public void setPriority(MediaFormat encoding, int priority)
 
         updateSupportedEncodings();
     }
-    
+
+    //TODO: remove
     /**
      * Sets <tt>priority</tt> as the preference associated with
      * <tt>encoding</tt> (with a call to <tt>setPriority(MediaFormat, int)</tt>
@@ -204,28 +205,31 @@ public int getPriority(MediaFormat encoding)
 
     
     /**
-     * Get the available encodings for a specific <tt>MediaType</tt>.
+     * Returns all the available encodings for a specific <tt>MediaType</tt>.
+     * This includes disabled ones (ones with priority 0).
      *
-     * @param type the <tt>MediaType</tt> we would like to know its available
-     * encodings
+     * @param type the <tt>MediaType</tt> we would like to know the available
+     * encodings of
      * @return array of <tt>MediaFormat</tt> supported for the
      * <tt>MediaType</tt>
      */
-    public MediaFormat[] getAvailableEncodings(MediaType type)
+    public MediaFormat[] getAllEncodings(MediaType type)
     {
         return MediaUtils.getMediaFormats(type);
     }
 
     /**
-     * Gets the supported <tt>MediaFormat</tt>s i.e. the enabled available
-     * <tt>MediaFormat</tt>s sorted in decreasing priority.
+     * Returns the supported <tt>MediaFormat</tt>s i.e. the enabled available
+     * <tt>MediaFormat</tt>s, sorted in decreasing priority. Returns only the
+     * formats of type <tt>type</tt>.
      *
      * @param type the <tt>MediaType</tt> of the supported <tt>MediaFormat</tt>s
      * to get
      * @return an array of the supported <tt>MediaFormat</tt>s i.e. the enabled
-     * available <tt>MediaFormat</tt>s sorted in decreasing priority
+     * available <tt>MediaFormat</tt>s sorted in decreasing priority. Returns
+     * only the formats of type <tt>type</tt>.
      */
-    public MediaFormat[] getSupportedEncodings(MediaType type)
+    public MediaFormat[] getEnabledEncodings(MediaType type)
     {
         Set<MediaFormat> supportedEncodings;
 
@@ -335,12 +339,7 @@ protected String getEncodingPreferenceKey(MediaFormat encoding)
     {
         return encoding.getEncoding() + "/" + encoding.getClockRateString();
     }
-    
-    /**
-     * Loads configuration.
-     */
-    public abstract void loadConfig();
-    
+
     /**
      * Parses the properties under <tt>prefix</tt> and loads them.
      * 
@@ -349,9 +348,8 @@ protected String getEncodingPreferenceKey(MediaFormat encoding)
     public void loadFormatPreferencesFromConfig(String prefix)
     {
         ConfigurationService cfg = LibJitsi.getConfigurationService();
-        
         Map<String, String> properties = new HashMap<String, String>();
-        
+
         if (cfg != null)
         {
             for (String pName : cfg.getPropertyNamesByPrefix(prefix, false))
@@ -362,23 +360,77 @@ public void loadFormatPreferencesFromConfig(String prefix)
             loadProperties(properties);
         }
     }
-        
+
+    /**
+     * Stores the format preferences in this instance in the given <tt>Map</tt>,
+     * using <tt>prefix</tt> as a prefix to the key.
+     * Entries in the format (prefix+formatName, formatPriority) will be added
+     * to <tt>properties</tt>, one for each available format.
+     * Note that a "." is not automatically added to <tt>prefix</tt>.
+     *
+     * @param properties The <tt>Map</tt> where entries will be added.
+     * @param prefix The prefix to use.
+     */
+    public void storeProperties(Map<String, String> properties, String prefix)
+    {
+        for(MediaType mediaType : MediaType.values())
+        {
+            for(MediaFormat mediaFormat: getAllEncodings(mediaType))
+            {
+                properties.put(prefix+getEncodingPreferenceKey(mediaFormat),
+                                "" + getPriority(mediaFormat));
+            }
+        }
+    }
+
+    /**
+     * Stores the format preferecens in this instance in the given <tt>Map</tt>.
+     * Entries in the format (formatName, formatPriority) will be added
+     * to <tt>properties</tt>, one for each available format.
+     *
+     * @param properties The <tt>Map</tt> where entries will be added.
+     */
+    public void storeProperties(Map<String,String> properties)
+    {
+        storeProperties(properties, "");
+    }
+
+    /**
+     * Parses a <tt>Map<String, String></tt> and updates the format preferences
+     * according to it. Does not use a prefix.
+     *
+     * @param properties The <tt>Map</tt> to parse.
+     *
+     * @see EncodingConfiguration#loadProperties(java.util.Map, String)
+     */
+    public void loadProperties(Map<String, String> properties)
+    {
+        loadProperties(properties, "");
+    }
     
    /**
     * Parses a <tt>Map<String, String></tt> and updates the format preferences
-    * according to it.
-    * The map is expected to have entries in the form of
-    * (formatString, preference).
+    * according to it. For each entry, if it's key does not begin with
+    * <tt>prefix</tt>, its ignored. If the key begins with <tt>prefix</tt>,
+    * look for an encoding name after the last ".", and interpret the key
+    * value as preference.
+    *
     * @param properties The <tt>Map</tt> to parse.
+    * @param prefix The prefix to use.
     */
-    public void loadProperties(Map<String, String> properties)
+    public void loadProperties(Map<String, String> properties, String prefix)
     {
-
-            for (String pName
-                    : properties.keySet())
+            for(Map.Entry<String, String> entry : properties.entrySet())
             {
-                String prefStr = properties.get(pName);
+                String pName = entry.getKey();
+                String prefStr = entry.getValue();
                 String fmtName;
+
+                if(!pName.startsWith(prefix))
+                {
+                    continue;
+                }
+
                 if(pName.contains("."))
                 {
                     fmtName = pName.substring(pName.lastIndexOf('.') + 1);
@@ -387,7 +439,7 @@ public void loadProperties(Map<String, String> properties)
                 {
                     fmtName = pName;
                 }
-                
+
                 // legacy
                 if (fmtName.contains("sdp"))
                 {
@@ -445,28 +497,17 @@ public void loadProperties(Map<String, String> properties)
         // preference.
         updateSupportedEncodings();
     }
-    
-    
+
     /**
-     * Returns a <tt>Map<String, String></tt> that holds the properties
-     * corresponding to the current format preferences
-     * @return A <tt>Map<String, String></tt> that holds the properties
-     * corresponding to the current format preferences.
+     * Load the preferences stored in <tt>encodingConfiguration</tt>
+     *
+     * @param encodingConfiguration the <tt>EncodingConfiguration</tt> to load
+     *                              preferences from.
      */
-    public Map<String, String> getEncodingProperties()
+    public void loadEncodingConfiguration(EncodingConfiguration encodingConfiguration)
     {
-        Map<String, String> encodingProperties = new HashMap<String, String>();
-        for(MediaFormat mf : getAvailableEncodings(MediaType.AUDIO))
-        {
-            encodingProperties.put(getEncodingPreferenceKey(mf),
-                                   "" + getPriority(mf));
-        }
-        for(MediaFormat mf : getAvailableEncodings(MediaType.VIDEO))
-        {
-            encodingProperties.put(getEncodingPreferenceKey(mf),
-                                   "" + getPriority(mf));
-        }
-        return encodingProperties;
+        Map<String, String> properties = new HashMap<String, String>();
+        encodingConfiguration.storeProperties(properties);
+        loadProperties(properties);
     }
-    
 }