diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
index d0ecb3d..3b80cd0 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
@@ -67,6 +67,8 @@ namespace Banshee.MediaProfiles
 
         private XmlDocument document;
         private List<Profile> profiles;
+        // There is no audio/ on the front of the mimetypes for some reason.
+        private List<string> lossless_codecs = new List<string> {"flac", "x-wv", "x-monkeys-audio"};
         private Dictionary<string, PipelineVariable> preset_variables;
 
         public event TestProfileHandler TestProfile;
@@ -86,8 +88,10 @@ namespace Banshee.MediaProfiles
             uint timer = Hyena.Log.DebugTimerStart ();
 
             profiles = new List<Profile> ();
+
             preset_variables = new Dictionary<string, PipelineVariable> ();
 
+
             string path = Hyena.Paths.GetInstalledDataDirectory ("audio-profiles");
             if(File.Exists(path)) {
                 LoadFromFile(path);
@@ -300,6 +304,14 @@ namespace Banshee.MediaProfiles
             return null;
         }
 
+        public bool IsLossless (string mimetype)
+        {
+            if (lossless_codecs.Contains(mimetype)) {
+                return true;
+            }
+            return false;
+        }
+
         public IEnumerator<Profile> GetEnumerator()
         {
             Initialize ();
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
index fa93b70..1e24518 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
@@ -334,9 +334,14 @@ namespace Banshee.Dap
 
         protected bool TrackNeedsTranscoding (TrackInfo track)
         {
+            string track_mimetype = ServiceManager.MediaProfileManager.GetExtensionForMimeType (track.MimeType);
+
+            if (!sync.PreferQuality && ServiceManager.MediaProfileManager.IsLossless (track_mimetype)) {
+                return true;
+            }
+
             foreach (string mimetype in AcceptableMimeTypes) {
-                if (ServiceManager.MediaProfileManager.GetExtensionForMimeType (track.MimeType) ==
-                    ServiceManager.MediaProfileManager.GetExtensionForMimeType (mimetype)) {
+                if (track_mimetype == ServiceManager.MediaProfileManager.GetExtensionForMimeType (mimetype)) {
                     return false;
                 }
             }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
index a2d401c..1c0a05a 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
@@ -58,9 +58,11 @@ namespace Banshee.Dap
         private List<DapLibrarySync> library_syncs = new List<DapLibrarySync> ();
         internal SchemaEntry<bool> LegacyManuallyManage;
         private SchemaEntry<bool> auto_sync;
+        private SchemaEntry<bool> prefer_quality;
         private Section sync_prefs;
         //private PreferenceBase manually_manage_pref;//, auto_sync_pref;
         private SchemaPreference<bool> auto_sync_pref;
+        private SchemaPreference<bool> prefer_quality_pref;
         private List<Section> pref_sections = new List<Section> ();
         private RateLimiter sync_limiter;
 
@@ -90,6 +92,10 @@ namespace Banshee.Dap
             get { return auto_sync.Get (); }
         }
 
+        public bool PreferQuality {
+            get { return prefer_quality.Get (); }
+        }
+
         public IEnumerable<Section> PreferenceSections {
             get { return pref_sections; }
         }
@@ -138,6 +144,11 @@ namespace Banshee.Dap
                 Catalog.GetString ("Begin synchronizing the device as soon as the device is plugged in or the libraries change.")
             );
 
+            prefer_quality = dap.CreateSchema<bool> (conf_ns, "prefer_quality", false,
+                Catalog.GetString ("Don't convert lossless formats"),
+                Catalog.GetString ("Leave lossless formats as they are, despite the extra file size.")
+            );
+
             sync_prefs = new Section ("sync", Catalog.GetString ("Sync Preferences"), 0);
             pref_sections.Add (sync_prefs);
 
@@ -145,6 +156,9 @@ namespace Banshee.Dap
 
             auto_sync_pref = sync_prefs.Add (auto_sync);
             auto_sync_pref.ValueChanged += OnAutoSyncChanged;
+
+            prefer_quality_pref = sync_prefs.Add (prefer_quality);
+            prefer_quality_pref.ValueChanged += OnPreferQualityChanged;
         }
 
         private bool dap_loaded = false;
@@ -226,6 +240,10 @@ namespace Banshee.Dap
             MaybeTriggerAutoSync ();
         }
 
+        private void OnPreferQualityChanged (Root preference)
+        {
+        }
+
         private void OnDapChanged (Source sender, TrackEventArgs args)
         {
             if (!AutoSync && dap_loaded && !Syncing) {
