diff --git a/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs b/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
index 44cf19d..4783769 100644
--- a/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
+++ b/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
@@ -112,12 +112,18 @@ namespace Banshee.Streaming
                 track.MediaAttributes |= TrackMediaAttributes.Podcast;
             }
 
+            // Treat as audiobook if first genre set correctly
+            if (file.Tag.FirstGenre == "Audiobook" || file.Tag.FirstGenre == "AudioBook") {
+                track.MediaAttributes |= TrackMediaAttributes.AudioBook;
+            }
+
             // TODO: Actually figure out, if possible at the tag/file level, if
             // the file is actual music, podcast, audiobook, movie, tv show, etc.
             // For now just assume that if it's only audio and not podcast, it's
             // music, since that's what we've just historically assumed on any media type
             if (!track.HasAttribute (TrackMediaAttributes.VideoStream) &&
-                !track.HasAttribute (TrackMediaAttributes.Podcast)) {
+                !track.HasAttribute (TrackMediaAttributes.Podcast) &&
+                !track.HasAttribute (TrackMediaAttributes.AudioBook)) {
                 track.MediaAttributes |= TrackMediaAttributes.Music;
             } else {
                 // If it was already set, unset it
diff --git a/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs b/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
index 25ba9c6..56188ca 100644
--- a/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
@@ -79,9 +79,12 @@ namespace Banshee.Library
 
         protected static PrimarySource DefaultTrackPrimarySourceChooser (DatabaseTrackInfo track)
         {
-            if ((track.MediaAttributes & TrackMediaAttributes.VideoStream) != 0) {
-                return ServiceManager.SourceManager.VideoLibrary;
+            PrimarySource responsibleSource = ServiceManager.SourceManager.GetResponsibleSource (track) as PrimarySource;
+            if (responsibleSource != null) {
+                return responsibleSource;
             } else {
+                // Fallback (we could safeley remove this as long as 'GetResponsibleSource' returns a
+                // LibrarySource in any case)
                 return ServiceManager.SourceManager.MusicLibrary;
             }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
index 7a4a0fc..d31f515 100644
--- a/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
@@ -102,9 +102,9 @@ namespace Banshee.Library
         }
 
         private TrackMediaAttributes media_types;
-        protected TrackMediaAttributes MediaTypes {
+        public TrackMediaAttributes MediaTypes {
             get { return media_types; }
-            set { media_types = value; }
+            protected set { media_types = value; }
         }
 
         private TrackMediaAttributes not_media_types = TrackMediaAttributes.None;
diff --git a/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs b/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
index bcb556d..8178a1e 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
@@ -36,6 +36,8 @@ using Hyena;
 
 using Banshee.ServiceStack;
 using Banshee.Library;
+using Banshee.Collection;
+using Banshee.Collection.Database;
 
 namespace Banshee.Sources
 {
@@ -260,6 +262,30 @@ namespace Banshee.Sources
             });
         }
 
+        public LibrarySource GetResponsibleSource (DatabaseTrackInfo track)
+        {
+            // As mediatype AudioStream seems to be set on all audio files, we don't want to look at it
+            TrackMediaAttributes trackAttributes = track.MediaAttributes;
+            trackAttributes &= ~TrackMediaAttributes.AudioStream;
+
+            foreach (Source src in Sources) {
+                LibrarySource responsibleSource = src as LibrarySource;
+                if (responsibleSource != null) {
+                    // For compatibility reasons we just return separate sources for
+                    // VideoStream and AudioBook, all others returning Music like before
+                    if ((responsibleSource.MediaTypes & trackAttributes & TrackMediaAttributes.AudioBook) != 0) {
+                        return responsibleSource;
+                    }
+                    else if ((responsibleSource.MediaTypes & trackAttributes & TrackMediaAttributes.VideoStream) != 0) {
+                        return responsibleSource;
+                    }
+                }
+            }
+
+            // Fallback
+            return ServiceManager.SourceManager.MusicLibrary;
+        }
+
         public void RemoveSource(Type type)
         {
             Queue<Source> remove_queue = new Queue<Source>();
diff --git a/src/Extensions/Banshee.Audiobook/Banshee.Audiobook/AudiobookLibrarySource.cs b/src/Extensions/Banshee.Audiobook/Banshee.Audiobook/AudiobookLibrarySource.cs
index 9335fc0..db2c7cd 100644
--- a/src/Extensions/Banshee.Audiobook/Banshee.Audiobook/AudiobookLibrarySource.cs
+++ b/src/Extensions/Banshee.Audiobook/Banshee.Audiobook/AudiobookLibrarySource.cs
@@ -392,6 +392,10 @@ namespace Banshee.Audiobook
             get { return false; }
         }
 
+        public override bool HasCopyOnImport {
+            get { return true; }
+        }
+
         public override IEnumerable<SmartPlaylistDefinition> DefaultSmartPlaylists {
             get { yield break; }
         }
