diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
index d0ecb3d..29b6bad 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
@@ -67,6 +67,7 @@ namespace Banshee.MediaProfiles
 
         private XmlDocument document;
         private List<Profile> profiles;
+        private List<string> lossless_codecs = new List<string> {"flac", "wav"};
         private Dictionary<string, PipelineVariable> preset_variables;
 
         public event TestProfileHandler TestProfile;
@@ -300,6 +301,13 @@ namespace Banshee.MediaProfiles
             return null;
         }
 
+        public bool IsLossless (string mimetype)
+        {
+            Initialize ();
+            mimetype = GetExtensionForMimeType(mimetype);
+            return lossless_codecs.Contains(mimetype);
+        }
+
         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..7db5d21 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
@@ -181,6 +181,11 @@ namespace Banshee.Dap
             Properties.Set<System.Reflection.Assembly> ("ActiveSourceUIResource.Assembly", System.Reflection.Assembly.GetExecutingAssembly ());
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
 
+            if (acceptable_mimetypes == null) {
+                acceptable_mimetypes = HasMediaCapabilities ? MediaCapabilities.PlaybackMimeTypes : null;
+                acceptable_mimetypes = acceptable_mimetypes ?? new string [] { "taglib/mp3" };
+            }
+
             sync = new DapSync (this);
             dap_info_bar = new DapInfoBar (this);
             Properties.Set<Gtk.Widget> ("Nereid.SourceContents.FooterWidget", dap_info_bar);
@@ -199,11 +204,6 @@ namespace Banshee.Dap
             AddDapProperty (Catalog.GetString ("Product"), device.Product);
             AddDapProperty (Catalog.GetString ("Vendor"), device.Vendor);
 
-            if (acceptable_mimetypes == null) {
-                acceptable_mimetypes = HasMediaCapabilities ? MediaCapabilities.PlaybackMimeTypes : null;
-                acceptable_mimetypes = acceptable_mimetypes ?? new string [] { "taglib/mp3" };
-            }
-
             AddChildSource (music_group_source = new MusicGroupSource (this));
 
             if (SupportsVideo) {
@@ -334,9 +334,14 @@ namespace Banshee.Dap
 
         protected bool TrackNeedsTranscoding (TrackInfo track)
         {
+            string track_mimetype = ServiceManager.MediaProfileManager.GetExtensionForMimeType (track.MimeType);
+
+            if (sync.ConvertLossless && 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..df7babe 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> convert_lossless;
         private Section sync_prefs;
         //private PreferenceBase manually_manage_pref;//, auto_sync_pref;
         private SchemaPreference<bool> auto_sync_pref;
+        private SchemaPreference<bool> convert_lossless_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 ConvertLossless {
+            get { return convert_lossless.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.")
             );
 
+            convert_lossless = dap.CreateSchema<bool> (conf_ns, "convert_lossless", true,
+                Catalog.GetString ("Convert lossless files when synchronizing"),
+                Catalog.GetString ("To save space on the player, convert lossless files to the preferred format.")
+            );
+
             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;
+
+            convert_lossless_pref = sync_prefs.Add (convert_lossless);
+            convert_lossless_pref.ValueChanged += OnConvertLosslessChanged;
         }
 
         private bool dap_loaded = false;
@@ -215,9 +229,26 @@ namespace Banshee.Dap
         private void UpdateSensitivities ()
         {
             bool enabled = Enabled;
+            bool supports_lossless = false;
+
             if (!enabled && auto_sync_pref.Value) {
                 auto_sync_pref.Value = false;
             }
+
+            if (dap.AcceptableMimeTypes != null) {
+                foreach (string mimetype in dap.AcceptableMimeTypes) {
+                    if (ServiceManager.MediaProfileManager.IsLossless (mimetype)) {
+                        supports_lossless = true;
+                        break;
+                    }
+                }
+            }
+
+            if (!supports_lossless) {
+                convert_lossless_pref.Value = true;
+                convert_lossless_pref.Sensitive = false;
+            }
+
             auto_sync_pref.Sensitive = enabled;
         }
 
@@ -226,6 +257,10 @@ namespace Banshee.Dap
             MaybeTriggerAutoSync ();
         }
 
+        private void OnConvertLosslessChanged (Root preference)
+        {
+        }
+
         private void OnDapChanged (Source sender, TrackEventArgs args)
         {
             if (!AutoSync && dap_loaded && !Syncing) {
