[banshee] Remove 137K of trailing whitespace



commit 57150603f33424e2da5de9f9728f87f9807ccacc
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Fri Nov 13 20:28:25 2009 -0800

    Remove 137K of trailing whitespace
    
    Command used:
    find src/ -type f -name *.cs -exec sed -i 's/ *$//' '{}' ';'

 .../Banshee.GStreamer/AudioCdRipper.cs             |   84 ++--
 .../Banshee.GStreamer/BpmDetector.cs               |   46 +-
 .../Banshee.GStreamer/GstErrors.cs                 |   16 +-
 .../Banshee.GStreamer/PlayerEngine.cs              |  244 +++++-----
 .../Banshee.GStreamer/Banshee.GStreamer/Service.cs |   84 ++--
 .../Banshee.GStreamer/Banshee.GStreamer/TagList.cs |   42 +-
 .../Banshee.GStreamer/Transcoder.cs                |   48 +-
 .../Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs  |   34 +-
 .../DefaultApplicationHelper.cs                    |   10 +-
 .../Banshee.GnomeBackend/DiscDuplicator.cs         |   14 +-
 .../GConfConfigurationClient.cs                    |   32 +-
 .../GnomeScreensaverManager.cs                     |   10 +-
 .../Banshee.GnomeBackend/GnomeService.cs           |   16 +-
 .../Banshee.Hal/Banshee.HalBackend/BlockDevice.cs  |   16 +-
 .../Banshee.Hal/Banshee.HalBackend/CdromDevice.cs  |   20 +-
 .../Banshee.Hal/Banshee.HalBackend/Device.cs       |   28 +-
 .../Banshee.Hal/Banshee.HalBackend/DiscVolume.cs   |   14 +-
 .../Banshee.Hal/Banshee.HalBackend/DiskDevice.cs   |    4 +-
 .../Banshee.HalBackend/HardwareManager.cs          |   20 +-
 .../Banshee.Hal/Banshee.HalBackend/UsbDevice.cs    |   24 +-
 .../Banshee.Hal/Banshee.HalBackend/Volume.cs       |   44 +-
 src/Backends/Banshee.Hal/Hal/Device.cs             |  112 +++---
 src/Backends/Banshee.Hal/Hal/Manager.cs            |   64 ++--
 src/Backends/Banshee.Hal/Hal/Volume.cs             |   12 +-
 .../Banshee.NowPlaying.X11/FullscreenAdapter.cs    |   34 +-
 .../Banshee.OsxBackend/HardwareManager.cs          |   10 +-
 .../Banshee.Osx/Banshee.OsxBackend/OsxService.cs   |   44 +-
 .../Banshee.Unix/Banshee.IO.Unix/DemuxVfs.cs       |   18 +-
 .../Banshee.Unix/Banshee.IO.Unix/Directory.cs      |   18 +-
 src/Backends/Banshee.Unix/Banshee.IO.Unix/File.cs  |   14 +-
 .../Banshee.Unix/Banshee.IO.Unix/Provider.cs       |    2 +-
 src/Clients/Beroe/Beroe/IndexerClient.cs           |   38 +-
 src/Clients/Booter/Booter/Entry.cs                 |   44 +-
 src/Clients/Halie/Halie/Client.cs                  |   58 ++--
 src/Clients/Muinshee/Muinshee/BaseDialog.cs        |   12 +-
 src/Clients/Muinshee/Muinshee/Client.cs            |    4 +-
 src/Clients/Muinshee/Muinshee/MuinsheeActions.cs   |    4 +-
 .../Muinshee/Muinshee/MuinsheeTrackInfoDisplay.cs  |    8 +-
 src/Clients/Muinshee/Muinshee/PlayerInterface.cs   |   46 +-
 src/Clients/Nereid/Nereid/Client.cs                |    2 +-
 src/Clients/Nereid/Nereid/PlayerInterface.cs       |  138 +++---
 src/Clients/Nereid/Nereid/ViewContainer.cs         |   54 ++--
 .../IndexerClient.cs                               |   66 ++--
 .../SimpleIndexerClient.cs                         |   60 ++--
 .../ICollectionIndexer.cs                          |   10 +-
 .../ICollectionIndexerService.cs                   |    2 +-
 .../Banshee.CollectionIndexer/Demo/RemoteClient.cs |   14 +-
 .../Hyena/ConsoleCrayon.cs                         |   14 +-
 .../Hyena/DateTimeUtil.cs                          |    6 +-
 src/Core/Banshee.CollectionIndexer/Hyena/Log.cs    |  154 ++++----
 .../Banshee.Base/ApplicationContext.cs             |   14 +-
 src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs |   26 +-
 .../Banshee.Core/Banshee.Base/FileNamePattern.cs   |   72 ++--
 src/Core/Banshee.Core/Banshee.Base/Localization.cs |   64 ++--
 src/Core/Banshee.Core/Banshee.Base/NamingUtil.cs   |   30 +-
 src/Core/Banshee.Core/Banshee.Base/Paths.cs        |   70 ++--
 .../Banshee.Core/Banshee.Base/PlatformHacks.cs     |   30 +-
 .../Banshee.Base/ProductInformation.cs             |   68 ++--
 src/Core/Banshee.Core/Banshee.Base/Resource.cs     |    2 +-
 src/Core/Banshee.Core/Banshee.Base/SafeUri.cs      |   76 ++--
 .../Banshee.Base/Tests/CoverArtSpecTests.cs        |   10 +-
 .../Banshee.Base/Tests/FileNamePatternTests.cs     |    8 +-
 .../Banshee.Base/Tests/TaglibReadWriteTests.cs     |   28 +-
 src/Core/Banshee.Core/Banshee.Base/UriList.cs      |   56 ++--
 .../Banshee.Base/XdgBaseDirectorySpec.cs           |    4 +-
 .../Banshee.Core/Banshee.Collection/AlbumInfo.cs   |   30 +-
 .../Banshee.Core/Banshee.Collection/ArtistInfo.cs  |   14 +-
 .../Banshee.Collection/CacheableItem.cs            |    2 +-
 .../Banshee.Collection/FileTrackInfo.cs            |   20 +-
 .../Banshee.Core/Banshee.Collection/ITrackInfo.cs  |    2 +-
 .../Banshee.Core/Banshee.Collection/LicenseInfo.cs |   36 +-
 .../Banshee.Collection/SampleTrackInfo.cs          |    4 +-
 .../Banshee.Collection/TrackFilterType.cs          |    2 +-
 .../Banshee.Core/Banshee.Collection/TrackInfo.cs   |  136 +++---
 .../Banshee.Collection/TrackMediaAttributes.cs     |    2 +-
 .../Banshee.Collection/UnknownTrackInfo.cs         |    2 +-
 .../Banshee.Configuration.Schema/ImportSchema.cs   |   30 +-
 .../Banshee.Configuration.Schema/LibrarySchema.cs  |   32 +-
 .../Banshee.Configuration/ConfigurationClient.cs   |   20 +-
 .../Banshee.Configuration/IConfigurationClient.cs  |    2 +-
 .../MemoryConfigurationClient.cs                   |    8 +-
 .../Banshee.Configuration/SchemaEntry.cs           |   10 +-
 .../XmlConfigurationClient.cs                      |   42 +-
 .../Banshee.I18n/AssemblyCatalogAttribute.cs       |    6 +-
 src/Core/Banshee.Core/Banshee.I18n/Catalog.cs      |   62 ++--
 .../Banshee.Core/Banshee.IO.SystemIO/DemuxVfs.cs   |   20 +-
 .../Banshee.Core/Banshee.IO.SystemIO/Directory.cs  |   10 +-
 src/Core/Banshee.Core/Banshee.IO.SystemIO/File.cs  |    8 +-
 .../Banshee.Core/Banshee.IO.SystemIO/Provider.cs   |    2 +-
 src/Core/Banshee.Core/Banshee.IO/DemuxVfs.cs       |    6 +-
 .../Banshee.IO/DirectoryScannerPipelineElement.cs  |   12 +-
 src/Core/Banshee.Core/Banshee.IO/ExtensionSet.cs   |    6 +-
 src/Core/Banshee.Core/Banshee.IO/File.cs           |    2 +-
 src/Core/Banshee.Core/Banshee.IO/IDirectory.cs     |    6 +-
 src/Core/Banshee.Core/Banshee.IO/IFile.cs          |    2 +-
 src/Core/Banshee.Core/Banshee.IO/Provider.cs       |   20 +-
 src/Core/Banshee.Core/Banshee.IO/StreamAssist.cs   |    4 +-
 src/Core/Banshee.Core/Banshee.IO/Utilities.cs      |   24 +-
 .../Banshee.Core/Banshee.Kernel/DelegateJob.cs     |    4 +-
 .../Banshee.Kernel/IInstanceCriticalJob.cs         |   26 +-
 src/Core/Banshee.Core/Banshee.Kernel/IJob.cs       |   26 +-
 src/Core/Banshee.Core/Banshee.Kernel/Job.cs        |   32 +-
 .../Banshee.Core/Banshee.Kernel/JobPriority.cs     |   26 +-
 src/Core/Banshee.Core/Banshee.Kernel/Scheduler.cs  |   98 ++--
 .../Banshee.Core/Banshee.Streaming/CommonTags.cs   |    6 +-
 .../Banshee.Streaming/StreamPlaybackError.cs       |    4 +-
 .../Banshee.Core/Banshee.Streaming/StreamTag.cs    |    6 +-
 .../Banshee.Core/Banshee.Streaming/StreamTagger.cs |   54 ++--
 .../Banshee.Services/Banshee.Base/ThreadAssist.cs  |   16 +-
 .../Banshee.Collection.Database/CachedList.cs      |   24 +-
 .../DatabaseAlbumInfo.cs                           |   20 +-
 .../DatabaseAlbumListModel.cs                      |    8 +-
 .../DatabaseArtistInfo.cs                          |   18 +-
 .../DatabaseArtistListModel.cs                     |   10 +-
 .../DatabaseFilterListModel.cs                     |   36 +-
 .../DatabaseImportManager.cs                       |   42 +-
 .../DatabaseImportResultHandler.cs                 |    4 +-
 .../DatabaseQueryFilterModel.cs                    |   20 +-
 .../DatabaseTrackInfo.cs                           |   86 ++--
 .../DatabaseTrackListModel.cs                      |   60 ++--
 .../FilterModelProvider.cs                         |   10 +-
 .../Banshee.Collection.Database/QueryFilterInfo.cs |   10 +-
 .../Tests/DatabaseAlbumInfoTests.cs                |   18 +-
 .../Tests/DatabaseArtistInfoTests.cs               |    8 +-
 .../Tests/DatabaseTrackInfoTests.cs                |    8 +-
 .../CollectionIndexer.cs                           |   84 ++--
 .../CollectionIndexerService.cs                    |   74 ++--
 .../ICollectionIndexer.cs                          |   10 +-
 .../ICollectionIndexerService.cs                   |    2 +-
 .../Banshee.Collection/AlbumListModel.cs           |    4 +-
 .../Banshee.Collection/ArtistListModel.cs          |    2 +-
 .../Banshee.Collection/FilterListModel.cs          |   22 +-
 .../Banshee.Collection/ImportEventHandler.cs       |   10 +-
 .../Banshee.Collection/ImportManager.cs            |   80 ++--
 .../Banshee.Collection/MemoryTrackListModel.cs     |    8 +-
 .../Banshee.Collection/ModelHelper.cs              |   16 +-
 .../Banshee.Collection/RescanPipeline.cs           |   14 +-
 .../Banshee.Collection/TrackListModel.cs           |    4 +-
 .../DatabaseConfigurationClient.cs                 |   38 +-
 .../DefaultApplicationHelper.cs                    |   10 +-
 .../Banshee.Database/BansheeDbConnection.cs        |   22 +-
 .../Banshee.Database/BansheeDbFormatMigrator.cs    |  194 ++++----
 .../Banshee.Database/BansheeModelCache.cs          |    4 +-
 .../Banshee.Database/BansheeModelProvider.cs       |    6 +-
 .../Banshee.Database/SortKeyUpdater.cs             |    6 +-
 .../Banshee.Equalizer/EqualizerManager.cs          |   94 ++--
 .../Banshee.Equalizer/EqualizerSetting.cs          |   30 +-
 .../Banshee.Equalizer/EqualizerSettingEvent.cs     |    6 +-
 .../Banshee.Hardware/DeviceCommand.cs              |    4 +-
 .../Banshee.Hardware/HardwareManager.cs            |   64 ++--
 .../Banshee.Services/Banshee.Hardware/IDevice.cs   |    6 +-
 .../Banshee.Hardware/IHardwareManager.cs           |   14 +-
 .../Banshee.Services/Banshee.Hardware/IVolume.cs   |    4 +-
 .../Banshee.Hardware/VendorProductDeviceNode.cs    |   22 +-
 .../Banshee.Hardware/VendorProductInfo.cs          |   24 +-
 .../Banshee.Library/HomeDirectoryImportSource.cs   |    8 +-
 .../Banshee.Library/ImportSourceManager.cs         |   10 +-
 .../Banshee.Library/LibraryImportManager.cs        |    8 +-
 .../Banshee.Library/LibrarySource.cs               |   10 +-
 .../Banshee.Library/MusicLibrarySource.cs          |   12 +-
 .../Banshee.Library/ThreadPoolImportSource.cs      |   36 +-
 .../Banshee.Library/VideoLibrarySource.cs          |    4 +-
 .../Banshee.MediaEngine/IAudioCdRipper.cs          |   18 +-
 .../Banshee.MediaEngine/IBpmDetector.cs            |    2 +-
 .../Banshee.MediaEngine/IEqualizer.cs              |    8 +-
 .../Banshee.MediaEngine/IPlayerEngineService.cs    |   12 +-
 .../Banshee.MediaEngine/ITranscoder.cs             |   16 +-
 .../IVisualizationDataSource.cs                    |    2 +-
 .../Banshee.MediaEngine/NullPlayerEngine.cs        |   24 +-
 .../Banshee.MediaEngine/PlayerEngine.cs            |   88 ++--
 .../Banshee.MediaEngine/PlayerEngineService.cs     |  230 +++++-----
 .../Banshee.MediaEngine/PlayerEvent.cs             |   30 +-
 .../Banshee.MediaEngine/TranscoderService.cs       |   30 +-
 .../Abakos.Compiler/Expression.cs                  |   96 ++--
 .../Abakos.Compiler/Functions.cs                   |   90 ++--
 .../Abakos.Compiler/InvalidFunctionException.cs    |   26 +-
 .../Abakos.Compiler/InvalidOperandException.cs     |   30 +-
 .../Abakos.Compiler/InvalidTokenException.cs       |   24 +-
 .../Abakos.Compiler/Operations.cs                  |   46 +-
 .../Abakos.Compiler/Operators.cs                   |   60 ++--
 .../Abakos.Compiler/Symbol.cs                      |   52 +-
 .../Abakos.Compiler/UnkownVariableException.cs     |   26 +-
 .../Abakos.Compiler/Values.cs                      |   46 +-
 .../Banshee.MediaProfiles/MediaProfileManager.cs   |   52 +-
 .../Banshee.MediaProfiles/Pipeline.cs              |   98 ++--
 .../Banshee.MediaProfiles/PipelineVariable.cs      |   98 ++--
 .../Banshee.MediaProfiles/Profile.cs               |   58 ++--
 .../Banshee.MediaProfiles/ProfileConfiguration.cs  |   22 +-
 .../EmbeddedMetadataProvider.cs                    |    2 +-
 .../Banshee.Metadata.Embedded/EmbeddedQueryJob.cs  |   38 +-
 .../FileSystemMetadataProvider.cs                  |    2 +-
 .../FileSystemQueryJob.cs                          |   18 +-
 .../LastFMMetadataProvider.cs                      |    6 +-
 .../Banshee.Metadata.LastFM/LastFMQueryJob.cs      |   30 +-
 .../MusicBrainzMetadataProvider.cs                 |    2 +-
 .../MusicBrainzQueryJob.cs                         |   38 +-
 .../RhapsodyMetadataProvider.cs                    |    2 +-
 .../Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs  |   22 +-
 .../Banshee.Metadata/BaseMetadataProvider.cs       |   16 +-
 .../Banshee.Metadata/IMetadataProvider.cs          |   14 +-
 .../Banshee.Metadata/MetadataService.cs            |   36 +-
 .../Banshee.Metadata/MetadataServiceJob.cs         |   42 +-
 .../Banshee.Metadata/SaveTrackMetadataJob.cs       |    2 +-
 .../Banshee.Metadata/SaveTrackMetadataService.cs   |    2 +-
 .../Banshee.Services/Banshee.Networking/Network.cs |   34 +-
 .../Banshee.Networking/NetworkManager.cs           |    6 +-
 .../Banshee.PlatformServices/ScreensaverManager.cs |   10 +-
 .../IPlaybackController.cs                         |    2 +-
 .../IPlaybackControllerService.cs                  |   14 +-
 .../PlaybackControllerDatabaseStack.cs             |    2 +-
 .../PlaybackControllerService.cs                   |  130 +++---
 .../Banshee.Playlist/PlaylistFileUtil.cs           |   84 ++--
 .../Banshee.Playlist/PlaylistSource.cs             |   34 +-
 .../AsfReferencePlaylistFormat.cs                  |    2 +-
 .../Banshee.Playlists.Formats/AsxPlaylistFormat.cs |   32 +-
 .../Banshee.Playlists.Formats/IPlaylistFormat.cs   |    6 +-
 .../InvalidPlaylistException.cs                    |    2 +-
 .../Banshee.Playlists.Formats/M3uPlaylistFormat.cs |   30 +-
 .../PlaylistFormatBase.cs                          |   34 +-
 .../PlaylistFormatDescription.cs                   |   12 +-
 .../Banshee.Playlists.Formats/PlaylistParser.cs    |   28 +-
 .../Banshee.Playlists.Formats/PlsPlaylistFormat.cs |   44 +-
 .../Tests/PlaylistFormatTests.cs                   |    4 +-
 .../XspfPlaylistFormat.cs                          |   10 +-
 .../Banshee.Preferences/Collection.cs              |   32 +-
 .../Banshee.Services/Banshee.Preferences/Page.cs   |    2 +-
 .../Banshee.Preferences/Preference.cs              |   10 +-
 .../Banshee.Preferences/PreferenceBase.cs          |    6 +-
 .../Banshee.Preferences/PreferenceService.cs       |   12 +-
 .../Banshee.Services/Banshee.Preferences/Root.cs   |   20 +-
 .../Banshee.Preferences/SchemaPreference.cs        |   14 +-
 .../Banshee.Preferences/Section.cs                 |    2 +-
 .../Banshee.Preferences/VoidPreference.cs          |    2 +-
 .../Banshee.Services/Banshee.Query/BansheeQuery.cs |   38 +-
 .../Banshee.ServiceStack/Application.cs            |  100 ++--
 .../Banshee.ServiceStack/BatchUserJob.cs           |    2 +-
 .../Banshee.ServiceStack/Client.cs                 |    6 +-
 .../Banshee.ServiceStack/DBusCommandService.cs     |   12 +-
 .../Banshee.ServiceStack/DBusConnection.cs         |   48 +-
 .../Banshee.ServiceStack/DBusServiceManager.cs     |   64 ++--
 .../Banshee.ServiceStack/DbIteratorJob.cs          |    2 +-
 .../Banshee.ServiceStack/IUserJob.cs               |   14 +-
 .../Banshee.ServiceStack/ServiceManager.cs         |  134 +++---
 .../Banshee.ServiceStack/ServiceStartedHandler.cs  |    8 +-
 .../Banshee.ServiceStack/TestUserJob.cs            |   46 +-
 .../Banshee.ServiceStack/UserJob.cs                |    2 +-
 .../Banshee.ServiceStack/UserJobEventHandler.cs    |    8 +-
 .../Banshee.SmartPlaylist/Migrator.cs              |    2 +-
 .../SmartPlaylistDefinition.cs                     |    4 +-
 .../Banshee.SmartPlaylist/SmartPlaylistSource.cs   |   32 +-
 .../Banshee.Sources/DatabaseSource.cs              |   46 +-
 .../Banshee.Sources/DurationStatusFormatters.cs    |   30 +-
 .../Banshee.Sources/ErrorSource.cs                 |   42 +-
 .../Banshee.Sources/IImportable.cs                 |    2 +-
 .../Banshee.Services/Banshee.Sources/ISource.cs    |    6 +-
 .../Banshee.Sources/ISourceManager.cs              |    2 +-
 .../Banshee.Sources/MessageAction.cs               |   18 +-
 .../Banshee.Sources/PrimarySource.cs               |   40 +-
 .../Banshee.Services/Banshee.Sources/Source.cs     |  180 ++++----
 .../Banshee.Sources/SourceManager.cs               |   90 ++--
 .../Banshee.Sources/SourceMessage.cs               |   38 +-
 .../Banshee.Sources/SourceSortType.cs              |    8 +-
 .../Banshee.Streaming/RadioTrackInfo.cs            |   52 +-
 .../Banshee.Services/Banshee.Web/BaseHttpServer.cs |   62 ++--
 src/Core/Banshee.Services/Banshee.Web/Browser.cs   |    8 +-
 .../Banshee.Services/Banshee.Web/HttpRequest.cs    |   62 ++--
 .../Banshee.Addins.Gui/AddinDetailsDialog.cs       |   36 +-
 .../Banshee.Addins.Gui/AddinTile.cs                |   82 ++--
 .../Banshee.Addins.Gui/AddinView.cs                |   68 ++--
 .../Banshee.Collection.Gui/AlbumListView.cs        |    4 +-
 .../Banshee.Collection.Gui/ArtworkManager.cs       |   62 ++--
 .../Banshee.Collection.Gui/ArtworkRenderer.cs      |   34 +-
 .../Banshee.Collection.Gui/BaseTrackListView.cs    |   16 +-
 .../Banshee.Collection.Gui/ColumnCellAlbum.cs      |   56 ++--
 .../ColumnCellCreativeCommons.cs                   |   10 +-
 .../Banshee.Collection.Gui/ColumnCellDateTime.cs   |   14 +-
 .../ColumnCellDiscAndCount.cs                      |    4 +-
 .../Banshee.Collection.Gui/ColumnCellDuration.cs   |   10 +-
 .../Banshee.Collection.Gui/ColumnCellFileSize.cs   |    4 +-
 .../Banshee.Collection.Gui/ColumnCellLocation.cs   |    2 +-
 .../ColumnCellPositiveInt.cs                       |    4 +-
 .../Banshee.Collection.Gui/ColumnCellQueryText.cs  |    2 +-
 .../ColumnCellStatusIndicator.cs                   |   36 +-
 .../Banshee.Collection.Gui/ColumnCellTrack.cs      |   16 +-
 .../ColumnCellTrackAndCount.cs                     |    4 +-
 .../ColumnCellTrackNumber.cs                       |    6 +-
 .../DefaultColumnController.cs                     |   56 ++--
 .../PersistentColumnController.cs                  |   46 +-
 .../Banshee.Collection.Gui/TerseTrackListView.cs   |    6 +-
 .../Banshee.Collection.Gui/TrackFilterListView.cs  |    6 +-
 .../Banshee.Collection.Gui/TrackListView.cs        |   16 +-
 .../Banshee.Collection.Gui/XmlColumnController.cs  |   50 +-
 .../Banshee.ContextPane/BaseContextPage.cs         |    2 +-
 .../Banshee.ContextPane/ContextPageManager.cs      |    4 +-
 .../Banshee.ContextPane/ContextPane.cs             |   12 +-
 .../Banshee.Equalizer.Gui/EqualizerBandScale.cs    |   24 +-
 .../Banshee.Equalizer.Gui/EqualizerLevelsBox.cs    |    6 +-
 .../EqualizerPresetComboBox.cs                     |   50 +-
 .../Banshee.Equalizer.Gui/EqualizerView.cs         |   74 ++--
 .../Banshee.Equalizer.Gui/EqualizerWindow.cs       |   48 +-
 .../Banshee.Gui.Dialogs/AboutDialog.cs             |   34 +-
 .../Banshee.Gui.Dialogs/BansheeDialog.cs           |   18 +-
 .../Banshee.Gui.Dialogs/ConfirmShutdownDialog.cs   |   16 +-
 .../DefaultApplicationHelperDialog.cs              |    6 +-
 .../Banshee.Gui.Dialogs/ErrorListDialog.cs         |   48 +-
 .../Banshee.Gui.Dialogs/FileChooserDialog.cs       |   14 +-
 .../Banshee.Gui.Dialogs/GladeDialog.cs             |    6 +-
 .../Banshee.Gui.Dialogs/GladeWindow.cs             |   18 +-
 .../Banshee.Gui.Dialogs/ImageFileChooserDialog.cs  |   20 +-
 .../Banshee.Gui.Dialogs/OpenLocationDialog.cs      |   42 +-
 .../Banshee.Gui.Dialogs/SeekDialog.cs              |    6 +-
 .../Banshee.Gui.DragDrop/DragDropList.cs           |   12 +-
 .../Banshee.Gui.DragDrop/DragDropTarget.cs         |    8 +-
 .../Banshee.Gui.DragDrop/DragDropUtilities.cs      |   16 +-
 .../Banshee.Gui.TrackEditor/AlbumArtistEntry.cs    |   10 +-
 .../BasicTrackDetailsPage.cs                       |   22 +-
 .../EditorEditableUndoAdapter.cs                   |    8 +-
 .../Banshee.Gui.TrackEditor/EditorMode.cs          |    2 +-
 .../Banshee.Gui.TrackEditor/EditorTrackInfo.cs     |   20 +-
 .../Banshee.Gui.TrackEditor/EditorUtilities.cs     |    4 +-
 .../ExtraTrackDetailsPage.cs                       |   18 +-
 .../Banshee.Gui.TrackEditor/FieldPage.cs           |   72 ++--
 .../Banshee.Gui.TrackEditor/GenreEntry.cs          |   10 +-
 .../Banshee.Gui.TrackEditor/HelpPage.cs            |   20 +-
 .../Banshee.Gui.TrackEditor/ITrackEditorPage.cs    |    4 +-
 .../Banshee.Gui.TrackEditor/LicenseEntry.cs        |    8 +-
 .../Banshee.Gui.TrackEditor/LyricsPage.cs          |   10 +-
 .../Banshee.Gui.TrackEditor/PageNavigationEntry.cs |   26 +-
 .../Banshee.Gui.TrackEditor/RangeEntry.cs          |   24 +-
 .../Banshee.Gui.TrackEditor/SortingPage.cs         |   12 +-
 .../Banshee.Gui.TrackEditor/SpinButtonEntry.cs     |    2 +-
 .../Banshee.Gui.TrackEditor/StatisticsPage.cs      |   74 ++--
 .../Banshee.Gui.TrackEditor/TextEntry.cs           |    8 +-
 .../Banshee.Gui.TrackEditor/TextViewEntry.cs       |   23 +-
 .../Banshee.Gui.TrackEditor/TrackEditorDialog.cs   |  208 +++++-----
 .../Banshee.Gui.Widgets/ArtworkPopup.cs            |   32 +-
 .../Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs |   96 ++--
 .../Banshee.Gui.Widgets/ConnectedMessageBar.cs     |   36 +-
 .../Banshee.Gui.Widgets/ConnectedSeekSlider.cs     |   52 +-
 .../Banshee.Gui.Widgets/ConnectedVolumeButton.cs   |   12 +-
 .../Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs   |   80 ++--
 .../Banshee.Gui.Widgets/MainMenu.cs                |    8 +-
 .../Banshee.Gui.Widgets/NextButton.cs              |    2 +-
 .../Banshee.Gui.Widgets/PlaylistMenuItem.cs        |    4 +-
 .../Banshee.Gui.Widgets/RepeatActionButton.cs      |   12 +-
 .../Banshee.Gui.Widgets/TaskStatusIcon.cs          |   22 +-
 .../Banshee.Gui.Widgets/TrackInfoDisplay.cs        |  188 ++++----
 .../Banshee.Gui.Widgets/UserJobTile.cs             |   90 ++--
 .../Banshee.Gui.Widgets/UserJobTileHost.cs         |   20 +-
 .../Banshee.Gui/BansheeActionGroup.cs              |   22 +-
 .../Banshee.Gui/BansheeDbFormatMigratorMonitor.cs  |   26 +-
 .../Banshee.Gui/BansheeIconFactory.cs              |   10 +-
 .../Banshee.Gui/BaseClientWindow.cs                |   44 +-
 .../Banshee.Gui/GlobalActions.cs                   |   54 ++--
 .../Banshee.Gui/GtkBaseClient.cs                   |   72 ++--
 .../Banshee.Gui/GtkElementsService.cs              |   42 +-
 .../Banshee.Gui/IconThemeUtils.cs                  |    6 +-
 .../Banshee.Gui/InterfaceActionService.cs          |   60 ++--
 .../Banshee.Gui/PersistentPaneController.cs        |   26 +-
 .../Banshee.Gui/PersistentWindowController.cs      |   10 +-
 .../Banshee.Gui/PlaybackActions.cs                 |   50 +-
 .../Banshee.Gui/PlaybackRepeatActions.cs           |   26 +-
 .../Banshee.Gui/PlaybackShuffleActions.cs          |   24 +-
 .../Banshee.Gui/SourceActions.cs                   |   52 +-
 .../Banshee.Gui/TrackActions.cs                    |   46 +-
 .../Banshee.ThickClient/Banshee.Gui/ViewActions.cs |   26 +-
 .../Banshee.Library.Gui/FileImportSource.cs        |   16 +-
 .../Banshee.Library.Gui/FolderImportSource.cs      |   14 +-
 .../Banshee.Library.Gui/ImportDialog.cs            |   78 ++--
 .../Banshee.Library.Gui/PhotoFolderImportSource.cs |   18 +-
 .../Banshee.MediaProfiles.Gui/ProfileComboBox.cs   |   64 ++--
 .../ProfileComboBoxConfigurable.cs                 |   30 +-
 .../ProfileConfigurationDialog.cs                  |  128 +++---
 .../ProfileConfigureButton.cs                      |   42 +-
 .../Banshee.Playlist.Gui/PlaylistExportDialog.cs   |   56 ++--
 .../DefaultPreferenceWidgets.cs                    |   64 ++--
 .../Banshee.Preferences.Gui/DescriptionLabel.cs    |    4 +-
 .../Banshee.Preferences.Gui/NotebookPage.cs        |   26 +-
 .../Banshee.Preferences.Gui/PageComboBox.cs        |    8 +-
 .../Banshee.Preferences.Gui/PreferenceDialog.cs    |   30 +-
 .../Banshee.Preferences.Gui/SectionBox.cs          |   36 +-
 .../Banshee.Preferences.Gui/WidgetFactory.cs       |   24 +-
 .../Banshee.Query.Gui/PlaylistQueryValueEntry.cs   |    2 +-
 .../Banshee.Query.Gui/RatingQueryValueEntry.cs     |    2 +-
 .../SmartPlaylistQueryValueEntry.cs                |    2 +-
 .../Banshee.SmartPlaylist.Gui/Editor.cs            |    8 +-
 .../Banshee.Sources.Gui/CellEditEntry.cs           |    6 +-
 .../CompositeTrackSourceContents.cs                |   18 +-
 .../FilteredListSourceContents.cs                  |  100 ++--
 .../Banshee.Sources.Gui/ISourceContents.cs         |    2 +-
 .../ITrackModelSourceContents.cs                   |    2 +-
 .../Banshee.Sources.Gui/SourceComboBox.cs          |   22 +-
 .../Banshee.Sources.Gui/SourceIconResolver.cs      |   30 +-
 .../Banshee.Sources.Gui/SourceModel.cs             |   80 ++--
 .../Banshee.Sources.Gui/SourceRowRenderer.cs       |  116 +++---
 .../Banshee.Sources.Gui/SourceView.cs              |  142 +++---
 .../Banshee.Sources.Gui/SourceView_DragAndDrop.cs  |   50 +-
 .../Banshee.Widgets/CustomActionProxy.cs           |    4 +-
 .../Banshee.Widgets/Banshee.Widgets/DateButton.cs  |   38 +-
 .../Banshee.Widgets/DictionaryComboBox.cs          |   40 +-
 .../Banshee.Widgets/DiscUsageDisplay.cs            |  104 +++---
 .../Banshee.Widgets/GenericToolItem.cs             |    4 +-
 .../Banshee.Widgets/HigMessageDialog.cs            |   46 +-
 .../Banshee.Widgets/HoverImageButton.cs            |   56 ++--
 .../Banshee.Widgets/LinearProgress.cs              |   34 +-
 .../Banshee.Widgets/Banshee.Widgets/LinkLabel.cs   |  130 +++---
 .../Banshee.Widgets/Banshee.Widgets/MenuTile.cs    |   28 +-
 .../Banshee.Widgets/Banshee.Widgets/MessagePane.cs |   20 +-
 .../Banshee.Widgets/PropertyTable.cs               |   58 ++--
 .../Banshee.Widgets/RatingActionProxy.cs           |    2 +-
 .../Banshee.Widgets/Banshee.Widgets/SearchEntry.cs |   42 +-
 .../Banshee.Widgets/Banshee.Widgets/SeekSlider.cs  |   72 ++--
 .../Banshee.Widgets/StreamPositionLabel.cs         |   82 ++--
 src/Core/Banshee.Widgets/Banshee.Widgets/Tile.cs   |   58 ++--
 .../Banshee.Widgets/Banshee.Widgets/TileView.cs    |   42 +-
 .../Banshee.Widgets/VolumeButton.cs                |  288 ++++++------
 .../Banshee.Dap.Ipod/DatabaseRebuilder.cs          |   68 ++--
 .../Banshee.Dap.Ipod/IpodSource.cs                 |  168 ++++----
 .../Banshee.Dap.Ipod/IpodTrackInfo.cs              |   44 +-
 .../Banshee.Dap.Ipod/PodSleuthDevice.cs            |   70 ++--
 .../Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs    |   14 +-
 .../Banshee.Dap.Ipod/UnsupportedDatabaseView.cs    |   52 +-
 .../Banshee.Dap.Karma/KarmaSource.cs               |    2 +-
 .../Banshee.Dap.MassStorage/AndroidDevice.cs       |   44 +-
 .../CustomMassStorageDevice.cs                     |    6 +-
 .../Banshee.Dap.MassStorage/DeviceMapper.cs        |    6 +-
 .../Banshee.Dap.MassStorage/MassStorageDevice.cs   |   84 ++--
 .../Banshee.Dap.MassStorage/MassStorageSource.cs   |   62 ++--
 .../Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs   |    8 +-
 .../Banshee.Dap.Mtp/MtpTrackInfo.cs                |   34 +-
 .../Banshee.Dap.Mtp/Tests/MtpDapTests.cs           |    2 +-
 src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapActions.cs  |    2 +-
 src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs  |   16 +-
 src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapInfoBar.cs  |   30 +-
 .../Banshee.Dap.Gui/DapPropertiesDialog.cs         |   48 +-
 .../Banshee.Dap.Gui/DapPropertiesDisplay.cs        |   32 +-
 .../Banshee.Dap.Gui/PurchasedMusicActions.cs       |    8 +-
 src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs  |   28 +-
 src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs      |   56 ++--
 src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs       |   98 ++--
 src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs         |   38 +-
 .../Banshee.Dap/Banshee.Dap/MediaGroupSource.cs    |   28 +-
 src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs |   12 +-
 .../Banshee.AudioCd/AudioCdDiscModel.cs            |  104 +++---
 .../Banshee.AudioCd/AudioCdDuplicator.cs           |   12 +-
 .../Banshee.AudioCd/AudioCdRipper.cs               |   96 ++--
 .../Banshee.AudioCd/AudioCdService.cs              |  102 ++--
 .../Banshee.AudioCd/AudioCdSource.cs               |  108 +++---
 .../Banshee.AudioCd/AudioCdTrackInfo.cs            |   24 +-
 .../Banshee.BooScript/BooScriptService.cs          |   42 +-
 .../Banshee.Bookmarks/BookmarksService.cs          |   20 +-
 .../Banshee.Bpm/Banshee.Bpm/BpmDetectJob.cs        |    6 +-
 src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmEntry.cs |    8 +-
 .../Banshee.Bpm/Banshee.Bpm/BpmService.cs          |   36 +-
 .../Banshee.Bpm/Banshee.Bpm/BpmTapAdapter.cs       |    2 +-
 .../Banshee.CoverArt/CoverArtJob.cs                |   10 +-
 .../Banshee.CoverArt/CoverArtService.cs            |   58 ++--
 .../Banshee.Daap/DaapContainerSource.cs            |    4 +-
 .../Banshee.Daap/Banshee.Daap/DaapErrorView.cs     |   70 ++--
 .../Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs   |   42 +-
 .../Banshee.Daap/DaapPlaylistSource.cs             |   20 +-
 .../Banshee.Daap/DaapProxyWebServer.cs             |   74 ++--
 .../Banshee.Daap/Banshee.Daap/DaapService.cs       |   38 +-
 .../Banshee.Daap/Banshee.Daap/DaapSource.cs        |  104 +++---
 .../Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs     |    8 +-
 src/Extensions/Banshee.Daap/Daap/BrokenMD5.cs      |   34 +-
 src/Extensions/Banshee.Daap/Daap/Client.cs         |   26 +-
 src/Extensions/Banshee.Daap/Daap/ContentCodeBag.cs |   18 +-
 src/Extensions/Banshee.Daap/Daap/ContentFetcher.cs |   16 +-
 src/Extensions/Banshee.Daap/Daap/ContentParser.cs  |   14 +-
 src/Extensions/Banshee.Daap/Daap/ContentWriter.cs  |    8 +-
 src/Extensions/Banshee.Daap/Daap/Database.cs       |   40 +-
 src/Extensions/Banshee.Daap/Daap/Hasher.cs         |    8 +-
 src/Extensions/Banshee.Daap/Daap/Playlist.cs       |   22 +-
 src/Extensions/Banshee.Daap/Daap/ServerInfo.cs     |   10 +-
 src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs |   60 ++--
 src/Extensions/Banshee.Daap/Daap/Track.cs          |   46 +-
 src/Extensions/Banshee.Daap/Daap/User.cs           |    2 +-
 src/Extensions/Banshee.Daap/Daap/Utility.cs        |    2 +-
 .../FileSystemQueueSource.cs                       |   76 ++--
 .../Banshee.InternetArchive/DetailsSource.cs       |    2 +-
 .../Banshee.InternetArchive/DetailsView.cs         |    4 +-
 .../Banshee.InternetArchive/HomeView.cs            |    2 +-
 .../Banshee.InternetRadio/InternetRadioSource.cs   |   84 ++--
 .../InternetRadioSourceContents.cs                 |   30 +-
 .../Banshee.InternetRadio/StationEditor.cs         |  114 +++---
 .../Banshee.InternetRadio/XspfMigrator.cs          |   40 +-
 .../AudioscrobblerService.cs                       |  126 +++---
 .../Banshee.Lastfm.Audioscrobbler/Queue.cs         |   40 +-
 .../Banshee.Lastfm.Radio/LastfmActions.cs          |   20 +-
 .../Banshee.Lastfm.Radio/LastfmColumnController.cs |    2 +-
 .../Banshee.Lastfm.Radio/LastfmSource.cs           |   20 +-
 .../Banshee.Lastfm.Radio/LastfmSourceContents.cs   |    8 +-
 .../Banshee.Lastfm.Radio/LastfmTrackInfo.cs        |    2 +-
 .../Banshee.Lastfm.Radio/StationEditor.cs          |    2 +-
 .../Banshee.Lastfm.Radio/StationSource.cs          |   32 +-
 .../RecommendationPane.cs                          |   76 ++--
 .../SimilarArtistTile.cs                           |   12 +-
 .../Banshee.MiniMode/MiniModeService.cs            |   12 +-
 .../Banshee.MiniMode/MiniModeWindow.cs             |   74 ++--
 .../Banshee.MiniMode/SourceModel.cs                |   58 ++--
 .../Banshee.Moblin/MediaPanelContents.cs           |   22 +-
 .../Banshee.Moblin/Banshee.Moblin/MoblinPanel.cs   |   26 +-
 .../Banshee.Moblin/Banshee.Moblin/MoblinService.cs |   58 ++--
 .../Banshee.Moblin/MoblinTrackInfoDisplay.cs       |   16 +-
 .../Banshee.Moblin/Banshee.Moblin/PlayQueueBox.cs  |   30 +-
 .../Banshee.Moblin/Banshee.Moblin/PlaybackBox.cs   |   16 +-
 .../Banshee.Moblin/RecentAlbumsList.cs             |   14 +-
 .../Banshee.Moblin/RecentAlbumsView.cs             |   28 +-
 .../Banshee.Moblin/Banshee.Moblin/SearchEntry.cs   |   30 +-
 .../Banshee.Moblin/Banshee.Moblin/SearchHeader.cs  |   30 +-
 .../Banshee.Moblin/Mutter/PanelClient.cs           |   70 ++--
 src/Extensions/Banshee.Moblin/Mutter/PanelGtk.cs   |   24 +-
 .../Banshee.Moblin/Mutter/SetSizeHandler.cs        |   14 +-
 .../MultimediaKeysService.cs                       |   40 +-
 .../GtkNotificationAreaBox.cs                      |   18 +-
 .../INotificationAreaBox.cs                        |    6 +-
 .../NotificationAreaService.cs                     |  164 ++++----
 .../Banshee.NotificationArea/TrackInfoPopup.cs     |   14 +-
 .../X11NotificationArea.cs                         |   46 +-
 .../X11NotificationAreaBox.cs                      |  122 +++---
 .../Notifications/Notification.cs                  |    2 +-
 .../Notifications/Notifications.cs                 |    2 +-
 .../Banshee.NowPlaying/FullscreenAdapter.cs        |   20 +-
 .../Banshee.NowPlaying/FullscreenControls.cs       |   16 +-
 .../Banshee.NowPlaying/FullscreenWindow.cs         |  116 +++---
 .../Banshee.NowPlaying/NowPlayingContents.cs       |   40 +-
 .../Banshee.NowPlaying/NowPlayingInterface.cs      |   46 +-
 .../Banshee.NowPlaying/NowPlayingSource.cs         |   22 +-
 .../NowPlayingTrackInfoDisplay.cs                  |   16 +-
 .../Banshee.NowPlaying/OverlayWindow.cs            |   66 ++--
 .../Banshee.NowPlaying/VideoDisplay.cs             |   32 +-
 .../Banshee.NowPlaying/XOverlayVideoDisplay.cs     |   48 +-
 .../Banshee.PlayQueue/PlayQueueActions.cs          |    8 +-
 .../Banshee.PlayQueue/PlayQueueSource.cs           |   30 +-
 .../AmarokPlayerImportSource.cs                    |   24 +-
 .../RhythmboxPlayerImportSource.cs                 |   50 +-
 .../DownloadStatusFilterModel.cs                   |    8 +-
 .../Banshee.Podcasting.Data/PodcastFeedModel.cs    |   34 +-
 .../Banshee.Podcasting.Data/PodcastSource.cs       |   46 +-
 .../Banshee.Podcasting.Data/PodcastTrackInfo.cs    |   64 ++--
 .../PodcastTrackListModel.cs                       |    2 +-
 .../PodcastUnheardFilterModel.cs                   |    8 +-
 .../ColumnCellDownloadStatus.cs                    |    2 +-
 .../Banshee.Podcasting.Gui/ColumnCellPodcast.cs    |   58 ++--
 .../ColumnCellPodcastStatusIndicator.cs            |   18 +-
 .../Banshee.Podcasting.Gui/ColumnCellUnheard.cs    |    2 +-
 .../DownloadManager/DownloadManagerInterface.cs    |  122 +++---
 .../DownloadManager/DownloadUserJob.cs             |   66 ++--
 .../Models/FilterableListModel.cs                  |   72 ++--
 .../Banshee.Podcasting.Gui/Models/ListModel.cs     |  106 +++---
 .../Banshee.Podcasting.Gui/PodcastActions.cs       |  162 ++++----
 .../Banshee.Podcasting.Gui/PodcastEpisodePage.cs   |   22 +-
 .../Banshee.Podcasting.Gui/PodcastFeedView.cs      |   70 ++--
 .../Banshee.Podcasting.Gui/PodcastItemView.cs      |  108 +++---
 .../Dialog/PodcastFeedPropertiesDialog.cs          |   22 +-
 .../Dialog/PodcastPropertiesDialog.cs              |   28 +-
 .../Dialog/PodcastSubscribeDialog.cs               |   46 +-
 .../Dialog/SyncPreferenceComboBox.cs               |   26 +-
 .../PodcastSourceContents.cs                       |   54 ++--
 .../Banshee.Podcasting/ItmsPodcast.cs              |    4 +-
 .../Banshee.Podcasting/PodcastImageFetchJob.cs     |   12 +-
 .../Banshee.Podcasting/PodcastImportManager.cs     |   32 +-
 .../Banshee.Podcasting/PodcastService.cs           |  162 ++++----
 .../Banshee.Podcasting/PodcastService_Interface.cs |   34 +-
 .../Banshee.RemoteAudio/RemoteAudioService.cs      |   10 +-
 .../Banshee.RemoteAudio/RemoteSpeaker.cs           |    2 +-
 .../Banshee.Sample/Banshee.Sample/SampleSource.cs  |    4 +-
 .../Banshee.Sample/SampleSourceInterface.cs        |   22 +-
 .../Banshee.SqlDebugConsole/SqlActions.cs          |    2 +-
 .../Banshee.Torrent/TorrentFileDownloadTask.cs     |   26 +-
 .../Banshee.Torrent/TorrentService.cs              |   20 +-
 .../Hyena.Gui/Hyena.Data.Gui/CellContext.cs        |    6 +-
 src/Libraries/Hyena.Gui/Hyena.Data.Gui/Column.cs   |   42 +-
 .../Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs         |   20 +-
 .../Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs |   40 +-
 .../Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs   |   48 +-
 .../Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs     |   34 +-
 .../Hyena.Gui/Hyena.Data.Gui/ColumnController.cs   |   52 +-
 .../Hyena.Data.Gui/ColumnHeaderCellText.cs         |   10 +-
 .../Hyena.Gui/Hyena.Data.Gui/IListView.cs          |    4 +-
 .../Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs   |    2 +-
 .../Hyena.Gui/Hyena.Data.Gui/ITextCell.cs          |    2 +-
 .../Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs  |    4 +-
 .../ListView/ListView_DragAndDrop.cs               |   52 +-
 .../Hyena.Data.Gui/ListView/ListView_Header.cs     |  174 ++++----
 .../ListView/ListView_Interaction.cs               |  184 ++++----
 .../Hyena.Data.Gui/ListView/ListView_Model.cs      |   30 +-
 .../Hyena.Data.Gui/ListView/ListView_Rendering.cs  |  170 ++++----
 .../Hyena.Data.Gui/ListView/ListView_Windowing.cs  |   58 ++--
 .../Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs |   58 ++--
 .../Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs     |    6 +-
 .../Hyena.Data.Gui/RowActivatedHandler.cs          |    4 +-
 .../Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs     |   10 +-
 .../Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs |   60 ++--
 .../Hyena.Gui.Dialogs/VersionInformationDialog.cs  |   40 +-
 .../Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs         |   26 +-
 .../Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs |   22 +-
 .../Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs      |   36 +-
 .../Hyena.Gui.Theatrics/SingleActorStage.cs        |   12 +-
 .../Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs         |   88 ++--
 .../Tests/ChoreographerTests.cs                    |   34 +-
 .../Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs       |   24 +-
 .../Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs        |   50 +-
 src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs |   64 ++--
 .../Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs     |   12 +-
 .../Hyena.Gui/Hyena.Gui/CairoExtensions.cs         |  128 +++---
 .../Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs        |   10 +-
 .../Hyena.Gui/Hyena.Gui/CompositeUtils.cs          |   28 +-
 src/Libraries/Hyena.Gui/Hyena.Gui/Contrast.cs      |   64 ++--
 .../Hyena.Gui/Hyena.Gui/EditableEraseAction.cs     |    2 +-
 .../Hyena.Gui/Hyena.Gui/EditableInsertAction.cs    |    4 +-
 .../Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs     |   14 +-
 src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs  |   36 +-
 .../Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs          |   30 +-
 .../Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs        |   24 +-
 .../Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs      |   48 +-
 .../Hyena.Gui/Hyena.Gui/RatingRenderer.cs          |   46 +-
 .../Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs       |   18 +-
 .../Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs     |    6 +-
 .../Hyena.Gui/Hyena.Gui/TestModuleRunner.cs        |   22 +-
 src/Libraries/Hyena.Gui/Hyena.Gui/TooltipSetter.cs |   18 +-
 .../Hyena.Query.Gui/FileSizeQueryValueEntry.cs     |    2 +-
 .../Hyena.Query.Gui/IntegerQueryValueEntry.cs      |    2 +-
 .../Hyena.Gui/Hyena.Query.Gui/QueryBox.cs          |   12 +-
 .../Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs     |   28 +-
 .../Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs     |   10 +-
 .../Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs      |   18 +-
 .../Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs     |    8 +-
 .../Hyena.Query.Gui/StringQueryValueEntry.cs       |    2 +-
 .../Hyena.Query.Gui/TimeSpanQueryValueEntry.cs     |    2 +-
 .../Hyena.Gui/Hyena.Widgets/AccordionPane.cs       |   24 +-
 .../Hyena.Gui/Hyena.Widgets/AnimatedBox.cs         |  162 ++++----
 .../Hyena.Gui/Hyena.Widgets/AnimatedImage.cs       |   50 +-
 .../Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs      |   42 +-
 .../Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs     |   30 +-
 .../Hyena.Gui/Hyena.Widgets/ImageButton.cs         |    2 +-
 .../Hyena.Gui/Hyena.Widgets/MenuButton.cs          |   42 +-
 .../Hyena.Gui/Hyena.Widgets/MessageBar.cs          |   58 ++--
 .../Hyena.Gui/Hyena.Widgets/PulsingButton.cs       |   36 +-
 .../Hyena.Gui/Hyena.Widgets/RatingEntry.cs         |  122 +++---
 .../Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs      |   20 +-
 .../Hyena.Gui/Hyena.Widgets/RoundedFrame.cs        |   52 +-
 .../Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs      |   32 +-
 .../Hyena.Gui/Hyena.Widgets/SegmentedBar.cs        |  278 ++++++------
 .../Hyena.Widgets/SmoothScrolledWindow.cs          |   30 +-
 .../Hyena.Gui/Hyena.Widgets/TextViewEditable.cs    |   48 +-
 src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs |   42 +-
 .../Hyena.Collections/CollectionExtensions.cs      |   20 +-
 .../Hyena/Hyena.Collections/IntervalHeap.cs        |  145 +++---
 src/Libraries/Hyena/Hyena.Collections/LruCache.cs  |   36 +-
 .../Hyena/Hyena.Collections/QueuePipeline.cs       |   16 +-
 .../Hyena.Collections/QueuePipelineElement.cs      |   54 ++--
 .../Hyena/Hyena.Collections/RangeCollection.cs     |  104 +++---
 src/Libraries/Hyena/Hyena.Collections/Selection.cs |   46 +-
 .../Hyena.Collections/Tests/IntervalHeapTests.cs   |   10 +-
 .../Hyena.Collections/Tests/QueuePipelineTests.cs  |   10 +-
 .../Tests/RangeCollectionTests.cs                  |  148 +++---
 .../Hyena/Hyena.Collections/WriteLineElement.cs    |    2 +-
 .../Hyena/Hyena.CommandLine/CommandLineParser.cs   |   50 +-
 src/Libraries/Hyena/Hyena.CommandLine/Layout.cs    |   64 ++--
 .../Hyena/Hyena.CommandLine/LayoutGroup.cs         |   34 +-
 .../Hyena/Hyena.CommandLine/LayoutOption.cs        |   12 +-
 .../Hyena/Hyena.Data.Sqlite/DatabaseColumn.cs      |   50 +-
 .../Hyena.Data.Sqlite/DatabaseColumnAttribute.cs   |   30 +-
 .../Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs  |   10 +-
 .../Hyena.Data.Sqlite/HyenaSqliteConnection.cs     |   50 +-
 .../Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs    |   20 +-
 .../Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs |  130 +++---
 .../Hyena/Hyena.Data.Sqlite/SqliteUtils.cs         |   14 +-
 .../Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs   |   22 +-
 .../Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs  |   36 +-
 .../Tests/SqliteModelProviderTests.cs              |   64 ++--
 .../Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs     |   10 +-
 src/Libraries/Hyena/Hyena.Data/BaseListModel.cs    |   12 +-
 .../Hyena/Hyena.Data/ColumnDescription.cs          |   20 +-
 src/Libraries/Hyena/Hyena.Data/IListModel.cs       |    8 +-
 .../Hyena/Hyena.Data/IPropertyStoreExpose.cs       |    4 +-
 src/Libraries/Hyena/Hyena.Data/ModelCache.cs       |    8 +-
 src/Libraries/Hyena/Hyena.Data/PropertyStore.cs    |   62 ++--
 src/Libraries/Hyena/Hyena.Jobs/Job.cs              |    4 +-
 src/Libraries/Hyena/Hyena.Jobs/Scheduler.cs        |    2 +-
 .../Hyena/Hyena.Jobs/Tests/SchedulerTests.cs       |    2 +-
 src/Libraries/Hyena/Hyena.Json/Deserializer.cs     |   52 +-
 src/Libraries/Hyena/Hyena.Json/IJsonCollection.cs  |    2 +-
 src/Libraries/Hyena/Hyena.Json/JsonArray.cs        |    6 +-
 src/Libraries/Hyena/Hyena.Json/JsonObject.cs       |    6 +-
 .../Hyena/Hyena.Json/Tests/DeserializerTests.cs    |   18 +-
 .../Hyena/Hyena.Json/Tests/TokenizerTests.cs       |   62 ++--
 src/Libraries/Hyena/Hyena.Json/Token.cs            |   32 +-
 src/Libraries/Hyena/Hyena.Json/TokenType.cs        |    4 +-
 src/Libraries/Hyena/Hyena.Json/Tokenizer.cs        |   76 ++--
 .../Hyena/Hyena.Query/FileSizeQueryValue.cs        |    6 +-
 .../Hyena.Query/IntegerKeyedObjectQueryValue.cs    |    4 +-
 .../Hyena/Hyena.Query/IntegerQueryValue.cs         |    2 +-
 src/Libraries/Hyena/Hyena.Query/NullQueryValue.cs  |    4 +-
 src/Libraries/Hyena/Hyena.Query/QueryField.cs      |    4 +-
 src/Libraries/Hyena/Hyena.Query/QueryListNode.cs   |   34 +-
 src/Libraries/Hyena/Hyena.Query/QueryNode.cs       |   26 +-
 src/Libraries/Hyena/Hyena.Query/QueryOperator.cs   |    2 +-
 src/Libraries/Hyena/Hyena.Query/QueryParser.cs     |    4 +-
 src/Libraries/Hyena/Hyena.Query/QueryTermNode.cs   |    8 +-
 src/Libraries/Hyena/Hyena.Query/QueryToken.cs      |    2 +-
 src/Libraries/Hyena/Hyena.Query/QueryValue.cs      |    2 +-
 .../Hyena.Query/RelativeTimeSpanQueryValue.cs      |    2 +-
 .../Hyena/Hyena.Query/StringQueryValue.cs          |    2 +-
 .../Hyena/Hyena.Query/Tests/QueryTests.cs          |   28 +-
 src/Libraries/Hyena/Hyena.Query/UserQueryParser.cs |   24 +-
 .../Hyena.SExpEngine/ArithmeticFunctionSet.cs      |   44 +-
 .../Hyena/Hyena.SExpEngine/CastFunctionSet.cs      |   20 +-
 .../Hyena/Hyena.SExpEngine/CompareFunctionSet.cs   |   22 +-
 .../Hyena/Hyena.SExpEngine/ControlFunctionSet.cs   |   32 +-
 src/Libraries/Hyena/Hyena.SExpEngine/Evaluator.cs  |    6 +-
 .../Hyena/Hyena.SExpEngine/EvaluatorBase.cs        |  110 +++---
 .../Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs  |   26 +-
 .../Hyena/Hyena.SExpEngine/FunctionNode.cs         |   26 +-
 .../Hyena/Hyena.SExpEngine/FunctionSet.cs          |   24 +-
 .../Hyena/Hyena.SExpEngine/ListFunctionSet.cs      |   70 ++--
 src/Libraries/Hyena/Hyena.SExpEngine/Literals.cs   |   20 +-
 .../Hyena/Hyena.SExpEngine/LogicFunctionSet.cs     |   24 +-
 src/Libraries/Hyena/Hyena.SExpEngine/Parser.cs     |   68 ++--
 .../Hyena/Hyena.SExpEngine/StringFunctionSet.cs    |   52 +-
 src/Libraries/Hyena/Hyena.SExpEngine/TreeNode.cs   |   40 +-
 .../Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs   |   18 +-
 src/Libraries/Hyena/Hyena/ConsoleCrayon.cs         |   14 +-
 src/Libraries/Hyena/Hyena/CryptoUtil.cs            |    4 +-
 src/Libraries/Hyena/Hyena/DateTimeUtil.cs          |    6 +-
 src/Libraries/Hyena/Hyena/Log.cs                   |  154 ++++----
 src/Libraries/Hyena/Hyena/PlatformUtil.cs          |    2 +-
 src/Libraries/Hyena/Hyena/StringUtil.cs            |   56 ++--
 src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs |    2 +-
 src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs |   62 ++--
 src/Libraries/Hyena/Hyena/Tests/TestBase.cs        |   18 +-
 src/Libraries/Hyena/Hyena/Timer.cs                 |    4 +-
 src/Libraries/Hyena/Hyena/UndoManager.cs           |    4 +-
 .../Lastfm.Gui/Lastfm.Gui/AccountLoginDialog.cs    |   46 +-
 .../Lastfm.Gui/Lastfm.Gui/AccountLoginForm.cs      |   36 +-
 src/Libraries/Lastfm.Gui/Lastfm.Gui/Badge.cs       |   14 +-
 src/Libraries/Lastfm.Gui/Test.cs                   |   30 +-
 src/Libraries/Lastfm/Lastfm.Data/DataCore.cs       |   32 +-
 src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs      |   24 +-
 .../Lastfm/Lastfm.Data/LastfmAlbumData.cs          |   24 +-
 src/Libraries/Lastfm/Lastfm.Data/LastfmData.cs     |    2 +-
 src/Libraries/Lastfm/Lastfm/Account.cs             |   22 +-
 .../Lastfm/Lastfm/AudioscrobblerConnection.cs      |  108 +++---
 src/Libraries/Lastfm/Lastfm/Browser.cs             |    4 +-
 src/Libraries/Lastfm/Lastfm/IQueue.cs              |    8 +-
 src/Libraries/Lastfm/Lastfm/LastfmCore.cs          |   16 +-
 src/Libraries/Lastfm/Lastfm/LastfmRequest.cs       |   36 +-
 src/Libraries/Lastfm/Lastfm/RadioConnection.cs     |   12 +-
 .../DownloadGroupStatusChangedEventArgs.cs         |   34 +-
 .../DownloadGroupStatusManager.cs                  |   50 +-
 .../Migo/Migo.DownloadCore/DownloadManager.cs      |  118 +++---
 .../Migo.DownloadCore/HttpDownloadTaskErrors.cs    |   28 +-
 .../Migo.DownloadCore/HttpFileDownloadGroup.cs     |  126 +++---
 .../Migo/Migo.DownloadCore/HttpFileDownloadTask.cs |  332 +++++++-------
 src/Libraries/Migo/Migo.Net/AsyncWebClient.cs      |  342 +++++++-------
 .../Migo/Migo.Net/AsyncWebClientStatus.cs          |   52 +-
 .../EventArgs/DownloadDataCompletedEventArgs.cs    |   36 +-
 .../EventArgs/DownloadProgressChangedEventArgs.cs  |   36 +-
 .../EventArgs/DownloadStringCompletedEventArgs.cs  |   38 +-
 .../EventArgs/TransferRateUpdatedEventArgs.cs      |   40 +-
 .../Exceptions/RemoteFileModifiedException.cs      |   40 +-
 .../Migo/Migo.Net/TransferStatusManager.cs         |  122 +++---
 .../Migo/Migo.Syndication/EnclosureManager.cs      |  262 ++++++------
 .../FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS.cs           |   28 +-
 .../Enumerations/FEEDS_EVENTS_ITEM_COUNT_FLAGS.cs  |   28 +-
 .../Enumerations/FeedBackgroundSyncAction.cs       |   32 +-
 .../Enumerations/FeedBackgroundSyncStatus.cs       |   32 +-
 .../Enumerations/FeedDownloadError.cs              |   32 +-
 .../Enumerations/FeedDownloadStatus.cs             |   28 +-
 .../Enumerations/FeedSyncSetting.cs                |   30 +-
 .../EventArgs/FeedDownloadCompletedEventArgs.cs    |   42 +-
 .../EventArgs/FeedDownloadCountChangedEventArgs.cs |   38 +-
 .../Migo.Syndication/EventArgs/FeedEventArgs.cs    |   38 +-
 .../EventArgs/FeedItemCountChangedEventArgs.cs     |   40 +-
 .../EventArgs/FeedItemEventArgs.cs                 |   32 +-
 src/Libraries/Migo/Migo.Syndication/Feed.cs        |  238 +++++-----
 .../Migo/Migo.Syndication/FeedEnclosure.cs         |  106 +++---
 src/Libraries/Migo/Migo.Syndication/FeedItem.cs    |   60 ++--
 src/Libraries/Migo/Migo.Syndication/FeedManager.cs |   48 +-
 .../Migo/Migo.Syndication/FeedUpdateTask.cs        |   82 ++--
 .../Migo/Migo.Syndication/FeedsManager.cs          |  188 ++++----
 .../TablesManagers/EnclosuresTableManager.cs       |  226 +++++-----
 .../TablesManagers/FeedsTableManager.cs            |  342 +++++++-------
 .../TablesManagers/ItemsTableManager.cs            |  288 ++++++------
 src/Libraries/Migo/Migo.Syndication/MigoItem.cs    |    2 +-
 .../Migo/Migo.Syndication/MigoModelProvider.cs     |   18 +-
 .../Migo/Migo.Syndication/Rfc822DateTime.cs        |   52 +-
 src/Libraries/Migo/Migo.Syndication/RssParser.cs   |   98 ++--
 .../Migo/Migo.Syndication/Tests/XmlTests.cs        |    6 +-
 .../AsyncCommandQueue/AsyncCommandQueue.cs         |  122 +++---
 .../AsyncCommandQueue/CommandDelegate.cs           |   28 +-
 .../AsyncCommandQueue/CommandQueueManager.cs       |   46 +-
 .../AsyncCommandQueue/CommandWrapper.cs            |   32 +-
 .../AsyncCommandQueue/EventWrapper.cs              |   32 +-
 .../Migo.TaskCore/AsyncCommandQueue/ICommand.cs    |   26 +-
 .../Migo/Migo.TaskCore/AsyncTaskScheduler.cs       |  134 +++---
 .../Migo.TaskCore/Enumerations/TaskPriority.cs     |   28 +-
 .../Migo/Migo.TaskCore/Enumerations/TaskStatus.cs  |   28 +-
 .../EventArgs/GroupStatusChangedEventArgs.cs       |   38 +-
 .../EventArgs/TaskCompletedEventArgs.cs            |   28 +-
 .../Migo/Migo.TaskCore/EventArgs/TaskEventArgs.cs  |   44 +-
 .../EventArgs/TaskStatusChangedEventArgs.cs        |   40 +-
 .../EventArgs/TaskStatusChangedInfo.cs             |   40 +-
 .../Exceptions/TaskStatusException.cs              |   32 +-
 .../Migo/Migo.TaskCore/GroupProgressManager.cs     |  110 +++---
 .../Migo/Migo.TaskCore/GroupStatusManager.cs       |  184 ++++----
 .../EventArgs/ManipulatedEventArgs.cs              |   46 +-
 .../EventArgs/ReorderedEventArgs.cs                |   30 +-
 .../EventArgs/TaskAddedEventArgs.cs                |   56 ++--
 .../EventArgs/TaskRemovedEventArgs.cs              |   46 +-
 .../ITaskCollectionEnumerator.cs                   |   32 +-
 .../Migo.TaskCore.Collections/PriorityQueue.cs     |   24 +-
 .../Migo.TaskCore.Collections/TaskCollection.cs    |  124 +++---
 .../Migo.TaskCore.Collections/TaskList.cs          |  260 ++++++------
 .../TaskListEnumerator.cs                          |   82 ++--
 src/Libraries/Migo/Migo.TaskCore/Task.cs           |  140 +++---
 src/Libraries/Migo/Migo.TaskCore/TaskGroup.cs      |  482 ++++++++++----------
 .../Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs   |    6 +-
 .../Mono.Data.Sqlite/SQLite3_UTF16.cs              |    6 +-
 .../Mono.Data.Sqlite/SQLiteBase.cs                 |   10 +-
 .../Mono.Data.Sqlite/SQLiteCommand.cs              |   12 +-
 .../Mono.Data.Sqlite/SQLiteCommandBuilder.cs       |    8 +-
 .../Mono.Data.Sqlite/SQLiteConnection.cs           |   36 +-
 .../SQLiteConnectionStringBuilder.cs               |    8 +-
 .../Mono.Data.Sqlite/SQLiteConvert.cs              |   14 +-
 .../Mono.Data.Sqlite/SQLiteDataAdapter.cs          |    6 +-
 .../Mono.Data.Sqlite/SQLiteDataReader.cs           |   58 ++--
 .../Mono.Data.Sqlite/SQLiteEnlistment.cs           |    6 +-
 .../Mono.Data.Sqlite/SQLiteException.cs            |    6 +-
 .../Mono.Data.Sqlite/SQLiteFactory.cs              |    6 +-
 .../Mono.Data.Sqlite/SQLiteFunction.cs             |   14 +-
 .../Mono.Data.Sqlite/SQLiteFunctionAttribute.cs    |    6 +-
 .../SQLiteMetaDataCollectionNames.cs               |    6 +-
 .../Mono.Data.Sqlite/SQLiteParameter.cs            |   16 +-
 .../Mono.Data.Sqlite/SQLiteParameterCollection.cs  |    6 +-
 .../Mono.Data.Sqlite/SQLiteStatement.cs            |   12 +-
 .../Mono.Data.Sqlite/SQLiteTransaction.cs          |    6 +-
 .../Mono.Data.Sqlite/SR.Designer.cs                |   24 +-
 .../Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs |    8 +-
 .../Mono.Data.Sqlite/UnsafeNativeMethods.cs        |   10 +-
 .../Mono.Media/Media.Playlists.Xspf/LinkEntry.cs   |   10 +-
 .../Mono.Media/Media.Playlists.Xspf/MetaEntry.cs   |    8 +-
 .../Mono.Media/Media.Playlists.Xspf/Playlist.cs    |  102 ++--
 .../Media.Playlists.Xspf/Tests/XspfTests.cs        |    2 +-
 .../Mono.Media/Media.Playlists.Xspf/Track.cs       |   80 ++--
 .../Mono.Media/Media.Playlists.Xspf/W3CDateTime.cs |   76 ++--
 .../Mono.Media/Media.Playlists.Xspf/XmlUtil.cs     |   58 ++--
 .../Media.Playlists.Xspf/XspfBaseObject.cs         |   48 +-
 src/Libraries/Mtp/Mtp/AbstractTrackList.cs         |    2 +-
 src/Libraries/Mtp/Mtp/Album.cs                     |   28 +-
 src/Libraries/Mtp/Mtp/Error.cs                     |   24 +-
 src/Libraries/Mtp/Mtp/ErrorCode.cs                 |   24 +-
 src/Libraries/Mtp/Mtp/File.cs                      |   24 +-
 src/Libraries/Mtp/Mtp/FileSampleData.cs            |   24 +-
 src/Libraries/Mtp/Mtp/FileType.cs                  |   24 +-
 src/Libraries/Mtp/Mtp/Folder.cs                    |   30 +-
 src/Libraries/Mtp/Mtp/MtpDevice.cs                 |   26 +-
 src/Libraries/Mtp/Mtp/Playlist.cs                  |   24 +-
 src/Libraries/Mtp/Mtp/Track.cs                     |   24 +-
 src/Libraries/MusicBrainz/MusicBrainz/Artist.cs    |   50 +-
 src/Libraries/MusicBrainz/MusicBrainz/Disc.cs      |    2 +-
 src/Libraries/MusicBrainz/MusicBrainz/DiscLinux.cs |   58 ++--
 src/Libraries/MusicBrainz/MusicBrainz/DiscWin32.cs |    4 +-
 .../MusicBrainz/MusicBrainz/DiscWin32NT.cs         |    2 +-
 src/Libraries/MusicBrainz/MusicBrainz/Label.cs     |   32 +-
 src/Libraries/MusicBrainz/MusicBrainz/LocalDisc.cs |   24 +-
 .../MusicBrainz/MusicBrainz/MusicBrainzEntity.cs   |   24 +-
 .../MusicBrainz/MusicBrainz/MusicBrainzItem.cs     |   36 +-
 .../MusicBrainz/MusicBrainz/MusicBrainzObject.cs   |   68 ++--
 .../MusicBrainz/MusicBrainz/MusicBrainzService.cs  |    6 +-
 src/Libraries/MusicBrainz/MusicBrainz/Query.cs     |   46 +-
 src/Libraries/MusicBrainz/MusicBrainz/Relation.cs  |    6 +-
 src/Libraries/MusicBrainz/MusicBrainz/Release.cs   |   46 +-
 src/Libraries/MusicBrainz/MusicBrainz/Track.cs     |   40 +-
 src/Libraries/MusicBrainz/MusicBrainz/Utils.cs     |   14 +-
 .../MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs |    2 +-
 878 files changed, 16558 insertions(+), 16560 deletions(-)
---
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs
index fe466fd..a9fd24a 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs
@@ -48,106 +48,106 @@ namespace Banshee.GStreamer
         private string output_extension;
         private string output_path;
         private TrackInfo current_track;
-        
+
         private RipperProgressHandler progress_handler;
         private RipperMimeTypeHandler mimetype_handler;
         private RipperFinishedHandler finished_handler;
         private RipperErrorHandler error_handler;
-    
+
         public event AudioCdRipperProgressHandler Progress;
         public event AudioCdRipperTrackFinishedHandler TrackFinished;
         public event AudioCdRipperErrorHandler Error;
-        
+
         public void Begin (string device, bool enableErrorCorrection)
         {
             try {
                 Profile profile = null;
                 ProfileConfiguration config = ServiceManager.MediaProfileManager.GetActiveProfileConfiguration ("cd-importing");
-                
+
                 if (config != null) {
                     profile = config.Profile;
                 } else {
-                    profile = ServiceManager.MediaProfileManager.GetProfileForMimeType ("audio/vorbis") 
+                    profile = ServiceManager.MediaProfileManager.GetProfileForMimeType ("audio/vorbis")
                         ?? ServiceManager.MediaProfileManager.GetProfileForMimeType ("audio/flac");
                     if (profile != null) {
                         Log.InformationFormat ("Using default/fallback encoding profile: {0}", profile.Name);
                         ProfileConfiguration.SaveActiveProfile (profile, "cd-importing");
                     }
                 }
-                
+
                 if (profile != null) {
                     encoder_pipeline = profile.Pipeline.GetProcessById ("gstreamer");
                     output_extension = profile.OutputFileExtension;
                 }
-                
+
                 if (String.IsNullOrEmpty (encoder_pipeline)) {
                     throw new ApplicationException ();
                 }
-                
+
                 Hyena.Log.InformationFormat ("Ripping using encoder profile `{0}' with pipeline: {1}", profile.Name, encoder_pipeline);
             } catch (Exception e) {
                 throw new ApplicationException (Catalog.GetString ("Could not find an encoder for ripping."), e);
             }
-            
-            try {   
+
+            try {
                 int paranoia_mode = enableErrorCorrection ? 255 : 0;
                 handle = new HandleRef (this, br_new (device, paranoia_mode, encoder_pipeline));
-                
+
                 progress_handler = new RipperProgressHandler (OnNativeProgress);
                 br_set_progress_callback (handle, progress_handler);
-                
+
                 mimetype_handler = new RipperMimeTypeHandler (OnNativeMimeType);
                 br_set_mimetype_callback (handle, mimetype_handler);
-                
+
                 finished_handler = new RipperFinishedHandler (OnNativeFinished);
                 br_set_finished_callback (handle, finished_handler);
-                
+
                 error_handler = new RipperErrorHandler (OnNativeError);
                 br_set_error_callback (handle, error_handler);
             } catch (Exception e) {
                 throw new ApplicationException (Catalog.GetString ("Could not create CD ripping driver."), e);
             }
         }
-        
+
         public void Finish ()
         {
             if (output_path != null) {
                 System.IO.File.Delete (output_path);
             }
-        
+
             TrackReset ();
-            
+
             encoder_pipeline = null;
             output_extension = null;
-            
+
             br_destroy (handle);
             handle = new HandleRef (this, IntPtr.Zero);
         }
-        
+
         public void Cancel ()
         {
             Finish ();
         }
-        
+
         private void TrackReset ()
         {
             current_track = null;
             output_path = null;
         }
-        
+
         public void RipTrack (int trackIndex, TrackInfo track, SafeUri outputUri, out bool taggingSupported)
         {
             TrackReset ();
             current_track = track;
-            
+
             using (TagList tags = new TagList (track)) {
                 output_path = String.Format ("{0}.{1}", outputUri.LocalPath, output_extension);
                 Log.DebugFormat ("GStreamer ripping track {0} to {1}", trackIndex, output_path);
-                
+
                 br_rip_track (handle, trackIndex + 1, output_path, tags.Handle, out taggingSupported);
             }
         }
-        
+
         protected virtual void OnProgress (TrackInfo track, TimeSpan ellapsedTime)
         {
             AudioCdRipperProgressHandler handler = Progress;
@@ -155,7 +155,7 @@ namespace Banshee.GStreamer
                 handler (this, new AudioCdRipperProgressArgs (track, ellapsedTime, track.Duration));
             }
         }
-        
+
         protected virtual void OnTrackFinished (TrackInfo track, SafeUri outputUri)
         {
             AudioCdRipperTrackFinishedHandler handler = TrackFinished;
@@ -163,7 +163,7 @@ namespace Banshee.GStreamer
                 handler (this, new AudioCdRipperTrackFinishedArgs (track, outputUri));
             }
         }
-        
+
         protected virtual void OnError (TrackInfo track, string message)
         {
             AudioCdRipperErrorHandler handler = Error;
@@ -171,12 +171,12 @@ namespace Banshee.GStreamer
                 handler (this, new AudioCdRipperErrorArgs (track, message));
             }
         }
-        
+
         private void OnNativeProgress (IntPtr ripper, int mseconds)
         {
             OnProgress (current_track, TimeSpan.FromMilliseconds (mseconds));
         }
-        
+
         private void OnNativeMimeType (IntPtr ripper, IntPtr mimetype)
         {
             if (mimetype != IntPtr.Zero && current_track != null) {
@@ -191,55 +191,55 @@ namespace Banshee.GStreamer
                 }
             }
         }
-        
+
         private void OnNativeFinished (IntPtr ripper)
         {
             SafeUri uri = new SafeUri (output_path);
             TrackInfo track = current_track;
-            
+
             TrackReset ();
-            
+
             OnTrackFinished (track, uri);
         }
-        
+
         private void OnNativeError (IntPtr ripper, IntPtr error, IntPtr debug)
         {
             string error_message = GLib.Marshaller.Utf8PtrToString (error);
-            
+
             if (debug != IntPtr.Zero) {
                 string debug_string = GLib.Marshaller.Utf8PtrToString (debug);
                 if (!String.IsNullOrEmpty (debug_string)) {
                     error_message = String.Format ("{0}: {1}", error_message, debug_string);
                 }
             }
-            
+
             OnError (current_track, error_message);
         }
-        
+
         private delegate void RipperProgressHandler (IntPtr ripper, int mseconds);
         private delegate void RipperMimeTypeHandler (IntPtr ripper, IntPtr mimetype);
         private delegate void RipperFinishedHandler (IntPtr ripper);
         private delegate void RipperErrorHandler (IntPtr ripper, IntPtr error, IntPtr debug);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern IntPtr br_new (string device, int paranoia_mode, string encoder_pipeline);
 
         [DllImport ("libbanshee.dll")]
         private static extern void br_destroy (HandleRef handle);
-        
+
         [DllImport ("libbanshee.dll")]
-        private static extern void br_rip_track (HandleRef handle, int track_number, string output_path, 
+        private static extern void br_rip_track (HandleRef handle, int track_number, string output_path,
             HandleRef tag_list, out bool tagging_supported);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void br_set_progress_callback (HandleRef handle, RipperProgressHandler callback);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void br_set_mimetype_callback (HandleRef handle, RipperMimeTypeHandler callback);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void br_set_finished_callback (HandleRef handle, RipperFinishedHandler callback);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void br_set_error_callback (HandleRef handle, RipperErrorHandler callback);
     }
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/BpmDetector.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/BpmDetector.cs
index 48b2e73..652ce84 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/BpmDetector.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/BpmDetector.cs
@@ -1,4 +1,4 @@
-// 
+//
 // BpmDetector.cs
 //
 // Author:
@@ -54,14 +54,14 @@ namespace Banshee.GStreamer
         private BpmDetectorProgressHandler progress_cb;
         private BpmDetectorFinishedHandler finished_cb;
         //private BpmDetectorErrorHandler error_cb;
-        
+
         public event BpmEventHandler FileFinished;
-        
+
         public BpmDetector ()
         {
-            try {   
+            try {
                 handle = new HandleRef (this, bbd_new ());
-                
+
                 progress_cb = new BpmDetectorProgressHandler (OnNativeProgress);
                 bbd_set_progress_callback (handle, progress_cb);
 
@@ -71,15 +71,15 @@ namespace Banshee.GStreamer
                 throw new ApplicationException (Catalog.GetString ("Could not create BPM detection driver."), e);
             }
         }
-        
+
         public void Dispose ()
         {
             Reset ();
-            
+
             bbd_destroy (handle);
             handle = new HandleRef (this, IntPtr.Zero);
         }
-        
+
         public void Cancel ()
         {
             Dispose ();
@@ -88,18 +88,18 @@ namespace Banshee.GStreamer
         public bool IsDetecting {
             get { return bbd_get_is_detecting (handle); }
         }
-        
+
         private void Reset ()
         {
             current_uri = null;
             bpm_histogram.Clear ();
         }
-        
+
         public void ProcessFile (SafeUri uri)
         {
             Reset ();
             current_uri = uri;
-            
+
             string path = uri.LocalPath;
             IntPtr path_ptr = GLib.Marshaller.StringToPtrGStrdup (path);
             try {
@@ -111,7 +111,7 @@ namespace Banshee.GStreamer
                 GLib.Marshaller.Free (path_ptr);
             }
         }
-        
+
         private void OnFileFinished (SafeUri uri, int bpm)
         {
             BpmEventHandler handler = FileFinished;
@@ -119,7 +119,7 @@ namespace Banshee.GStreamer
                 handler (this, new BpmEventArgs (uri, bpm));
             }
         }
-        
+
         private void OnNativeProgress (double bpm)
         {
             int rounded = (int) Math.Round (bpm);
@@ -129,7 +129,7 @@ namespace Banshee.GStreamer
                 bpm_histogram[rounded]++;
             }
         }
-        
+
         private void OnNativeFinished ()
         {
             SafeUri uri = current_uri;
@@ -146,28 +146,28 @@ namespace Banshee.GStreamer
             Reset ();
             OnFileFinished (uri, best_bpm);
         }
-        
+
         /*private void OnNativeError (IntPtr error, IntPtr debug)
         {
             string error_message = GLib.Marshaller.Utf8PtrToString (error);
-            
+
             if (debug != IntPtr.Zero) {
                 string debug_string = GLib.Marshaller.Utf8PtrToString (debug);
                 if (!String.IsNullOrEmpty (debug_string)) {
                     error_message = String.Format ("{0}: {1}", error_message, debug_string);
                 }
             }
-            
+
             Log.Debug (error_message);
             SafeUri uri = current_uri;
             Reset ();
             OnFileFinished (uri, 0);
         }*/
-        
+
         private delegate void BpmDetectorProgressHandler (double bpm);
         private delegate void BpmDetectorFinishedHandler ();
         //private delegate void BpmDetectorErrorHandler (IntPtr error, IntPtr debug);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern IntPtr bbd_new ();
 
@@ -176,16 +176,16 @@ namespace Banshee.GStreamer
 
         [DllImport ("libbanshee.dll")]
         private static extern bool bbd_get_is_detecting (HandleRef handle);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bbd_process_file (HandleRef handle, IntPtr path);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bbd_set_progress_callback (HandleRef handle, BpmDetectorProgressHandler callback);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bbd_set_finished_callback (HandleRef handle, BpmDetectorFinishedHandler callback);
-        
+
         //[DllImport ("libbanshee.dll")]
         //private static extern void bbd_set_error_callback (HandleRef handle, BpmDetectorErrorHandler callback);
     }
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/GstErrors.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/GstErrors.cs
index cd02884..d2cd1f0 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/GstErrors.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/GstErrors.cs
@@ -1,4 +1,4 @@
-// 
+//
 // GstErrors.cs
 //
 // Author:
@@ -30,7 +30,7 @@ using System;
 
 namespace Banshee.GStreamer
 {
-    internal enum GstCoreError 
+    internal enum GstCoreError
     {
         Failed = 1,
         TooLazy,
@@ -47,8 +47,8 @@ namespace Banshee.GStreamer
         Clock,
         NumErrors
     }
-    
-    internal enum GstLibraryError 
+
+    internal enum GstLibraryError
     {
         Failed = 1,
         Init,
@@ -57,8 +57,8 @@ namespace Banshee.GStreamer
         Encode,
         NumErrors
     }
-    
-    internal enum GstResourceError 
+
+    internal enum GstResourceError
     {
         Failed = 1,
         TooLazy,
@@ -76,8 +76,8 @@ namespace Banshee.GStreamer
         NoSpaceLeft,
         NumErrors
     }
-    
-    internal enum GstStreamError 
+
+    internal enum GstStreamError
     {
         Failed = 1,
         TooLazy,
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
index be40856..3193187 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
@@ -1,4 +1,4 @@
-// 
+//
 // PlayerEngine.cs
 //
 // Author:
@@ -60,17 +60,17 @@ namespace Banshee.GStreamer
     internal delegate IntPtr VideoPipelineSetupHandler (IntPtr player, IntPtr bus);
 
     internal delegate void GstTaggerTagFoundCallback (IntPtr player, string tagName, ref GLib.Value value);
-    
-    public class PlayerEngine : Banshee.MediaEngine.PlayerEngine, 
+
+    public class PlayerEngine : Banshee.MediaEngine.PlayerEngine,
         IEqualizer, IVisualizationDataSource, ISupportClutter
     {
         private uint GST_CORE_ERROR = 0;
         private uint GST_LIBRARY_ERROR = 0;
         private uint GST_RESOURCE_ERROR = 0;
-        private uint GST_STREAM_ERROR = 0; 
-    
+        private uint GST_STREAM_ERROR = 0;
+
         private HandleRef handle;
-        
+
         private BansheePlayerEosCallback eos_callback;
         private BansheePlayerErrorCallback error_callback;
         private BansheePlayerStateChangedCallback state_changed_callback;
@@ -79,11 +79,11 @@ namespace Banshee.GStreamer
         private BansheePlayerVisDataCallback vis_data_callback;
         private VideoPipelineSetupHandler video_pipeline_setup_callback;
         private GstTaggerTagFoundCallback tag_found_callback;
-        
+
         private bool buffering_finished;
         private int pending_volume = -1;
         private bool xid_is_set = false;
-        
+
         private event VisualizationDataHandler data_available = null;
         public event VisualizationDataHandler DataAvailable {
             add {
@@ -95,7 +95,7 @@ namespace Banshee.GStreamer
 
                 data_available += value;
             }
-            
+
             remove {
                 if (value == null) {
                     return;
@@ -117,16 +117,16 @@ namespace Banshee.GStreamer
         public PlayerEngine ()
         {
             IntPtr ptr = bp_new ();
-            
+
             if (ptr == IntPtr.Zero) {
                 throw new ApplicationException (Catalog.GetString ("Could not initialize GStreamer library"));
             }
-            
+
             handle = new HandleRef (this, ptr);
-            
-            bp_get_error_quarks (out GST_CORE_ERROR, out GST_LIBRARY_ERROR, 
+
+            bp_get_error_quarks (out GST_CORE_ERROR, out GST_LIBRARY_ERROR,
                 out GST_RESOURCE_ERROR, out GST_STREAM_ERROR);
-            
+
             eos_callback = new BansheePlayerEosCallback (OnEos);
             error_callback = new BansheePlayerErrorCallback (OnError);
             state_changed_callback = new BansheePlayerStateChangedCallback (OnStateChange);
@@ -135,7 +135,7 @@ namespace Banshee.GStreamer
             vis_data_callback = new BansheePlayerVisDataCallback (OnVisualizationData);
             video_pipeline_setup_callback = new VideoPipelineSetupHandler (OnVideoPipelineSetup);
             tag_found_callback = new GstTaggerTagFoundCallback (OnTagFound);
-            
+
             bp_set_eos_callback (handle, eos_callback);
             bp_set_iterate_callback (handle, iterate_callback);
             bp_set_error_callback (handle, error_callback);
@@ -144,7 +144,7 @@ namespace Banshee.GStreamer
             bp_set_tag_found_callback (handle, tag_found_callback);
             bp_set_video_pipeline_setup_callback (handle, video_pipeline_setup_callback);
         }
-        
+
         protected override void Initialize ()
         {
             if (!bp_initialize_pipeline (handle)) {
@@ -154,15 +154,15 @@ namespace Banshee.GStreamer
             }
 
             OnStateChanged (PlayerState.Ready);
-            
+
             if (pending_volume >= 0) {
                 Volume = (ushort)pending_volume;
             }
-            
+
             InstallPreferences ();
             ReplayGainEnabled = ReplayGainEnabledSchema.Get ();
         }
-        
+
         public override void Dispose ()
         {
             UninstallPreferences ();
@@ -170,13 +170,13 @@ namespace Banshee.GStreamer
             bp_destroy (handle);
             handle = new HandleRef (this, IntPtr.Zero);
         }
-        
+
         public override void Close (bool fullShutdown)
         {
             bp_stop (handle, fullShutdown);
             base.Close (fullShutdown);
         }
-        
+
         protected override void OpenUri (SafeUri uri)
         {
             // The GStreamer engine can use the XID of the main window if it ever
@@ -189,7 +189,7 @@ namespace Banshee.GStreamer
                 }
                 xid_is_set = true;
             }
-                
+
             IntPtr uri_ptr = GLib.Marshaller.StringToPtrGStrdup (uri.AbsoluteUri);
             try {
                 if (!bp_open (handle, uri_ptr)) {
@@ -199,17 +199,17 @@ namespace Banshee.GStreamer
                 GLib.Marshaller.Free (uri_ptr);
             }
         }
-        
+
         public override void Play ()
         {
             bp_play (handle);
         }
-        
+
         public override void Pause ()
         {
             bp_pause (handle);
         }
-        
+
         public override void VideoExpose (IntPtr window, bool direct)
         {
             bp_video_window_expose (handle, window, direct);
@@ -218,11 +218,11 @@ namespace Banshee.GStreamer
         public override IntPtr [] GetBaseElements ()
         {
             IntPtr [] elements = new IntPtr[3];
-            
+
             if (bp_get_pipeline_elements (handle, out elements[0], out elements[1], out elements[2])) {
                 return elements;
             }
-            
+
             return null;
         }
 
@@ -231,12 +231,12 @@ namespace Banshee.GStreamer
             Close (false);
             OnEventChanged (PlayerEvent.EndOfStream);
         }
-        
+
         private void OnIterate (IntPtr player)
         {
             OnEventChanged (PlayerEvent.Iterate);
         }
-        
+
         private void OnStateChange (IntPtr player, GstState old_state, GstState new_state, GstState pending_state)
         {
             if (old_state == GstState.Ready && new_state == GstState.Paused && pending_state == GstState.Playing) {
@@ -253,11 +253,11 @@ namespace Banshee.GStreamer
                 return;
             }
         }
-        
+
         private void OnError (IntPtr player, uint domain, int code, IntPtr error, IntPtr debug)
         {
             Close (true);
-            
+
             string error_message = error == IntPtr.Zero
                 ? Catalog.GetString ("Unknown Error")
                 : GLib.Marshaller.Utf8PtrToString (error);
@@ -271,9 +271,9 @@ namespace Banshee.GStreamer
                             break;
                         default:
                             break;
-                    }        
+                    }
                 }
-                
+
                 Log.Error (String.Format ("GStreamer resource error: {0}", domain_code), false);
             } else if (domain == GST_STREAM_ERROR) {
                 GstStreamError domain_code = (GstStreamError) code;
@@ -286,7 +286,7 @@ namespace Banshee.GStreamer
                             break;
                     }
                 }
-                
+
                 Log.Error (String.Format("GStreamer stream error: {0}", domain_code), false);
             } else if (domain == GST_CORE_ERROR) {
                 GstCoreError domain_code = (GstCoreError) code;
@@ -299,191 +299,191 @@ namespace Banshee.GStreamer
                             break;
                     }
                 }
-                
+
                 if (domain_code != GstCoreError.MissingPlugin) {
                     Log.Error (String.Format("GStreamer core error: {0}", (GstCoreError) code), false);
                 }
             } else if (domain == GST_LIBRARY_ERROR) {
                 Log.Error (String.Format("GStreamer library error: {0}", (GstLibraryError) code), false);
             }
-            
+
             OnEventChanged (new PlayerEventErrorArgs (error_message));
         }
-        
+
         private void OnBuffering (IntPtr player, int progress)
         {
             if (buffering_finished && progress >= 100) {
                 return;
             }
-            
+
             buffering_finished = progress >= 100;
             OnEventChanged (new PlayerEventBufferingArgs ((double) progress / 100.0));
         }
-        
+
         private void OnTagFound (IntPtr player, string tagName, ref GLib.Value value)
         {
             OnTagFound (ProcessNativeTagResult (tagName, ref value));
         }
-        
+
         private void OnVisualizationData (IntPtr player, int channels, int samples, IntPtr data, int bands, IntPtr spectrum)
         {
             VisualizationDataHandler handler = data_available;
-            
+
             if (handler == null) {
                 return;
             }
-            
+
             float [] flat = new float[channels * samples];
             Marshal.Copy (data, flat, 0, flat.Length);
-            
+
             float [][] cbd = new float[channels][];
             for (int i = 0; i < channels; i++) {
                 float [] channel = new float[samples];
                 Array.Copy (flat, i * samples, channel, 0, samples);
                 cbd[i] = channel;
             }
-            
+
             float [] spec = new float[bands];
             Marshal.Copy (spectrum, spec, 0, bands);
-            
+
             try {
                 handler (cbd, new float[][] { spec });
             } catch (Exception e) {
                 Log.Exception ("Uncaught exception during visualization data post.", e);
             }
         }
-        
+
         private static StreamTag ProcessNativeTagResult (string tagName, ref GLib.Value valueRaw)
         {
             if (tagName == String.Empty || tagName == null) {
                 return StreamTag.Zero;
             }
-        
+
             object value = null;
-            
+
             try {
                 value = valueRaw.Val;
             } catch {
                 return StreamTag.Zero;
             }
-            
+
             if (value == null) {
                 return StreamTag.Zero;
             }
-            
+
             StreamTag item;
             item.Name = tagName;
             item.Value = value;
-            
+
             return item;
         }
-        
+
         public override ushort Volume {
             get { return (ushort)Math.Round (bp_get_volume (handle) * 100.0); }
-            set { 
+            set {
                 if ((IntPtr)handle == IntPtr.Zero) {
                     pending_volume = value;
                     return;
                 }
-                
+
                 bp_set_volume (handle, value / 100.0);
                 OnEventChanged (PlayerEvent.Volume);
             }
         }
-        
+
         public override uint Position {
             get { return (uint)bp_get_position(handle); }
-            set { 
+            set {
                 bp_set_position (handle, (ulong)value);
                 OnEventChanged (PlayerEvent.Seek);
             }
         }
-        
+
         public override bool CanSeek {
             get { return bp_can_seek (handle); }
         }
-        
+
         public override uint Length {
             get { return (uint)bp_get_duration (handle); }
         }
-        
+
         public override string Id {
             get { return "gstreamer"; }
         }
-        
+
         public override string Name {
             get { return "GStreamer 0.10"; }
         }
-        
+
         private bool? supports_equalizer = null;
         public override bool SupportsEqualizer {
-            get { 
+            get {
                 if (supports_equalizer == null) {
-                    supports_equalizer = bp_equalizer_is_supported (handle); 
+                    supports_equalizer = bp_equalizer_is_supported (handle);
                 }
-                
+
                 return supports_equalizer.Value;
             }
         }
-        
+
         public override VideoDisplayContextType VideoDisplayContextType {
             get { return bp_video_get_display_context_type (handle); }
         }
-        
+
         public override IntPtr VideoDisplayContext {
             set { bp_video_set_display_context (handle, value); }
             get { return bp_video_get_display_context (handle); }
         }
-        
+
         public double AmplifierLevel {
             set {
                 double scale = Math.Pow (10.0, value / 20.0);
                 bp_equalizer_set_preamp_level (handle, scale);
             }
         }
-        
+
         public int [] BandRange {
             get {
                 int min = -1;
                 int max = -1;
-                
+
                 bp_equalizer_get_bandrange (handle, out min, out max);
-                
+
                 return new int [] { min, max };
             }
         }
-        
+
         public uint [] EqualizerFrequencies {
             get {
                 uint count = bp_equalizer_get_nbands (handle);
                 double [] freq = new double[count];
 
                 bp_equalizer_get_frequencies (handle, out freq);
-                
+
                 uint [] ret = new uint[count];
                 for (int i = 0; i < count; i++) {
                     ret[i] = (uint)freq[i];
                 }
-                
+
                 return ret;
             }
         }
-        
+
         public void SetEqualizerGain (uint band, double gain)
         {
             bp_equalizer_set_gain (handle, band, gain);
         }
-        
+
         private static string [] source_capabilities = { "file", "http", "cdda" };
         public override IEnumerable SourceCapabilities {
             get { return source_capabilities; }
         }
-                
+
         private static string [] decoder_capabilities = { "ogg", "wma", "asf", "flac" };
         public override IEnumerable ExplicitDecoderCapabilities {
             get { return decoder_capabilities; }
         }
-        
+
         private bool ReplayGainEnabled {
             get { return bp_replaygain_get_enabled (handle); }
             set { bp_replaygain_set_enabled (handle, value); }
@@ -508,7 +508,7 @@ namespace Banshee.GStreamer
         }
 
         public bool IsClutterVideoSinkInitialized {
-            get { return 
+            get { return
                 clutter_video_sink_enabled &&
                 clutter_video_texture != IntPtr.Zero &&
                 clutter_video_sink != IntPtr.Zero;
@@ -522,7 +522,7 @@ namespace Banshee.GStreamer
                     if (clutter_video_sink != IntPtr.Zero) {
                         // FIXME: does this get unreffed by the pipeline?
                     }
-                    
+
                     clutter_video_sink = clutter_gst_video_sink_new (clutter_video_texture);
                 } else if (!clutter_video_sink_enabled && clutter_video_sink != IntPtr.Zero) {
                     clutter_video_sink = IntPtr.Zero;
@@ -539,7 +539,7 @@ namespace Banshee.GStreamer
         }
 
 #endregion
-        
+
 #region Preferences
 
         private PreferenceBase replaygain_preference;
@@ -550,60 +550,60 @@ namespace Banshee.GStreamer
             if (service == null) {
                 return;
             }
-            
-            replaygain_preference = service["general"]["misc"].Add (new SchemaPreference<bool> (ReplayGainEnabledSchema, 
+
+            replaygain_preference = service["general"]["misc"].Add (new SchemaPreference<bool> (ReplayGainEnabledSchema,
                 Catalog.GetString ("_Enable ReplayGain correction"),
                 Catalog.GetString ("For tracks that have ReplayGain data, automatically scale (normalize) playback volume"),
                 delegate { ReplayGainEnabled = ReplayGainEnabledSchema.Get (); }
             ));
         }
-        
+
         private void UninstallPreferences ()
         {
             PreferenceService service = ServiceManager.Get<PreferenceService> ();
             if (service == null) {
                 return;
             }
-            
+
             service["general"]["misc"].Remove (replaygain_preference);
             replaygain_preference = null;
         }
-        
+
         public static readonly SchemaEntry<bool> ReplayGainEnabledSchema = new SchemaEntry<bool> (
-            "player_engine", "replay_gain_enabled", 
+            "player_engine", "replay_gain_enabled",
             false,
             "Enable ReplayGain",
             "If ReplayGain data is present on tracks when playing, allow volume scaling"
         );
 
 #endregion
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern IntPtr bp_new ();
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_initialize_pipeline (HandleRef player);
 
         [DllImport ("libbanshee.dll")]
         private static extern void bp_destroy (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_eos_callback (HandleRef player, BansheePlayerEosCallback cb);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_error_callback (HandleRef player, BansheePlayerErrorCallback cb);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_vis_data_callback (HandleRef player, BansheePlayerVisDataCallback cb);
-        
+
         [DllImport ("libbanshee.dll")]
-        private static extern void bp_set_state_changed_callback (HandleRef player, 
+        private static extern void bp_set_state_changed_callback (HandleRef player,
             BansheePlayerStateChangedCallback cb);
-            
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_iterate_callback (HandleRef player,
             BansheePlayerIterateCallback cb);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_buffering_callback (HandleRef player,
             BansheePlayerBufferingCallback cb);
@@ -611,86 +611,86 @@ namespace Banshee.GStreamer
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_video_pipeline_setup_callback (HandleRef player,
             VideoPipelineSetupHandler cb);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_tag_found_callback (HandleRef player,
             GstTaggerTagFoundCallback cb);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_open (HandleRef player, IntPtr uri);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_stop (HandleRef player, bool nullstate);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_pause (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_play (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_volume (HandleRef player, double volume);
-        
+
         [DllImport("libbanshee.dll")]
         private static extern double bp_get_volume (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_can_seek (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_set_position (HandleRef player, ulong time_ms);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern ulong bp_get_position (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern ulong bp_get_duration (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_get_pipeline_elements (HandleRef player, out IntPtr playbin,
             out IntPtr audiobin, out IntPtr audiotee);
-            
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_set_application_gdk_window (HandleRef player, IntPtr window);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern VideoDisplayContextType bp_video_get_display_context_type (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_video_set_display_context (HandleRef player, IntPtr displayContext);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern IntPtr bp_video_get_display_context (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_video_window_expose (HandleRef player, IntPtr displayContext, bool direct);
-                                                                   
+
         [DllImport ("libbanshee.dll")]
-        private static extern void bp_get_error_quarks (out uint core, out uint library, 
+        private static extern void bp_get_error_quarks (out uint core, out uint library,
             out uint resource, out uint stream);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_equalizer_is_supported (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_equalizer_set_preamp_level (HandleRef player, double level);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_equalizer_set_gain (HandleRef player, uint bandnum, double gain);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_equalizer_get_bandrange (HandleRef player, out int min, out int max);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern uint bp_equalizer_get_nbands (HandleRef player);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_equalizer_get_frequencies (HandleRef player,
             [MarshalAs (UnmanagedType.LPArray)] out double [] freq);
-            
+
         [DllImport ("libbanshee.dll")]
         private static extern void bp_replaygain_set_enabled (HandleRef player, bool enabled);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool bp_replaygain_get_enabled (HandleRef player);
 
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs
index 1ba8b43..cd8d11e 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs
@@ -1,4 +1,4 @@
-// 
+//
 // Service.cs
 //
 // Author:
@@ -41,29 +41,29 @@ namespace Banshee.GStreamer
     public class Service : IExtensionService
     {
         private delegate void BansheeLogHandler (LogEntryType type, IntPtr component, IntPtr message);
-        
+
         private BansheeLogHandler native_log_handler = null;
-        
+
         public Service ()
         {
         }
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void gstreamer_initialize (bool debugging, BansheeLogHandler log_handler);
-        
+
         void IExtensionService.Initialize ()
         {
             bool debugging = Banshee.Base.ApplicationContext.Debugging;
             if (debugging) {
                 native_log_handler = new BansheeLogHandler (NativeLogHandler);
             }
-            
+
             // Setup the gst plugins/registry paths if running Windows
             if (!Hyena.PlatformUtil.IsRunningUnix) {
                 string [] gst_paths = new String [] {
                     "gst-plugins"
                 };
-            
+
                 System.Environment.SetEnvironmentVariable ("GST_PLUGIN_PATH", String.Join (";", gst_paths));
                 System.Environment.SetEnvironmentVariable ("GST_PLUGIN_SYSTEM_PATH", "");
                 System.Environment.SetEnvironmentVariable ("GST_DEBUG", "1");
@@ -92,35 +92,35 @@ namespace Banshee.GStreamer
                 Pipeline.AddSExprFunction ("gst-construct-pipeline", SExprConstructPipeline);
                 Pipeline.AddSExprFunction ("gst-construct-caps", SExprConstructCaps);
                 Pipeline.AddSExprFunction ("gst-construct-element", SExprConstructElement);
-                
+
                 profile_manager.TestProfile += OnTestMediaProfile;
                 profile_manager.TestAll ();
             }
         }
-        
+
         void IDisposable.Dispose ()
         {
         }
-        
+
         private void NativeLogHandler (LogEntryType type, IntPtr componentPtr, IntPtr messagePtr)
         {
             string component = componentPtr == IntPtr.Zero ? null : GLib.Marshaller.Utf8PtrToString (componentPtr);
             string message = componentPtr == IntPtr.Zero ? null : GLib.Marshaller.Utf8PtrToString (messagePtr);
-            
+
             if (message == null) {
                 return;
             } else if (component != null) {
                 message = String.Format ("(libbanshee:{0}) {1}", component, message);
             }
-            
+
             Log.Commit (type, message, null, false);
         }
-        
+
         private static void OnTestMediaProfile (object o, TestProfileArgs args)
         {
             bool no_test = Banshee.Base.ApplicationContext.EnvironmentIsSet ("BANSHEE_PROFILES_NO_TEST");
             bool available = false;
-            
+
             foreach (Pipeline.Process process in args.Profile.Pipeline.GetPendingProcessesById ("gstreamer")) {
                 string pipeline = args.Profile.Pipeline.CompileProcess (process);
                 if (no_test || TestPipeline (pipeline)) {
@@ -131,110 +131,110 @@ namespace Banshee.GStreamer
                     Hyena.Log.DebugFormat ("GStreamer pipeline does not run: {0}", pipeline);
                 }
             }
-            
+
             args.ProfileAvailable = available;
         }
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern bool gstreamer_test_pipeline (IntPtr pipeline);
-        
+
         internal static bool TestPipeline (string pipeline)
         {
             if (String.IsNullOrEmpty (pipeline)) {
                 return false;
             }
-        
+
             IntPtr pipeline_ptr = GLib.Marshaller.StringToPtrGStrdup (pipeline);
-            
+
             if (pipeline_ptr == IntPtr.Zero) {
                 return false;
             }
-            
+
             try {
                 return gstreamer_test_pipeline (pipeline_ptr);
             } finally {
                 GLib.Marshaller.Free (pipeline_ptr);
             }
         }
-        
+
         private TreeNode SExprTestElement (EvaluatorBase evaluator, TreeNode [] args)
         {
             if (args.Length != 1) {
                 throw new ArgumentException ("gst-test-element accepts one argument");
             }
-            
+
             TreeNode arg = evaluator.Evaluate (args[0]);
             if (!(arg is StringLiteral)) {
                 throw new ArgumentException ("gst-test-element requires a string argument");
             }
-            
+
             StringLiteral element_node = (StringLiteral)arg;
             return new BooleanLiteral (TestPipeline (element_node.Value));
         }
-        
+
         private TreeNode SExprConstructPipeline (EvaluatorBase evaluator, TreeNode [] args)
         {
             StringBuilder builder = new StringBuilder ();
             List<string> elements = new List<string> ();
-            
+
             for (int i = 0; i < args.Length; i++) {
                 TreeNode node = evaluator.Evaluate (args[i]);
                 if (!(node is LiteralNodeBase)) {
                     throw new ArgumentException ("node must evaluate to a literal");
                 }
-                
+
                 string value = node.ToString ().Trim ();
-                
+
                 if (value.Length == 0) {
                     continue;
                 }
-                
+
                 elements.Add (value);
             }
-            
+
             for (int i = 0; i < elements.Count; i++) {
                 builder.Append (elements[i]);
                 if (i < elements.Count - 1) {
                     builder.Append (" ! ");
                 }
             }
-            
+
             return new StringLiteral (builder.ToString ());
         }
-        
+
         private TreeNode SExprConstructElement (EvaluatorBase evaluator, TreeNode [] args)
         {
             return SExprConstructPipelinePart (evaluator, args, true);
         }
-        
+
         private TreeNode SExprConstructCaps (EvaluatorBase evaluator, TreeNode [] args)
         {
             return SExprConstructPipelinePart (evaluator, args, false);
         }
-        
+
         private TreeNode SExprConstructPipelinePart (EvaluatorBase evaluator, TreeNode [] args, bool element)
         {
             StringBuilder builder = new StringBuilder ();
-            
+
             TreeNode list = new TreeNode ();
             foreach (TreeNode arg in args) {
                 list.AddChild (evaluator.Evaluate (arg));
             }
-            
+
             list = list.Flatten ();
-            
+
             for (int i = 0; i < list.ChildCount; i++) {
                 TreeNode node = list.Children[i];
-                
+
                 string value = node.ToString ().Trim ();
-                
+
                 builder.Append (value);
-                
+
                 if (i == 0) {
                     if (list.ChildCount > 1) {
                         builder.Append (element ? ' ' : ',');
                     }
-                    
+
                     continue;
                 } else if (i % 2 == 1) {
                     builder.Append ('=');
@@ -242,10 +242,10 @@ namespace Banshee.GStreamer
                     builder.Append (element ? ' ' : ',');
                 }
             }
-            
+
             return new StringLiteral (builder.ToString ());
         }
-        
+
         string IService.ServiceName {
             get { return "GStreamerCoreService"; }
         }
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/TagList.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/TagList.cs
index 866a139..6757234 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/TagList.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/TagList.cs
@@ -1,4 +1,4 @@
-// 
+//
 // TagList.cs
 //
 // Author:
@@ -37,97 +37,97 @@ namespace Banshee.GStreamer
     public class TagList : IDisposable
     {
         private HandleRef handle;
-        
+
         public TagList ()
         {
             handle = new HandleRef (this, bt_tag_list_new ());
         }
-        
+
         public TagList (TrackInfo track) : this ()
         {
             Merge (track);
         }
-        
+
         public void Merge (TrackInfo track)
         {
             AddTag (CommonTags.Artist, track.ArtistName);
             AddTag (CommonTags.Album, track.AlbumTitle);
             AddTag (CommonTags.Title, track.TrackTitle);
             AddTag (CommonTags.Genre, track.Genre);
-            
+
             AddTag (CommonTags.TrackNumber, (uint)track.TrackNumber);
             AddTag (CommonTags.TrackCount, (uint)track.TrackCount);
             AddTag (CommonTags.AlbumDiscNumber, (uint)track.DiscNumber);
             AddTag (CommonTags.AlbumDiscCount, (uint)track.DiscCount);
-            
+
             AddYear (track.Year);
             AddDate (track.ReleaseDate);
-            
+
             AddTag (CommonTags.Composer, track.Composer);
             AddTag (CommonTags.Copyright, track.Copyright);
             AddTag (CommonTags.Comment, track.Comment);
-            
+
             AddTag (CommonTags.MusicBrainzTrackId, track.MusicBrainzId);
             AddTag (CommonTags.MusicBrainzArtistId, track.ArtistMusicBrainzId);
             AddTag (CommonTags.MusicBrainzAlbumId, track.AlbumMusicBrainzId);
-            
+
         }
-        
+
         public void AddTag (string tagName, string value)
         {
             if (!String.IsNullOrEmpty (value)) {
                 AddTag (tagName, (object)value);
             }
         }
-        
+
         public void AddTag (string tagName, uint value)
         {
             if (value > 0) {
                 AddTag (tagName, (object)value);
             }
         }
-        
+
         public void AddDate (DateTime date)
         {
             bt_tag_list_add_date (Handle, date.Year, date.Month, date.Day);
         }
-        
+
         public void AddYear (int year)
         {
             if (year > 1) {
                 bt_tag_list_add_date (Handle, year, 1, 1);
             }
         }
-        
+
         public void AddTag (string tagName, object value)
         {
             GLib.Value g_value = new GLib.Value (value);
             bt_tag_list_add_value (Handle, tagName, ref g_value);
         }
-        
+
         public void Dispose ()
         {
             if (handle.Handle != IntPtr.Zero) {
                 bt_tag_list_free (handle);
                 handle = new HandleRef (this, IntPtr.Zero);
-                
+
                 GC.SuppressFinalize (this);
             }
         }
-        
+
         public HandleRef Handle {
             get { return handle; }
         }
-                
+
         [DllImport ("libbanshee.dll")]
         private static extern IntPtr bt_tag_list_new ();
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bt_tag_list_free (HandleRef tag_list);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bt_tag_list_add_value (HandleRef tag_list, string tag_name, ref GLib.Value value);
-        
+
         [DllImport ("libbanshee.dll")]
         private static extern void bt_tag_list_add_date (HandleRef tag_list, int year, int month, int day);
     }
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Transcoder.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Transcoder.cs
index 164af28..ffc079b 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Transcoder.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/Transcoder.cs
@@ -54,21 +54,21 @@ namespace Banshee.GStreamer
         private TrackInfo current_track;
         private string error_message;
         private SafeUri managed_output_uri;
-        
+
         public Transcoder ()
         {
             IntPtr ptr = gst_transcoder_new();
-            
+
             if(ptr == IntPtr.Zero) {
                 throw new NullReferenceException(Catalog.GetString("Could not create transcoder"));
             }
-            
+
             handle = new HandleRef(this, ptr);
-            
+
             ProgressCallback = new GstTranscoderProgressCallback(OnNativeProgress);
             FinishedCallback = new GstTranscoderFinishedCallback(OnNativeFinished);
             ErrorCallback = new GstTranscoderErrorCallback(OnNativeError);
-            
+
             gst_transcoder_set_progress_callback(handle, ProgressCallback);
             gst_transcoder_set_finished_callback(handle, FinishedCallback);
             gst_transcoder_set_error_callback(handle, ErrorCallback);
@@ -79,39 +79,39 @@ namespace Banshee.GStreamer
             gst_transcoder_free(handle);
             handle = new HandleRef (this, IntPtr.Zero);
         }
-        
+
         public void Cancel ()
         {
             gst_transcoder_cancel(handle);
             handle = new HandleRef (this, IntPtr.Zero);
         }
-        
+
         public void TranscodeTrack (TrackInfo track, SafeUri outputUri, ProfileConfiguration config)
         {
             if(IsTranscoding) {
                 throw new ApplicationException("Transcoder is busy");
             }
-        
+
             Log.DebugFormat ("Transcoding {0} to {1}", track.Uri, outputUri);
             SafeUri inputUri = track.Uri;
             managed_output_uri = outputUri;
             IntPtr input_uri = GLib.Marshaller.StringToPtrGStrdup(inputUri.LocalPath);
             IntPtr output_uri = GLib.Marshaller.StringToPtrGStrdup(outputUri.LocalPath);
-            
+
             error_message = null;
-            
+
             current_track = track;
             gst_transcoder_transcode(handle, input_uri, output_uri, config.Profile.Pipeline.GetProcessById("gstreamer"));
-            
+
             GLib.Marshaller.Free(input_uri);
             GLib.Marshaller.Free(output_uri);
         }
-        
+
         private void OnNativeProgress(IntPtr transcoder, double fraction)
         {
             OnProgress (current_track, fraction);
         }
-        
+
         private void OnNativeFinished(IntPtr transcoder)
         {
             OnTrackFinished (current_track, managed_output_uri);
@@ -120,18 +120,18 @@ namespace Banshee.GStreamer
         private void OnNativeError(IntPtr transcoder, IntPtr error, IntPtr debug)
         {
             error_message = GLib.Marshaller.Utf8PtrToString(error);
-            
+
             if(debug != IntPtr.Zero) {
                 string debug_string = GLib.Marshaller.Utf8PtrToString(debug);
                 if(!String.IsNullOrEmpty (debug_string)) {
                     error_message = String.Format ("{0}: {1}", error_message, debug_string);
                 }
             }
-            
+
             try {
                 Banshee.IO.File.Delete (managed_output_uri);
             } catch {}
-            
+
             OnError (current_track, error_message);
         }
 
@@ -142,7 +142,7 @@ namespace Banshee.GStreamer
                 handler (this, new TranscoderProgressArgs (track, fraction, track.Duration));
             }
         }
-        
+
         protected virtual void OnTrackFinished (TrackInfo track, SafeUri outputUri)
         {
             TranscoderTrackFinishedHandler handler = TrackFinished;
@@ -150,7 +150,7 @@ namespace Banshee.GStreamer
                 handler (this, new TranscoderTrackFinishedArgs (track, outputUri));
             }
         }
-        
+
         protected virtual void OnError (TrackInfo track, string message)
         {
             TranscoderErrorHandler handler = Error;
@@ -158,11 +158,11 @@ namespace Banshee.GStreamer
                 handler (this, new TranscoderErrorArgs (track, message));
             }
         }
-        
+
         public bool IsTranscoding {
             get { return gst_transcoder_get_is_transcoding(handle); }
         }
-        
+
         public string ErrorMessage {
             get { return error_message; }
         }
@@ -178,7 +178,7 @@ namespace Banshee.GStreamer
         private static extern void gst_transcoder_free(HandleRef handle);
 
         [DllImport("libbanshee.dll")]
-        private static extern void gst_transcoder_transcode(HandleRef handle, IntPtr input_uri, 
+        private static extern void gst_transcoder_transcode(HandleRef handle, IntPtr input_uri,
             IntPtr output_uri, string encoder_pipeline);
 
         [DllImport("libbanshee.dll")]
@@ -189,13 +189,13 @@ namespace Banshee.GStreamer
             GstTranscoderProgressCallback cb);
 
         [DllImport("libbanshee.dll")]
-        private static extern void gst_transcoder_set_finished_callback(HandleRef handle, 
+        private static extern void gst_transcoder_set_finished_callback(HandleRef handle,
             GstTranscoderFinishedCallback cb);
 
         [DllImport("libbanshee.dll")]
-        private static extern void gst_transcoder_set_error_callback(HandleRef handle, 
+        private static extern void gst_transcoder_set_error_callback(HandleRef handle,
             GstTranscoderErrorCallback cb);
-            
+
         [DllImport("libbanshee.dll")]
         private static extern bool gst_transcoder_get_is_transcoding(HandleRef handle);
     }
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs
index c688a1d..daf5469 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs
@@ -47,7 +47,7 @@ namespace Banshee.GnomeBackend
     public class Brasero : IDisposable
     {
         private string brasero_exec;
-        
+
         public Brasero ()
         {
             brasero_exec = Paths.FindProgramInPath ("brasero");
@@ -55,7 +55,7 @@ namespace Banshee.GnomeBackend
                 throw new FileNotFoundException ("brasero");
             }
         }
-        
+
         public void Initialize ()
         {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
@@ -65,71 +65,71 @@ namespace Banshee.GnomeBackend
                     Catalog.GetString ("Write selected tracks to an audio CD"),
                     OnBurnDisc)
             });
-            
+
             Gtk.Action action = uia_service.TrackActions["BurnDiscAction"];
             action.IconName = "media-write-cd";
-            
+
             uia_service.UIManager.AddUiFromResource ("GlobalUI.xml");
-            
+
             UpdateActions ();
             uia_service.TrackActions.SelectionChanged += delegate { Banshee.Base.ThreadAssist.ProxyToMain (UpdateActions); };
             ServiceManager.SourceManager.ActiveSourceChanged += delegate { Banshee.Base.ThreadAssist.ProxyToMain (UpdateActions); };
         }
-        
+
         public void Dispose ()
         {
         }
-        
+
         private void OnBurnDisc (object o, EventArgs args)
         {
             DatabaseSource source = ServiceManager.SourceManager.ActiveSource as DatabaseSource;
             if (source == null) {
                 return;
             }
-            
+
             StringBuilder file_args = new StringBuilder ();
             file_args.Append ("-a");
-            
+
             foreach (TrackInfo track in source.TrackModel.SelectedItems) {
                 if (track.Uri.IsLocalPath) {
                     file_args.AppendFormat (" \"{0}\"", track.Uri.AbsolutePath.Replace ("\"", "\\\""));
                 }
             }
-            
+
             try {
                 Run (file_args.ToString ());
             } catch (Exception e) {
                 Log.Exception ("Problem starting Brasero", e);
-                Log.Error (Catalog.GetString ("Could not write CD"), 
+                Log.Error (Catalog.GetString ("Could not write CD"),
                     Catalog.GetString ("Brasero could not be started"), true);
             }
         }
-        
+
         internal void Run (string args)
         {
             ProcessStartInfo psi = new ProcessStartInfo (brasero_exec, args);
             psi.UseShellExecute = false;
             Process.Start (psi);
         }
-        
+
         private void UpdateActions ()
         {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             Gtk.Action action = uia_service.TrackActions["BurnDiscAction"];
-            
+
             bool visible = false;
             bool sensitive = false;
-            
+
             DatabaseSource source = ServiceManager.SourceManager.ActiveSource as DatabaseSource;
             // FIXME: Figure out how to handle non-music-library sources
             if (source != null) {
                 if (source is MusicLibrarySource || source.Parent is MusicLibrarySource) {
                     visible = true;
                 }
-                
+
                 sensitive = source.TrackModel.Selection.Count > 0;
             }
-            
+
             action.Sensitive = sensitive;
             action.Visible = visible;
         }
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DefaultApplicationHelper.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DefaultApplicationHelper.cs
index 59e9388..ffafab0 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DefaultApplicationHelper.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DefaultApplicationHelper.cs
@@ -46,13 +46,13 @@ namespace Banshee.GnomeBackend
             // "net", "pnm", "uvox", // unknown
             // "rtp", "rtsp",
         };
-        
+
         private List<IDefaultSchema> schemas = new List<IDefaultSchema> ();
         private bool? is_default;
         private string banshee_cmd;
 
         #region Public API
-        
+
         public DefaultApplicationHelper ()
         {
             banshee_cmd = Banshee.ServiceStack.Application.InternalName;
@@ -70,7 +70,7 @@ namespace Banshee.GnomeBackend
 
             //Add ("/desktop/gnome/volume_manager", "autoplay_vcd", true);
             //Add ("/desktop/gnome/volume_manager", "autoplay_vcd_command", "{0} --device=%d");
-            
+
             foreach (string uri_scheme in uri_schemes) {
                 string ns = String.Format ("/desktop/gnome/url-handlers/{0}", uri_scheme);
                 Add (ns, "command", "{0} \"%s\"");
@@ -100,7 +100,7 @@ namespace Banshee.GnomeBackend
 
         public void MakeDefault ()
         {
-            Log.InformationFormat ("Setting Banshee as the default media application and handler for media urls etc in GNOME");            
+            Log.InformationFormat ("Setting Banshee as the default media application and handler for media urls etc in GNOME");
             foreach (IDefaultSchema schema in schemas) {
                 schema.MakeDefault ();
             }
@@ -130,7 +130,7 @@ namespace Banshee.GnomeBackend
         {
             private SchemaEntry<T> schema;
             private T val;
-            
+
             public SchemaMap (string ns, string key, T val)
             {
                 schema = new SchemaEntry<T> (ns, key, default (T), null, null);
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DiscDuplicator.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DiscDuplicator.cs
index d28c0d9..7bd7b4a 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DiscDuplicator.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/DiscDuplicator.cs
@@ -44,34 +44,34 @@ namespace Banshee.GnomeBackend
                     "Neither Brasero nor Nautilus CD Burner could be found to duplicate this disc."));
             }
         }
-        
+
         private bool RunBrasero (string device)
         {
             GnomeService gnome = ServiceManager.Get<GnomeService> ();
             if (gnome == null || gnome.Brasero == null) {
                 return false;
             }
-            
+
             try {
                 gnome.Brasero.Run (String.Format ("-c {0}", device));
             } catch (Exception e) {
                 Log.Exception (e);
                 return false;
             }
-            
+
             return true;
         }
-        
+
         private bool RunNcb (string device)
-        {    
+        {
             try {
-                System.Diagnostics.Process.Start ("nautilus-cd-burner", 
+                System.Diagnostics.Process.Start ("nautilus-cd-burner",
                     String.Format ("--source-device={0}", device));
             } catch (Exception e) {
                 Log.Exception (e);
                 return false;
             }
-            
+
             return false;
         }
     }
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GConfConfigurationClient.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GConfConfigurationClient.cs
index e3d1cdf..8943197 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GConfConfigurationClient.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GConfConfigurationClient.cs
@@ -41,17 +41,17 @@ namespace Banshee.GnomeBackend
     {
         private GConf.Client client;
         private Dictionary<string, string> key_table = new Dictionary<string, string> ();
-        
+
         private static bool disable_gconf_checked = false;
         private static bool disable_gconf = false;
-        
+
         private static bool DisableGConf {
-            get { 
+            get {
                 if (!disable_gconf_checked) {
                     disable_gconf = ApplicationContext.EnvironmentIsSet ("BANSHEE_DISABLE_GCONF");
                     disable_gconf_checked = true;
                 }
-                
+
                 return disable_gconf;
             }
         }
@@ -90,36 +90,36 @@ namespace Banshee.GnomeBackend
 
                     key_table[hash_key] = key_table[hash_key].Replace (' ', '_');
                 }
-                
+
                 return key_table[hash_key];
             }
         }
-        
+
         public T Get<T> (SchemaEntry<T> entry)
         {
             return Get<T> (entry.Namespace, entry.Key, entry.DefaultValue);
         }
-        
+
         public T Get<T> (SchemaEntry<T> entry, T fallback)
         {
             return Get<T> (entry.Namespace, entry.Key, fallback);
         }
-        
+
         public T Get<T> (string key, T fallback)
         {
             return Get<T> (null, key, fallback);
         }
-        
+
         public T Get<T> (string @namespace, string key, T fallback)
         {
             if (DisableGConf || key == null) {
                 return fallback;
             }
-            
+
             if (client == null) {
                 client = new GConf.Client ();
             }
-            
+
             try {
                 return (T)client.Get (CreateKey (@namespace, key));
             } catch (GConf.NoSuchKeyException) {
@@ -129,27 +129,27 @@ namespace Banshee.GnomeBackend
                 return fallback;
             }
         }
-        
+
         public void Set<T> (SchemaEntry<T> entry, T value)
         {
             Set<T> (entry.Namespace, entry.Key, value);
         }
-        
+
         public void Set<T> (string key, T value)
         {
             Set<T> (null, key, value);
         }
-        
+
         public void Set<T> (string @namespace, string key, T value)
         {
             if (DisableGConf || key == null) {
                 return;
             }
-            
+
             if (client == null) {
                 client = new GConf.Client ();
             }
-            
+
             client.Set (CreateKey (@namespace, key), value);
         }
     }
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
index f2d1ce3..17ceefc 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
@@ -32,7 +32,7 @@ using Mono.Unix;
 using Banshee.PlatformServices;
 
 namespace Banshee.GnomeBackend
-{    
+{
     [Interface("org.gnome.ScreenSaver")]
     internal interface IGnomeScreensaver
     {
@@ -44,7 +44,7 @@ namespace Banshee.GnomeBackend
     {
         const string DBUS_INTERFACE = "org.gnome.ScreenSaver";
         const string DBUS_PATH = "/org/gnome/ScreenSaver";
-        
+
         IGnomeScreensaver manager;
         uint? cookie;
 
@@ -61,9 +61,9 @@ namespace Banshee.GnomeBackend
                     if (!Bus.Session.NameHasOwner (DBUS_INTERFACE)) {
                         return null;
                     }
-                    
+
                     manager = Bus.Session.GetObject<IGnomeScreensaver> (DBUS_INTERFACE, new ObjectPath (DBUS_PATH));
-                    
+
                     if (manager == null) {
                         Hyena.Log.ErrorFormat ("The {0} object could not be located on the DBus interface {1}",
                             DBUS_PATH, DBUS_INTERFACE);
@@ -72,7 +72,7 @@ namespace Banshee.GnomeBackend
                 return manager;
             }
         }
-        
+
         public void Inhibit ()
         {
             if (!cookie.HasValue && Manager != null) {
diff --git a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeService.cs b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeService.cs
index 8c8cd43..afcff21 100644
--- a/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeService.cs
+++ b/src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeService.cs
@@ -33,17 +33,17 @@ using Banshee.Web;
 
 namespace Banshee.GnomeBackend
 {
-    public class GnomeService : IExtensionService, IDisposable 
+    public class GnomeService : IExtensionService, IDisposable
     {
         private Brasero brasero;
         internal Brasero Brasero {
             get { return brasero; }
         }
-        
+
         public GnomeService ()
         {
         }
-        
+
         public void Initialize ()
         {
             try {
@@ -52,30 +52,30 @@ namespace Banshee.GnomeBackend
             } catch {
                 brasero = null;
             }
-        
+
             if (Browser.OpenHandler == null) {
                 Browser.OpenHandler = OpenUrl;
             }
         }
-        
+
         public void Dispose ()
         {
             if (brasero != null) {
                 brasero.Dispose ();
                 brasero = null;
             }
-        
+
             if (Browser.OpenHandler == (Banshee.Web.Browser.OpenUrlHandler) OpenUrl) {
                 Browser.OpenHandler = null;
             }
         }
-        
+
         private bool OpenUrl (string url)
         {
             Hyena.Log.Debug ("Opening URL via gnome-open", url);
             return Gnome.Url.Show (url);
         }
-        
+
         string IService.ServiceName {
             get { return "GnomeService"; }
         }
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/BlockDevice.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/BlockDevice.cs
index f16edca..a953b97 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/BlockDevice.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/BlockDevice.cs
@@ -44,18 +44,18 @@ namespace Banshee.HalBackend
                 } else if (typeof (T) == typeof (IDiskDevice)) {
                     return DiskDevice.Resolve (manager, device);
                 }
-                
-                return (BlockDevice)CdromDevice.Resolve (manager, device) 
+
+                return (BlockDevice)CdromDevice.Resolve (manager, device)
                     ?? (BlockDevice)DiskDevice.Resolve (manager, device);
             }
-            
+
             return null;
         }
-        
+
         protected BlockDevice (Hal.Manager manager, Hal.Device device) : base (manager, device)
         {
         }
-        
+
         public string DeviceNode {
             get { return HalDevice["block.device"]; }
         }
@@ -67,7 +67,7 @@ namespace Banshee.HalBackend
         public IEnumerable<IVolume> Volumes {
             get { return this; }
         }
-        
+
         public IEnumerator<IVolume> GetEnumerator ()
         {
             foreach (Hal.Device hal_device in HalDevice.GetChildrenAsDevice (HalManager)) {
@@ -77,12 +77,12 @@ namespace Banshee.HalBackend
                 }
             }
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
+
         public override string ToString ()
         {
             return DeviceNode;
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/CdromDevice.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/CdromDevice.cs
index 75a942b..8191ebf 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/CdromDevice.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/CdromDevice.cs
@@ -41,28 +41,28 @@ namespace Banshee.HalBackend
             if (device["storage.drive_type"] == "cdrom") {
                 return new CdromDevice (manager, device);
             }
-            
+
             return null;
         }
-        
+
         private CdromDevice (Hal.Manager manager, Hal.Device device) : base (manager, device)
         {
         }
-        
+
         [DllImport ("libc")]
-        private static extern int ioctl (int device, IoctlOperation request, bool lockdoor); 
+        private static extern int ioctl (int device, IoctlOperation request, bool lockdoor);
 
         private enum IoctlOperation {
             LockDoor = 0x5329
         }
-        
+
         private bool is_door_locked = false;
-        
+
         private bool LockDeviceNode (string device, bool lockdoor)
         {
             try {
                 using (UnixStream stream = (new UnixFileInfo (device)).Open (
-                    Mono.Unix.Native.OpenFlags.O_RDONLY | 
+                    Mono.Unix.Native.OpenFlags.O_RDONLY |
                     Mono.Unix.Native.OpenFlags.O_NONBLOCK)) {
                     bool success = ioctl (stream.Handle, IoctlOperation.LockDoor, lockdoor) == 0;
                     is_door_locked = success && lockdoor;
@@ -72,21 +72,21 @@ namespace Banshee.HalBackend
                 return false;
             }
         }
-        
+
         public bool LockDoor ()
         {
             lock (this) {
                 return LockDeviceNode (DeviceNode, true);
             }
         }
-        
+
         public bool UnlockDoor ()
         {
             lock (this) {
                 return LockDeviceNode (DeviceNode, false);
             }
         }
-        
+
         // FIXME: This is incredibly lame, there must be a way to query the
         // device itself rather than hackisly attempting to keep track of it
         public bool IsDoorLocked {
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/Device.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/Device.cs
index 9014f06..b5d9bc5 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/Device.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/Device.cs
@@ -39,7 +39,7 @@ namespace Banshee.HalBackend
         internal Hal.Device HalDevice {
             get { return device; }
         }
-        
+
         private Hal.Manager manager;
         protected Hal.Manager HalManager {
             get { return manager; }
@@ -50,7 +50,7 @@ namespace Banshee.HalBackend
             this.manager = manager;
             this.device = device;
         }
-        
+
         private string uuid;
         public string Uuid {
             get { return uuid ?? (uuid = device.Udi); /*String.IsNullOrEmpty (HalDevice["usb.serial"]) ? device.Udi : HalDevice["usb.serial"];*/ }
@@ -93,47 +93,47 @@ namespace Banshee.HalBackend
                 return media_capabilities;
             }
         }
-        
+
         public bool PropertyExists (string key)
         {
             return device.PropertyExists (key);
         }
-        
+
         public string GetPropertyString (string key)
         {
             return device.GetPropertyString (key);
         }
-        
+
         public double GetPropertyDouble (string key)
         {
             return device.GetPropertyDouble (key);
         }
-        
+
         public bool GetPropertyBoolean (string key)
         {
             return device.GetPropertyBoolean (key);
         }
-        
+
         public int GetPropertyInteger (string key)
         {
             return device.GetPropertyInteger (key);
         }
-        
+
         public ulong GetPropertyUInt64 (string key)
         {
             return device.GetPropertyUInt64 (key);
         }
-        
+
         public string [] GetPropertyStringList (string key)
         {
             return device.GetPropertyStringList (key);
         }
-        
+
         public IUsbDevice ResolveRootUsbDevice ()
         {
             return UsbDevice.Resolve (HalManager, CollectUsbDeviceStack (device).Peek ());
         }
-        
+
         private static Stack<Hal.Device> CollectUsbDeviceStack (Hal.Device device)
         {
             Stack<Hal.Device> device_stack = new Stack<Hal.Device> ();
@@ -156,12 +156,12 @@ namespace Banshee.HalBackend
                 int _usb_product_id = -1;
 
                 // Figure out the IDs if they exist
-                if (tmp_device.PropertyExists ("usb.vendor_id") && 
+                if (tmp_device.PropertyExists ("usb.vendor_id") &&
                     tmp_device.PropertyExists ("usb.product_id")) {
                     _usb_vendor_id = tmp_device.GetPropertyInteger ("usb.vendor_id");
                     _usb_product_id = tmp_device.GetPropertyInteger ("usb.product_id");
                     have_usb_ids = true;
-                } else if (tmp_device.PropertyExists("usb_device.vendor_id") && 
+                } else if (tmp_device.PropertyExists("usb_device.vendor_id") &&
                     tmp_device.PropertyExists("usb_device.product_id")) {
                     _usb_vendor_id = tmp_device.GetPropertyInteger("usb_device.vendor_id");
                     _usb_product_id = tmp_device.GetPropertyInteger("usb_device.product_id");
@@ -185,7 +185,7 @@ namespace Banshee.HalBackend
                 device_stack.Push (tmp_device);
                 tmp_device = tmp_device.Parent;
             }
-            
+
             return device_stack;
         }
     }
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/DiscVolume.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/DiscVolume.cs
index 0941202..1798984 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/DiscVolume.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/DiscVolume.cs
@@ -38,31 +38,31 @@ namespace Banshee.HalBackend
         {
             return device.QueryCapability ("volume.disc") ? new DiscVolume (parent, manager, device) : null;
         }
-        
+
         private DiscVolume (BlockDevice parent, Hal.Manager manager, Hal.Device device) : base (parent, manager, device)
         {
         }
-        
+
         public bool HasAudio {
             get { return HalDevice.GetPropertyBoolean ("volume.disc.has_audio"); }
         }
-        
+
         public bool HasData {
             get { return HalDevice.GetPropertyBoolean ("volume.disc.has_data"); }
         }
-        
+
         public bool IsBlank {
             get { return HalDevice.GetPropertyBoolean ("volume.disc.is_blank"); }
         }
-        
+
         public bool IsRewritable {
             get { return HalDevice.GetPropertyBoolean ("volume.disc.is_rewritable"); }
         }
-        
+
         public ulong MediaCapacity {
             get { return HalDevice.GetPropertyUInt64 ("volume.disc.capacity"); }
         }
-        
+
         public override string ToString ()
         {
             return String.Format ("Optical Disc, Audio = {0}, Data = {1}, Blank = {2}, Rewritable = {3}, Media Capacity = {4}",
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/DiskDevice.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/DiskDevice.cs
index e4da4dc..0b5f913 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/DiskDevice.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/DiskDevice.cs
@@ -41,10 +41,10 @@ namespace Banshee.HalBackend
             if (device["storage.drive_type"] == "disk") {
                 return new DiskDevice (manager, device);
             }
-            
+
             return null;
         }
-        
+
         private DiskDevice (Hal.Manager manager, Hal.Device device) : base (manager, device)
         {
         }
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/HardwareManager.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/HardwareManager.cs
index f21a474..83c9f68 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/HardwareManager.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/HardwareManager.cs
@@ -40,7 +40,7 @@ namespace Banshee.HalBackend
 
         public event DeviceAddedHandler DeviceAdded;
         public event DeviceRemovedHandler DeviceRemoved;
-        
+
         public HardwareManager ()
         {
             manager = new Hal.Manager ();
@@ -49,7 +49,7 @@ namespace Banshee.HalBackend
 
             Volume.HardwareManager = this;
         }
-        
+
         public void Dispose ()
         {
         }
@@ -64,7 +64,7 @@ namespace Banshee.HalBackend
                 }
             }
         }
-        
+
         private IEnumerable<T> GetAllBlockDevices<T> () where T : IBlockDevice
         {
             foreach (Hal.Device hal_device in manager.FindDeviceByCapabilityAsDevice ("block")) {
@@ -74,17 +74,17 @@ namespace Banshee.HalBackend
                 }
             }
         }
-        
+
         public IEnumerable<IBlockDevice> GetAllBlockDevices ()
         {
             return GetAllBlockDevices<IBlockDevice> ();
         }
-        
+
         public IEnumerable<ICdromDevice> GetAllCdromDevices ()
         {
             return GetAllBlockDevices<ICdromDevice> ();
         }
-        
+
         public IEnumerable<IDiskDevice> GetAllDiskDevices ()
         {
             return GetAllBlockDevices<IDiskDevice> ();
@@ -104,7 +104,7 @@ namespace Banshee.HalBackend
             if (!hal_device.QueryCapability ("block") && !hal_device.QueryCapability ("portable_audio_player")) {
                 return null;
             }
-            
+
             IDevice device = BlockDevice.Resolve<IBlockDevice> (manager, hal_device);
             if (device == null) {
                 device = Volume.Resolve (null, manager, hal_device);
@@ -112,7 +112,7 @@ namespace Banshee.HalBackend
                     device = new Device (manager, hal_device);
                 }
             }
-            
+
             return device;
         }
 
@@ -127,7 +127,7 @@ namespace Banshee.HalBackend
         {
             OnDeviceRemoved (args.Udi);
         }
-        
+
         private void OnDeviceAdded (IDevice device)
         {
             DeviceAddedHandler handler = DeviceAdded;
@@ -135,7 +135,7 @@ namespace Banshee.HalBackend
                 handler (this, new DeviceAddedArgs (device));
             }
         }
-        
+
         internal void OnDeviceRemoved (string uuid)
         {
             DeviceRemovedHandler handler = DeviceRemoved;
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/UsbDevice.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/UsbDevice.cs
index 783c339..206c7d5 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/UsbDevice.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/UsbDevice.cs
@@ -36,39 +36,39 @@ namespace Banshee.HalBackend
     {
         public static UsbDevice Resolve (Hal.Manager manager, Hal.Device device)
         {
-            if (device["info.subsystem"] == "usb_device" && 
-                device.PropertyExists ("usb_device.product_id") && 
+            if (device["info.subsystem"] == "usb_device" &&
+                device.PropertyExists ("usb_device.product_id") &&
                 device.PropertyExists ("usb_device.vendor_id")) {
                 return new UsbDevice (manager, device);
             }
-            
+
             return null;
         }
-        
+
         private UsbDevice (Hal.Manager manager, Hal.Device device) : base (manager, device)
         {
         }
-        
+
         public int VendorId {
             get { return HalDevice.GetPropertyInteger ("usb_device.vendor_id"); }
         }
-        
+
         public int ProductId {
             get { return HalDevice.GetPropertyInteger ("usb_device.product_id"); }
         }
-        
+
         public override string Serial {
-            get { return HalDevice.PropertyExists ("usb_device.serial") 
+            get { return HalDevice.PropertyExists ("usb_device.serial")
                 ? HalDevice["usb_device.serial"] : null; }
         }
-        
+
         public double Speed {
-            get { return HalDevice.PropertyExists ("usb_device.speed") 
+            get { return HalDevice.PropertyExists ("usb_device.speed")
                 ? HalDevice.GetPropertyDouble ("usb_device.speed") : 0.0; }
         }
-        
+
         public double Version {
-            get { return HalDevice.PropertyExists ("usb_device.version") 
+            get { return HalDevice.PropertyExists ("usb_device.version")
                 ? HalDevice.GetPropertyDouble ("usb_device.version") : 0.0; }
         }
     }
diff --git a/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs b/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs
index 165dbd5..51620ec 100644
--- a/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs
+++ b/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs
@@ -39,15 +39,15 @@ namespace Banshee.HalBackend
         private static Dictionary<Hal.Device, Volume> unmounted_volumes = new Dictionary<Hal.Device, Volume> ();
 
         internal static HardwareManager HardwareManager;
-        
+
         private const string method_names_property = "org.freedesktop.Hal.Device.Volume.method_names";
-        
+
         public static Volume Resolve (BlockDevice parent, Hal.Manager manager, Hal.Device device)
         {
             if (!device.IsVolume) {
                 return null;
             }
-            
+
             try {
                 Volume volume = (parent is ICdromDevice || (parent == null && device.QueryCapability ("volume.disc")))
                     ? DiscVolume.Resolve (parent, manager, device)
@@ -60,15 +60,15 @@ namespace Banshee.HalBackend
 
             return null;
         }
-        
+
         private BlockDevice parent;
         private string [] method_names;
-        
+
         protected Volume (BlockDevice parent, Hal.Manager manager, Hal.Device device) : base (manager, device)
         {
             this.parent = parent ?? BlockDevice.Resolve<IBlockDevice> (manager, device.Parent);
-            
-            method_names = HalDevice.PropertyExists (method_names_property) 
+
+            method_names = HalDevice.PropertyExists (method_names_property)
                 ? device.GetPropertyStringList (method_names_property)
                 : new string[0];
         }
@@ -87,13 +87,13 @@ namespace Banshee.HalBackend
 
         /*private string serial;
         public override string Serial {
-            get { 
+            get {
                 if (serial == null) {
-                    serial = String.IsNullOrEmpty (HalDevice["volume.uuid"]) 
-                        ? base.Serial 
+                    serial = String.IsNullOrEmpty (HalDevice["volume.uuid"])
+                        ? base.Serial
                         : HalDevice["volume.uuid"];
                 }
-                
+
                 return serial;
             }
         }*/
@@ -119,9 +119,9 @@ namespace Banshee.HalBackend
                 if (!IsMounted) {
                     return -1;
                 }
-                
+
                 // FIXME: maybe we should use UnixDriveInfo? Advantages?
-                
+
                 try {
                     Mono.Unix.Native.Statvfs statvfs_info;
                     if (Mono.Unix.Native.Syscall.statvfs (MountPoint, out statvfs_info) != -1) {
@@ -129,44 +129,44 @@ namespace Banshee.HalBackend
                     }
                 } catch {
                 }
-                
+
                 return -1;
             }
         }
-        
+
         public IBlockDevice Parent {
             get { return parent; }
         }
-        
+
         public bool CanEject {
             get { return Array.IndexOf<string> (method_names, "Eject") >= 0; }
         }
-        
+
         public void Eject ()
         {
             if (CanEject && HalDevice.IsVolume) {
                 HalDevice.Volume.Eject ();
             }
         }
-        
+
         public bool CanUnmount {
             get { return Array.IndexOf<string> (method_names, "Unmount") >= 0; }
         }
-        
+
         public void Unmount ()
         {
             if (CanUnmount && HalDevice.IsVolume) {
                 HalDevice.Volume.Unmount ();
             }
         }
-        
+
         public override string ToString ()
         {
             if (IsMounted) {
-                return String.Format ("`{0}': mounted {1} volume at {2} with {3} bytes free (of {4})", 
+                return String.Format ("`{0}': mounted {1} volume at {2} with {3} bytes free (of {4})",
                     Name, IsReadOnly ? "read only" : "read/write", MountPoint, Available, Capacity);
             }
-            
+
             return String.Format ("`{0}': not mounted (capacity: {1} bytes)", Name, Capacity);
         }
 
diff --git a/src/Backends/Banshee.Hal/Hal/Device.cs b/src/Backends/Banshee.Hal/Hal/Device.cs
index e1f07b2..e284481 100644
--- a/src/Backends/Banshee.Hal/Hal/Device.cs
+++ b/src/Backends/Banshee.Hal/Hal/Device.cs
@@ -41,52 +41,52 @@ namespace Hal
         public bool Removed;
     }
 
-    internal delegate void DBusPropertyModifiedHandler(int modificationsLength, 
+    internal delegate void DBusPropertyModifiedHandler(int modificationsLength,
         PropertyModification [] modifications);
-    
+
     [Interface("org.freedesktop.Hal.Device")]
     internal interface IDevice
     {
         // TODO:
         // Need to support the Condition event, but it has a
         // variable number of arguments, not currently supported
-        
+
         event DBusPropertyModifiedHandler PropertyModified;
-    
+
         void SetPropertyString(string key, string value);
         void SetPropertyInteger(string key, int value);
         void SetPropertyBoolean(string key, bool value);
         void SetPropertyDouble(string key, double value);
         void SetPropertyStringList(string key, string [] value);
-        
+
         void SetProperty(string key, ulong value);
         ulong GetProperty(string key); // nasty hack to get around the fact
                                        // that HAL doesn't actually send this
-                                       // in a variant, nor does it have a 
+                                       // in a variant, nor does it have a
                                        // GetPropertyUInt64
                                        // should be object GetProperty(string key)
 
         void StringListPrepend(string key, string value);
         void StringListAppend(string key, string value);
         void StringListRemove(string key, string value);
-        
+
         string GetPropertyString(string key);
         int GetPropertyInteger(string key);
         bool GetPropertyBoolean(string key);
         double GetPropertyDouble(string key);
         string [] GetPropertyStringList(string key);
-        
+
         IDictionary<string, object> GetAllProperties();
         void RemoveProperty(string key);
         PropertyType GetPropertyType(string key);
         bool PropertyExists(string key);
-        
+
         void AddCapability(string capability);
         bool QueryCapability(string capability);
         void Lock(string reason);
         void Unlock();
     }
-    
+
     internal enum DType : byte
     {
       Invalid = (byte)'\0',
@@ -112,7 +112,7 @@ namespace Hal
       DictEntryBegin = (byte)'{',
       DictEntryEnd = (byte)'}',
     }
-    
+
     public enum PropertyType
     {
         Invalid = DType.Invalid,
@@ -121,18 +121,18 @@ namespace Hal
         Double = DType.Double,
         Boolean = DType.Boolean,
         String = DType.String,
-        StrList = ((int)(DType.String << 8) + ('l')) 
+        StrList = ((int)(DType.String << 8) + ('l'))
     }
 
     public class PropertyModifiedArgs : EventArgs
     {
         private PropertyModification [] modifications;
-        
+
         public PropertyModifiedArgs(PropertyModification [] modifications)
         {
             this.modifications = modifications;
         }
-        
+
         public PropertyModification [] Modifications {
             get { return modifications; }
         }
@@ -145,58 +145,58 @@ namespace Hal
     {
         private string udi;
         private IDevice device;
-        
+
         public event PropertyModifiedHandler PropertyModified;
-        
+
         public Device(string udi)
         {
             this.udi = udi;
-            
+
             device = CastDevice<IDevice>();
             device.PropertyModified += OnPropertyModified;
         }
-        
+
         public static Device [] UdisToDevices(string [] udis)
         {
             if(udis == null || udis.Length == 0) {
                 return new Device[0];
             }
-            
+
             Device [] devices = new Device[udis.Length];
             for(int i = 0; i < udis.Length; i++) {
                 devices[i] = new Device(udis[i]);
             }
-            
+
             return devices;
         }
-        
+
         protected virtual void OnPropertyModified(int modificationsLength, PropertyModification [] modifications)
         {
             if(modifications.Length != modificationsLength) {
                 throw new ApplicationException("Number of modified properties does not match");
             }
-        
+
             PropertyModifiedHandler handler = PropertyModified;
             if(handler != null) {
-                handler(this, new PropertyModifiedArgs(modifications));   
+                handler(this, new PropertyModifiedArgs(modifications));
             }
         }
-        
+
         public string [] GetChildren(Manager manager)
         {
             return manager.FindDeviceByStringMatch("info.parent", Udi);
         }
-        
+
         public Device [] GetChildrenAsDevice(Manager manager)
         {
             return manager.FindDeviceByStringMatchAsDevice("info.parent", Udi);
         }
-        
+
         public void Lock(string reason)
         {
             device.Lock(reason);
         }
-        
+
         public void Unlock()
         {
             device.Unlock();
@@ -211,7 +211,7 @@ namespace Hal
         {
             return device.GetPropertyInteger(key);
         }
-        
+
         public ulong GetPropertyUInt64(string key)
         {
             return device.GetProperty(key);
@@ -236,27 +236,27 @@ namespace Hal
         {
             return PropertyExists(key) ? device.GetPropertyType(key) : PropertyType.Invalid;
         }
-        
+
         public void StringListPrepend(string key, string value)
         {
             device.SetPropertyString(key, value);
         }
-        
+
         public void StringListAppend(string key, string value)
         {
             device.StringListAppend(key, value);
         }
-        
+
         public void StringListRemove(string key, string value)
         {
             device.StringListRemove(key, value);
         }
-        
+
         public void SetPropertyString(string key, string value)
         {
             device.SetPropertyString(key, value);
         }
-        
+
         public void SetPropertyUInt64(string key, ulong value)
         {
             device.SetProperty(key, value);
@@ -276,38 +276,38 @@ namespace Hal
         {
             device.SetPropertyBoolean(key, value);
         }
-        
+
         public void SetPropertyStringList(string key, string [] value)
         {
             device.SetPropertyStringList(key, value);
         }
-        
+
         public void RemoveProperty(string key)
         {
             device.RemoveProperty(key);
         }
-        
+
         public bool PropertyExists(string key)
         {
             return device.PropertyExists(key);
         }
-        
+
         public void AddCapability(string capability)
         {
             device.AddCapability(capability);
         }
-        
+
         public bool QueryCapability(string capability)
         {
             return device.QueryCapability(capability);
         }
-        
+
         public T CastDevice<T>()
         {
             if(!Bus.System.NameHasOwner("org.freedesktop.Hal")) {
                 throw new ApplicationException("Could not find org.freedesktop.Hal");
             }
-            
+
             return Bus.System.GetObject<T>("org.freedesktop.Hal", new ObjectPath(Udi));
         }
 
@@ -315,82 +315,82 @@ namespace Hal
         {
             return device.GetAllProperties().GetEnumerator();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator()
         {
             return device.GetAllProperties().GetEnumerator();
         }
-        
+
         public bool Equals(Device other)
         {
             return Udi.Equals(other.Udi);
         }
-        
+
         public bool Equals(Device a, Device b)
         {
             return a.Udi.Equals(b.Udi);
         }
-        
+
         public int CompareTo(Device other)
         {
             return Udi.CompareTo(other.Udi);
         }
-        
+
         public int Compare(Device a, Device b)
         {
             return a.Udi.CompareTo(b.Udi);
         }
-        
+
         public int GetHashCode(Device a)
         {
             return a.Udi.GetHashCode();
         }
-        
+
         public override int GetHashCode()
         {
             return Udi.GetHashCode();
         }
-        
+
         public override string ToString()
         {
             return udi;
         }
-        
+
         public string this[string property] {
             get { return PropertyExists(property) ? GetPropertyString(property) : null; }
             set { SetPropertyString(property, value); }
         }
-        
+
         public string Udi {
             get { return udi; }
         }
-        
+
         public bool IsVolume {
             get {
                 if(!PropertyExists("info.interfaces")) {
                     return false;
                 }
-                
+
                 foreach(string @interface in GetPropertyStringList("info.interfaces")) {
                     if(@interface == "org.freedesktop.Hal.Device.Volume") {
                        return true;
                     }
                 }
-                
+
                 return false;
             }
         }
-        
+
         public Volume Volume {
             get { return new Volume(Udi); }
         }
-        
+
         public Device Parent {
             get {
                 if(PropertyExists("info.parent")) {
                     return new Device(this["info.parent"]);
                 }
-                
+
                 return null;
             }
         }
diff --git a/src/Backends/Banshee.Hal/Hal/Manager.cs b/src/Backends/Banshee.Hal/Hal/Manager.cs
index 21b9b8a..64621a1 100644
--- a/src/Backends/Banshee.Hal/Hal/Manager.cs
+++ b/src/Backends/Banshee.Hal/Hal/Manager.cs
@@ -37,95 +37,95 @@ namespace Hal
     internal delegate void DBusDeviceAddedHandler(string udi);
     internal delegate void DBusDeviceRemovedHandler(string udi);
     internal delegate void DBusNewCapabilityHandler(string udi, string capability);
-    
+
     [Interface("org.freedesktop.Hal.Manager")]
-    internal interface IManager 
+    internal interface IManager
     {
         event DBusDeviceAddedHandler DeviceAdded;
         event DBusDeviceRemovedHandler DeviceRemoved;
         event DBusNewCapabilityHandler NewCapability;
-    
+
         string [] GetAllDevices();
         bool DeviceExists(string udi);
         string [] FindDeviceStringMatch(string key, string value);
         string [] FindDeviceByCapability(string capability);
     }
-    
+
     public class DeviceArgs : EventArgs
     {
         private string udi;
-        
+
         public DeviceArgs(string udi)
         {
             this.udi = udi;
         }
-        
+
         public string Udi {
             get { return udi; }
         }
     }
-    
+
     public class DeviceAddedArgs : DeviceArgs
     {
         private Device device;
-        
+
         public DeviceAddedArgs(string udi) : base(udi)
         {
         }
-        
+
         public Device Device {
-            get { 
+            get {
                 if(device == null) {
                     device = new Device(Udi);
                 }
-                
+
                 return device;
             }
         }
     }
-    
+
     public class DeviceRemovedArgs : DeviceArgs
     {
         public DeviceRemovedArgs(string udi) : base(udi)
         {
         }
     }
-    
+
     public class NewCapabilityArgs : DeviceArgs
     {
         private string capability;
-        
+
         public NewCapabilityArgs(string udi, string capability) : base(udi)
         {
             this.capability = capability;
         }
-        
+
         public string Capability {
             get { return capability; }
         }
     }
-    
+
     public delegate void DeviceAddedHandler(object o, DeviceAddedArgs args);
     public delegate void DeviceRemovedHandler(object o, DeviceRemovedArgs args);
     public delegate void NewCapabilityHandler(object o, NewCapabilityArgs args);
-    
+
     public class Manager : IEnumerable<string>
     {
         private IManager manager;
-        
+
         public event DeviceAddedHandler DeviceAdded;
         public event DeviceRemovedHandler DeviceRemoved;
         public event NewCapabilityHandler NewCapability;
-        
+
         public Manager()
         {
             if(!Bus.System.NameHasOwner("org.freedesktop.Hal")) {
                 throw new ApplicationException("Could not find org.freedesktop.Hal");
             }
-            
+
             manager = Bus.System.GetObject<IManager>("org.freedesktop.Hal",
                 new ObjectPath("/org/freedesktop/Hal/Manager"));
-            
+
             if(manager == null) {
                 throw new ApplicationException("The /org/freedesktop/Hal/Manager object could not be located on the DBUs interface org.freedesktop.Hal");
             }
@@ -134,62 +134,62 @@ namespace Hal
             manager.DeviceRemoved += OnDeviceRemoved;
             manager.NewCapability += OnNewCapability;
         }
-        
+
         protected virtual void OnDeviceAdded(string udi)
         {
             if(DeviceAdded != null)
                 DeviceAdded(this, new DeviceAddedArgs(udi));
         }
-        
+
         protected virtual void OnDeviceRemoved(string udi)
         {
             if(DeviceRemoved != null)
                 DeviceRemoved(this, new DeviceRemovedArgs(udi));
         }
-        
+
         protected virtual void OnNewCapability(string udi, string capability)
         {
             if(NewCapability != null)
                 NewCapability(this, new NewCapabilityArgs(udi, capability));
         }
-        
+
         public bool DeviceExists(string udi)
         {
             return manager.DeviceExists(udi);
         }
-        
+
         public string [] FindDeviceByStringMatch(string key, string value)
         {
             return manager.FindDeviceStringMatch(key, value);
         }
-        
+
         public string [] FindDeviceByCapability(string capability)
         {
             return manager.FindDeviceByCapability(capability);
         }
-        
+
         public Device [] FindDeviceByCapabilityAsDevice(string capability)
         {
             return Device.UdisToDevices(FindDeviceByCapability(capability));
         }
-        
+
         public Device [] FindDeviceByStringMatchAsDevice(string key, string value)
         {
             return Device.UdisToDevices(FindDeviceByStringMatch(key, value));
         }
-        
+
         public string [] GetAllDevices()
         {
             return manager.GetAllDevices();
         }
-        
+
         public IEnumerator<string> GetEnumerator()
         {
             foreach(string device in GetAllDevices()) {
                 yield return device;
             }
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator()
         {
             return GetEnumerator();
diff --git a/src/Backends/Banshee.Hal/Hal/Volume.cs b/src/Backends/Banshee.Hal/Hal/Volume.cs
index 380c262..fb0e293 100644
--- a/src/Backends/Banshee.Hal/Hal/Volume.cs
+++ b/src/Backends/Banshee.Hal/Hal/Volume.cs
@@ -41,7 +41,7 @@ namespace Hal
         void Unmount(string [] args);
         void Eject(string [] args);
     }
-    
+
     public class Volume : Device
     {
         public Volume(string udi) : base(udi)
@@ -52,27 +52,27 @@ namespace Hal
         {
             Mount(new string [] { String.Empty });
         }
-        
+
         public void Mount(params string [] args)
         {
             CastDevice<IVolume>().Mount(args);
         }
-        
+
         public void Unmount()
         {
             Unmount(new string [] { String.Empty });
         }
-        
+
         public void Unmount(params string [] args)
         {
             CastDevice<IVolume>().Unmount(args);
         }
-        
+
         public void Eject()
         {
             Eject(new string [] { String.Empty });
         }
-        
+
         public void Eject(params string [] args)
         {
             CastDevice<IVolume>().Eject(args);
diff --git a/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs b/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs
index 686a289..a0d6267 100644
--- a/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs
+++ b/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs
@@ -41,44 +41,44 @@ namespace Banshee.NowPlaying.X11
         {
             [DllImport ("libbnpx11")]
             private static extern IntPtr bacon_resize_get_type ();
-    
+
             public static new GLib.GType GType {
                 get { return new GLib.GType (bacon_resize_get_type ()); }
             }
-        
+
             public BaconResize (Gtk.Window window) : base (IntPtr.Zero)
             {
                 this.window = window;
-                
+
                 GLib.Value window_val = new GLib.Value (window);
                 CreateNativeObject (
-                    new string [] { "video-widget" }, 
+                    new string [] { "video-widget" },
                     new GLib.Value [] { window_val }
                 );
                 window_val.Dispose ();
             }
-            
+
             private Window window;
             public Window Window {
                 get { return window; }
             }
-            
+
             [DllImport ("libbnpx11")]
             private static extern void bacon_resize_resize (IntPtr handle);
-            
+
             public void Resize ()
             {
                 bacon_resize_resize (Handle);
             }
-            
+
             [DllImport ("libbnpx11")]
             private static extern void bacon_resize_restore (IntPtr handle);
-            
+
             public void Restore ()
             {
                 bacon_resize_restore (Handle);
             }
-            
+
             [GLib.Property ("have-xvidmode")]
             public bool HaveXVidMode {
                 get {
@@ -89,9 +89,9 @@ namespace Banshee.NowPlaying.X11
                 }
             }
         }
-        
+
         private BaconResize resize;
-        
+
         public void Fullscreen (Window window, bool fullscreen)
         {
             // Create the Bacon X11 Resizer if we haven't before or the window changes
@@ -99,30 +99,30 @@ namespace Banshee.NowPlaying.X11
                 if (resize != null) {
                     resize.Dispose ();
                 }
-                
+
                 resize = new BaconResize (window);
                 Log.DebugFormat ("X11 Fullscreen Window Set (HaveXVidMode = {0})", resize.HaveXVidMode);
             }
-            
+
             // Do the default GTK fullscreen operation
             if (fullscreen) {
                 window.Fullscreen ();
             } else {
                 window.Unfullscreen ();
             }
-            
+
             // Skip if we don't support xvidmode, otherwise do the good resizing
             if (!resize.HaveXVidMode) {
                 return;
             }
-            
+
             if (fullscreen) {
                 resize.Resize ();
             } else {
                 resize.Restore ();
             }
         }
-        
+
         public void Dispose ()
         {
             if (resize != null) {
diff --git a/src/Backends/Banshee.Osx/Banshee.OsxBackend/HardwareManager.cs b/src/Backends/Banshee.Osx/Banshee.OsxBackend/HardwareManager.cs
index 384cb3d..054ba57 100644
--- a/src/Backends/Banshee.Osx/Banshee.OsxBackend/HardwareManager.cs
+++ b/src/Backends/Banshee.Osx/Banshee.OsxBackend/HardwareManager.cs
@@ -38,7 +38,7 @@ namespace Banshee.OsxBackend
     {
         public event DeviceAddedHandler DeviceAdded;
         public event DeviceRemovedHandler DeviceRemoved;
- 
+
         public void Dispose ()
         {
         }
@@ -47,22 +47,22 @@ namespace Banshee.OsxBackend
         {
             yield break;
         }
-        
+
         private IEnumerable<T> GetAllBlockDevices<T> () where T : IBlockDevice
         {
             yield break;
         }
-        
+
         public IEnumerable<IBlockDevice> GetAllBlockDevices ()
         {
             return GetAllBlockDevices<IBlockDevice> ();
         }
-        
+
         public IEnumerable<ICdromDevice> GetAllCdromDevices ()
         {
             return GetAllBlockDevices<ICdromDevice> ();
         }
-        
+
         public IEnumerable<IDiskDevice> GetAllDiskDevices ()
         {
             return GetAllBlockDevices<IDiskDevice> ();
diff --git a/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs b/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs
index 127bde7..84351ed 100644
--- a/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs
+++ b/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs
@@ -44,37 +44,37 @@ namespace Banshee.OsxBackend
         private InterfaceActionService interface_action_service;
         private uint ui_manager_id;
         private bool disposed;
-        
+
         void IExtensionService.Initialize ()
         {
             elements_service = ServiceManager.Get<GtkElementsService> ();
             interface_action_service = ServiceManager.Get<InterfaceActionService> ();
-            
+
             if (!ServiceStartup ()) {
                 ServiceManager.ServiceStarted += OnServiceStarted;
             }
         }
 
-        private void OnServiceStarted (ServiceStartedArgs args) 
+        private void OnServiceStarted (ServiceStartedArgs args)
         {
             if (args.Service is Banshee.Gui.InterfaceActionService) {
                 interface_action_service = (InterfaceActionService)args.Service;
             } else if (args.Service is GtkElementsService) {
                 elements_service = (GtkElementsService)args.Service;
             }
-                    
+
             ServiceStartup ();
         }
-        
+
         private bool ServiceStartup ()
         {
             if (elements_service == null || interface_action_service == null) {
                 return false;
             }
-            
+
             Initialize ();
             ServiceManager.ServiceStarted -= OnServiceStarted;
-            
+
             return true;
         }
 
@@ -89,12 +89,12 @@ namespace Banshee.OsxBackend
             });
 
             // merge close menu item
-            ui_manager_id = interface_action_service.UIManager.AddUiFromResource ("osx-ui-actions-layout.xml");      
+            ui_manager_id = interface_action_service.UIManager.AddUiFromResource ("osx-ui-actions-layout.xml");
             RegisterCloseHandler ();
 
             elements_service.PrimaryWindow.WindowStateEvent += WindowStateHandler;
-            
-            // bind gtk menu to global osx menu 
+
+            // bind gtk menu to global osx menu
             BindMenuBar ();
 
             // make menu more osx-like
@@ -105,7 +105,7 @@ namespace Banshee.OsxBackend
             doc.Clicked += OnDockClicked;
             doc.QuitActivate += OnDockQuitActivated;
         }
-        
+
         public void Dispose ()
         {
             if (disposed) {
@@ -113,30 +113,30 @@ namespace Banshee.OsxBackend
             }
 
             elements_service.PrimaryWindowClose = null;
-            
+
             interface_action_service.GlobalActions.Remove ("CloseAction");
             interface_action_service.UIManager.RemoveUi (ui_manager_id);
-        
+
             disposed = true;
         }
-        
+
         string IService.ServiceName {
             get { return "OsxService"; }
         }
 
-        private void OnDockClicked (object o, System.EventArgs args) 
+        private void OnDockClicked (object o, System.EventArgs args)
         {
             SetWindowVisibility (true);
         }
 
-        private void OnDockQuitActivated (object o, System.EventArgs args) 
+        private void OnDockQuitActivated (object o, System.EventArgs args)
         {
-            // FIXME: disabled due to issue with intermitant throwing of exception 
+            // FIXME: disabled due to issue with intermitant throwing of exception
             // while quitting via the dock item.. need to figure out where exactly
             // the issue is..
             //Banshee.ServiceStack.Application.Shutdown ();
         }
-        
+
         private void BindMenuBar ()
         {
             UIManager ui = interface_action_service.UIManager;
@@ -144,8 +144,8 @@ namespace Banshee.OsxBackend
             // retreive and hide the gtk menu
             MenuShell menu = (MenuShell) ui.GetWidget ("/MainMenu");
             menu.Hide ();
-            
-            // bind menu 
+
+            // bind menu
             IgeMacMenu.MenuBar = menu;
         }
 
@@ -160,7 +160,7 @@ namespace Banshee.OsxBackend
             IgeMacMenuGroup prefs_group = IgeMacMenu.AddAppMenuGroup ();
 
             IgeMacMenu.QuitMenuItem = quit_item;
-            
+
             about_group.AddMenuItem (about_item, null);
             prefs_group.AddMenuItem (prefs_item, null);
         }
@@ -171,7 +171,7 @@ namespace Banshee.OsxBackend
                 elements_service.PrimaryWindowClose = OnPrimaryWindowClose;
             }
         }
-        
+
         private bool OnPrimaryWindowClose ()
         {
             CloseWindow (null, null);
diff --git a/src/Backends/Banshee.Unix/Banshee.IO.Unix/DemuxVfs.cs b/src/Backends/Banshee.Unix/Banshee.IO.Unix/DemuxVfs.cs
index 25e7047..5da1e57 100644
--- a/src/Backends/Banshee.Unix/Banshee.IO.Unix/DemuxVfs.cs
+++ b/src/Backends/Banshee.Unix/Banshee.IO.Unix/DemuxVfs.cs
@@ -36,35 +36,35 @@ using Banshee.Base;
 namespace Banshee.IO.Unix
 {
     public class DemuxVfs : IDemuxVfs
-    {   
+    {
         private UnixFileInfo file_info;
-        
+
         public DemuxVfs (string path)
         {
             file_info = new UnixFileInfo (path);
         }
-        
+
         public void CloseStream (Stream stream)
         {
             stream.Close ();
         }
-        
-        public string Name { 
+
+        public string Name {
             get { return file_info.FullName; }
         }
-        
+
         public Stream ReadStream {
             get { return file_info.Open (FileMode.Open, FileAccess.Read); }
         }
-        
+
         public Stream WriteStream {
             get { return file_info.Open (FileMode.Open, FileAccess.ReadWrite); }
         }
-   
+
         public bool IsReadable {
             get { return file_info.CanAccess (AccessModes.R_OK); }
         }
-   
+
         public bool IsWritable {
             get { return file_info.CanAccess (AccessModes.W_OK); }
         }
diff --git a/src/Backends/Banshee.Unix/Banshee.IO.Unix/Directory.cs b/src/Backends/Banshee.Unix/Banshee.IO.Unix/Directory.cs
index 65359ce..fcfefc0 100644
--- a/src/Backends/Banshee.Unix/Banshee.IO.Unix/Directory.cs
+++ b/src/Backends/Banshee.Unix/Banshee.IO.Unix/Directory.cs
@@ -40,17 +40,17 @@ namespace Banshee.IO.Unix
     {
         [System.Runtime.InteropServices.DllImport ("libglib-2.0-0.dll")]
         private static extern int g_mkdir_with_parents (IntPtr path, int mode);
-    
+
         public void Create (string directory)
         {
             IntPtr path_ptr = IntPtr.Zero;
-            
+
             try {
                 path_ptr = GLib.Marshaller.StringToPtrGStrdup (directory);
                 if (path_ptr == IntPtr.Zero) {
                     throw new Exception ("Failed to allocate native directory string");
                 }
-            
+
                 // 493 == 0755 - C# doesn't do octal literals
                 if (g_mkdir_with_parents (path_ptr, 493) == -1) {
                     Mono.Unix.UnixMarshal.ThrowExceptionForLastError ();
@@ -64,18 +64,18 @@ namespace Banshee.IO.Unix
                 }
             }
         }
-        
+
         public void Delete (string directory)
         {
             Delete (directory, false);
         }
-        
+
         public void Delete (string directory, bool recursive)
         {
             UnixDirectoryInfo unix_dir = new UnixDirectoryInfo (directory);
             unix_dir.Delete (recursive);
         }
-        
+
         public bool Exists (string directory)
         {
             try {
@@ -85,7 +85,7 @@ namespace Banshee.IO.Unix
                 return false;
             }
         }
-        
+
         public IEnumerable<string> GetFiles (string directory)
         {
             UnixDirectoryInfo unix_dir = new UnixDirectoryInfo (directory);
@@ -95,7 +95,7 @@ namespace Banshee.IO.Unix
                 }
             }
         }
-        
+
         public IEnumerable<string> GetDirectories (string directory)
         {
             UnixDirectoryInfo unix_dir = new UnixDirectoryInfo (directory);
@@ -105,7 +105,7 @@ namespace Banshee.IO.Unix
                 }
             }
         }
-        
+
         public void Move (SafeUri from, SafeUri to)
         {
             Mono.Unix.Native.Stdlib.rename (from.LocalPath, to.LocalPath);
diff --git a/src/Backends/Banshee.Unix/Banshee.IO.Unix/File.cs b/src/Backends/Banshee.Unix/Banshee.IO.Unix/File.cs
index cbbb1f7..da64d13 100644
--- a/src/Backends/Banshee.Unix/Banshee.IO.Unix/File.cs
+++ b/src/Backends/Banshee.Unix/Banshee.IO.Unix/File.cs
@@ -41,7 +41,7 @@ namespace Banshee.IO.Unix
         private bool is_directory;
         private bool is_regular_file;
         private long mtime;
-        
+
         internal FileStat (string path)
         {
             buf = new Stat ();
@@ -52,11 +52,11 @@ namespace Banshee.IO.Unix
             is_directory &= ! ((buf.st_mode & FilePermissions.S_IFSOCK) == FilePermissions.S_IFSOCK);
             mtime = buf.st_mtime;
         }
-        
+
         internal bool IsDirectory {
             get { return is_directory; }
         }
-        
+
         internal bool IsRegularFile {
             get { return is_regular_file; }
         }
@@ -89,19 +89,19 @@ namespace Banshee.IO.Unix
         {
             System.IO.File.Copy (from.LocalPath, to.LocalPath, overwrite);
         }
-        
+
         public Stream OpenRead (SafeUri uri)
         {
             return new UnixFileInfo (uri.LocalPath).OpenRead ();
         }
-        
+
         public Stream OpenWrite (SafeUri uri, bool overwrite)
         {
-            return overwrite 
+            return overwrite
                 ? new UnixFileInfo (uri.LocalPath).Open (FileMode.Create, FileAccess.ReadWrite, FilePermissions.DEFFILEMODE)
                 : new UnixFileInfo (uri.LocalPath).OpenWrite ();
         }
-        
+
         public long GetSize (SafeUri uri)
         {
             try {
diff --git a/src/Backends/Banshee.Unix/Banshee.IO.Unix/Provider.cs b/src/Backends/Banshee.Unix/Banshee.IO.Unix/Provider.cs
index 09b7d47..9c19653 100644
--- a/src/Backends/Banshee.Unix/Banshee.IO.Unix/Provider.cs
+++ b/src/Backends/Banshee.Unix/Banshee.IO.Unix/Provider.cs
@@ -32,7 +32,7 @@ namespace Banshee.IO.Unix
 {
     public class Provider : Banshee.IO.IProvider
     {
-    	public Type FileProvider { 
+    	public Type FileProvider {
     	    get { return typeof (File); }
     	}
 
diff --git a/src/Clients/Beroe/Beroe/IndexerClient.cs b/src/Clients/Beroe/Beroe/IndexerClient.cs
index b3b5f7a..f4c0430 100644
--- a/src/Clients/Beroe/Beroe/IndexerClient.cs
+++ b/src/Clients/Beroe/Beroe/IndexerClient.cs
@@ -61,20 +61,20 @@ namespace Beroe
                 Log.Error ("Another indexer is already running");
                 return;
             }
-            
+
             Log.Information ("Indexer client started");
-            
+
             Startup ();
         }
-        
+
         private static void ActAsRemoteClient ()
         {
         }
-        
+
         private static void Startup ()
         {
             ThreadAssist.InitializeMainThread ();
-            
+
             ServiceManager.Initialize ();
             ServiceManager.RegisterService<DBusServiceManager> ();
             ServiceManager.RegisterService<BansheeDbConnection> ();
@@ -83,32 +83,32 @@ namespace Beroe
             ServiceManager.RegisterService<CollectionIndexerService> ();
             ServiceManager.RegisterService<IndexerClient> ();
             ServiceManager.Run ();
-            
+
             ServiceManager.Get<IndexerClient> ().Run ();
         }
-        
+
         private string [] reboot_args;
-        
+
         public void Run ()
         {
             ServiceManager.Get<CollectionIndexerService> ().ShutdownHandler = DBusConnection.QuitMainLoop;
-        
+
             ServiceManager.SourceManager.AddSource (new Banshee.Library.MusicLibrarySource ());
             ServiceManager.SourceManager.AddSource (new Banshee.Library.VideoLibrarySource ());
-            
+
             DBusConnection.RunMainLoop ();
-            
+
             ServiceManager.Shutdown ();
-            
+
             if (reboot_args != null) {
                 Log.Debug ("Rebooting");
-                
+
                 System.Text.StringBuilder builder = new System.Text.StringBuilder ();
                 foreach (string arg in reboot_args) {
                     builder.AppendFormat ("\"{0}\" ", arg);
                 }
-                
-                // FIXME: Using Process.Start sucks, but DBus doesn't let you specify 
+
+                // FIXME: Using Process.Start sucks, but DBus doesn't let you specify
                 // extra command line arguments
                 DBusConnection.Disconnect ("CollectionIndexer");
                 Process.Start ("banshee-1", builder.ToString ());
@@ -116,12 +116,12 @@ namespace Beroe
                 // Bus.Session.Iterate ();
             }
         }
-        
+
         public void Hello ()
         {
             Log.Debug ("Received a Hello over DBus");
         }
-        
+
         public void RebootWhenFinished (string [] args)
         {
             lock (this) {
@@ -134,11 +134,11 @@ namespace Beroe
                 });
             }
         }
-        
+
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         string IService.ServiceName {
             get { return "IndexerClient"; }
         }
diff --git a/src/Clients/Booter/Booter/Entry.cs b/src/Clients/Booter/Booter/Entry.cs
index 2730081..c788f45 100644
--- a/src/Clients/Booter/Booter/Entry.cs
+++ b/src/Clients/Booter/Booter/Entry.cs
@@ -76,10 +76,10 @@ namespace Booter
             if (CheckHelpVersion ()) {
                 return;
             }
-            
+
             if (DBusConnection.ApplicationInstanceAlreadyRunning) {
                 // DBus Command/Query/File Proxy Client
-                BootClient ("Halie"); 
+                BootClient ("Halie");
                 NotifyStartupComplete ();
             } else if (DBusConnection.NameHasOwner ("CollectionIndexer")) {
                 // Tell the existing indexer to start Banshee when it's done
@@ -100,19 +100,19 @@ namespace Booter
                 BootClient ("Nereid");
             }
         }
-        
+
         private static void BootClient (string clientName)
         {
             AppDomain.CurrentDomain.ExecuteAssembly (Path.Combine (Path.GetDirectoryName (
                 Assembly.GetEntryAssembly ().Location), String.Format ("{0}.exe", clientName)));
         }
-        
+
         [DllImport ("libgdk-win32-2.0-0.dll")]
         private static extern bool gdk_init_check (IntPtr argc, IntPtr argv);
-        
+
         [DllImport ("libgdk-win32-2.0-0.dll")]
         private static extern void gdk_notify_startup_complete ();
-        
+
         private static void NotifyStartupComplete ()
         {
             try {
@@ -133,15 +133,15 @@ namespace Booter
                 ShowVersion ();
                 return true;
             }
-            
+
             return false;
         }
-        
+
         private static void ShowHelp ()
         {
             Console.WriteLine ("Usage: {0} [options...] [files|URIs...]", "banshee-1");
             Console.WriteLine ();
-            
+
             Layout commands = new Layout (
                 new LayoutGroup ("help", Catalog.GetString ("Help Options"),
                     new LayoutOption ("help", Catalog.GetString ("Show this help")),
@@ -153,7 +153,7 @@ namespace Booter
                     new LayoutOption ("help-all", Catalog.GetString ("Show all option groups")),
                     new LayoutOption ("version", Catalog.GetString ("Show version information"))
                 ),
-                
+
                 new LayoutGroup ("playback", Catalog.GetString ("Playback Control Options"),
                     new LayoutOption ("next", Catalog.GetString ("Play the next track, optionally restarting if the 'restart' value is set")),
                     new LayoutOption ("previous", Catalog.GetString ("Play the previous track, optionally restarting if the 'restart value is set")),
@@ -167,7 +167,7 @@ namespace Booter
                     new LayoutOption ("set-volume=LEVEL", Catalog.GetString ("Set the playback volume (0-100)")),
                     new LayoutOption ("set-position=POS", Catalog.GetString ("Seek to a specific point (seconds, float)"))
                 ),
-                
+
                 new LayoutGroup ("query-player", Catalog.GetString ("Player Engine Query Options"),
                     new LayoutOption ("query-current-state", Catalog.GetString ("Current player state")),
                     new LayoutOption ("query-last-state", Catalog.GetString ("Last player state")),
@@ -176,7 +176,7 @@ namespace Booter
                     new LayoutOption ("query-volume", Catalog.GetString ("Player volume")),
                     new LayoutOption ("query-position", Catalog.GetString ("Player position in currently playing track"))
                 ),
-                
+
                 new LayoutGroup ("query-track", Catalog.GetString ("Playing Track Metadata Query Options"),
                     new LayoutOption ("query-uri", Catalog.GetString ("URI")),
                     new LayoutOption ("query-artist", Catalog.GetString ("Artist Name")),
@@ -191,36 +191,36 @@ namespace Booter
                     new LayoutOption ("query-score", Catalog.GetString ("Score")),
                     new LayoutOption ("query-bit-rate", Catalog.GetString ("Bit Rate"))
                 ),
-                
+
                 new LayoutGroup ("ui", Catalog.GetString ("User Interface Options"),
                     new LayoutOption ("show|--present", Catalog.GetString ("Present the user interface on the active workspace")),
                     new LayoutOption ("hide", Catalog.GetString ("Hide the user interface")),
                     new LayoutOption ("no-present", Catalog.GetString ("Do not present the user interface, regardless of any other options"))
                 ),
-                
-                new LayoutGroup ("debugging", Catalog.GetString ("Debugging and Development Options"), 
+
+                new LayoutGroup ("debugging", Catalog.GetString ("Debugging and Development Options"),
                     new LayoutOption ("debug", Catalog.GetString ("Enable general debugging features")),
                     new LayoutOption ("debug-sql", Catalog.GetString ("Enable debugging output of SQL queries")),
                     new LayoutOption ("debug-addins", Catalog.GetString ("Enable debugging output of Mono.Addins")),
                     new LayoutOption ("db=FILE", Catalog.GetString ("Specify an alternate database to use")),
                     new LayoutOption ("gconf-base-key=KEY", Catalog.GetString ("Specify an alternate key, default is /apps/banshee-1/")),
-                    new LayoutOption ("uninstalled", Catalog.GetString ("Optimize instance for running uninstalled; " + 
+                    new LayoutOption ("uninstalled", Catalog.GetString ("Optimize instance for running uninstalled; " +
                         "most notably, this will create an alternate Mono.Addins database in the working directory")),
                     new LayoutOption ("disable-dbus", Catalog.GetString ("Disable DBus support completely")),
                     new LayoutOption ("no-gtkrc", String.Format (Catalog.GetString (
-                        "Skip loading a custom gtkrc file ({0}) if it exists"), 
+                        "Skip loading a custom gtkrc file ({0}) if it exists"),
                         Path.Combine (Paths.ApplicationData, "gtkrc").Replace (
                             Environment.GetFolderPath (Environment.SpecialFolder.Personal), "~")))
                 )
             );
-            
+
             if (ApplicationContext.CommandLine.Contains ("help-all")) {
                 Console.WriteLine (commands);
                 return;
             }
-            
+
             List<string> errors = null;
-            
+
             foreach (KeyValuePair<string, string> argument in ApplicationContext.CommandLine.Arguments) {
                 switch (argument.Key) {
                     case "help": Console.WriteLine (commands.ToString ("help")); break;
@@ -236,14 +236,14 @@ namespace Booter
                         break;
                 }
             }
-            
+
             if (errors != null) {
                 Console.WriteLine (commands.LayoutLine (String.Format (Catalog.GetString (
                     "The following help arguments are invalid: {0}"),
                     Hyena.Collections.CollectionExtensions.Join (errors, "--", null, ", "))));
             }
         }
-        
+
         private static void ShowVersion ()
         {
             Console.WriteLine ("Banshee {0} ({1}) http://banshee-project.org";, Application.DisplayVersion, Application.Version);
diff --git a/src/Clients/Halie/Halie/Client.cs b/src/Clients/Halie/Halie/Client.cs
index 47b110d..1bfd8fb 100644
--- a/src/Clients/Halie/Halie/Client.cs
+++ b/src/Clients/Halie/Halie/Client.cs
@@ -52,16 +52,16 @@ namespace Halie
             void Present ();
             void Hide ();
         }
-        
+
         private static bool hide_field;
         private static DBusCommandService command;
-    
+
         public static void Main ()
         {
             if (!DBusConnection.ConnectTried) {
                 DBusConnection.Connect ();
             }
-            
+
             if (!DBusConnection.Enabled) {
                 Error ("All commands ignored, DBus support is disabled");
                 return;
@@ -69,22 +69,22 @@ namespace Halie
                 Error ("Banshee does not seem to be running");
                 return;
             }
-            
+
             command = DBusServiceManager.FindInstance<DBusCommandService> ("/DBusCommandService");
             hide_field = ApplicationContext.CommandLine.Contains ("hide-field");
-            
+
             bool present = HandlePlayerCommands () && !ApplicationContext.CommandLine.Contains ("indexer");
             HandleWindowCommands (present);
             HandleFiles ();
         }
-        
+
         private static void HandleWindowCommands (bool present)
         {
             IClientWindow window = DBusServiceManager.FindInstance<IClientWindow> ("/ClientWindow");
             if (window == null) {
                 return;
             }
-            
+
             foreach (KeyValuePair<string, string> arg in ApplicationContext.CommandLine.Arguments) {
                 switch (arg.Key) {
                     case "show":
@@ -95,12 +95,12 @@ namespace Halie
                         break;
                 }
             }
-            
+
             if (present && !ApplicationContext.CommandLine.Contains ("no-present")) {
                 window.Present ();
             }
         }
-        
+
         private static void HandleFiles ()
         {
             foreach (string file in ApplicationContext.CommandLine.Files) {
@@ -112,14 +112,14 @@ namespace Halie
                 }
             }
         }
-        
+
         private static bool HandlePlayerCommands ()
         {
             IPlayerEngineService player = DBusServiceManager.FindInstance<IPlayerEngineService> ("/PlayerEngine");
             IPlaybackControllerService controller = DBusServiceManager.FindInstance<IPlaybackControllerService> ("/PlaybackController");
             IDictionary<string, object> track = null;
             int handled_count = 0;
-            
+
             foreach (KeyValuePair<string, string> arg in ApplicationContext.CommandLine.Arguments) {
                 handled_count++;
                 switch (arg.Key) {
@@ -128,12 +128,12 @@ namespace Halie
                     case "pause":          player.Pause ();         break;
                     case "stop":           player.Close ();         break;
                     case "toggle-playing": player.TogglePlaying (); break;
-                    
+
                     // For the playback controller
                     case "first":    controller.First ();                                    break;
                     case "next":     controller.Next (ParseBool (arg.Value, "restart"));     break;
                     case "previous": controller.Previous (ParseBool (arg.Value, "restart")); break;
-                    case "stop-when-finished": 
+                    case "stop-when-finished":
                         controller.StopWhenFinished = !ParseBool (arg.Value);
                         break;
                     case "set-position":
@@ -158,10 +158,10 @@ namespace Halie
                         break;
                 }
             }
-            
+
             return handled_count <= 0;
         }
-        
+
         private static void HandleQuery (IPlayerEngineService player, IDictionary<string, object> track, string query)
         {
             // Translate legacy query arguments into new ones
@@ -170,7 +170,7 @@ namespace Halie
                 case "duration": query = "length"; break;
                 case "uri":      query = "URI";    break;
             }
-            
+
             switch (query) {
                 case "all":
                     if (track != null) {
@@ -178,16 +178,16 @@ namespace Halie
                             DisplayTrackField (field.Key, field.Value);
                         }
                     }
-                    
+
                     HandleQuery (player, track, "position");
                     HandleQuery (player, track, "volume");
                     HandleQuery (player, track, "current-state");
                     HandleQuery (player, track, "last-state");
                     HandleQuery (player, track, "can-pause");
                     HandleQuery (player, track, "can-seek");
-                    break; 
-                case "position": 
-                    DisplayTrackField ("position", TimeSpan.FromMilliseconds (player.Position).TotalSeconds); 
+                    break;
+                case "position":
+                    DisplayTrackField ("position", TimeSpan.FromMilliseconds (player.Position).TotalSeconds);
                     break;
                 case "volume":
                     DisplayTrackField ("volume", player.Volume);
@@ -227,7 +227,7 @@ namespace Halie
                     break;
             }
         }
-        
+
         private static void DisplayTrackField (string field, object value)
         {
             if (field == String.Empty) {
@@ -237,43 +237,43 @@ namespace Halie
             } else if (field == "length") {
                 field = "duration";
             }
-            
+
             string result = null;
             if (value is bool) {
                 result = (bool)value ? "true" : "false";
             } else {
                 result = value.ToString ();
             }
-            
+
             if (hide_field) {
                 Console.WriteLine (result);
             } else {
                 Console.WriteLine ("{0}: {1}", field.ToLower (), result);
             }
         }
-        
+
         private static bool ParseBool (string value)
         {
             return ParseBool (value, "true", "yes");
         }
-        
+
         private static bool ParseBool (string value, params string [] trueValues)
         {
             if (String.IsNullOrEmpty (value)) {
                 return false;
             }
-            
+
             value = value.ToLower ();
-            
+
             foreach (string trueValue in trueValues) {
                 if (value == trueValue) {
                     return true;
                 }
             }
-            
+
             return false;
         }
-        
+
         private static void Error (string error, params object [] args)
         {
             Console.WriteLine ("Error: {0}", String.Format (error, args));
diff --git a/src/Clients/Muinshee/Muinshee/BaseDialog.cs b/src/Clients/Muinshee/Muinshee/BaseDialog.cs
index c180736..b7b2817 100644
--- a/src/Clients/Muinshee/Muinshee/BaseDialog.cs
+++ b/src/Clients/Muinshee/Muinshee/BaseDialog.cs
@@ -58,13 +58,13 @@ namespace Muinshee
         {
             this.queue = queue;
             VBox.Spacing = 6;
-            
+
             HBox filter_box = new HBox ();
             filter_box.Spacing = 6;
-            
+
             Label search_label = new Label ("_Search:");
             filter_box.PackStart (search_label, false, false, 0);
-            
+
             search_entry = new SearchEntry ();
             search_entry.Show ();
             search_entry.Changed += OnFilterChanged;
@@ -79,7 +79,7 @@ namespace Muinshee
             VBox.PackStart (sw, true, true, 0);
 
             AddDefaultCloseButton ();
-            
+
             Button queue_button = new ImageButton (Catalog.GetString ("En_queue"), "stock_timer");
             AddActionWidget (queue_button, Gtk.ResponseType.Apply);
 
@@ -123,7 +123,7 @@ namespace Muinshee
                 }
             }
         }
-        
+
         protected abstract void Queue ();
         protected abstract Widget GetItemWidget ();
         protected abstract TrackInfo FirstTrack { get; }
@@ -131,7 +131,7 @@ namespace Muinshee
         protected PlaylistSource QueueSource { get { return queue; } }
 
         protected static Banshee.Library.MusicLibrarySource Music { get { return ServiceManager.SourceManager.MusicLibrary; } }
-        
+
         public override void Destroy ()
         {
             OnFilterChanged (null, null);
diff --git a/src/Clients/Muinshee/Muinshee/Client.cs b/src/Clients/Muinshee/Muinshee/Client.cs
index 0cc6b68..8d39cbc 100644
--- a/src/Clients/Muinshee/Muinshee/Client.cs
+++ b/src/Clients/Muinshee/Muinshee/Client.cs
@@ -47,13 +47,13 @@ namespace Muinshee
         {
             Startup<Muinshee.Client> (args);
         }
-        
+
         protected override void OnRegisterServices ()
         {
             // Register the main interface
             ServiceManager.RegisterService<Muinshee.PlayerInterface> ();
         }
-        
+
         public override string ClientId {
             get { return "muinshee"; }
         }
diff --git a/src/Clients/Muinshee/Muinshee/MuinsheeActions.cs b/src/Clients/Muinshee/Muinshee/MuinsheeActions.cs
index ce95ff1..7b24847 100644
--- a/src/Clients/Muinshee/Muinshee/MuinsheeActions.cs
+++ b/src/Clients/Muinshee/Muinshee/MuinsheeActions.cs
@@ -37,7 +37,7 @@ namespace Muinshee
     public class MuinsheeActions : BansheeActionGroup
     {
         private Banshee.Playlist.PlaylistSource queue;
-        
+
         public MuinsheeActions (Banshee.Playlist.PlaylistSource queue) : base ("muinshee")
         {
             this.queue = queue;
@@ -58,7 +58,7 @@ namespace Muinshee
 
             // TODO disable certain actions
             // Actions.TrackActions.UpdateActions (false, false, "SearchMenu");
-            
+
             AddUiFromFile ("GlobalUI.xml");
         }
 
diff --git a/src/Clients/Muinshee/Muinshee/MuinsheeTrackInfoDisplay.cs b/src/Clients/Muinshee/Muinshee/MuinsheeTrackInfoDisplay.cs
index 42286bc..7a44adf 100644
--- a/src/Clients/Muinshee/Muinshee/MuinsheeTrackInfoDisplay.cs
+++ b/src/Clients/Muinshee/Muinshee/MuinsheeTrackInfoDisplay.cs
@@ -33,7 +33,7 @@ using Hyena.Gui;
 using Banshee.Collection.Gui;
 
 namespace Muinshee
-{    
+{
     public class MuinsheeTrackInfoDisplay : Banshee.Gui.Widgets.ClassicTrackInfoDisplay
     {
         private ImageSurface idle_album;
@@ -50,9 +50,9 @@ namespace Muinshee
         {
             idle_album = idle_album ?? PixbufImageSurface.Create (Banshee.Gui.IconThemeUtils.LoadIcon (
                 ArtworkSizeRequest, "media-optical"), true);
-            
-            ArtworkRenderer.RenderThumbnail (cr, idle_album, false, Allocation.X, Allocation.Y, 
-                ArtworkSizeRequest, ArtworkSizeRequest, 
+
+            ArtworkRenderer.RenderThumbnail (cr, idle_album, false, Allocation.X, Allocation.Y,
+                ArtworkSizeRequest, ArtworkSizeRequest,
                 false, 0, true, BackgroundColor);
         }
     }
diff --git a/src/Clients/Muinshee/Muinshee/PlayerInterface.cs b/src/Clients/Muinshee/Muinshee/PlayerInterface.cs
index 196fb24..cb94537 100644
--- a/src/Clients/Muinshee/Muinshee/PlayerInterface.cs
+++ b/src/Clients/Muinshee/Muinshee/PlayerInterface.cs
@@ -1,4 +1,4 @@
-// 
+//
 // PlayerInterface.cs
 //
 // Author:
@@ -64,11 +64,11 @@ namespace Muinshee
         private Toolbar header_toolbar;
 
         private MuinsheeActions actions;
-        
+
         // Major Interaction Components
         private TerseTrackListView track_view;
         private Label list_label;
-        
+
         public PlayerInterface () : base (Catalog.GetString ("Banshee Media Player"), "muinshee", -1, 450)
         {
         }
@@ -110,8 +110,8 @@ namespace Muinshee
             }
         }
 
-#region System Overrides 
-        
+#region System Overrides
+
         public override void Dispose ()
         {
             lock (this) {
@@ -123,19 +123,19 @@ namespace Muinshee
                 Gtk.Application.Quit ();
             }
         }
-        
-#endregion        
+
+#endregion
 
 #region Interface Construction
-        
+
         private void BuildPrimaryLayout ()
         {
             main_vbox = new VBox ();
-            
+
             Widget menu = new MainMenu ();
             menu.Show ();
             main_vbox.PackStart (menu, false, false, 0);
-           
+
             BuildHeader ();
 
             content_vbox = new VBox ();
@@ -147,30 +147,30 @@ namespace Muinshee
 
             BuildTrackInfo ();
             BuildViews ();
-            
+
             main_vbox.ShowAll ();
             Add (main_vbox);
         }
-        
+
         private void BuildHeader ()
         {
             Alignment toolbar_alignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
             toolbar_alignment.TopPadding = 3;
             toolbar_alignment.BottomPadding = 3;
-            
+
             header_toolbar = (Toolbar)ActionService.UIManager.GetWidget ("/MuinsheeHeaderToolbar");
             header_toolbar.ShowArrow = false;
             header_toolbar.ToolbarStyle = ToolbarStyle.BothHoriz;
-            
+
             toolbar_alignment.Add (header_toolbar);
             toolbar_alignment.ShowAll ();
-            
+
             main_vbox.PackStart (toolbar_alignment, false, false, 0);
-            
+
             Widget next_button = new NextButton (ActionService);
             next_button.Show ();
             ActionService.PopulateToolbarPlaceholder (header_toolbar, "/MuinsheeHeaderToolbar/NextArrowButton", next_button);
-            
+
             ConnectedVolumeButton volume_button = new ConnectedVolumeButton ();
             volume_button.Show ();
             ActionService.PopulateToolbarPlaceholder (header_toolbar, "/MuinsheeHeaderToolbar/VolumeButton", volume_button);
@@ -212,16 +212,16 @@ namespace Muinshee
         }
 
 #endregion
-        
+
 #region Events and Logic Setup
-        
+
         protected override void ConnectEvents ()
         {
             base.ConnectEvents ();
             ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
             header_toolbar.ExposeEvent += OnToolbarExposeEvent;
         }
-        
+
 #endregion
 
 #region Service Event Handlers
@@ -232,9 +232,9 @@ namespace Muinshee
                 UpdateSourceInformation ();
             }
         }
-        
+
 #endregion
-        
+
 #region Helper Functions
 
         private void HandleTrackModelReloaded (object sender, EventArgs args)
@@ -263,7 +263,7 @@ namespace Muinshee
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         string IDBusObjectName.ExportObjectName {
             get { return "MuinsheeClientWindow"; }
         }
diff --git a/src/Clients/Nereid/Nereid/Client.cs b/src/Clients/Nereid/Nereid/Client.cs
index 8675f57..5a93ef6 100644
--- a/src/Clients/Nereid/Nereid/Client.cs
+++ b/src/Clients/Nereid/Nereid/Client.cs
@@ -53,7 +53,7 @@ namespace Nereid
         {
             Startup<Nereid.Client> (args);
         }
-        
+
         protected override void OnRegisterServices ()
         {
             ServiceManager.RegisterService<Nereid.PlayerInterface> ();
diff --git a/src/Clients/Nereid/Nereid/PlayerInterface.cs b/src/Clients/Nereid/Nereid/PlayerInterface.cs
index e9452d5..aea08e1 100644
--- a/src/Clients/Nereid/Nereid/PlayerInterface.cs
+++ b/src/Clients/Nereid/Nereid/PlayerInterface.cs
@@ -1,4 +1,4 @@
-// 
+//
 // PlayerInterface.cs
 //
 // Author:
@@ -64,7 +64,7 @@ namespace Nereid
         private HBox footer_toolbar;
         private HPaned views_pane;
         private ViewContainer view_container;
-        
+
         // Major Interaction Components
         private SourceView source_view;
         private CompositeTrackSourceContents composite_view;
@@ -86,25 +86,25 @@ namespace Nereid
         protected PlayerInterface (IntPtr ptr) : base (ptr)
         {
         }
-        
+
         public PlayerInterface () : base (Catalog.GetString ("Banshee Media Player"), "player_window", 1024, 700)
         {
         }
-        
+
         protected override void Initialize ()
         {
             BuildPrimaryLayout ();
             ConnectEvents ();
 
             ActionService.SourceActions.SourceView = this;
-            
+
             composite_view.TrackView.HasFocus = true;
-            
+
             InitialShowPresent ();
         }
-        
-#region System Overrides 
-        
+
+#region System Overrides
+
         public override void Dispose ()
         {
             lock (this) {
@@ -113,11 +113,11 @@ namespace Nereid
                 Gtk.Application.Quit ();
             }
         }
-        
-#endregion        
+
+#endregion
 
 #region Interface Construction
-        
+
         private void BuildPrimaryLayout ()
         {
             primary_vbox = new VBox ();
@@ -125,11 +125,11 @@ namespace Nereid
             BuildHeader ();
             BuildViews ();
             BuildFooter ();
-            
+
             primary_vbox.Show ();
             Add (primary_vbox);
         }
-        
+
         private void BuildHeader ()
         {
             header_table = new Table (2, 2, false);
@@ -146,30 +146,30 @@ namespace Nereid
             Alignment toolbar_alignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
             toolbar_alignment.TopPadding = 3;
             toolbar_alignment.BottomPadding = 3;
-            
+
             header_toolbar = (Toolbar)ActionService.UIManager.GetWidget ("/HeaderToolbar");
             header_toolbar.ShowArrow = false;
             header_toolbar.ToolbarStyle = ToolbarStyle.BothHoriz;
-            
+
             toolbar_alignment.Add (header_toolbar);
             toolbar_alignment.ShowAll ();
-            
+
             header_table.Attach (toolbar_alignment, 0, 2, 1, 2,
                 AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Shrink, 0, 0);
-            
+
             Widget next_button = new NextButton (ActionService);
             next_button.Show ();
             ActionService.PopulateToolbarPlaceholder (header_toolbar, "/HeaderToolbar/NextArrowButton", next_button);
-            
+
             ConnectedSeekSlider seek_slider = new ConnectedSeekSlider ();
             seek_slider.Show ();
             ActionService.PopulateToolbarPlaceholder (header_toolbar, "/HeaderToolbar/SeekSlider", seek_slider);
-            
+
             TrackInfoDisplay track_info_display = new ClassicTrackInfoDisplay ();
             track_info_display.Show ();
             ActionService.PopulateToolbarPlaceholder (header_toolbar, "/HeaderToolbar/TrackInfoDisplay", track_info_display, true);
-            
+
             ConnectedVolumeButton volume_button = new ConnectedVolumeButton ();
             volume_button.Show ();
             ActionService.PopulateToolbarPlaceholder (header_toolbar, "/HeaderToolbar/VolumeButton", volume_button);
@@ -178,33 +178,33 @@ namespace Nereid
         private void BuildViews ()
         {
             VBox source_box = new VBox ();
-            
+
             views_pane = new HPaned ();
             PersistentPaneController.Control (views_pane, SourceViewWidth);
             view_container = new ViewContainer ();
-            
+
             source_view = new SourceView ();
             composite_view = new CompositeTrackSourceContents ();
-            
+
             Hyena.Widgets.ScrolledWindow source_scroll = new Hyena.Widgets.ScrolledWindow ();
-            source_scroll.AddWithFrame (source_view);       
-            
+            source_scroll.AddWithFrame (source_view);
+
             composite_view.TrackView.HeaderVisible = false;
             view_container.Content = composite_view;
-            
+
             source_box.PackStart (source_scroll, true, true, 0);
             source_box.PackStart (new UserJobTileHost (), false, false, 0);
-            
+
             source_view.SetSizeRequest (125, -1);
             view_container.SetSizeRequest (425, -1);
-            
+
             views_pane.Pack1 (source_box, false, false);
             views_pane.Pack2 (view_container, true, false);
-            
+
             source_box.ShowAll ();
             view_container.Show ();
             views_pane.Show ();
-            
+
             primary_vbox.PackStart (views_pane, true, true, 0);
         }
 
@@ -216,13 +216,13 @@ namespace Nereid
 
             EventBox status_event_box = new EventBox ();
             status_event_box.ButtonPressEvent += OnStatusBoxButtonPress;
-            
+
             status_label = new Label ();
             status_event_box.Add (status_label);
 
             HBox status_hbox = new HBox (true, 0);
             status_hbox.PackStart (status_event_box, false, false, 0);
-            
+
             Alignment status_align = new Alignment (0.5f, 0.5f, 1.0f, 1.0f);
             status_align.Add (status_hbox);
 
@@ -239,7 +239,7 @@ namespace Nereid
             primary_vbox.PackStart (footer_toolbar, false, true, 0);
         }
 
-        private void OnStatusBoxButtonPress (object o, ButtonPressEventArgs args) 
+        private void OnStatusBoxButtonPress (object o, ButtonPressEventArgs args)
         {
             Source source = ServiceManager.SourceManager.ActiveSource;
             if (source != null) {
@@ -249,9 +249,9 @@ namespace Nereid
         }
 
 #endregion
-        
+
 #region Events and Logic Setup
-        
+
         protected override void ConnectEvents ()
         {
             base.ConnectEvents ();
@@ -259,7 +259,7 @@ namespace Nereid
             // Service events
             ServiceManager.SourceManager.ActiveSourceChanged += OnActiveSourceChanged;
             ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
-            
+
             ActionService.TrackActions ["SearchForSameArtistAction"].Activated += OnProgrammaticSearch;
             ActionService.TrackActions ["SearchForSameAlbumAction"].Activated += OnProgrammaticSearch;
 
@@ -268,7 +268,7 @@ namespace Nereid
             views_pane.SizeRequested += delegate {
                 SourceViewWidth.Set (views_pane.Position);
             };
-            
+
             source_view.RowActivated += delegate {
                 Source source = ServiceManager.SourceManager.ActiveSource;
                 if (source is ITrackModelSource) {
@@ -281,7 +281,7 @@ namespace Nereid
                     }
                 }
             };
-            
+
             header_toolbar.ExposeEvent += OnToolbarExposeEvent;
         }
 
@@ -294,7 +294,7 @@ namespace Nereid
         {
             header_toolbar.ExposeEvent -= OnToolbarExposeEvent;
         }
-        
+
 #endregion
 
 #region Service Event Handlers
@@ -306,57 +306,57 @@ namespace Nereid
             view_container.SearchEntry.Query = source.FilterQuery;
             view_container.SearchEntry.Ready = true;
         }
-        
+
         private Source previous_source = null;
         private TrackListModel previous_track_model = null;
         private void OnActiveSourceChanged (SourceEventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 Source source = ServiceManager.SourceManager.ActiveSource;
-    
+
                 view_container.SearchSensitive = source != null && source.CanSearch;
-                
+
                 if (source == null) {
                     return;
                 }
-                
+
                 view_container.Title = source.Name;
                 view_container.SearchEntry.Ready = false;
                 view_container.SearchEntry.CancelSearch ();
-    
+
                 if (source.FilterQuery != null) {
                     view_container.SearchEntry.Query = source.FilterQuery;
                     view_container.SearchEntry.ActivateFilter ((int)source.FilterType);
                 }
-    
+
                 if (view_container.Content != null) {
                     view_container.Content.ResetSource ();
                 }
-    
+
                 if (previous_track_model != null) {
                     previous_track_model.Reloaded -= HandleTrackModelReloaded;
                     previous_track_model = null;
                 }
-    
+
                 if (source is ITrackModelSource) {
                     previous_track_model = (source as ITrackModelSource).TrackModel;
                     previous_track_model.Reloaded += HandleTrackModelReloaded;
                 }
-                
+
                 if (previous_source != null) {
                     previous_source.Properties.PropertyChanged -= OnSourcePropertyChanged;
                 }
-                
+
                 previous_source = source;
                 previous_source.Properties.PropertyChanged += OnSourcePropertyChanged;
-                
+
                 UpdateSourceContents (source);
-                
+
                 UpdateSourceInformation ();
                 view_container.SearchEntry.Ready = true;
             });
         }
-        
+
         private void OnSourcePropertyChanged (object o, PropertyChangeEventArgs args)
         {
             if (args.PropertyName == "Nereid.SourceContents") {
@@ -365,20 +365,20 @@ namespace Nereid
                 });
             }
         }
-        
+
         private void UpdateSourceContents (Source source)
         {
             if (source == null) {
                 return;
             }
-            
+
             // Connect the source models to the views if possible
             ISourceContents contents = source.GetProperty<ISourceContents> ("Nereid.SourceContents",
                 source.GetInheritedProperty<bool> ("Nereid.SourceContentsPropagate"));
 
             view_container.ClearHeaderWidget ();
             view_container.ClearFooter ();
-            
+
             if (contents != null) {
                 if (view_container.Content != contents) {
                     view_container.Content = contents;
@@ -393,7 +393,7 @@ namespace Nereid
                 if (object_view == null) {
                     object_view = new ObjectListSourceContents ();
                 }
-                
+
                 view_container.Content = object_view;
                 view_container.Content.SetSource (source);
                 view_container.Show ();
@@ -423,7 +423,7 @@ namespace Nereid
             if (source.Properties.Contains ("Nereid.SourceContents.FooterWidget")) {
                 footer_widget = source.Properties.Get<Widget> ("Nereid.SourceContents.FooterWidget");
             }
-            
+
             if (footer_widget != null) {
                 view_container.SetFooter (footer_widget);
             }
@@ -442,17 +442,17 @@ namespace Nereid
 #endregion
 
 #region UI Event Handlers
-        
+
         private void OnSearchEntryChanged (object o, EventArgs args)
         {
             Source source = ServiceManager.SourceManager.ActiveSource;
             if (source == null)
                 return;
-            
+
             source.FilterType = (TrackFilterType)view_container.SearchEntry.ActiveFilterID;
             source.FilterQuery = view_container.SearchEntry.Query;
         }
-        
+
 #endregion
 
 #region Implement Interfaces
@@ -466,7 +466,7 @@ namespace Nereid
         {
             source_view.BeginRenameSource (source);
         }
-        
+
         public void ResetHighlight ()
         {
             source_view.ResetHighlight ();
@@ -477,7 +477,7 @@ namespace Nereid
         }
 
 #endregion
-        
+
 #region Gtk.Window Overrides
 
         private bool accel_group_active = true;
@@ -491,12 +491,12 @@ namespace Nereid
 
             (o as Widget).FocusOutEvent -= OnEntryFocusOutEvent;
         }
-        
+
         protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
         {
             bool focus_search = false;
-            
-            if (Focus is Gtk.Entry && (GtkUtilities.NoImportantModifiersAreSet () && 
+
+            if (Focus is Gtk.Entry && (GtkUtilities.NoImportantModifiersAreSet () &&
                 evnt.Key != Gdk.Key.Control_L && evnt.Key != Gdk.Key.Control_R)) {
                 if (accel_group_active) {
                     RemoveAccelGroup (ActionService.UIManager.AccelGroup);
@@ -511,7 +511,7 @@ namespace Nereid
                     accel_group_active = true;
                 }
             }
-            
+
             switch (evnt.Key) {
                 case Gdk.Key.f:
                     if (Gdk.ModifierType.ControlMask == (evnt.State & Gdk.ModifierType.ControlMask)) {
@@ -532,7 +532,7 @@ namespace Nereid
                 view_container.SearchEntry.HasFocus = true;
                 return true;
             }
-            
+
             return base.OnKeyPressEvent (evnt);
         }
 
@@ -579,7 +579,7 @@ namespace Nereid
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         string IDBusObjectName.ExportObjectName {
             get { return "ClientWindow"; }
         }
diff --git a/src/Clients/Nereid/Nereid/ViewContainer.cs b/src/Clients/Nereid/Nereid/ViewContainer.cs
index 4cebd42..4d65cea 100644
--- a/src/Clients/Nereid/Nereid/ViewContainer.cs
+++ b/src/Clients/Nereid/Nereid/ViewContainer.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ViewContainer.cs
 //
 // Author:
@@ -51,22 +51,22 @@ namespace Nereid
         private Label search_label;
         private Banshee.ContextPane.ContextPane context_pane;
         private VBox footer;
-        
+
         private ISourceContents content;
-        
+
         public ViewContainer ()
         {
-            BuildHeader ();           
-            
+            BuildHeader ();
+
             Spacing = 6;
             SearchSensitive = false;
         }
-        
+
         private void BuildHeader ()
         {
             header = new HBox ();
             footer = new VBox ();
-            
+
             EventBox title_box = new EventBox ();
             title_label = new Label ();
             title_label.Xalign = 0.0f;
@@ -86,17 +86,17 @@ namespace Nereid
             };
 
             header_box = new EventBox ();
-            
+
             BuildSearchEntry ();
-            
+
             search_label = new Label (Catalog.GetString ("_Search:"));
             search_label.MnemonicWidget = search_entry.InnerEntry;
-            
+
             header.PackStart (title_box, true, true, 0);
             header.PackStart (header_box, false, false, 0);
             header.PackStart (search_label, false, false, 5);
             header.PackStart (search_entry, false, false, 0);
-            
+
             InterfaceActionService uia = ServiceManager.Get<InterfaceActionService> ();
             if (uia != null) {
                 Gtk.Action action = uia.GlobalActions["WikiSearchHelpAction"];
@@ -104,17 +104,17 @@ namespace Nereid
                     MenuItem item = new SeparatorMenuItem ();
                     item.Show ();
                     search_entry.Menu.Append (item);
-                    
+
                     item = new ImageMenuItem (Stock.Help, null);
                     item.Activated += delegate { action.Activate (); };
                     item.Show ();
                     search_entry.Menu.Append (item);
                 }
             }
-            
+
             header.ShowAll ();
             search_entry.Show ();
-            
+
             PackStart (header, false, false, 0);
             PackEnd (footer, false, false, 0);
 
@@ -127,16 +127,16 @@ namespace Nereid
 
             PackEnd (new ConnectedMessageBar (), false, true, 0);
         }
-        
+
         private struct SearchFilter
         {
             public int Id;
             public string Field;
             public string Title;
         }
-        
+
         private Dictionary<int, SearchFilter> search_filters = new Dictionary<int, SearchFilter> ();
-        
+
         private void AddSearchFilter (TrackFilterType id, string field, string title)
         {
             SearchFilter filter = new SearchFilter ();
@@ -145,7 +145,7 @@ namespace Nereid
             filter.Title = title;
             search_filters.Add (filter.Id, filter);
         }
-        
+
         private void BuildSearchEntry ()
         {
             AddSearchFilter (TrackFilterType.None, String.Empty, Catalog.GetString ("Artist, Album, or Title"));
@@ -216,7 +216,7 @@ namespace Nereid
                 footer.Show ();
             }
         }
-        
+
         public void ClearFooter ()
         {
             footer.Hide ();
@@ -224,15 +224,15 @@ namespace Nereid
                 footer.Remove (child);
             }
         }
-        
+
         public HBox Header {
             get { return header; }
         }
-        
+
         public SearchEntry SearchEntry {
             get { return search_entry; }
         }
-        
+
         public ISourceContents Content {
             get { return content; }
             set {
@@ -250,23 +250,23 @@ namespace Nereid
                     PackStart (value.Widget, !context_pane.Large, true, 0);
                     value.Widget.Show ();
                 }
-                
+
                 // Remove the old one
                 if (content != null && content.Widget != null) {
                     Remove (content.Widget);
                 }
-                
+
                 content = value;
             }
         }
-        
+
         public string Title {
             set { title_label.Markup = String.Format ("<b>{0}</b>", GLib.Markup.EscapeText (value)); }
         }
-        
+
         public bool SearchSensitive {
             get { return search_entry.Sensitive; }
-            set { 
+            set {
                 search_entry.Sensitive = value;
                 search_label.Sensitive = value;
                 search_entry.Visible = value;
diff --git a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/IndexerClient.cs b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/IndexerClient.cs
index 3867fcc..94c2a5b 100644
--- a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/IndexerClient.cs
+++ b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/IndexerClient.cs
@@ -42,23 +42,23 @@ namespace Banshee.Collection.Indexer.RemoteHelper
     {
         private const string application_bus_name = "org.bansheeproject.Banshee";
         private const string indexer_bus_name = "org.bansheeproject.CollectionIndexer";
-        
+
         private const string service_interface = "org.bansheeproject.CollectionIndexer.Service";
         private static ObjectPath service_path = new ObjectPath ("/org/bansheeproject/Banshee/CollectionIndexerService");
-    
+
         private IBus session_bus;
         private bool listening;
         private ICollectionIndexerService service;
         private bool cleanup_and_shutdown;
         private bool index_when_collection_changed = true;
-        
+
         public void Start ()
         {
             ShowDebugMessages = true;
             Debug ("Acquiring org.freedesktop.DBus session instance");
             session_bus = Bus.Session.GetObject<IBus> ("org.freedesktop.DBus", new ObjectPath ("/org/freedesktop/DBus"));
             session_bus.NameOwnerChanged += OnBusNameOwnerChanged;
-            
+
             if (Bus.Session.NameHasOwner (indexer_bus_name)) {
                 Debug ("{0} is already started", indexer_bus_name);
                 ConnectToIndexerService ();
@@ -77,7 +77,7 @@ namespace Banshee.Collection.Indexer.RemoteHelper
                 }
             }
         }
-        
+
         private void Index ()
         {
             if (HasCollectionChanged) {
@@ -91,23 +91,23 @@ namespace Banshee.Collection.Indexer.RemoteHelper
         {
             ThreadPool.QueueUserWorkItem (delegate {
                 Debug ("Running indexer");
-                
+
                 try {
                     UpdateIndex (indexer);
                 } catch (Exception e) {
                     Console.Error.WriteLine (e);
                 }
-                
+
                 Debug ("Indexer finished");
-                
+
                 indexer.Dispose ();
-                
+
                 if (!ApplicationAvailable || !listening) {
                     DisconnectFromIndexerService ();
                 }
             });
         }
-        
+
         private void ConnectToIndexerService ()
         {
             DisconnectFromIndexerService ();
@@ -119,26 +119,26 @@ namespace Banshee.Collection.Indexer.RemoteHelper
             } else {
                 Debug ("Connected to {0}", service_interface);
             }
-            
+
             service.CleanupAndShutdown += OnCleanupAndShutdown;
-            
+
             if (ApplicationAvailable) {
                 Debug ("Listening to service's CollectionChanged signal (full-app is running)");
                 listening = true;
                 service.CollectionChanged += OnCollectionChanged;
             }
-            
+
             Index ();
         }
-        
+
         private void DisconnectFromIndexerService ()
         {
             if (service == null) {
                 return;
             }
-            
+
             Debug ("Disconnecting from service");
-            
+
             if (listening) {
                 try {
                     listening = false;
@@ -147,7 +147,7 @@ namespace Banshee.Collection.Indexer.RemoteHelper
                     Debug (e.ToString ());
                 }
             }
-            
+
             try {
                 service.CleanupAndShutdown -= OnCleanupAndShutdown;
             } catch (Exception e) {
@@ -159,10 +159,10 @@ namespace Banshee.Collection.Indexer.RemoteHelper
             } catch (Exception e) {
                 Debug (e.ToString ());
             }
-            
+
             ResetInternalState ();
         }
-        
+
         private void ResetInternalState ()
         {
             if (service == null) {
@@ -175,59 +175,59 @@ namespace Banshee.Collection.Indexer.RemoteHelper
             cleanup_and_shutdown = false;
             ResetState ();
         }
-        
+
         private void ResolveIndexerService ()
         {
             int attempts = 0;
-            
+
             while (attempts++ < 4) {
                 try {
                     Debug ("Resolving {0} (attempt {1})", service_interface, attempts);
                     service = Bus.Session.GetObject<ICollectionIndexerService> (indexer_bus_name, service_path);
                     service.Hello ();
                     return;
-                } catch { 
+                } catch {
                     service = null;
                     System.Threading.Thread.Sleep (2000);
                 }
             }
         }
-        
+
         private void OnCollectionChanged ()
         {
             if (IndexWhenCollectionChanged) {
                 Index ();
             }
         }
-        
+
         private void OnCleanupAndShutdown ()
         {
             cleanup_and_shutdown = true;
         }
-        
+
         protected void Debug (string message, params object [] args)
         {
             Log.DebugFormat (message, args);
         }
-        
+
         protected abstract bool HasCollectionChanged { get; }
-        
+
         protected abstract void UpdateIndex (ICollectionIndexer indexer);
-        
+
         protected abstract void ResetState ();
-        
+
         protected ICollectionIndexer CreateIndexer ()
         {
             ObjectPath object_path = service.CreateIndexer ();
             Debug ("Creating an ICollectionIndexer ({0})", object_path);
             return Bus.Session.GetObject<ICollectionIndexer> (indexer_bus_name, object_path);
         }
-        
+
         public bool ShowDebugMessages {
             get { return Log.Debugging; }
             set { Log.Debugging = value; }
         }
-        
+
         protected bool CleanupAndShutdown {
             get { return cleanup_and_shutdown; }
         }
@@ -236,11 +236,11 @@ namespace Banshee.Collection.Indexer.RemoteHelper
             get { return index_when_collection_changed; }
             set { index_when_collection_changed = value; }
         }
-        
+
         protected ICollectionIndexerService Service {
             get { return service; }
         }
-        
+
         protected bool ApplicationAvailable {
             get { return Bus.Session.NameHasOwner (application_bus_name); }
         }
diff --git a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/SimpleIndexerClient.cs b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/SimpleIndexerClient.cs
index dceda0d..36ef9f5 100644
--- a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/SimpleIndexerClient.cs
+++ b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer.RemoteHelper/SimpleIndexerClient.cs
@@ -35,18 +35,18 @@ namespace Banshee.Collection.Indexer.RemoteHelper
     {
         private _SimpleIndexerClient client;
         private List<string> export_fields;
-        
+
         public SimpleIndexerClient ()
         {
             client = new _SimpleIndexerClient (this);
         }
-        
+
         public void Start ()
         {
             client.Start ();
             OnStarted ();
         }
-        
+
         public string [] GetAvailableExportFields ()
         {
             return client.GetAvailableExportFields ();
@@ -55,76 +55,76 @@ namespace Banshee.Collection.Indexer.RemoteHelper
         protected bool IndexWhenCollectionChanged {
             set { client.IndexWhenCollectionChanged = value; }
         }
-        
+
         public void AddExportField (params string [] fields)
         {
             if (export_fields == null) {
                 export_fields = new List<string> ();
             }
-            
+
             foreach (string field in fields) {
                 if (!export_fields.Contains (field)) {
                     export_fields.Add (field);
                 }
             }
         }
-        
+
         public bool RemoveExportField (string field)
         {
             if (export_fields != null) {
                 return export_fields.Remove (field);
             }
-            
+
             return false;
         }
-        
+
         public IEnumerable<string> ExportFields {
-            get { 
+            get {
                 if (export_fields == null) {
                     yield break;
                 }
-                
+
                 foreach (string field in export_fields) {
                     yield return field;
                 }
             }
         }
-        
+
         protected virtual void OnStarted ()
         {
         }
-        
+
         protected virtual void OnBeginUpdateIndex ()
         {
         }
-        
+
         protected virtual void OnEndUpdateIndex ()
         {
         }
-        
+
         protected abstract void IndexResult (IDictionary<string, object> result);
         protected abstract void OnShutdownWhileIndexing ();
         protected abstract int CollectionCount { get; }
         protected abstract DateTime CollectionLastModified { get; }
-            
+
         private class _SimpleIndexerClient : IndexerClient
         {
             private object shutdown_mutex = new object ();
             private bool indexer_running;
             private bool shutdown_requested;
-            
+
             private SimpleIndexerClient parent;
-            
+
             public _SimpleIndexerClient (SimpleIndexerClient parent)
             {
                 this.parent = parent;
             }
-            
+
             public string [] GetAvailableExportFields ()
             {
                 return Service.GetAvailableExportFields ();
             }
-        
+
             protected override void ResetState ()
             {
                 lock (shutdown_mutex) {
@@ -133,49 +133,49 @@ namespace Banshee.Collection.Indexer.RemoteHelper
                     }
                 }
             }
-            
+
             protected override void UpdateIndex (ICollectionIndexer indexer)
             {
                 lock (shutdown_mutex) {
                     indexer_running = true;
                     shutdown_requested = false;
                 }
-                
+
                 bool shutdown_while_indexing = false;
-                
+
                 if (parent.export_fields != null && parent.export_fields.Count > 0) {
                     indexer.SetExportFields (parent.export_fields.ToArray ());
                 }
-                
+
                 parent.OnBeginUpdateIndex ();
-                
+
                 for (int i = 0, models = indexer.GetModelCounts (); i < models; i++) {
                     for (int j = 0, items = indexer.GetModelResultsCount (i); j < items; j++) {
                         if (Shutdown) {
                             shutdown_while_indexing = true;
                             break;
                         }
-                        
+
                         parent.IndexResult (indexer.GetResult (i, j));
                     }
-                    
+
                     if (shutdown_while_indexing) {
                         break;
                     }
                 }
-                
+
                 lock (shutdown_mutex) {
                     indexer_running = false;
                     shutdown_requested = false;
                 }
-                
+
                 if (shutdown_while_indexing) {
                     parent.OnShutdownWhileIndexing ();
                 }
-                
+
                 parent.OnEndUpdateIndex ();
             }
-            
+
             protected override bool HasCollectionChanged {
                 get { return Service.HasCollectionCountChanged (parent.CollectionCount) ||
                     Service.HasCollectionLastModifiedChanged (Hyena.DateTimeUtil.ToTimeT (parent.CollectionLastModified)); }
diff --git a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexer.cs b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexer.cs
index 684bed0..8fd60c5 100644
--- a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexer.cs
+++ b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexer.cs
@@ -33,22 +33,22 @@ using NDesk.DBus;
 namespace Banshee.Collection.Indexer
 {
     public delegate void SaveToXmlFinishedHandler (bool success, string path);
-    
+
     [Interface ("org.bansheeproject.CollectionIndexer.Indexer")]
     public interface ICollectionIndexer
     {
         event ActionHandler IndexingFinished;
         event SaveToXmlFinishedHandler SaveToXmlFinished;
-        
+
         void Index ();
         void Dispose ();
-        
+
         void SetExportFields (string [] fields);
-        
+
         int GetModelCounts ();
         int GetModelResultsCount (int modelIndex);
         IDictionary<string, object> GetResult (int modelIndex, int itemIndex);
-        
+
         void SaveToXml (string path);
     }
 }
diff --git a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexerService.cs b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexerService.cs
index 6100762..2cce19a 100644
--- a/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexerService.cs
+++ b/src/Core/Banshee.CollectionIndexer/Banshee.Collection.Indexer/ICollectionIndexerService.cs
@@ -38,7 +38,7 @@ namespace Banshee.Collection.Indexer
     {
         event ActionHandler CollectionChanged;
         event ActionHandler CleanupAndShutdown;
-        
+
         void Hello ();
         void Shutdown ();
         ObjectPath CreateIndexer ();
diff --git a/src/Core/Banshee.CollectionIndexer/Demo/RemoteClient.cs b/src/Core/Banshee.CollectionIndexer/Demo/RemoteClient.cs
index 5c19832..228a902 100644
--- a/src/Core/Banshee.CollectionIndexer/Demo/RemoteClient.cs
+++ b/src/Core/Banshee.CollectionIndexer/Demo/RemoteClient.cs
@@ -39,26 +39,26 @@ namespace RemoteClient
         {
             RemoteClientExample client = new RemoteClientExample ();
             client.Start ();
-            
+
             while (true) {
                 NDesk.DBus.Bus.Session.Iterate ();
             }
         }
-    
+
         protected override void IndexResult (IDictionary<string, object> result)
         {
             Console.WriteLine (result["URI"]);
         }
-        
+
         protected override void OnShutdownWhileIndexing ()
         {
         }
-        
-        protected override int CollectionCount { 
+
+        protected override int CollectionCount {
             get { return 0; }
         }
-        
-        protected override DateTime CollectionLastModified { 
+
+        protected override DateTime CollectionLastModified {
             get { return DateTime.MinValue; }
         }
     }
diff --git a/src/Core/Banshee.CollectionIndexer/Hyena/ConsoleCrayon.cs b/src/Core/Banshee.CollectionIndexer/Hyena/ConsoleCrayon.cs
index c492d30..453d3a0 100644
--- a/src/Core/Banshee.CollectionIndexer/Hyena/ConsoleCrayon.cs
+++ b/src/Core/Banshee.CollectionIndexer/Hyena/ConsoleCrayon.cs
@@ -87,7 +87,7 @@ namespace Hyena
         // License: MIT/X11
         // Authors: Gonzalo Paniagua Javier <gonzalo ximian com>
         // (C) 2005-2006 Novell, Inc <http://www.novell.com>
-        
+
         private static int TranslateColor (ConsoleColor desired, out bool light)
         {
             light = false;
@@ -113,7 +113,7 @@ namespace Hyena
                 case ConsoleColor.White: default: light = true; return 7;
             }
         }
-        
+
         private static string GetAnsiColorControlCode (ConsoleColor color, bool isForeground)
         {
             // lighter fg colours are 90 -> 97 rather than 30 -> 37
@@ -133,7 +133,7 @@ namespace Hyena
 #region xterm Detection
 
         private static bool? xterm_colors = null;
-        internal static bool XtermColors { 
+        internal static bool XtermColors {
             get {
                 if (xterm_colors == null) {
                     DetectXtermColors ();
@@ -145,7 +145,7 @@ namespace Hyena
 
         [System.Runtime.InteropServices.DllImport ("libc", EntryPoint="isatty")]
         private extern static int _isatty (int fd);
-            
+
         private static bool isatty (int fd)
         {
             try {
@@ -158,11 +158,11 @@ namespace Hyena
         private static void DetectXtermColors ()
         {
             bool _xterm_colors = false;
-                
+
             switch (Environment.GetEnvironmentVariable ("TERM")) {
                 case "xterm":
                 case "rxvt":
-                case "rxvt-unicode": 
+                case "rxvt-unicode":
                     if (Environment.GetEnvironmentVariable ("COLORTERM") != null) {
                         _xterm_colors = true;
                     }
@@ -181,7 +181,7 @@ namespace Hyena
 
         private static bool? runtime_is_mono;
         internal static bool RuntimeIsMono {
-            get { 
+            get {
                 if (runtime_is_mono == null) {
                     runtime_is_mono = Type.GetType ("System.MonoType") != null;
                 }
diff --git a/src/Core/Banshee.CollectionIndexer/Hyena/DateTimeUtil.cs b/src/Core/Banshee.CollectionIndexer/Hyena/DateTimeUtil.cs
index 2282682..be77504 100644
--- a/src/Core/Banshee.CollectionIndexer/Hyena/DateTimeUtil.cs
+++ b/src/Core/Banshee.CollectionIndexer/Hyena/DateTimeUtil.cs
@@ -61,13 +61,13 @@ namespace Hyena
         internal static string FormatDuration (long time) {
             return FormatDuration (TimeSpan.FromSeconds (time));
         }
-        
+
         internal static string FormatDuration (TimeSpan time) {
             return FormatDuration (time.Hours, time.Minutes, time.Seconds);
         }
-        
+
         internal static string FormatDuration (int hours, int minutes, int seconds) {
-            return (hours > 0 ? 
+            return (hours > 0 ?
                     String.Format ("{0}:{1:00}:{2:00}", hours, minutes, seconds) :
                     String.Format ("{0}:{1:00}", minutes, seconds));
         }
diff --git a/src/Core/Banshee.CollectionIndexer/Hyena/Log.cs b/src/Core/Banshee.CollectionIndexer/Hyena/Log.cs
index c56613f..bab70e7 100644
--- a/src/Core/Banshee.CollectionIndexer/Hyena/Log.cs
+++ b/src/Core/Banshee.CollectionIndexer/Hyena/Log.cs
@@ -37,17 +37,17 @@ namespace Hyena
     internal class LogNotifyArgs : EventArgs
     {
         private LogEntry entry;
-        
+
         internal LogNotifyArgs (LogEntry entry)
         {
             this.entry = entry;
         }
-        
+
         internal LogEntry Entry {
             get { return entry; }
         }
     }
-        
+
     internal enum LogEntryType
     {
         Debug,
@@ -55,14 +55,14 @@ namespace Hyena
         Error,
         Information
     }
-    
+
     internal class LogEntry
     {
         private LogEntryType type;
         private string message;
         private string details;
         private DateTime timestamp;
-        
+
         internal LogEntry (LogEntryType type, string message, string details)
         {
             this.type = type;
@@ -71,27 +71,27 @@ namespace Hyena
             this.timestamp = DateTime.Now;
         }
 
-        internal LogEntryType Type { 
+        internal LogEntryType Type {
             get { return type; }
         }
-        
-        internal string Message { 
-            get { return message; } 
+
+        internal string Message {
+            get { return message; }
         }
-        
-        internal string Details { 
-            get { return details; } 
+
+        internal string Details {
+            get { return details; }
         }
 
-        internal DateTime TimeStamp { 
-            get { return timestamp; } 
+        internal DateTime TimeStamp {
+            get { return timestamp; }
         }
     }
-    
+
     internal static class Log
     {
         internal static event LogNotifyHandler Notify;
-        
+
         private static Dictionary<uint, DateTime> timers = new Dictionary<uint, DateTime> ();
         private static uint next_timer_id = 1;
 
@@ -100,13 +100,13 @@ namespace Hyena
             get { return debugging; }
             set { debugging = value; }
         }
-        
+
         internal static void Commit (LogEntryType type, string message, string details, bool showUser)
         {
             if (type == LogEntryType.Debug && !Debugging) {
                 return;
             }
-        
+
             if (type != LogEntryType.Information || (type == LogEntryType.Information && !showUser)) {
                 switch (type) {
                     case LogEntryType.Error: ConsoleCrayon.ForegroundColor = ConsoleColor.Red; break;
@@ -114,19 +114,19 @@ namespace Hyena
                     case LogEntryType.Information: ConsoleCrayon.ForegroundColor = ConsoleColor.Green; break;
                     case LogEntryType.Debug: ConsoleCrayon.ForegroundColor = ConsoleColor.Blue; break;
                 }
-                
+
                 Console.Write ("[{0} {1:00}:{2:00}:{3:00}.{4:000}]", TypeString (type), DateTime.Now.Hour,
                     DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
-                
+
                 ConsoleCrayon.ResetColor ();
-                               
+
                 if (details != null) {
                     Console.WriteLine (" {0} - {1}", message, details);
                 } else {
                     Console.WriteLine (" {0}", message);
                 }
             }
-            
+
             if (showUser) {
                 OnNotify (new LogEntry (type, message, details));
             }
@@ -142,7 +142,7 @@ namespace Hyena
             }
             return null;
         }
-        
+
         private static void OnNotify (LogEntry entry)
         {
             LogNotifyHandler handler = Notify;
@@ -150,95 +150,95 @@ namespace Hyena
                 handler (new LogNotifyArgs (entry));
             }
         }
-        
+
         #region Timer Methods
-        
+
         internal static uint DebugTimerStart (string message)
         {
             return TimerStart (message, false);
         }
-        
+
         internal static uint InformationTimerStart (string message)
         {
             return TimerStart (message, true);
         }
-        
+
         private static uint TimerStart (string message, bool isInfo)
         {
             if (!Debugging && !isInfo) {
                 return 0;
             }
-            
+
             if (isInfo) {
                 Information (message);
             } else {
                 Debug (message);
             }
-            
+
             return TimerStart (isInfo);
         }
-        
+
         internal static uint DebugTimerStart ()
         {
             return TimerStart (false);
         }
-        
+
         internal static uint InformationTimerStart ()
         {
             return TimerStart (true);
         }
-            
+
         private static uint TimerStart (bool isInfo)
         {
             if (!Debugging && !isInfo) {
                 return 0;
             }
-            
+
             uint timer_id = next_timer_id++;
             timers.Add (timer_id, DateTime.Now);
             return timer_id;
         }
-        
+
         internal static void DebugTimerPrint (uint id)
         {
             if (!Debugging) {
                 return;
             }
-            
+
             TimerPrint (id, "Operation duration: {0}", false);
         }
-        
+
         internal static void DebugTimerPrint (uint id, string message)
         {
             if (!Debugging) {
                 return;
             }
-            
+
             TimerPrint (id, message, false);
         }
-        
+
         internal static void InformationTimerPrint (uint id)
         {
             TimerPrint (id, "Operation duration: {0}", true);
         }
-        
+
         internal static void InformationTimerPrint (uint id, string message)
         {
             TimerPrint (id, message, true);
         }
-        
+
         private static void TimerPrint (uint id, string message, bool isInfo)
         {
             if (!Debugging && !isInfo) {
                 return;
             }
-            
+
             DateTime finish = DateTime.Now;
-            
+
             if (!timers.ContainsKey (id)) {
                 return;
             }
-            
+
             TimeSpan duration = finish - timers[id];
             string d_message;
             if (duration.TotalSeconds < 60) {
@@ -246,116 +246,116 @@ namespace Hyena
             } else {
                 d_message = duration.ToString ();
             }
-            
+
             if (isInfo) {
                 InformationFormat (message, d_message);
             } else {
                 DebugFormat (message, d_message);
             }
         }
-        
+
         #endregion
-        
+
         #region Public Debug Methods
-                                    
+
         internal static void Debug (string message, string details)
         {
             if (Debugging) {
                 Commit (LogEntryType.Debug, message, details, false);
             }
         }
-        
+
         internal static void Debug (string message)
         {
             if (Debugging) {
                 Debug (message, null);
             }
         }
-        
+
         internal static void DebugFormat (string format, params object [] args)
         {
             if (Debugging) {
                 Debug (String.Format (format, args));
             }
         }
-                
+
         #endregion
-        
+
         #region Public Information Methods
-            
+
         internal static void Information (string message)
         {
             Information (message, null);
         }
-        
+
         internal static void Information (string message, string details)
         {
             Information (message, details, false);
         }
-        
+
         internal static void Information (string message, string details, bool showUser)
         {
             Commit (LogEntryType.Information, message, details, showUser);
         }
-        
+
         internal static void Information (string message, bool showUser)
         {
             Information (message, null, showUser);
         }
-        
+
         internal static void InformationFormat (string format, params object [] args)
         {
             Information (String.Format (format, args));
         }
-        
+
         #endregion
-        
+
         #region Public Warning Methods
-        
+
         internal static void Warning (string message)
         {
             Warning (message, null);
         }
-        
+
         internal static void Warning (string message, string details)
         {
             Warning (message, details, false);
         }
-        
+
         internal static void Warning (string message, string details, bool showUser)
         {
             Commit (LogEntryType.Warning, message, details, showUser);
         }
-        
+
         internal static void Warning (string message, bool showUser)
         {
             Warning (message, null, showUser);
         }
-        
+
         internal static void WarningFormat (string format, params object [] args)
         {
             Warning (String.Format (format, args));
         }
-        
+
         #endregion
-        
+
         #region Public Error Methods
-        
+
         internal static void Error (string message)
         {
             Error (message, null);
         }
-        
+
         internal static void Error (string message, string details)
         {
             Error (message, details, false);
         }
-        
+
         internal static void Error (string message, string details, bool showUser)
         {
             Commit (LogEntryType.Error, message, details, showUser);
         }
-        
+
         internal static void Error (string message, bool showUser)
         {
             Error (message, null, showUser);
@@ -365,26 +365,26 @@ namespace Hyena
         {
             Error (String.Format (format, args));
         }
-        
+
         #endregion
-        
+
         #region Public Exception Methods
-        
+
         internal static void Exception (Exception e)
         {
             Exception (null, e);
         }
-        
+
         internal static void Exception (string message, Exception e)
         {
             Stack<Exception> exception_chain = new Stack<Exception> ();
             StringBuilder builder = new StringBuilder ();
-            
+
             while (e != null) {
                 exception_chain.Push (e);
                 e = e.InnerException;
             }
-            
+
             while (exception_chain.Count > 0) {
                 e = exception_chain.Pop ();
                 builder.AppendFormat ("{0} (in `{1}')", e.Message, e.Source).AppendLine ();
@@ -393,11 +393,11 @@ namespace Hyena
                     builder.AppendLine ();
                 }
             }
-        
+
             // FIXME: We should save these to an actual log file
             Log.Warning (message ?? "Caught an exception", builder.ToString (), false);
         }
-        
+
         #endregion
     }
 }
diff --git a/src/Core/Banshee.Core/Banshee.Base/ApplicationContext.cs b/src/Core/Banshee.Core/Banshee.Base/ApplicationContext.cs
index f8866d5..8d0446f 100644
--- a/src/Core/Banshee.Core/Banshee.Base/ApplicationContext.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/ApplicationContext.cs
@@ -37,23 +37,23 @@ namespace Banshee.Base
 
     public static class ApplicationContext
     {
-        static ApplicationContext () 
+        static ApplicationContext ()
         {
             Log.Debugging = Debugging;
         }
-    
+
         private static CommandLineParser command_line = new CommandLineParser ();
         public static CommandLineParser CommandLine {
             set { command_line = value; }
             get { return command_line; }
         }
-        
+
         private static Layout command_line_layout;
         public static Layout CommandLineLayout {
             get { return command_line_layout; }
             set { command_line_layout = value; }
         }
-        
+
         private static bool? debugging = null;
         public static bool Debugging {
             get {
@@ -62,16 +62,16 @@ namespace Banshee.Base
                     debugging |= CommandLine.Contains ("debug-sql");
                     debugging |= EnvironmentIsSet ("BANSHEE_DEBUG");
                 }
-                
+
                 return debugging.Value;
             }
         }
-        
+
         public static bool EnvironmentIsSet (string env)
         {
             return !String.IsNullOrEmpty (Environment.GetEnvironmentVariable (env));
         }
-        
+
         public static System.Globalization.CultureInfo InternalCultureInfo {
             get { return System.Globalization.CultureInfo.InvariantCulture; }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs b/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
index 5d09b82..bfe7f0a 100644
--- a/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs
@@ -45,29 +45,29 @@ namespace Banshee.Base
         {
             return CoverExists (CreateArtistAlbumId (artist, album));
         }
-    
+
         public static bool CoverExists (string aaid)
         {
             return CoverExistsForSize (aaid, 0);
         }
-        
+
         public static bool CoverExistsForSize (string aaid, int size)
         {
             return aaid == null ? false : File.Exists (GetPathForSize (aaid, size));
         }
-        
+
         public static string GetPath (string aaid)
         {
             return GetPathForSize (aaid, 0);
         }
-    
+
         public static string GetPathForSize (string aaid, int size)
         {
             return size == 0
                 ? Path.Combine (RootPath, String.Format ("{0}.jpg", aaid))
-                : Path.Combine (RootPath, Path.Combine (size.ToString (), String.Format ("{0}.jpg", aaid))); 
+                : Path.Combine (RootPath, Path.Combine (size.ToString (), String.Format ("{0}.jpg", aaid)));
         }
-    
+
         public static string CreateArtistAlbumId (string artist, string album)
         {
             return CreateArtistAlbumId (artist, album, false);
@@ -83,8 +83,8 @@ namespace Banshee.Base
             string sm_album = EscapePart (album);
 
             return String.IsNullOrEmpty (sm_artist) || String.IsNullOrEmpty (sm_album)
-                ? null 
-                : String.Format ("{0}{1}{2}", sm_artist, asUriPart ? "/" : "-", sm_album); 
+                ? null
+                : String.Format ("{0}{1}{2}", sm_artist, asUriPart ? "/" : "-", sm_album);
         }
 
         private static Regex filter_regex = new Regex (@"[^A-Za-z0-9]*", RegexOptions.Compiled);
@@ -93,22 +93,22 @@ namespace Banshee.Base
             if (String.IsNullOrEmpty (part)) {
                 return null;
             }
-            
+
             int lp_index = part.LastIndexOf ('(');
             if (lp_index > 0) {
                 part = part.Substring (0, lp_index);
             }
-            
+
             return filter_regex.Replace (part, "").ToLower ();
         }
-        
+
         private static string root_path = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory (
             "XDG_CACHE_HOME", ".cache"),  "album-art");
-            
+
         static CoverArtSpec () {
             Hyena.Log.DebugFormat ("Album artwork path set to {0}", root_path);
         }
-            
+
         public static string RootPath {
             get { return root_path; }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs b/src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs
index ba24259..b0f2bf7 100644
--- a/src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs
@@ -41,9 +41,9 @@ namespace Banshee.Base
     {
         public delegate string ExpandTokenHandler (TrackInfo track, object replace);
         public delegate string FilterHandler (string path);
-        
+
         public static FilterHandler Filter;
-        
+
         public struct Conversion
         {
             private readonly string token;
@@ -77,18 +77,18 @@ namespace Banshee.Base
                 get { return token_string; }
             }
         }
-    
+
         private static SortedList<string, Conversion> conversion_table;
 
         public static void AddConversion (string token, string name, ExpandTokenHandler handler)
         {
             conversion_table.Add (token, new Conversion (token, name, handler));
         }
-        
+
         static FileNamePattern ()
         {
             conversion_table = new SortedList<string, Conversion> ();
-            
+
             AddConversion ("track_artist", Catalog.GetString ("Track Artist"),
                 delegate (TrackInfo t, object r) {
                     return Escape (t == null ? (string)r : t.DisplayArtistName);
@@ -120,46 +120,46 @@ namespace Banshee.Base
                     return Escape (t == null ? (string)r : t.Composer);
             });
 
-            AddConversion ("genre", Catalog.GetString ("Genre"),  
+            AddConversion ("genre", Catalog.GetString ("Genre"),
                 delegate (TrackInfo t, object r) {
                     return Escape (t == null ? (string)r : t.DisplayGenre);
             });
 
-            AddConversion ("album", Catalog.GetString ("Album"),  
+            AddConversion ("album", Catalog.GetString ("Album"),
                 delegate (TrackInfo t, object r) {
                     return Escape (t == null ? (string)r : t.DisplayAlbumTitle);
             });
-            
-            AddConversion ("title", Catalog.GetString ("Title"),  
+
+            AddConversion ("title", Catalog.GetString ("Title"),
                 delegate (TrackInfo t, object r) {
                     return Escape (t == null ? (string)r : t.DisplayTrackTitle);
             });
-             
-            AddConversion ("year", Catalog.GetString ("Year"),  
+
+            AddConversion ("year", Catalog.GetString ("Year"),
                 delegate (TrackInfo t, object r) {
                     int year = t == null ? (int)r : t.Year;
                     return year > 0 ? String.Format ("{0}", year) : null;
             });
-             
-            AddConversion ("track_count", Catalog.GetString ("Count"),  
+
+            AddConversion ("track_count", Catalog.GetString ("Count"),
                 delegate (TrackInfo t, object r) {
                     int track_count = t == null ? (int)r : t.TrackCount;
                     return track_count > 0 ? String.Format ("{0:00}", track_count) : null;
             });
-             
-            AddConversion ("track_number", Catalog.GetString ("Number"),  
+
+            AddConversion ("track_number", Catalog.GetString ("Number"),
                 delegate (TrackInfo t, object r) {
                     int track_number = t == null ? (int)r : t.TrackNumber;
                     return track_number > 0 ? String.Format ("{0:00}", track_number) : null;
             });
-             
-            AddConversion ("track_count_nz", Catalog.GetString ("Count (unsorted)"),  
+
+            AddConversion ("track_count_nz", Catalog.GetString ("Count (unsorted)"),
                 delegate (TrackInfo t, object r) {
                     int track_count = t == null ? (int)r : t.TrackCount;
                     return track_count > 0 ? String.Format ("{0}", track_count) : null;
             });
-             
-            AddConversion ("track_number_nz", Catalog.GetString ("Number (unsorted)"),  
+
+            AddConversion ("track_number_nz", Catalog.GetString ("Number (unsorted)"),
                 delegate (TrackInfo t, object r) {
                     int track_number = t == null ? (int)r : t.TrackNumber;
                     return track_number > 0 ? String.Format ("{0}", track_number) : null;
@@ -181,29 +181,29 @@ namespace Banshee.Base
                 delegate (TrackInfo t, object r) {
                     return Escape (t == null ? (string)r : t.Grouping);
             });
-            
+
             AddConversion ("path_sep", Path.DirectorySeparatorChar.ToString (),
                 delegate (TrackInfo t, object r) {
                     return Path.DirectorySeparatorChar.ToString ();
             });
         }
-        
+
         public static IEnumerable<Conversion> PatternConversions {
             get { return conversion_table.Values; }
         }
-        
+
         public static string DefaultFolder {
             get { return "%album_artist%%path_sep%%album%"; }
         }
-        
+
         public static string DefaultFile {
             get { return "%track_number%. %title%"; }
         }
-        
+
         public static string DefaultPattern {
             get { return CreateFolderFilePattern (DefaultFolder, DefaultFile); }
         }
-        
+
         private static string [] suggested_folders = new string [] {
             DefaultFolder,
             "%album_artist%%path_sep%%album_artist% - %album%",
@@ -212,11 +212,11 @@ namespace Banshee.Base
             "%album%",
             "%album_artist%"
         };
-        
+
         public static string [] SuggestedFolders {
             get { return suggested_folders; }
         }
-    
+
         private static string [] suggested_files = new string [] {
             DefaultFile,
             "%track_number%. %track_artist% - %title%",
@@ -225,20 +225,20 @@ namespace Banshee.Base
             "%track_artist% (%album%) - %track_number% - %title%",
             "%title%"
         };
-        
+
         public static string [] SuggestedFiles {
             get { return suggested_files; }
         }
-        
+
         private static string OnFilter (string input)
         {
             string repl_pattern = input;
-            
+
             FilterHandler filter_handler = Filter;
             if (filter_handler != null) {
                 repl_pattern = filter_handler (repl_pattern);
             }
-            
+
             return repl_pattern;
         }
 
@@ -303,7 +303,7 @@ namespace Banshee.Base
             foreach (Conversion conversion in PatternConversions) {
                 pattern = pattern.Replace (conversion.TokenString, handler (conversion));
             }
-            
+
             return pattern;
         }
 
@@ -319,17 +319,17 @@ namespace Banshee.Base
             } else if (ext[0] != '.') {
                 ext = String.Format (".{0}", ext);
             }
-            
+
             string songpath = CreateFromTrackInfo (track) + ext;
             songpath = Hyena.StringUtil.EscapePath (songpath);
-            string dir = Path.GetFullPath (Path.Combine (base_dir, 
+            string dir = Path.GetFullPath (Path.Combine (base_dir,
                 Path.GetDirectoryName (songpath)));
             string filename = Path.Combine (dir, Path.GetFileName (songpath));
-                
+
             if (!Banshee.IO.Directory.Exists (dir)) {
                 Banshee.IO.Directory.Create (dir);
             }
-            
+
             return filename;
         }
 
diff --git a/src/Core/Banshee.Core/Banshee.Base/Localization.cs b/src/Core/Banshee.Core/Banshee.Base/Localization.cs
index 4a30fe4..8036d6d 100644
--- a/src/Core/Banshee.Core/Banshee.Base/Localization.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/Localization.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <abockover novell com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Xml;
 using System.Xml.XPath;
@@ -35,49 +35,49 @@ using System.Runtime.InteropServices;
 namespace Banshee.Base
 {
     public static class Localization
-    {        
+    {
         private static string [] default_languages = { "C" };
         private static string [] instance_languages = null;
         private static string [] instance_xml_languages = null;
         private static XPathExpression [] instance_xpath_expressions = null;
-        
+
         public static string [] Languages {
             get {
                 if(instance_languages == null) {
                     instance_languages = GetLanguageNames();
                 }
-                
+
                 return instance_languages;
             }
         }
-        
+
         public static string [] XmlLanguages {
-            get { 
+            get {
                 if(instance_xml_languages != null) {
                     return instance_xml_languages;
                 }
-                
+
                 List<string> xml_langs = new List<string>();
                 bool prepend_empty = false;
                 bool first = true;
-                
+
                 foreach(string lang in Languages) {
                     if(first && (lang == "C" || lang.StartsWith("en_US"))) {
                         prepend_empty = true;
                     }
-                    
+
                     first = false;
                     xml_langs.Add(lang);
                 }
-                
+
                 if(prepend_empty) {
                     xml_langs.Insert(0, "");
                 } else {
                     xml_langs.Add("");
                 }
-                
+
                 instance_xml_languages = xml_langs.ToArray();
-                
+
                 return instance_xml_languages;
             }
         }
@@ -98,12 +98,12 @@ namespace Banshee.Base
                 return instance_xpath_expressions;
             }
         }
-        
+
         public static XmlNode SelectSingleNode(XmlNode parent, string query)
         {
             XmlNodeList list = parent.SelectNodes(query);
             XmlNode result = null;
-            
+
             foreach(XPathExpression xpath_exp in XPathExpressions) {
                 foreach(XmlNode child in list) {
                     XPathNavigator nav = child.CreateNavigator();
@@ -113,20 +113,20 @@ namespace Banshee.Base
                         break;
                     }
                 }
-                
+
                 if(result != null) {
                     break;
                 }
             }
-            
+
             return result;
         }
-        
+
         public static List<XmlNode> SelectNodes(XmlNode parent, string query)
         {
             XmlNodeList list = parent.SelectNodes(query);
             List<XmlNode> result = new List<XmlNode>();
-            
+
             foreach(XPathExpression xpath_exp in XPathExpressions) {
                 foreach(XmlNode child in list) {
                     XPathNavigator nav = child.CreateNavigator();
@@ -136,10 +136,10 @@ namespace Banshee.Base
                     }
                 }
             }
-            
+
             return result;
         }
-        
+
         [DllImport("libglib-2.0-0.dll")]
         private static extern IntPtr g_get_language_names();
 
diff --git a/src/Core/Banshee.Core/Banshee.Base/NamingUtil.cs b/src/Core/Banshee.Core/Banshee.Base/NamingUtil.cs
index d614942..66a4357 100644
--- a/src/Core/Banshee.Core/Banshee.Base/NamingUtil.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/NamingUtil.cs
@@ -37,33 +37,33 @@ namespace Banshee.Base
     public static class NamingUtil
     {
         public delegate bool PostfixDuplicateIncrementHandler (string check);
-    
+
         public static string GenerateTrackCollectionName (IEnumerable tracks, string fallback)
         {
             Dictionary<string, int> weight_map = new Dictionary<string, int> ();
-            
+
             if (tracks == null) {
                 return fallback;
             }
-            
+
             foreach (TrackInfo track in tracks) {
                 string artist = null;
                 string album = null;
-                
+
                 if (track.ArtistName != null) {
                     artist = track.ArtistName.Trim ();
                     if (artist == String.Empty) {
                         artist = null;
                     }
                 }
-                
+
                 if (track.AlbumTitle != null) {
                     album = track.AlbumTitle.Trim ();
                     if (album == String.Empty) {
                         album = null;
                     }
                 }
-                
+
                 if (artist != null && album != null) {
                     IncrementCandidate (weight_map, "\0" + artist + " - " + album);
                     IncrementCandidate (weight_map, artist);
@@ -74,13 +74,13 @@ namespace Banshee.Base
                     IncrementCandidate (weight_map, album);
                 }
             }
-            
+
             int max_hit_count = 0;
             string max_candidate = fallback;
-            
+
             List<string> sorted_keys = new List<string> (weight_map.Keys);
             sorted_keys.Sort ();
-            
+
             foreach (string candidate in sorted_keys) {
                 int current_hit_count = weight_map[candidate];
                 if (current_hit_count > max_hit_count) {
@@ -88,14 +88,14 @@ namespace Banshee.Base
                     max_candidate = candidate;
                 }
             }
-            
+
             if (max_candidate[0] == '\0') {
                 return max_candidate.Substring (1);
             }
-            
+
             return max_candidate;
         }
-        
+
         private static void IncrementCandidate (Dictionary<string, int> map, string hit)
         {
             if (map.ContainsKey (hit)) {
@@ -104,19 +104,19 @@ namespace Banshee.Base
                 map.Add (hit, 1);
             }
         }
-        
+
         public static string PostfixDuplicate (string prefix, PostfixDuplicateIncrementHandler duplicateHandler)
         {
             if (duplicateHandler == null) {
                 throw new ArgumentNullException ("A PostfixDuplicateIncrementHandler delegate must be given");
             }
-            
+
             string name = prefix;
             for (int i = 1; true; i++) {
                 if (!duplicateHandler (name)) {
                     return name;
                 }
-                
+
                 name = prefix + " " + i;
             }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Base/Paths.cs b/src/Core/Banshee.Core/Banshee.Base/Paths.cs
index 9cf8874..256ace3 100644
--- a/src/Core/Banshee.Core/Banshee.Base/Paths.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/Paths.cs
@@ -31,7 +31,7 @@ using System.IO;
 using Mono.Unix;
 
 using Banshee.Configuration.Schema;
- 
+
 namespace Banshee.Base
 {
     public class Paths
@@ -40,16 +40,16 @@ namespace Banshee.Base
         {
             return GetTempFileName (dir, null);
         }
-        
+
         public static string GetTempFileName (string dir, string extension)
         {
             return GetTempFileName (new DirectoryInfo (dir), extension);
         }
-        
+
         public static string GetTempFileName (DirectoryInfo dir, string extension)
         {
             string path = null;
-            
+
             if (dir == null || !dir.Exists) {
                 throw new DirectoryNotFoundException ();
             }
@@ -59,10 +59,10 @@ namespace Banshee.Base
                 string file = extension == null ? guid : String.Format ("{0}.{1}", guid, extension);
                 path = Path.Combine (dir.FullName, file);
             } while (File.Exists (path));
-        
+
             return path;
         }
-        
+
         public static string Combine (string first, params string [] components)
         {
             if (String.IsNullOrEmpty (first)) {
@@ -70,13 +70,13 @@ namespace Banshee.Base
             } else if (components == null || components.Length < 1) {
                 throw new ArgumentException ("One or more path components must be provided", "components");
             }
-            
+
             string result = first;
-            
+
             foreach (string component in components) {
                 result = Path.Combine (result, component);
             }
-            
+
             return result;
         }
 
@@ -107,57 +107,57 @@ namespace Banshee.Base
             // this is super lame, should handle quoting/escaping
             return path.Split (':');
         }
-        
+
         public static string MakePathRelative (string path, string to)
         {
             if (String.IsNullOrEmpty (path) || String.IsNullOrEmpty (to)) {
                 return null;
             }
-            
+
             if (path == to) {
                 return String.Empty;
             }
-            
+
             if (to[to.Length - 1] != Path.DirectorySeparatorChar) {
                 to = to + Path.DirectorySeparatorChar;
             }
-            
+
             if (path.Length < to.Length) {
                 return null;
             }
-            
+
             return path.StartsWith (to)
                 ? path.Substring (to.Length)
                 : null;
         }
-        
+
         private static string legacy_application_data = Path.Combine (Environment.GetFolderPath (
             Environment.SpecialFolder.ApplicationData), "banshee");
-    
+
         public static string LegacyApplicationData {
             get { return legacy_application_data; }
         }
-        
+
         private static string application_data = Path.Combine (Environment.GetFolderPath (
             Environment.SpecialFolder.ApplicationData), "banshee-1");
-        
+
         public static string ApplicationData {
-            get { 
+            get {
                 if (!Directory.Exists (application_data)) {
                     Directory.CreateDirectory (application_data);
                 }
-                
-                return application_data; 
+
+                return application_data;
             }
         }
-        
+
         private static string application_cache = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory (
             "XDG_CACHE_HOME", ".cache"), "banshee-1");
-        
+
         public static string ApplicationCache {
             get { return application_cache; }
         }
-        
+
         public static string ExtensionCacheRoot {
             get { return Path.Combine (ApplicationCache, "extensions"); }
         }
@@ -165,50 +165,50 @@ namespace Banshee.Base
         public static string SystemTempDir {
             get { return "/tmp/"; }
         }
-        
+
         public static string TempDir {
             get {
                 string dir = Path.Combine (ApplicationCache, "temp");
-        
+
                 if (File.Exists (dir)) {
                     File.Delete (dir);
                 }
-                
+
                 Directory.CreateDirectory (dir);
                 return dir;
             }
         }
-        
+
         private static string installed_application_prefix = null;
         public static string InstalledApplicationPrefix {
             get {
                 if (installed_application_prefix == null) {
                     installed_application_prefix = Path.GetDirectoryName (
                         System.Reflection.Assembly.GetExecutingAssembly ().Location);
-                    
+
                     if (Directory.Exists (Paths.Combine (installed_application_prefix, "share", "banshee-1"))) {
                         return installed_application_prefix;
                     }
-                        
+
                     DirectoryInfo entry_directory = new DirectoryInfo (installed_application_prefix);
-                    
+
                     if (entry_directory != null && entry_directory.Parent != null && entry_directory.Parent.Parent != null) {
                         installed_application_prefix = entry_directory.Parent.Parent.FullName;
                     }
                 }
-                
+
                 return installed_application_prefix;
             }
         }
-        
+
         public static string InstalledApplicationDataRoot {
             get { return Path.Combine (InstalledApplicationPrefix, "share"); }
         }
-        
+
         public static string InstalledApplicationData {
             get { return Path.Combine (InstalledApplicationDataRoot, "banshee-1"); }
         }
-        
+
         public static string GetInstalledDataDirectory (string path)
         {
             return Path.Combine (InstalledApplicationData, path);
diff --git a/src/Core/Banshee.Core/Banshee.Base/PlatformHacks.cs b/src/Core/Banshee.Core/Banshee.Base/PlatformHacks.cs
index d11073e..7f6f689 100644
--- a/src/Core/Banshee.Core/Banshee.Base/PlatformHacks.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/PlatformHacks.cs
@@ -1,4 +1,4 @@
-// 
+//
 // PlatformHacks.cs
 //
 // Author:
@@ -37,34 +37,34 @@ namespace Banshee.Base
         // For the SEGV trap hack (see below)
         [DllImport ("libc")]
         private static extern int sigaction (Mono.Unix.Native.Signum sig, IntPtr act, IntPtr oact);
-        
+
         private static IntPtr mono_jit_segv_handler = IntPtr.Zero;
-        
+
         public static void TrapMonoJitSegv ()
         {
             if (Environment.OSVersion.Platform != PlatformID.Unix) {
                 return;
             }
-        
-            // We must get a reference to the JIT's SEGV handler because 
+
+            // We must get a reference to the JIT's SEGV handler because
             // GStreamer will set its own and not restore the previous, which
             // will cause what should be NullReferenceExceptions to be unhandled
             // segfaults for the duration of the instance, as the JIT is powerless!
             // FIXME: http://bugzilla.gnome.org/show_bug.cgi?id=391777
-            
+
             try {
                 mono_jit_segv_handler = Marshal.AllocHGlobal (512);
                 sigaction (Mono.Unix.Native.Signum.SIGSEGV, IntPtr.Zero, mono_jit_segv_handler);
             } catch {
             }
         }
-        
+
         public static void RestoreMonoJitSegv ()
         {
             if (Environment.OSVersion.Platform != PlatformID.Unix || mono_jit_segv_handler.Equals (IntPtr.Zero)) {
                 return;
             }
-            
+
             // Reset the SEGV handle to that of the JIT again (SIGH!)
             try {
                 sigaction (Mono.Unix.Native.Signum.SIGSEGV, mono_jit_segv_handler, IntPtr.Zero);
@@ -72,10 +72,10 @@ namespace Banshee.Base
             } catch {
             }
         }
-        
+
         [DllImport ("libc")] // Linux
         private static extern int prctl (int option, byte [] arg2, IntPtr arg3, IntPtr arg4, IntPtr arg5);
-        
+
         [DllImport ("libc")] // BSD
         private static extern void setproctitle (byte [] fmt, byte [] str_arg);
 
@@ -84,19 +84,19 @@ namespace Banshee.Base
             if (Environment.OSVersion.Platform != PlatformID.Unix) {
                 return;
             }
-        
+
             try {
-                if (prctl (15 /* PR_SET_NAME */, Encoding.ASCII.GetBytes (name + "\0"), 
+                if (prctl (15 /* PR_SET_NAME */, Encoding.ASCII.GetBytes (name + "\0"),
                     IntPtr.Zero, IntPtr.Zero, IntPtr.Zero) != 0) {
-                    throw new ApplicationException ("Error setting process name: " + 
+                    throw new ApplicationException ("Error setting process name: " +
                         Mono.Unix.Native.Stdlib.GetLastError ());
                 }
             } catch (EntryPointNotFoundException) {
-                setproctitle (Encoding.ASCII.GetBytes ("%s\0"), 
+                setproctitle (Encoding.ASCII.GetBytes ("%s\0"),
                     Encoding.ASCII.GetBytes (name + "\0"));
             }
         }
-        
+
         public static void TrySetProcessName (string name)
         {
             try {
diff --git a/src/Core/Banshee.Core/Banshee.Base/ProductInformation.cs b/src/Core/Banshee.Core/Banshee.Base/ProductInformation.cs
index 81445bb..ae24e8e 100644
--- a/src/Core/Banshee.Core/Banshee.Base/ProductInformation.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/ProductInformation.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Collections.Generic;
 using System.Xml;
@@ -35,11 +35,11 @@ namespace Banshee.Base
     public static class ProductInformation
     {
         private static SortedList<string, ProductAuthor> authors = new SortedList<string, ProductAuthor>  ();
-        private static SortedList<string, ProductTranslation> translations 
+        private static SortedList<string, ProductTranslation> translations
             = new SortedList<string, ProductTranslation> ();
         private static string [] artists;
         private static string [] contributors;
-        
+
         static ProductInformation ()
         {
         //    try {
@@ -48,22 +48,22 @@ namespace Banshee.Base
        //     } catch {
      //       }
         }
-        
+
         private static void LoadContributors ()
         {
             List<string> artists_list = new List<string> ();
             List<string> contributors_list = new List<string> ();
-        
+
             XmlDocument doc = new XmlDocument ();
             doc.LoadXml (AssemblyResource.GetFileContents ("contributors.xml"));
-        
+
             foreach (XmlNode node in doc.DocumentElement.ChildNodes) {
                 if (node.FirstChild == null || node.FirstChild.Value == null) {
                     continue;
                 }
 
                 string name = node.FirstChild.Value.Trim ();
-                
+
                 switch (node.Name) {
                     case "author":
                         authors.Add (name, new ProductAuthor (name, node.Attributes["role"].Value));
@@ -78,122 +78,122 @@ namespace Banshee.Base
                         break;
                 }
             }
-            
+
             artists = artists_list.ToArray ();
             contributors = contributors_list.ToArray ();
-            
+
             Array.Sort (artists);
             Array.Sort (contributors);
         }
-        
+
         private static void LoadTranslators ()
         {
             XmlDocument doc = new XmlDocument ();
             doc.LoadXml (AssemblyResource.GetFileContents ("translators.xml"));
-        
+
             foreach (XmlNode node in doc.DocumentElement.ChildNodes) {
                 if (node.Name != "language") {
                     continue;
                 }
-                
+
                 try {
                     string language_code = node.Attributes["code"].Value.Trim ();
                     string language_name = node.Attributes["name"].Value.Trim ();
-                    
+
                     ProductTranslation translation = new ProductTranslation (language_code, language_name);
-                    
+
                     foreach (XmlNode person in node.ChildNodes) {
                         if (person.Name != "person") {
                             continue;
                         }
-                        
+
                         translation.AddTranslator (person.FirstChild.Value.Trim ());
                     }
-                    
+
                     translations.Add (language_name, translation);
                 } catch {
                 }
             }
         }
-        
+
         public static IEnumerable<ProductTranslation> Translations {
             get { return translations.Values; }
         }
-        
+
         public static IEnumerable<ProductAuthor> Authors {
             get { return authors.Values; }
         }
-        
+
         public static string [] Contributors {
             get { return contributors; }
         }
-        
+
         public static string [] Artists {
             get { return artists; }
         }
-        
+
         public static string License {
             get { return AssemblyResource.GetFileContents ("COPYING"); }
         }
     }
-    
+
     public class ProductTranslation
     {
         private string language_code;
         private string language_name;
         private SortedList<string, string> translators = new SortedList<string, string> ();
-        
+
         private ProductTranslation ()
         {
         }
-        
+
         internal ProductTranslation (string languageCode, string languageName)
         {
             language_code = languageCode;
             language_name = languageName;
         }
-        
+
         internal void AddTranslator (string translator)
         {
             translators.Add (translator, translator);
         }
-        
+
         public string LanguageCode {
             get { return language_code; }
         }
-        
+
         public string LanguageName {
             get { return language_name; }
         }
-        
+
         public IEnumerable<string> Translators {
             get { return translators.Values; }
         }
     }
-    
+
     public class ProductAuthor
     {
         private string name;
         private string role;
-        
+
         private ProductAuthor ()
         {
         }
-        
+
         internal ProductAuthor (string name, string role)
         {
             if (name == null || role == null) {
                 throw new ArgumentNullException ("name or role cannot be null");
             }
-            
+
             this.name = name;
             this.role = role;
         }
-        
+
         public string Name {
             get { return name; }
         }
-        
+
         public string Role {
             get { return role; }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Base/Resource.cs b/src/Core/Banshee.Core/Banshee.Base/Resource.cs
index 6de004a..9dde175 100644
--- a/src/Core/Banshee.Core/Banshee.Base/Resource.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/Resource.cs
@@ -38,7 +38,7 @@ namespace Banshee.Base
         {
             return GetFileContents (Assembly.GetCallingAssembly (), name);
         }
-        
+
         public static string GetFileContents (Assembly assembly, string name)
         {
             using (StreamReader reader = new StreamReader (assembly.GetManifestResourceStream (name))) {
diff --git a/src/Core/Banshee.Core/Banshee.Base/SafeUri.cs b/src/Core/Banshee.Core/Banshee.Base/SafeUri.cs
index e6c8f34..4ab9bd1 100644
--- a/src/Core/Banshee.Core/Banshee.Base/SafeUri.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/SafeUri.cs
@@ -5,31 +5,31 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Runtime.InteropServices;
 
-namespace Banshee.Base 
+namespace Banshee.Base
 {
     public class SafeUri
     {
@@ -38,14 +38,14 @@ namespace Banshee.Base
             Yes,
             No
         }
-        
+
         private static int MAX_SCHEME_LENGTH = 6;
 
         private string uri;
         private string local_path;
         private string scheme;
         private LocalPathCheck local_path_check = LocalPathCheck.NotPerformed;
-        
+
         public SafeUri (string uri)
         {
             int scheme_delimit_index = uri.IndexOf ("://");
@@ -55,7 +55,7 @@ namespace Banshee.Base
                 this.uri = FilenameToUri (uri);
             }
         }
-        
+
         public SafeUri (string uri, bool isUri)
         {
             if (isUri) {
@@ -64,7 +64,7 @@ namespace Banshee.Base
                 this.uri = FilenameToUri (uri);
             }
         }
-        
+
         public SafeUri (Uri uri)
         {
             this.uri = uri.AbsoluteUri;
@@ -83,46 +83,46 @@ namespace Banshee.Base
 
             string uri = GLib.Marshaller.Utf8PtrToString (uri_ptr);
             GLib.Marshaller.Free (uri_ptr);
-            
+
             return uri;
         }
-        
+
         public static string UriToFilename (string uri)
         {
             // TODO: replace with managed conversion to avoid marshalling
             IntPtr uri_ptr = GLib.Marshaller.StringToPtrGStrdup (uri);
             IntPtr path_ptr = g_filename_from_uri (uri_ptr, IntPtr.Zero, IntPtr.Zero);
             GLib.Marshaller.Free (uri_ptr);
-            
+
             if (path_ptr == IntPtr.Zero) {
                 throw new ApplicationException ("URI could not be converted to local file location");
             }
-            
+
             string path = GLib.Marshaller.Utf8PtrToString (path_ptr);
             GLib.Marshaller.Free (path_ptr);
-            
+
             return path;
         }
-        
+
         public static string UriToFilename (SafeUri uri)
         {
             return UriToFilename (uri.AbsoluteUri);
         }
-        
+
         public override string ToString ()
         {
             return AbsoluteUri;
         }
-        
+
         public override bool Equals (object o)
         {
             if (!(o is SafeUri)) {
                 return false;
             }
-            
+
             return (o as SafeUri).AbsoluteUri == AbsoluteUri;
         }
-        
+
         public override int GetHashCode ()
         {
             return AbsoluteUri.GetHashCode ();
@@ -131,7 +131,7 @@ namespace Banshee.Base
         public string AbsoluteUri {
             get { return uri; }
         }
-        
+
         public bool IsLocalPath {
             get {
                 if (local_path_check == LocalPathCheck.NotPerformed) {
@@ -143,39 +143,39 @@ namespace Banshee.Base
                         return false;
                     }
                 }
-                
+
                 return local_path_check == LocalPathCheck.Yes;
             }
-        }               
-        
+        }
+
         public string AbsolutePath {
             get {
                 if (local_path == null && IsLocalPath) {
                     local_path = UriToFilename (uri);
                 }
-                
+
                 return local_path;
             }
         }
-        
+
         public string LocalPath {
             get { return AbsolutePath; }
         }
-        
+
         public string Scheme {
             get {
                 if (scheme == null) {
                     scheme = uri.Substring (0, uri.IndexOf ("://"));
                 }
-                
+
                 return scheme;
             }
         }
-        
+
         public bool IsFile {
             get { return Scheme == System.Uri.UriSchemeFile; }
         }
-        
+
         [DllImport ("libglib-2.0-0.dll")]
         private static extern IntPtr g_filename_to_uri (IntPtr filename, IntPtr hostname, IntPtr error);
 
diff --git a/src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs b/src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs
index 597f09e..5335c3d 100644
--- a/src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/Tests/CoverArtSpecTests.cs
@@ -40,20 +40,20 @@ namespace Banshee.Base.Tests
         {
             Assert.AreEqual (expected, CoverArtSpec.EscapePart (original));
         }
-        
+
         [Test]
         public void TestEmpty ()
         {
             AssertEscaped (null, null);
             AssertEscaped ("", null);
         }
-        
+
         [Test]
         public void TestLowercased ()
         {
             AssertEscaped ("A", "a");
         }
-        
+
         [Test]
         public void TestUnwanted ()
         {
@@ -76,12 +76,12 @@ namespace Banshee.Base.Tests
             AssertEscaped ("`", "");
             AssertEscaped ("'", "");
             AssertEscaped ("\"", "");
-            
+
             // Banshee-specific: strip *everything* non-ASCII
             AssertEscaped ("\u00e9toile", "toile");
             AssertEscaped ("e\u0301", "e");
         }
-        
+
         [Test]
         public void TestStripNotes ()
         {
diff --git a/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs b/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs
index 9148920..4227d7d 100644
--- a/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/Tests/FileNamePatternTests.cs
@@ -54,18 +54,18 @@ namespace Banshee.Base.Tests
             Assert.AreEqual (null,  Paths.MakePathRelative ("/foo/bar/baz", "foo"));
             Assert.AreEqual (null,  Paths.MakePathRelative ("/fo", "/foo"));
         }
-    
+
         [Test]
         public void CreateFromTrackInfo()
         {
             SampleTrackInfo track = new SampleTrackInfo();
             string built = FileNamePattern.CreateFromTrackInfo(
-                "%artist%:%album%:%title%:%track_number%:" + 
+                "%artist%:%album%:%title%:%track_number%:" +
                 "%track_count%:%track_number_nz%:%track_count_nz%",
                 track);
-    
+
             Assert.AreEqual(String.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}",
-                track.ArtistName, track.AlbumTitle, track.TrackTitle, 
+                track.ArtistName, track.AlbumTitle, track.TrackTitle,
                 ZeroPad(track.TrackNumber), ZeroPad(track.TrackCount),
                 track.TrackNumber, track.TrackCount),
                 built);
diff --git a/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs b/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs
index bc3e699..ffe6bba 100644
--- a/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/Tests/TaglibReadWriteTests.cs
@@ -43,29 +43,29 @@ using Hyena.Tests;
 namespace Banshee.Base.Tests
 {
     // FIXME: These tests don't really belong here
-    
+
     [TestFixture]
     public class TaglibReadWriteTests : TestBase
     {
         private string [] files;
-        
+
         [TestFixtureSetUp]
         public void Setup ()
         {
             Mono.Addins.AddinManager.Initialize (BinDir);
-            
+
             files = new string [] {
                 Path.Combine (TestsDir, "data/test.mp3")
             };
         }
-    
+
         [Test]
         public void TestSystemIO ()
         {
             Banshee.IO.Provider.SetProvider (new Banshee.IO.SystemIO.Provider ());
             WriteMetadata (files, ChangeTrack, VerifyTrack);
         }
-    
+
         [Test]
         public void TestUnixIO ()
         {
@@ -158,9 +158,9 @@ namespace Banshee.Base.Tests
                 AssertForEach<string> (files, delegate (string uri) {
                     string extension = System.IO.Path.GetExtension (uri);
                     newuri = new SafeUri (Path.Combine (TestsDir, "data/test_write." + extension));
-    
+
                     Banshee.IO.File.Copy (new SafeUri (uri), newuri, true);
-    
+
                     ChangeAndVerify (newuri, change, verify);
                 });
             } finally {
@@ -169,25 +169,25 @@ namespace Banshee.Base.Tests
                     Banshee.IO.File.Delete (newuri);
             }
         }
-    
+
         private void ChangeAndVerify (SafeUri uri, Action<TrackInfo> change, Action<TrackInfo> verify)
         {
             TagLib.File file = StreamTagger.ProcessUri (uri);
             TrackInfo track = new TrackInfo ();
             StreamTagger.TrackInfoMerge (track, file);
-    
+
             // Make changes
             change (track);
-    
+
             // Save changes
             bool saved = StreamTagger.SaveToFile (track);
             Assert.IsTrue (saved);
-    
+
             // Read changes
             file = StreamTagger.ProcessUri (uri);
             track = new TrackInfo ();
             StreamTagger.TrackInfoMerge (track, file);
-    
+
             // Verify changes
             verify (track);
         }
@@ -213,14 +213,14 @@ namespace Banshee.Base.Tests
         }
 
         private Type unix_io_type;
-    
+
         private Banshee.IO.IProvider CreateUnixIOProvider ()
         {
             if (unix_io_type == null) {
                 Assembly asm = Assembly.LoadFrom (BinDir + "/Banshee.Unix.dll");
                 unix_io_type = asm.GetType ("Banshee.IO.Unix.Provider");
             }
-            
+
             return (Banshee.IO.IProvider)Activator.CreateInstance (unix_io_type);
         }
     }
diff --git a/src/Core/Banshee.Core/Banshee.Base/UriList.cs b/src/Core/Banshee.Core/Banshee.Base/UriList.cs
index 8c3ae1f..a5caa68 100644
--- a/src/Core/Banshee.Core/Banshee.Base/UriList.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/UriList.cs
@@ -6,24 +6,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -34,10 +34,10 @@ using System.Collections.Generic;
 
 namespace Banshee.Base
 {
-    public class UriList : List<SafeUri> 
+    public class UriList : List<SafeUri>
     {
         public UriList (string [] uris)
-        {    
+        {
             // FIXME this is so lame do real chacking at some point
             foreach (string str in uris) {
                 SafeUri uri;
@@ -47,23 +47,23 @@ namespace Banshee.Base
                 } else {
                     uri = new SafeUri (str);
                 }
-                
+
                 Add (uri);
             }
         }
 
-        public UriList (string data) 
+        public UriList (string data)
         {
             LoadFromString (data);
         }
-        
-        /*public UriList (Gtk.SelectionData selection) 
+
+        /*public UriList (Gtk.SelectionData selection)
         {
             // FIXME this should check the atom etc.
             LoadFromString (System.Text.Encoding.UTF8.GetString (selection.Data));
         }*/
 
-        private void LoadFromString (string data) 
+        private void LoadFromString (string data)
         {
             string [] items = data.Split ('\n');
 
@@ -71,7 +71,7 @@ namespace Banshee.Base
                 if (item.StartsWith ("#")) {
                     continue;
                 }
-                
+
                 SafeUri uri;
                 string s = item;
 
@@ -84,7 +84,7 @@ namespace Banshee.Base
                 } catch {
                     continue;
                 }
-                
+
                 Add (uri);
             }
         }
@@ -93,8 +93,8 @@ namespace Banshee.Base
         {
             return new SafeUri (Path.GetFullPath (path));
         }
-        
-        public override string ToString () 
+
+        public override string ToString ()
         {
             StringBuilder list = new StringBuilder ();
 
@@ -102,17 +102,17 @@ namespace Banshee.Base
                 if (uri == null) {
                     break;
                 }
-                
+
                 list.Append (uri.AbsoluteUri + "\r\n");
             }
 
             return list.ToString ();
         }
-        
+
         public string [] LocalPaths {
             get {
                 int count = 0;
-                
+
                 foreach (SafeUri uri in this) {
                     if (uri.IsFile) {
                         count++;
@@ -121,13 +121,13 @@ namespace Banshee.Base
 
                 string [] paths = new string[count];
                 count = 0;
-                
+
                 foreach (SafeUri uri in this) {
                     if (uri.IsFile) {
                         paths[count++] = uri.LocalPath;
                     }
                 }
-                
+
                 return paths;
             }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Base/XdgBaseDirectorySpec.cs b/src/Core/Banshee.Core/Banshee.Base/XdgBaseDirectorySpec.cs
index 1145db6..67e9fd3 100644
--- a/src/Core/Banshee.Core/Banshee.Base/XdgBaseDirectorySpec.cs
+++ b/src/Core/Banshee.Core/Banshee.Base/XdgBaseDirectorySpec.cs
@@ -37,7 +37,7 @@ namespace Banshee.Base
         {
             string home_dir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
             string config_dir = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
-            
+
             string env_path = Environment.GetEnvironmentVariable (key);
             if (!String.IsNullOrEmpty (env_path)) {
                 return env_path;
@@ -75,7 +75,7 @@ namespace Banshee.Base
                 }
             } catch (FileNotFoundException) {
             }
-            
+
             return Path.Combine (home_dir, fallback);
         }
     }
diff --git a/src/Core/Banshee.Core/Banshee.Collection/AlbumInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/AlbumInfo.cs
index f31333b..2f4be23 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/AlbumInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/AlbumInfo.cs
@@ -38,7 +38,7 @@ namespace Banshee.Collection
     public class AlbumInfo : CacheableItem
     {
         public static readonly string UnknownAlbumTitle = Catalog.GetString ("Unknown Album");
-        
+
         private string title;
         private string title_sort;
         private string artist_name;
@@ -47,65 +47,65 @@ namespace Banshee.Collection
         private string artwork_id;
         private DateTime release_date = DateTime.MinValue;
         private string musicbrainz_id;
-        
+
         public AlbumInfo ()
         {
         }
-        
+
         public AlbumInfo (string title)
         {
             this.title = title;
         }
-        
+
         public virtual string ArtistName {
             get { return artist_name; }
             set { artist_name = value; }
         }
-        
+
         public virtual string ArtistNameSort {
             get { return artist_name_sort; }
             set { artist_name_sort = String.IsNullOrEmpty (value) ? null : value; }
         }
-        
+
         public virtual string Title {
             get { return title; }
             set { title = value; }
         }
-        
+
         public virtual string TitleSort {
             get { return title_sort; }
             set { title_sort = String.IsNullOrEmpty (value) ? null : value; }
         }
-        
+
         public virtual bool IsCompilation {
             get { return is_compilation; }
             set { is_compilation = value; }
         }
-        
+
         public virtual string MusicBrainzId {
             get { return musicbrainz_id; }
             set { musicbrainz_id = value; }
         }
-        
+
         public virtual DateTime ReleaseDate {
             get { return release_date; }
             set { release_date = value; }
         }
-        
+
         public virtual string ArtworkId {
-            get { 
+            get {
                 if (artwork_id == null) {
                     artwork_id = CoverArtSpec.CreateArtistAlbumId (ArtistName, Title);
                 }
-                
+
                 return artwork_id;
             }
         }
-        
+
         public string DisplayArtistName {
             get { return StringUtil.MaybeFallback (ArtistName, ArtistInfo.UnknownArtistName); }
         }
-        
+
         public string DisplayTitle {
             get { return StringUtil.MaybeFallback (Title, UnknownAlbumTitle); }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Collection/ArtistInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/ArtistInfo.cs
index aab3566..bbf9253 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/ArtistInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/ArtistInfo.cs
@@ -35,36 +35,36 @@ namespace Banshee.Collection
     public class ArtistInfo : CacheableItem
     {
         public static readonly string UnknownArtistName = Catalog.GetString ("Unknown Artist");
-        
+
         private string name;
         private string name_sort;
         private string musicbrainz_id;
-        
+
         public ArtistInfo ()
         {
         }
-        
+
         public ArtistInfo(string name, string name_sort)
         {
             this.name = name;
             this.name_sort = name_sort;
         }
-                
+
         public virtual string MusicBrainzId {
             get { return musicbrainz_id; }
             set { musicbrainz_id = value; }
         }
-        
+
         public virtual string Name {
             get { return name; }
             set { name = value; }
         }
-        
+
         public virtual string NameSort {
             get { return name_sort; }
             set { name_sort = String.IsNullOrEmpty (value) ? null : value; }
         }
-        
+
         public string DisplayName {
             get { return StringUtil.MaybeFallback (Name, UnknownArtistName); }
         }
diff --git a/src/Core/Banshee.Core/Banshee.Collection/CacheableItem.cs b/src/Core/Banshee.Core/Banshee.Collection/CacheableItem.cs
index d383f03..6c0e444 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/CacheableItem.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/CacheableItem.cs
@@ -34,7 +34,7 @@ namespace Banshee.Collection
 {
     public class CacheableItem : ICacheableItem
     {
-    
+
 #region Implement ICacheableItem
 
         private object cache_entry_id;
diff --git a/src/Core/Banshee.Core/Banshee.Collection/FileTrackInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/FileTrackInfo.cs
index 278da38..4399eac 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/FileTrackInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/FileTrackInfo.cs
@@ -47,9 +47,9 @@ namespace Banshee.Collection
         private void LoadFromUri (SafeUri uri)
         {
             ParsePath (uri.LocalPath);
-   
+
             TagLib.File file = Banshee.IO.DemuxVfs.OpenFile (uri.LocalPath);
-   
+
             ArtistName = Choose (file.Tag.JoinedAlbumArtists, ArtistName);
             AlbumTitle = Choose (file.Tag.Album, AlbumTitle);
             TrackTitle = Choose (file.Tag.Title, TrackTitle);
@@ -76,7 +76,7 @@ namespace Banshee.Collection
             if (uri.IsLocalPath) {
                 filename = uri.AbsolutePath;
             }
-            
+
             match = Regex.Match (filename, @"(\d+)\.? *(.*)$");
             if (match.Success) {
                 TrackNumber = Convert.ToInt32 (match.Groups[1].ToString ());
@@ -108,32 +108,32 @@ namespace Banshee.Collection
                     AlbumTitle = filename;
                     continue;
                 }
-                
+
                 if (ArtistName == String.Empty) {
                     ArtistName = filename;
                     continue;
                 }
-                
+
                 break;
             }
-            
+
             ArtistName = ArtistName.Trim ();
             AlbumTitle = AlbumTitle.Trim ();
             TrackTitle = TrackTitle.Trim ();
-            
+
             if (ArtistName.Length == 0) {
                 ArtistName = /*"Unknown Artist"*/ null;
             }
-            
+
             if (AlbumTitle.Length == 0) {
                 AlbumTitle = /*"Unknown Album"*/ null;
             }
-            
+
             if (TrackTitle.Length == 0) {
                 TrackTitle = /*"Unknown Title"*/ null;
             }
         }
- 
+
 		private static string Choose (string priority, string fallback)
 		{
 			return String.IsNullOrEmpty (priority) ? fallback : priority;
diff --git a/src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs
index 150a02b..fe43a9e 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/ITrackInfo.cs
@@ -38,7 +38,7 @@ namespace Banshee.Collection
         string DisplayAlbumTitle { get; }
         string DisplayTrackTitle { get; }
         string DisplayGenre { get; }
-        
+
         int TrackNumber { get; }
         int TrackCount { get; }
         int Year { get; }
diff --git a/src/Core/Banshee.Core/Banshee.Collection/LicenseInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/LicenseInfo.cs
index 79ca255..481502a 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/LicenseInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/LicenseInfo.cs
@@ -34,7 +34,7 @@ namespace CreativeCommons
     public class LicenseInfo
     {
     }
-    
+
     [Flags]
     public enum Permissions
     {
@@ -45,7 +45,7 @@ namespace CreativeCommons
         HighIncomNationUse,
         Sharing
     }
-    
+
     [Flags]
     public enum Requirements
     {
@@ -55,21 +55,21 @@ namespace CreativeCommons
         ShareAlike,
         SourceCode
     }
-    
+
     [Flags]
     public enum Prohibitions
     {
         None = 0,
         CommercialUse
     }
-        
-    public class CreativeCommonsLicenseInfo 
+
+    public class CreativeCommonsLicenseInfo
     {
         private static string [] known_licenses = new string [] {
             "http://creativecommons.org/licenses/by/2.5/rdf";,
             "http://creativecommons.org/licenses/by/3.0/rdf";,
         };
-        
+
         public static IEnumerable<CreativeCommonsLicenseInfo> KnownLicenses {
             get {
                 foreach (string known_license in known_licenses) {
@@ -77,18 +77,18 @@ namespace CreativeCommons
                         FromLicenseUrl (known_license);
                     }
                 }
-                
+
                 foreach (CreativeCommonsLicenseInfo license in licenses.Values) {
                     if (license != null)
                         yield return license;
                 }
             }
         }
-    
+
         private Permissions permissions;
         private Requirements requirements;
         private Prohibitions prohibitions;
-        
+
         private bool is_deprecated;
         private string title;
         private string version;
@@ -97,14 +97,14 @@ namespace CreativeCommons
         private string legal_url;
         private string jurisdiction_url;
         private string creator_url;
-        
+
         /*public static CreateiveCommonsLicenseInfo FromCodeName (string code_name)
         {
             return null;
         }*/
-        
+
         private static Dictionary<string, CreativeCommonsLicenseInfo> licenses = new Dictionary<string, CreativeCommonsLicenseInfo> ();
-        
+
         public static CreateiveCommonsLicenseInfo FromLicenseUrl (string license_url)
         {
             if (String.IsNullOrEmpty (license_url))
@@ -113,16 +113,16 @@ namespace CreativeCommons
             string rdf_url = GetRdfUrl (license_url);
             if (rdf_url == null)
                 return null;
-                
+
             if (licenses.ContainsKey (rdf_url)) {
                 return licenses[rdf_url];
             }
-            
+
             CreativeCommonsLicenseInfo license = null; // Grab from web and parse
             licenses[rdf_url] = license;
             return license;
         }
-        
+
         private static string GetRdfUrl (string license_url)
         {
             if (license_uri.StartsWith ("http://creativecommons.org/licenses/";)) {
@@ -135,12 +135,12 @@ namespace CreativeCommons
             }
             return null;
         }
-                
+
 
         public LicenseInfo ()
         {
         }
-        
+
         /*public void GetLicenseInfo (string license_uri)
         {
             if (String.IsNullOrEmpty (license_uri))
@@ -151,7 +151,7 @@ namespace CreativeCommons
             }
         }*/
     }
-    
+
     public class CreativeCommonsRdfParser
     {
         public static CreativeCommonsLicenseInfo (string xml_blob)
diff --git a/src/Core/Banshee.Core/Banshee.Collection/SampleTrackInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/SampleTrackInfo.cs
index b86a2af..4f50859 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/SampleTrackInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/SampleTrackInfo.cs
@@ -32,7 +32,7 @@ namespace Banshee.Collection
 {
     public class SampleTrackInfo : TrackInfo
     {
-        public SampleTrackInfo () 
+        public SampleTrackInfo ()
         {
             ArtistName = "The Beatles";
             TrackTitle = "Ticket to Ride";
@@ -41,7 +41,7 @@ namespace Banshee.Collection
             TrackCount = 14;
             Duration = TimeSpan.FromSeconds (182);
             Year = 1965;
-            
+
             CanPlay = true;
             CanSaveToDatabase = true;
         }
diff --git a/src/Core/Banshee.Core/Banshee.Collection/TrackFilterType.cs b/src/Core/Banshee.Core/Banshee.Collection/TrackFilterType.cs
index 284ce3e..9ab263a 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/TrackFilterType.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/TrackFilterType.cs
@@ -1,4 +1,4 @@
-// 
+//
 // TrackFilterType.cs
 //
 // Author:
diff --git a/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
index f04e10b..117496f 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
@@ -55,7 +55,7 @@ namespace Banshee.Collection
                 set { export_name = value; }
             }
         }
-    
+
         public delegate bool IsPlayingHandler (TrackInfo track);
         public static IsPlayingHandler IsPlayingMethod;
 
@@ -105,7 +105,7 @@ namespace Banshee.Collection
         private int skip_count;
         private DateTime last_played;
         private DateTime last_skipped;
-        
+
         private StreamPlaybackError playback_error = StreamPlaybackError.None;
 
         public TrackInfo ()
@@ -137,7 +137,7 @@ namespace Banshee.Collection
 
         public override string ToString ()
         {
-            return String.Format ("{0} - {1} (on {2}) <{3}> [{4}]", ArtistName, TrackTitle, 
+            return String.Format ("{0} - {1} (on {2}) <{3}> [{4}]", ArtistName, TrackTitle,
                 AlbumTitle, Duration, Uri == null ? "<unknown>" : Uri.AbsoluteUri);
         }
 
@@ -146,23 +146,23 @@ namespace Banshee.Collection
             if (track == null || track.Uri == null || Uri == null) {
                 return false;
             }
-            
+
             return track.Uri.AbsoluteUri == Uri.AbsoluteUri;
         }
-        
+
         public bool ArtistAlbumEqual (TrackInfo track)
         {
             if (track == null) {
                 return false;
             }
-            
+
             return ArtworkId == track.ArtworkId;
         }
 
         public virtual void Save ()
         {
         }
-        
+
         public bool IsPlaying {
             get { return (IsPlayingMethod != null) ? IsPlayingMethod (this) : false; }
         }
@@ -172,7 +172,7 @@ namespace Banshee.Collection
             get { return uri; }
             set { uri = value; }
         }
-        
+
         [Exportable]
         public string LocalPath {
             get { return Uri == null || !Uri.IsLocalPath ? null : Uri.LocalPath; }
@@ -235,13 +235,13 @@ namespace Banshee.Collection
             get { return IsCompilation ? album_artist ?? Catalog.GetString ("Various Artists") : ArtistName; }
             set { album_artist = value; }
         }
-        
+
         [Exportable]
         public virtual string AlbumArtistSort {
             get { return album_artist_sort; }
             set { album_artist_sort = String.IsNullOrEmpty (value) ? null : value; }
         }
-        
+
         [Exportable]
         public virtual bool IsCompilation {
             get { return is_compilation; }
@@ -253,65 +253,65 @@ namespace Banshee.Collection
             get { return track_title; }
             set { track_title = value; }
         }
-        
+
         [Exportable (ExportName = "namesort")]
         public virtual string TrackTitleSort {
             get { return track_title_sort; }
             set { track_title_sort = String.IsNullOrEmpty (value) ? null : value; }
         }
-        
+
         [Exportable]
         public virtual string MusicBrainzId {
             get { return musicbrainz_id; }
             set { musicbrainz_id = value; }
         }
-        
+
         [Exportable]
         public virtual string ArtistMusicBrainzId {
             get { return null; }
         }
-        
+
         [Exportable]
         public virtual string AlbumMusicBrainzId {
             get { return null; }
         }
-        
+
         public virtual DateTime ReleaseDate {
             get { return release_date; }
             set { release_date = value; }
-        }        
+        }
 
         public virtual object ExternalObject {
             get { return null; }
         }
-        
-        public string DisplayArtistName { 
-            get { return StringUtil.MaybeFallback (ArtistName, ArtistInfo.UnknownArtistName); } 
+
+        public string DisplayArtistName {
+            get { return StringUtil.MaybeFallback (ArtistName, ArtistInfo.UnknownArtistName); }
         }
 
         public string DisplayAlbumArtistName {
             get { return StringUtil.MaybeFallback (AlbumArtist, DisplayArtistName); }
         }
 
-        public string DisplayAlbumTitle { 
-            get { return StringUtil.MaybeFallback (AlbumTitle, AlbumInfo.UnknownAlbumTitle); } 
+        public string DisplayAlbumTitle {
+            get { return StringUtil.MaybeFallback (AlbumTitle, AlbumInfo.UnknownAlbumTitle); }
         }
 
-        public string DisplayTrackTitle { 
-            get { return StringUtil.MaybeFallback (TrackTitle, UnknownTitle); } 
+        public string DisplayTrackTitle {
+            get { return StringUtil.MaybeFallback (TrackTitle, UnknownTitle); }
         }
 
-        public string DisplayGenre { 
-            get { 
+        public string DisplayGenre {
+            get {
                 string genre = Genre == null ? null : Genre.Trim ();
                 return String.IsNullOrEmpty (genre)
                     ? String.Empty
                     : genre;
             }
         }
-        
+
         [Exportable (ExportName = "artwork-id")]
-        public virtual string ArtworkId { 
+        public virtual string ArtworkId {
             get { return CoverArtSpec.CreateArtistAlbumId (AlbumArtist, AlbumTitle); }
         }
 
@@ -338,7 +338,7 @@ namespace Banshee.Collection
             get { return disc_number; }
             set { disc_number = value; }
         }
-        
+
         [Exportable]
         public virtual int DiscCount {
             get { return (disc_count != 0 && disc_count < DiscNumber) ? DiscNumber : disc_count; }
@@ -362,20 +362,20 @@ namespace Banshee.Collection
             get { return conductor; }
             set { conductor = value; }
         }
-        
+
         [Exportable]
         public virtual string Grouping {
             get { return grouping; }
             set { grouping = value; }
         }
-        
+
         [Exportable]
         public virtual string Copyright {
             get { return copyright; }
             set { copyright = value; }
         }
 
-        [Exportable]        
+        [Exportable]
         public virtual string LicenseUri {
             get { return license_uri; }
             set { license_uri = value; }
@@ -392,7 +392,7 @@ namespace Banshee.Collection
             get { return rating; }
             set { rating = value; }
         }
-        
+
         [Exportable]
         public virtual int Score {
             get { return score; }
@@ -428,7 +428,7 @@ namespace Banshee.Collection
             get { return duration; }
             set { duration = value; }
         }
-        
+
         [Exportable]
         public virtual DateTime DateAdded {
             get { return date_added; }
@@ -446,7 +446,7 @@ namespace Banshee.Collection
             get { return last_skipped; }
             set { last_skipped = value; }
         }
-        
+
         public virtual StreamPlaybackError PlaybackError {
             get { return playback_error; }
             set { playback_error = value; }
@@ -465,7 +465,7 @@ namespace Banshee.Collection
             get { return can_save_to_database; }
             set { can_save_to_database = value; }
         }
-        
+
         private bool is_live = false;
         public bool IsLive {
             get { return is_live; }
@@ -483,7 +483,7 @@ namespace Banshee.Collection
             get { return enabled && can_play; }
             set { enabled = value; }
         }
-        
+
         public virtual string MetadataHash {
             get {
                 System.Text.StringBuilder sb = new System.Text.StringBuilder ();
@@ -499,13 +499,13 @@ namespace Banshee.Collection
         }
 
         private TrackMediaAttributes media_attributes = TrackMediaAttributes.Default;
-        
+
         [Exportable]
         public virtual TrackMediaAttributes MediaAttributes {
             get { return media_attributes; }
             set { media_attributes = value; }
         }
-        
+
         public bool HasAttribute (TrackMediaAttributes attr)
         {
             return (MediaAttributes & attr) != 0;
@@ -554,7 +554,7 @@ namespace Banshee.Collection
         }
 
 #region Exportable Properties
-        
+
         public static void ExportableMerge (TrackInfo source, TrackInfo dest)
         {
             // Use the high level TrackInfo type if the source and dest types differ
@@ -562,7 +562,7 @@ namespace Banshee.Collection
             if (source.GetType () != type) {
                 type = typeof (TrackInfo);
             }
-            
+
             foreach (KeyValuePair<string, PropertyInfo> iter in GetExportableProperties (type)) {
                 try {
                     PropertyInfo property = iter.Value;
@@ -574,11 +574,11 @@ namespace Banshee.Collection
                 }
             }
         }
-        
+
         public static IEnumerable<KeyValuePair<string, PropertyInfo>> GetExportableProperties (Type type)
         {
             FindExportableProperties (type);
-            
+
             Dictionary<string, PropertyInfo> properties = null;
             if (exportable_properties.TryGetValue (type, out properties)) {
                 foreach (KeyValuePair<string, PropertyInfo> property in properties) {
@@ -586,12 +586,12 @@ namespace Banshee.Collection
                 }
             }
         }
-        
+
         public IDictionary<string, object> GenerateExportable ()
         {
             return GenerateExportable (null);
         }
-        
+
         public IDictionary<string, object> GenerateExportable (string [] fields)
         {
             Dictionary<string, object> dict = new Dictionary<string, object> ();
@@ -605,17 +605,17 @@ namespace Banshee.Collection
                             break;
                         }
                     }
-                    
+
                     if (!found) {
                         continue;
                     }
                 }
-                
+
                 object value = property.Value.GetValue (this, null);
                 if (value == null) {
                     continue;
                 }
-                
+
                 if (value is TimeSpan) {
                     value = ((TimeSpan)value).TotalSeconds;
                 } else if (value is DateTime) {
@@ -626,11 +626,11 @@ namespace Banshee.Collection
                 } else if (value is TrackMediaAttributes) {
                     value = value.ToString ();
                 } else if (!(value.GetType ().IsPrimitive || value is string)) {
-                    Log.WarningFormat ("Invalid property in {0} marked as [Exportable]: ({1} is a {2})", 
+                    Log.WarningFormat ("Invalid property in {0} marked as [Exportable]: ({1} is a {2})",
                         property.Value.DeclaringType, property.Value.Name, value.GetType ());
                     continue;
                 }
-                
+
                 // A bit lame
                 if (!(value is string)) {
                     string str_value = value.ToString ();
@@ -638,16 +638,16 @@ namespace Banshee.Collection
                         continue;
                     }
                 }
-                
+
                 dict.Add (property.Key, value);
             }
-            
+
             return dict;
         }
-        
+
         private static Dictionary<Type, Dictionary<string, PropertyInfo>> exportable_properties;
         private static object exportable_properties_mutex = new object ();
-        
+
         private static void FindExportableProperties (Type type)
         {
             lock (exportable_properties_mutex) {
@@ -656,7 +656,7 @@ namespace Banshee.Collection
                 } else if (exportable_properties.ContainsKey (type)) {
                     return;
                 }
-                
+
                 // Build a stack of types to reflect
                 Stack<Type> probe_types = new Stack<Type> ();
                 Type probe_type = type;
@@ -669,57 +669,57 @@ namespace Banshee.Collection
                     }
                     probe_type = probe_type.BaseType;
                 }
-                
+
                 if (!is_track_info) {
                     throw new ArgumentException ("Type must derive from Banshee.Collection.TrackInfo", "type");
                 }
-            
+
                 // Iterate through all types
                 while (probe_types.Count > 0) {
                     probe_type = probe_types.Pop ();
                     if (exportable_properties.ContainsKey (probe_type)) {
                         continue;
                     }
-                    
+
                     Dictionary<string, PropertyInfo> properties = null;
-                    
+
                     // Reflect the type for exportable properties
                     foreach (PropertyInfo property in probe_type.GetProperties (BindingFlags.Public | BindingFlags.Instance)) {
                         if (property.DeclaringType != probe_type) {
                             continue;
                         }
-                        
+
                         object [] exportable_attrs = property.GetCustomAttributes (typeof (ExportableAttribute), true);
                         if (exportable_attrs == null || exportable_attrs.Length == 0) {
                             continue;
                         }
-                        
+
                         string export_name = ((ExportableAttribute)exportable_attrs[0]).ExportName
                             ?? StringUtil.CamelCaseToUnderCase (property.Name, '-');
-                        
+
                         if (String.IsNullOrEmpty (export_name) || (properties != null && properties.ContainsKey (export_name))) {
                             continue;
                         }
-                        
+
                         if (properties == null) {
                             properties = new Dictionary<string, PropertyInfo> ();
                             exportable_properties.Add (probe_type, properties);
                         }
-                        
+
                         properties.Add (export_name, property);
                     }
-                    
+
                     // Merge properties in the type hierarchy through linking or aggregation
                     Type parent_type = probe_type.BaseType;
                     bool link = !exportable_properties.ContainsKey (probe_type);
-                    
+
                     while (parent_type != null) {
                         Dictionary<string, PropertyInfo> parent_properties = null;
                         if (!exportable_properties.TryGetValue (parent_type, out parent_properties)) {
                             parent_type = parent_type.BaseType;
                             continue;
                         }
-                        
+
                         if (link) {
                             // Link entire property set between types
                             exportable_properties.Add (probe_type, parent_properties);
@@ -730,13 +730,13 @@ namespace Banshee.Collection
                                 properties.Add (parent_property.Key, parent_property.Value);
                             }
                         }
-                        
+
                         parent_type = parent_type.BaseType;
                     }
                 }
             }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.Core/Banshee.Collection/TrackMediaAttributes.cs b/src/Core/Banshee.Core/Banshee.Collection/TrackMediaAttributes.cs
index bd7b893..2e631ee 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/TrackMediaAttributes.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/TrackMediaAttributes.cs
@@ -41,7 +41,7 @@ namespace Banshee.Collection
         Podcast = (1 << 4),     // 16
         TvShow = (1 << 5),      // 32
         Movie = (1 << 6),       // 64
-        
+
         Default = AudioStream | Music // 5
     }
 }
\ No newline at end of file
diff --git a/src/Core/Banshee.Core/Banshee.Collection/UnknownTrackInfo.cs b/src/Core/Banshee.Core/Banshee.Collection/UnknownTrackInfo.cs
index 4a25f4a..9cd7c48 100644
--- a/src/Core/Banshee.Core/Banshee.Collection/UnknownTrackInfo.cs
+++ b/src/Core/Banshee.Core/Banshee.Collection/UnknownTrackInfo.cs
@@ -34,7 +34,7 @@ namespace Banshee.Collection
 {
     public class UnknownTrackInfo : TrackInfo
     {
-        public UnknownTrackInfo(SafeUri uri) 
+        public UnknownTrackInfo(SafeUri uri)
         {
             Uri = uri;
             IsLive = true;
diff --git a/src/Core/Banshee.Core/Banshee.Configuration.Schema/ImportSchema.cs b/src/Core/Banshee.Core/Banshee.Configuration.Schema/ImportSchema.cs
index 6cef73b..7cf07ff 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration.Schema/ImportSchema.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration.Schema/ImportSchema.cs
@@ -5,30 +5,30 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Banshee.Configuration;
- 
+
 namespace Banshee.Configuration.Schema
 {
     public static class ImportSchema
@@ -38,6 +38,6 @@ namespace Banshee.Configuration.Schema
             true,
             "Show the Initial Import Dialog",
             "Show the Initial Import Dialog when the Banshee library is empty"
-        );   
+        );
     }
 }
diff --git a/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs b/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs
index 8030e76..a83fe4f 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs
@@ -5,30 +5,30 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Banshee.Configuration;
- 
+
 namespace Banshee.Configuration.Schema
 {
     public static class LibrarySchema
@@ -56,7 +56,7 @@ namespace Banshee.Configuration.Schema
                 "%track_count%, %track_number_nz% (No prefixed zero), %track_count_nz% (No prefixed zero), " +
                 "%album_artist_initial%, %artist% (deprecated, use %album_artist%)."
         );
-        
+
         public static readonly SchemaEntry<bool> CopyOnImport = new SchemaEntry<bool>(
             "library", "copy_on_import",
             false,
@@ -70,7 +70,7 @@ namespace Banshee.Configuration.Schema
             "Move music on info save",
             "Move music within banshee music library directory when saving track info"
         );
-        
+
         public static readonly SchemaEntry<bool> WriteMetadata = new SchemaEntry<bool>(
             "library", "write_metadata",
             false,
diff --git a/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs b/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs
index c41f17b..e8134dc 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs
@@ -44,7 +44,7 @@ namespace Banshee.Configuration
                 if (client != null) {
                     return;
                 }
-                
+
                 if (AddinManager.IsInitialized) {
                     foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (
                         "/Banshee/Platform/ConfigurationClient")) {
@@ -57,14 +57,14 @@ namespace Banshee.Configuration
                             Log.Warning ("Configuration client extension failed to load", e.Message);
                         }
                     }
-                    
+
                     if (client == null) {
                         client = new XmlConfigurationClient ();
                     }
                 } else {
                     client = new MemoryConfigurationClient ();
                 }
-                
+
                 Log.DebugFormat ("Configuration client extension loaded ({0})", client.GetType ().FullName);
             }
         }
@@ -77,37 +77,37 @@ namespace Banshee.Configuration
                 return client;
             }
         }
-        
+
         public static T Get<T> (SchemaEntry<T> entry)
         {
             return Client.Get<T> (entry);
         }
-        
+
         public static T Get<T> (SchemaEntry<T> entry, T fallback)
         {
             return Client.Get<T> (entry, fallback);
         }
-        
+
         public static T Get<T> (string key, T fallback)
         {
             return Client.Get<T> (key, fallback);
         }
-        
+
         public static T Get<T> (string @namespace, string key, T fallback)
         {
             return Client.Get<T> (@namespace, key, fallback);
         }
-        
+
         public static void Set<T> (SchemaEntry<T> entry, T value)
         {
             Client.Set<T> (entry, value);
         }
-        
+
         public static void Set<T> (string key, T value)
         {
             Client.Set<T> (key, value);
         }
-        
+
         public static void Set<T> (string @namespace, string key, T value)
         {
             Client.Set<T> (@namespace, key, value);
diff --git a/src/Core/Banshee.Core/Banshee.Configuration/IConfigurationClient.cs b/src/Core/Banshee.Core/Banshee.Configuration/IConfigurationClient.cs
index 9b2b351..10064ba 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration/IConfigurationClient.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration/IConfigurationClient.cs
@@ -34,7 +34,7 @@ namespace Banshee.Configuration
         T Get<T> (SchemaEntry<T> entry, T fallback);
         T Get<T> (string key, T fallback);
         T Get<T> (string @namespace, string key, T fallback);
-        
+
         void Set<T> (SchemaEntry<T> entry, T value);
         void Set<T> (string key, T value);
         void Set<T> (string @namespace, string key, T value);
diff --git a/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs b/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs
index e597551..8f62aad 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration/MemoryConfigurationClient.cs
@@ -71,7 +71,7 @@ namespace Banshee.Configuration
             lock (this) {
                 string fq_key = MakeKey (namespce, key);
                 object value;
-                
+
                 if (config.TryGetValue (fq_key, out value)) {
                     if (value == null) {
                         return default (T);
@@ -79,7 +79,7 @@ namespace Banshee.Configuration
                         return (T)value;
                     }
                 }
-                
+
                 return fallback;
             }
         }
@@ -95,12 +95,12 @@ namespace Banshee.Configuration
                 }
             }
         }
-                
+
         public static string MakeKey (string namespce, string key)
         {
             return String.Format ("{0}{1}{2}", namespce, String.IsNullOrEmpty (namespce) ? String.Empty : ".", key);
         }
-        
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.Core/Banshee.Configuration/SchemaEntry.cs b/src/Core/Banshee.Core/Banshee.Configuration/SchemaEntry.cs
index 704dfff..3a30333 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration/SchemaEntry.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration/SchemaEntry.cs
@@ -33,8 +33,8 @@ namespace Banshee.Configuration
     public struct SchemaEntry<T> : IEquatable<SchemaEntry<T>>
     {
         public static SchemaEntry<T> Zero;
-    
-        public SchemaEntry (string @namespace, string key, T defaultValue, 
+
+        public SchemaEntry (string @namespace, string key, T defaultValue,
             string shortDescription, string longDescription) :
             this (@namespace, key, defaultValue, default(T), default(T), shortDescription, longDescription)
         {
@@ -82,17 +82,17 @@ namespace Banshee.Configuration
         public readonly T MaxValue;
         public readonly string ShortDescription;
         public readonly string LongDescription;
-        
+
         public bool Equals (SchemaEntry<T> entry)
         {
             return Namespace == entry.Namespace && Key == entry.Key;
         }
-        
+
         public override bool Equals (object o)
         {
             return (o is SchemaEntry<T>) && Equals ((SchemaEntry<T>)o);
         }
-        
+
         public override int GetHashCode ()
         {
             return Namespace.GetHashCode () ^ Key.GetHashCode ();
diff --git a/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs b/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs
index 3288c1c..2823a40 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs
@@ -42,24 +42,24 @@ namespace Banshee.Configuration
         private const string namespace_tag_name = "namespace";
         private const string value_tag_name = "value";
         private const string tag_identifier_attribute_name = "name";
-        
+
         private static string file_path {
             get {
                 return Path.Combine(Paths.ApplicationData, "config.xml");
             }
         }
         private static XmlDocument xml_document;
-        
+
         private static System.Timers.Timer timer;
         private static object timer_mutex = new object();
         private static volatile bool delay_write;
-        
+
         public XmlConfigurationClient()
         {
             timer = new System.Timers.Timer(100); // a 10th of a second
             timer.Elapsed += new ElapsedEventHandler(OnTimerElapsedEvent);
             timer.AutoReset = true;
-            
+
             xml_document = new XmlDocument();
             bool make_new_xml = true;
             if(File.Exists(file_path)) {
@@ -73,33 +73,33 @@ namespace Banshee.Configuration
                 xml_document.LoadXml("<configuration />");
             }
         }
-        
+
         public T Get<T>(SchemaEntry<T> entry)
         {
             return Get<T>(entry.Namespace, entry.Key, entry.DefaultValue);
         }
-        
+
         public T Get<T>(SchemaEntry<T> entry, T fallback)
         {
             return Get<T>(entry.Namespace, entry.Key, fallback);
         }
-        
+
         public T Get<T>(string key, T fallback)
         {
             return Get<T>(null, key, fallback);
         }
-        
+
         public T Get<T>(string namespce, string key, T fallback)
         {
             lock(xml_document) {
                 XmlNode namespace_node = GetNamespaceNode(namespce == null
                     ? new string [] {null_namespace}
                     : namespce.Split('.'), false);
-                
+
                 if(namespace_node == null) {
                     return fallback;
                 }
-                
+
                 foreach(XmlNode node in namespace_node.ChildNodes) {
                     if(node.Attributes[tag_identifier_attribute_name].Value == key && node.Name == value_tag_name) {
                         XmlSerializer serializer = new XmlSerializer(typeof(T));
@@ -110,17 +110,17 @@ namespace Banshee.Configuration
                 return fallback;
             }
         }
-        
+
         public void Set<T>(SchemaEntry<T> entry, T value)
         {
             Set(entry.Namespace, entry.Key, value);
         }
-        
+
         public void Set<T>(string key, T value)
         {
             Set(null, key, value);
         }
-        
+
         public void Set<T>(string namespce, string key, T value)
         {
             lock(xml_document) {
@@ -134,11 +134,11 @@ namespace Banshee.Configuration
                 if(fragment.FirstChild is XmlDeclaration) {
                     fragment.RemoveChild(fragment.FirstChild); // This is only a problem with Microsoft's System.Xml
                 }
-                
+
                 XmlNode namespace_node = GetNamespaceNode(namespce == null
                     ? new string [] {null_namespace}
                     : namespce.Split('.'), true);
-                
+
                 bool found = false;
                 foreach(XmlNode node in namespace_node.ChildNodes) {
                     if(node.Attributes[tag_identifier_attribute_name].Value == key && node.Name == value_tag_name) {
@@ -158,16 +158,16 @@ namespace Banshee.Configuration
                 QueueWrite();
             }
         }
-        
+
         private XmlNode GetNamespaceNode(string [] namespace_parts, bool create)
         {
             return GetNamespaceNode(xml_document.DocumentElement, namespace_parts, create);
         }
-        
+
         private XmlNode GetNamespaceNode(XmlNode parent_node, string [] namespace_parts, bool create)
         {
             XmlNode node = parent_node.FirstChild ?? parent_node;
-            
+
             do {
                 if(node.Name == namespace_tag_name && node.Attributes[tag_identifier_attribute_name].Value == namespace_parts[0]) {
                     if(namespace_parts.Length > 1) {
@@ -182,7 +182,7 @@ namespace Banshee.Configuration
                     node = node.NextSibling;
                 }
             } while(node != null);
-            
+
             if(create) {
                 XmlNode appending_node = parent_node;
                 foreach(string s in namespace_parts) {
@@ -197,7 +197,7 @@ namespace Banshee.Configuration
             }
             return node;
         }
-        
+
         // Queue XML file writes to minimize disk access
         private static void QueueWrite()
         {
@@ -209,7 +209,7 @@ namespace Banshee.Configuration
                 }
             }
         }
-        
+
         private static void OnTimerElapsedEvent(object o, ElapsedEventArgs args)
         {
             lock(timer_mutex) {
diff --git a/src/Core/Banshee.Core/Banshee.I18n/AssemblyCatalogAttribute.cs b/src/Core/Banshee.Core/Banshee.I18n/AssemblyCatalogAttribute.cs
index fc3058b..7a9bebc 100644
--- a/src/Core/Banshee.Core/Banshee.I18n/AssemblyCatalogAttribute.cs
+++ b/src/Core/Banshee.Core/Banshee.I18n/AssemblyCatalogAttribute.cs
@@ -35,17 +35,17 @@ namespace Banshee.I18n
     {
         private string domain;
         private string localedir;
-        
+
         public AssemblyCatalogAttribute (string domain, string localedir)
         {
             this.domain = domain;
             this.localedir = localedir;
         }
-        
+
         public string Domain {
             get { return domain; }
         }
-        
+
         public string LocaleDir {
             get { return localedir; }
         }
diff --git a/src/Core/Banshee.Core/Banshee.I18n/Catalog.cs b/src/Core/Banshee.Core/Banshee.I18n/Catalog.cs
index ef7e920..b4b815b 100644
--- a/src/Core/Banshee.Core/Banshee.I18n/Catalog.cs
+++ b/src/Core/Banshee.Core/Banshee.I18n/Catalog.cs
@@ -39,19 +39,19 @@ namespace Banshee.I18n
     {
         private static Dictionary<Assembly, string> domain_assembly_map = new Dictionary<Assembly, string> ();
         private static List<Assembly> default_domain_assemblies = new List<Assembly> ();
-        
+
         public static void Init (string domain, string localeDir)
         {
             if (String.IsNullOrEmpty (domain)) {
                 throw new ArgumentException ("No text domain specified");
             }
-            
+
             IntPtr domain_ptr = UnixMarshal.StringToHeap (domain);
             IntPtr localedir_ptr = IntPtr.Zero;
-            
+
             try {
                 BindTextDomainCodeset (domain_ptr);
-            
+
                 if (localeDir != null && localeDir.Length > 0) {
                     localedir_ptr = UnixMarshal.StringToHeap (localeDir);
                     BindTextDomain (domain_ptr, localedir_ptr);
@@ -63,32 +63,32 @@ namespace Banshee.I18n
                 }
             }
         }
-        
+
         public static string GetString (string msgid)
         {
             return GetString (GetDomainForAssembly (Assembly.GetCallingAssembly ()), msgid);
         }
-        
+
         public static string GetString (string domain, string msgid)
         {
             IntPtr msgid_ptr = UnixMarshal.StringToHeap (msgid);
             IntPtr domain_ptr = domain == null ? IntPtr.Zero : UnixMarshal.StringToHeap (domain);
-            
+
             if (domain == null) {
                 // FIXME banshee-1?
                 IntPtr ptr = UnixMarshal.StringToHeap ("banshee");
                 UnixMarshal.FreeHeap (ptr);
             }
-            
+
             try {
-                IntPtr ret_ptr = domain_ptr == IntPtr.Zero ? 
+                IntPtr ret_ptr = domain_ptr == IntPtr.Zero ?
                     gettext (msgid_ptr) :
                     dgettext (domain_ptr, msgid_ptr);
-                
+
                 if (msgid_ptr != ret_ptr) {
                     return UnixMarshal.PtrToStringUnix (ret_ptr);
                 }
-                
+
                 return msgid;
             } finally {
                 UnixMarshal.FreeHeap (msgid_ptr);
@@ -97,34 +97,34 @@ namespace Banshee.I18n
                 }
             }
         }
-        
+
         public static string GetString (string msgid, string msgidPlural, int n)
         {
             return GetString (GetDomainForAssembly (Assembly.GetCallingAssembly ()), msgid, msgidPlural, n);
         }
-        
+
         public static string GetPluralString (string msgid, string msgidPlural, int n)
         {
             return GetString (msgid, msgidPlural, n);
         }
-        
+
         public static string GetString (string domain, string msgid, string msgidPlural, int n)
         {
             IntPtr msgid_ptr = UnixMarshal.StringToHeap (msgid);
             IntPtr msgid_plural_ptr = UnixMarshal.StringToHeap (msgidPlural);
             IntPtr domain_ptr = domain == null ? IntPtr.Zero : UnixMarshal.StringToHeap (domain);
-                
+
             try {
-                IntPtr ret_ptr = domain_ptr == IntPtr.Zero ? 
+                IntPtr ret_ptr = domain_ptr == IntPtr.Zero ?
                     ngettext (msgid_ptr, msgid_plural_ptr, n) :
                     dngettext (domain_ptr, msgid_ptr, msgid_plural_ptr, n);
-                
+
                 if (ret_ptr == msgid_ptr) {
                     return msgid;
                 } else if (ret_ptr == msgid_plural_ptr) {
                     return msgidPlural;
                 }
-                
+
                 return UnixMarshal.PtrToStringUnix (ret_ptr);
             } finally {
                 UnixMarshal.FreeHeap (msgid_ptr);
@@ -134,7 +134,7 @@ namespace Banshee.I18n
                 }
             }
         }
-        
+
         private static string GetDomainForAssembly (Assembly assembly)
         {
             if (default_domain_assemblies.Contains (assembly)) {
@@ -142,27 +142,27 @@ namespace Banshee.I18n
             } else if (domain_assembly_map.ContainsKey (assembly)) {
                 return domain_assembly_map[assembly];
             }
-            
+
             AssemblyCatalogAttribute [] attributes = assembly.GetCustomAttributes (
                 typeof(AssemblyCatalogAttribute), true) as AssemblyCatalogAttribute [];
-                
+
             if (attributes == null || attributes.Length == 0) {
                 default_domain_assemblies.Add (assembly);
                 return null;
             }
-            
+
             string domain = attributes[0].Domain;
-            
+
             Init (domain, attributes[0].LocaleDir);
             domain_assembly_map.Add (assembly, domain);
-            
+
             return domain;
         }
-        
+
         private static void BindTextDomainCodeset (IntPtr domain)
         {
             IntPtr codeset = UnixMarshal.StringToHeap("UTF-8");
-            
+
             try {
                 if (bind_textdomain_codeset (domain, codeset) == IntPtr.Zero) {
                     throw new UnixIOException (Mono.Unix.Native.Errno.ENOMEM);
@@ -178,22 +178,22 @@ namespace Banshee.I18n
                 throw new UnixIOException (Mono.Unix.Native.Errno.ENOMEM);
             }
         }
-        
+
         [DllImport ("intl")]
         private static extern IntPtr bind_textdomain_codeset (IntPtr domain, IntPtr codeset);
-        
+
         [DllImport ("intl")]
         private static extern IntPtr bindtextdomain (IntPtr domain, IntPtr locale_dir);
-        
+
         [DllImport ("intl")]
         private static extern IntPtr dgettext (IntPtr domain, IntPtr msgid);
-        
+
         [DllImport ("intl")]
         private static extern IntPtr dngettext (IntPtr domain, IntPtr msgid_singular, IntPtr msgid_plural, Int32 n);
 
         [DllImport ("intl")]
         private static extern IntPtr gettext (IntPtr msgid);
-        
+
         [DllImport ("intl")]
         private static extern IntPtr ngettext (IntPtr msgid_singular, IntPtr msgid_plural, Int32 n);
     }
diff --git a/src/Core/Banshee.Core/Banshee.IO.SystemIO/DemuxVfs.cs b/src/Core/Banshee.Core/Banshee.IO.SystemIO/DemuxVfs.cs
index 58f2673..912d36b 100644
--- a/src/Core/Banshee.Core/Banshee.IO.SystemIO/DemuxVfs.cs
+++ b/src/Core/Banshee.Core/Banshee.IO.SystemIO/DemuxVfs.cs
@@ -34,37 +34,37 @@ using Banshee.Base;
 namespace Banshee.IO.SystemIO
 {
     public class DemuxVfs : Banshee.IO.IDemuxVfs
-    {   
+    {
         private FileInfo file_info;
-        
+
         public DemuxVfs (string path)
         {
             file_info = new FileInfo (path);
         }
-                
+
         public void CloseStream (Stream stream)
         {
             stream.Close ();
         }
-        
-        public string Name { 
+
+        public string Name {
             get { return file_info.FullName; }
         }
-        
+
         public Stream ReadStream {
             get { return file_info.Open (FileMode.Open, FileAccess.Read, FileShare.Read); }
         }
-        
+
         public Stream WriteStream {
             get { return file_info.Open (FileMode.Open, FileAccess.ReadWrite); }
         }
-   
+
         public bool IsReadable {
             get {
                 try {
                     ReadStream.Close ();
                     return true;
-                } catch { 
+                } catch {
                     return false;
                 }
             }
@@ -75,7 +75,7 @@ namespace Banshee.IO.SystemIO
                 try {
                     WriteStream.Close ();
                     return true;
-                } catch { 
+                } catch {
                     return false;
                 }
             }
diff --git a/src/Core/Banshee.Core/Banshee.IO.SystemIO/Directory.cs b/src/Core/Banshee.Core/Banshee.IO.SystemIO/Directory.cs
index 8251f29..fe8fe2b 100644
--- a/src/Core/Banshee.Core/Banshee.IO.SystemIO/Directory.cs
+++ b/src/Core/Banshee.Core/Banshee.IO.SystemIO/Directory.cs
@@ -39,27 +39,27 @@ namespace Banshee.IO.SystemIO
         {
             System.IO.Directory.CreateDirectory (directory);
         }
-        
+
         public void Delete (string directory)
         {
             Delete (directory, false);
         }
-        
+
         public void Delete (string directory, bool recursive)
         {
             System.IO.Directory.Delete (directory, recursive);
         }
-        
+
         public bool Exists (string directory)
         {
             return System.IO.Directory.Exists (directory);
         }
-        
+
         public IEnumerable<string> GetFiles (string directory)
         {
             return System.IO.Directory.GetFiles (directory);
         }
-        
+
         public IEnumerable<string> GetDirectories (string directory)
         {
             return System.IO.Directory.GetDirectories (directory);
diff --git a/src/Core/Banshee.Core/Banshee.IO.SystemIO/File.cs b/src/Core/Banshee.Core/Banshee.IO.SystemIO/File.cs
index 7f23055..140c2bb 100644
--- a/src/Core/Banshee.Core/Banshee.IO.SystemIO/File.cs
+++ b/src/Core/Banshee.Core/Banshee.IO.SystemIO/File.cs
@@ -54,7 +54,7 @@ namespace Banshee.IO.SystemIO
         {
             System.IO.File.Copy (from.LocalPath, to.LocalPath, overwrite);
         }
-        
+
         public long GetSize (SafeUri uri)
         {
             try {
@@ -68,15 +68,15 @@ namespace Banshee.IO.SystemIO
         {
             return Hyena.DateTimeUtil.FromDateTime (new System.IO.FileInfo (uri.LocalPath).LastWriteTime);
         }
-        
+
         public System.IO.Stream OpenRead (SafeUri uri)
         {
             return System.IO.File.OpenRead (uri.LocalPath);
         }
-        
+
         public System.IO.Stream OpenWrite (SafeUri uri, bool overwrite)
         {
-            return overwrite 
+            return overwrite
                 ? System.IO.File.Open (uri.LocalPath, FileMode.Create, FileAccess.ReadWrite)
                 : System.IO.File.OpenWrite (uri.LocalPath);
         }
diff --git a/src/Core/Banshee.Core/Banshee.IO.SystemIO/Provider.cs b/src/Core/Banshee.Core/Banshee.IO.SystemIO/Provider.cs
index 26b2c8a..8b27299 100644
--- a/src/Core/Banshee.Core/Banshee.IO.SystemIO/Provider.cs
+++ b/src/Core/Banshee.Core/Banshee.IO.SystemIO/Provider.cs
@@ -32,7 +32,7 @@ namespace Banshee.IO.SystemIO
 {
     public class Provider : Banshee.IO.IProvider
     {
-    	public Type FileProvider { 
+    	public Type FileProvider {
     	    get { return typeof (File); }
     	}
 
diff --git a/src/Core/Banshee.Core/Banshee.IO/DemuxVfs.cs b/src/Core/Banshee.Core/Banshee.IO/DemuxVfs.cs
index 64e722b..a6fe361 100644
--- a/src/Core/Banshee.Core/Banshee.IO/DemuxVfs.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/DemuxVfs.cs
@@ -35,12 +35,12 @@ namespace Banshee.IO
     {
         public static TagLib.File OpenFile (string file, string mimetype, TagLib.ReadStyle readStyle)
         {
-            return TagLib.File.Create (Provider.CreateDemuxVfs (file), mimetype, readStyle); 
+            return TagLib.File.Create (Provider.CreateDemuxVfs (file), mimetype, readStyle);
         }
-        
+
         public static TagLib.File OpenFile (string file)
         {
-            return TagLib.File.Create (Provider.CreateDemuxVfs (file)); 
+            return TagLib.File.Create (Provider.CreateDemuxVfs (file));
         }
     }
 }
diff --git a/src/Core/Banshee.Core/Banshee.IO/DirectoryScannerPipelineElement.cs b/src/Core/Banshee.Core/Banshee.IO/DirectoryScannerPipelineElement.cs
index 6535f9e..ef6526b 100644
--- a/src/Core/Banshee.Core/Banshee.IO/DirectoryScannerPipelineElement.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/DirectoryScannerPipelineElement.cs
@@ -34,7 +34,7 @@ using Hyena.Collections;
 using Banshee.Base;
 
 namespace Banshee.IO
-{  
+{
     public class DirectoryScannerPipelineElement : QueuePipelineElement<string>
     {
         protected override string ProcessItem (string item)
@@ -42,23 +42,23 @@ namespace Banshee.IO
             ScanForFiles (item);
             return null;
         }
-        
+
         private void ScanForFiles (string source)
         {
             CheckForCanceled ();
-            
+
             bool is_regular_file = false;
             bool is_directory = false;
-            
+
             SafeUri source_uri = new SafeUri (source);
-            
+
             try {
                 is_regular_file = Banshee.IO.File.Exists (source_uri);
                 is_directory = !is_regular_file && Banshee.IO.Directory.Exists (source);
             } catch {
                 return;
             }
-            
+
             if (is_regular_file) {
                 try {
                     if (!Path.GetFileName (source).StartsWith (".")) {
diff --git a/src/Core/Banshee.Core/Banshee.IO/ExtensionSet.cs b/src/Core/Banshee.Core/Banshee.IO/ExtensionSet.cs
index 9921e9c..c7ce789 100644
--- a/src/Core/Banshee.Core/Banshee.IO/ExtensionSet.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/ExtensionSet.cs
@@ -46,13 +46,13 @@ namespace Banshee.IO
             if (String.IsNullOrEmpty (path)) {
                 return false;
             }
-            
+
             int index = path.LastIndexOf ('.');
             if (index < 0 || index == path.Length || index == path.Length - 1) {
                 return false;
             }
-            
-            return Array.BinarySearch<string> (extensions, 
+
+            return Array.BinarySearch<string> (extensions,
                 path.Substring (index + 1).ToLower ()) >= 0;
         }
 
diff --git a/src/Core/Banshee.Core/Banshee.IO/File.cs b/src/Core/Banshee.Core/Banshee.IO/File.cs
index e0c61f9..f5785c2 100644
--- a/src/Core/Banshee.Core/Banshee.IO/File.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/File.cs
@@ -43,7 +43,7 @@ namespace Banshee.IO
     	{
     	    return Provider.File.Exists (uri);
     	}
-        
+
     	public static void Move (SafeUri from, SafeUri to)
     	{
     	    Provider.File.Move (from, to);
diff --git a/src/Core/Banshee.Core/Banshee.IO/IDirectory.cs b/src/Core/Banshee.Core/Banshee.IO/IDirectory.cs
index b1134be..495caf8 100644
--- a/src/Core/Banshee.Core/Banshee.IO/IDirectory.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/IDirectory.cs
@@ -36,13 +36,13 @@ namespace Banshee.IO
     public interface IDirectory
     {
         bool Exists (string directory);
-        
+
         void Create (string directory);
         void Move (SafeUri from, SafeUri to);
-        
+
         void Delete (string directory);
         void Delete (string directory, bool recursive);
-        
+
         // FIXME: These probably need to normalize to SafeUri
         IEnumerable<string> GetFiles (string directory);
         IEnumerable<string> GetDirectories (string directory);
diff --git a/src/Core/Banshee.Core/Banshee.IO/IFile.cs b/src/Core/Banshee.Core/Banshee.IO/IFile.cs
index 1d8ad13..465acc3 100644
--- a/src/Core/Banshee.Core/Banshee.IO/IFile.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/IFile.cs
@@ -40,7 +40,7 @@ namespace Banshee.IO
         void Copy (SafeUri from, SafeUri to, bool overwrite);
         long GetSize (SafeUri uri);
         long GetModifiedTime (SafeUri uri);
-        
+
         System.IO.Stream OpenRead (SafeUri uri);
         System.IO.Stream OpenWrite (SafeUri uri, bool overwrite);
     }
diff --git a/src/Core/Banshee.Core/Banshee.IO/Provider.cs b/src/Core/Banshee.Core/Banshee.IO/Provider.cs
index 6f46ae0..b1ba734 100644
--- a/src/Core/Banshee.Core/Banshee.IO/Provider.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/Provider.cs
@@ -41,13 +41,13 @@ namespace Banshee.IO
         private static IProvider provider;
         private static IDirectory directory;
         private static IFile file;
-        
+
         static Provider () {
             lock (typeof (Provider)) {
                 if (provider != null) {
                     return;
                 }
-                
+
                 foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/Platform/IOProvider")) {
                     try {
                         if (node.HasId && node.Id == ProviderSchema.Get ()) {
@@ -57,13 +57,13 @@ namespace Banshee.IO
                         Log.Warning ("IO provider extension failed to load", e.Message);
                     }
                 }
-                
+
                 if (provider == null) {
                     provider = new Banshee.IO.SystemIO.Provider ();
                 }
-                
+
                 Log.DebugFormat ("IO provider extension loaded ({0})", provider.GetType ().FullName);
-                
+
                 directory = (IDirectory)Activator.CreateInstance (provider.DirectoryProvider);
                 file = (IFile)Activator.CreateInstance (provider.FileProvider);
             }
@@ -73,11 +73,11 @@ namespace Banshee.IO
         {
             provider = customProvider;
         }
-        
+
         internal static IDirectory Directory {
             get { return directory; }
         }
-        
+
         internal static IFile File {
             get { return file; }
         }
@@ -85,17 +85,17 @@ namespace Banshee.IO
         public static bool LocalOnly {
             get { return provider == null ? true : provider.LocalOnly; }
         }
-        
+
         internal static IDemuxVfs CreateDemuxVfs (string file)
         {
             return (IDemuxVfs)Activator.CreateInstance (provider.DemuxVfsProvider, new object [] { file });
         }
-        
+
         internal static readonly SchemaEntry<string> ProviderSchema = new SchemaEntry<string> (
             "core", "io_provider",
             "Banshee.IO.Unix.Provider",
             "Set the IO provider backend in Banshee",
-            "Can be either \"Banshee.IO.SystemIO.Provider\" (.NET System.IO), " + 
+            "Can be either \"Banshee.IO.SystemIO.Provider\" (.NET System.IO), " +
                 "\"Banshee.IO.Gio.Provider\" (GIO), or " +
                 "\"Banshee.IO.Unix.Provider\" (Native Unix/POSIX), or " +
                 "\"Banshee.IO.GnomeVfs.Provider\" (GNOME VFS); " +
diff --git a/src/Core/Banshee.Core/Banshee.IO/StreamAssist.cs b/src/Core/Banshee.Core/Banshee.IO/StreamAssist.cs
index 7eabb86..42d765b 100644
--- a/src/Core/Banshee.Core/Banshee.IO/StreamAssist.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/StreamAssist.cs
@@ -37,7 +37,7 @@ namespace Banshee.IO
         {
             Save (from, to, 8192, true);
         }
-        
+
         public static void Save (Stream from, Stream to, bool close)
         {
             Save (from, to, 8192, close);
@@ -49,7 +49,7 @@ namespace Banshee.IO
                 long bytes_read = 0;
                 byte [] buffer = new byte[bufferSize];
                 int chunk_bytes_read = 0;
-                
+
                 while ((chunk_bytes_read = from.Read (buffer, 0, buffer.Length)) > 0) {
                     to.Write (buffer, 0, chunk_bytes_read);
                     bytes_read += chunk_bytes_read;
diff --git a/src/Core/Banshee.Core/Banshee.IO/Utilities.cs b/src/Core/Banshee.Core/Banshee.IO/Utilities.cs
index b0ebbcd..2f73520 100644
--- a/src/Core/Banshee.Core/Banshee.IO/Utilities.cs
+++ b/src/Core/Banshee.Core/Banshee.IO/Utilities.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Core/Banshee.Core/Banshee.Kernel/DelegateJob.cs b/src/Core/Banshee.Core/Banshee.Kernel/DelegateJob.cs
index 703f5fd..90956f1 100644
--- a/src/Core/Banshee.Core/Banshee.Kernel/DelegateJob.cs
+++ b/src/Core/Banshee.Core/Banshee.Kernel/DelegateJob.cs
@@ -34,12 +34,12 @@ namespace Banshee.Kernel
     {
         public delegate void JobDelegate ();
         private JobDelegate method;
-        
+
         public DelegateJob (JobDelegate method)
         {
             this.method = method;
         }
-        
+
         protected override void RunJob ()
         {
             method ();
diff --git a/src/Core/Banshee.Core/Banshee.Kernel/IInstanceCriticalJob.cs b/src/Core/Banshee.Core/Banshee.Kernel/IInstanceCriticalJob.cs
index de1b046..a4c2e88 100644
--- a/src/Core/Banshee.Core/Banshee.Kernel/IInstanceCriticalJob.cs
+++ b/src/Core/Banshee.Core/Banshee.Kernel/IInstanceCriticalJob.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Banshee.Kernel
diff --git a/src/Core/Banshee.Core/Banshee.Kernel/IJob.cs b/src/Core/Banshee.Core/Banshee.Kernel/IJob.cs
index 3d364a7..636df8a 100644
--- a/src/Core/Banshee.Core/Banshee.Kernel/IJob.cs
+++ b/src/Core/Banshee.Core/Banshee.Kernel/IJob.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Banshee.Kernel
diff --git a/src/Core/Banshee.Core/Banshee.Kernel/Job.cs b/src/Core/Banshee.Core/Banshee.Kernel/Job.cs
index 1ad13b4..7dcf147 100644
--- a/src/Core/Banshee.Core/Banshee.Kernel/Job.cs
+++ b/src/Core/Banshee.Core/Banshee.Kernel/Job.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Banshee.Kernel
@@ -33,13 +33,13 @@ namespace Banshee.Kernel
     public abstract class Job : IJob
     {
         public event EventHandler Finished;
-        
+
         public void Run()
         {
             RunJob();
             OnFinished();
         }
-        
+
         protected virtual void OnFinished()
         {
             EventHandler handler = Finished;
@@ -47,7 +47,7 @@ namespace Banshee.Kernel
                 handler(this, new EventArgs());
             }
         }
-        
+
         protected abstract void RunJob();
     }
 }
diff --git a/src/Core/Banshee.Core/Banshee.Kernel/JobPriority.cs b/src/Core/Banshee.Core/Banshee.Kernel/JobPriority.cs
index f53f3c5..ea32259 100644
--- a/src/Core/Banshee.Core/Banshee.Kernel/JobPriority.cs
+++ b/src/Core/Banshee.Core/Banshee.Kernel/JobPriority.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Banshee.Kernel
diff --git a/src/Core/Banshee.Core/Banshee.Kernel/Scheduler.cs b/src/Core/Banshee.Core/Banshee.Kernel/Scheduler.cs
index 957b487..619e737 100644
--- a/src/Core/Banshee.Core/Banshee.Kernel/Scheduler.cs
+++ b/src/Core/Banshee.Core/Banshee.Kernel/Scheduler.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Threading;
 using System.Collections.Generic;
@@ -45,24 +45,24 @@ namespace Banshee.Kernel
         private static bool disposed;
         private static IJob current_running_job;
         private static int suspend_count;
-        
+
         public static event JobEventHandler JobStarted;
         public static event JobEventHandler JobFinished;
         public static event JobEventHandler JobScheduled;
         public static event JobEventHandler JobUnscheduled;
-        
+
         public static void Schedule(IJob job)
         {
             Schedule(job, JobPriority.Normal);
         }
-        
+
         public static void Schedule(IJob job, JobPriority priority)
         {
             lock(this_mutex) {
                 if(IsDisposed()) {
                     return;
                 }
-                
+
                 heap.Push(job, (int)priority);
                 //Log.DebugFormat("Job scheduled ({0}, {1})", job, priority);
                 OnJobScheduled(job);
@@ -76,7 +76,7 @@ namespace Banshee.Kernel
                 if(IsDisposed()) {
                     return;
                 }
-                
+
                 if(heap.Remove(job)) {
                     Log.DebugFormat("Job unscheduled ({0}), job", job);
                     OnJobUnscheduled(job);
@@ -85,112 +85,112 @@ namespace Banshee.Kernel
                 }
             }
         }
-        
+
         public static void Unschedule(Type type)
         {
             lock(this_mutex) {
                 Queue<IJob> to_remove = new Queue<IJob>();
-                
+
                 foreach(IJob job in ScheduledJobs) {
                     Type job_type = job.GetType();
-                    
+
                     if((type.IsInterface && job_type.GetInterface(type.Name) != null) ||
                         job_type == type || job_type.IsSubclassOf(job_type)) {
                         to_remove.Enqueue(job);
                     }
                 }
-                
+
                 while(to_remove.Count > 0) {
                     Unschedule(to_remove.Dequeue());
                 }
             }
         }
-        
+
         public static void Suspend()
         {
             lock(this_mutex) {
                 Interlocked.Increment(ref suspend_count);
             }
         }
-        
+
         public static void Resume()
         {
             lock(this_mutex) {
                 Interlocked.Decrement(ref suspend_count);
             }
         }
-        
+
         public static bool IsScheduled(IJob job)
         {
             lock(this_mutex) {
                 if(IsDisposed()) {
                     return false;
                 }
-                
+
                 return heap.Contains(job);
             }
         }
-        
+
         public static bool IsScheduled(Type type)
         {
             lock(this_mutex) {
                 if(IsDisposed()) {
                     return false;
                 }
-                
+
                 foreach(IJob job in heap) {
                     if(job.GetType() == type) {
                         return true;
                     }
                 }
-                
+
                 return false;
             }
         }
-        
+
         public static bool IsInstanceCriticalJobScheduled {
             get {
                 lock(this_mutex) {
                     if(IsDisposed()) {
                         return false;
                     }
-                    
+
                     foreach(IJob job in heap) {
                         if(job is IInstanceCriticalJob) {
                             return true;
                         }
                     }
-                    
+
                     return false;
                 }
             }
         }
-        
+
         public static IEnumerable<IJob> ScheduledJobs {
             get { lock(this_mutex) { return heap; } }
         }
-       
+
         public static int ScheduledJobsCount {
             get { lock(this_mutex) { return heap.Count; } }
         }
-        
+
         public static void Dispose()
         {
             lock(this_mutex) {
                 disposed = true;
             }
         }
-        
+
         private static bool IsDisposed()
         {
             if(disposed) {
                 //Log.Debug("Job not unscheduled; disposing scheduler");
                 return true;
             }
-            
+
             return false;
         }
-        
+
         private static void CheckRun()
         {
             if(heap.Count <= 0) {
@@ -201,25 +201,25 @@ namespace Banshee.Kernel
                 job_thread.Priority = ThreadPriority.BelowNormal;
                 job_thread.IsBackground = true;
                 job_thread.Start();
-            }   
+            }
         }
-        
+
         private static void ProcessJobThread()
         {
             while(true) {
                 current_running_job = null;
-                
+
                 if(suspend_count > 0) {
                     Thread.Sleep(10);
                     continue;
                 }
-                    
+
                 lock(this_mutex) {
                     if(disposed) {
                         job_thread = null;
                         return;
                     }
-                
+
                     try {
                         current_running_job = heap.Pop();
                     } catch(InvalidOperationException) {
@@ -227,7 +227,7 @@ namespace Banshee.Kernel
                         return;
                     }
                 }
-                
+
                 try {
                     OnJobStarted(current_running_job);
                     current_running_job.Run();
@@ -237,11 +237,11 @@ namespace Banshee.Kernel
                 }
             }
         }
-        
+
         public static IJob CurrentJob {
             get { return current_running_job; }
         }
-        
+
         private static void OnJobStarted(IJob job)
         {
             JobEventHandler handler = JobStarted;
@@ -249,7 +249,7 @@ namespace Banshee.Kernel
                 handler(job);
             }
         }
-        
+
         private static void OnJobFinished(IJob job)
         {
             JobEventHandler handler = JobFinished;
@@ -257,7 +257,7 @@ namespace Banshee.Kernel
                 handler(job);
             }
         }
-        
+
         private static void OnJobScheduled(IJob job)
         {
             JobEventHandler handler = JobScheduled;
@@ -265,7 +265,7 @@ namespace Banshee.Kernel
                 handler(job);
             }
         }
-        
+
         private static void OnJobUnscheduled(IJob job)
         {
             JobEventHandler handler = JobUnscheduled;
diff --git a/src/Core/Banshee.Core/Banshee.Streaming/CommonTags.cs b/src/Core/Banshee.Core/Banshee.Streaming/CommonTags.cs
index 27525db..d896849 100644
--- a/src/Core/Banshee.Core/Banshee.Streaming/CommonTags.cs
+++ b/src/Core/Banshee.Core/Banshee.Streaming/CommonTags.cs
@@ -30,7 +30,7 @@ using System;
 
 namespace Banshee.Streaming
 {
-    public sealed class CommonTags 
+    public sealed class CommonTags
     {
         public const string Title             = "title";
         public const string TitleSortName     = "title-sortname";
@@ -74,13 +74,13 @@ namespace Banshee.Streaming
         public const string AlbumGain         = "replaygain-album-gain";
         public const string AlbumPeak         = "replaygain-album-peak";
         public const string StreamType        = "stream-type";
-        public const string AlbumCoverId      = "album-cover-id"; 
+        public const string AlbumCoverId      = "album-cover-id";
         public const string MoreInfoUri       = "more-info-uri";
         public const string MusicBrainzTrackId = "musicbrainz-trackid";
         public const string MusicBrainzArtistId = "musicbrainz-artistid";
         public const string MusicBrainzAlbumId = "musicbrainz-albumid";
         public const string MusicBrainzDiscId = "musicbrainz-discid";
-        
+
         // Deprecated by MB, replaced by ArtistSortName. Kept for compatibility only.
         public const string MusicBrainzSortName = "musicbrainz-sortname";
     }
diff --git a/src/Core/Banshee.Core/Banshee.Streaming/StreamPlaybackError.cs b/src/Core/Banshee.Core/Banshee.Streaming/StreamPlaybackError.cs
index 38a7696..dc43fad 100644
--- a/src/Core/Banshee.Core/Banshee.Streaming/StreamPlaybackError.cs
+++ b/src/Core/Banshee.Core/Banshee.Streaming/StreamPlaybackError.cs
@@ -1,4 +1,4 @@
-// 
+//
 // StreamPlaybackError.cs
 //
 // Author:
@@ -28,7 +28,7 @@
 
 namespace Banshee.Streaming
 {
-    public enum StreamPlaybackError 
+    public enum StreamPlaybackError
     {
         None,
         ResourceNotFound,
diff --git a/src/Core/Banshee.Core/Banshee.Streaming/StreamTag.cs b/src/Core/Banshee.Core/Banshee.Streaming/StreamTag.cs
index 682e3da..e6befb7 100644
--- a/src/Core/Banshee.Core/Banshee.Streaming/StreamTag.cs
+++ b/src/Core/Banshee.Core/Banshee.Streaming/StreamTag.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 
 namespace Banshee.Streaming
@@ -33,10 +33,10 @@ namespace Banshee.Streaming
     public struct StreamTag
     {
         public static readonly StreamTag Zero;
-  
+
         public string Name;
         public object Value;
-        
+
         public override string ToString()
         {
             return String.Format("{0} = {1}", Name, Value);
diff --git a/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs b/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
index 17fd40d..1260560 100644
--- a/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
+++ b/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
@@ -41,14 +41,14 @@ namespace Banshee.Streaming
         // we want to make sure are recognized as videos
         private static readonly ExtensionSet VideoExtensions = new ExtensionSet (
             "avi", "divx", "dv", "f4p", "f4v", "flv", "m4v", "mkv", "mov", "ogv", "qt", "ts");
-        
+
         public static TagLib.File ProcessUri (SafeUri uri)
         {
             try {
-                TagLib.File file = Banshee.IO.DemuxVfs.OpenFile (uri.IsLocalPath ? uri.LocalPath : uri.AbsoluteUri, 
+                TagLib.File file = Banshee.IO.DemuxVfs.OpenFile (uri.IsLocalPath ? uri.LocalPath : uri.AbsoluteUri,
                     null, TagLib.ReadStyle.Average);
-    
-                if ((file.Properties.MediaTypes & TagLib.MediaTypes.Audio) == 0 && 
+
+                if ((file.Properties.MediaTypes & TagLib.MediaTypes.Audio) == 0 &&
                     (file.Properties.MediaTypes & TagLib.MediaTypes.Video) == 0) {
                     throw new TagLib.UnsupportedFormatException ("File does not contain video or audio");
                 }
@@ -63,10 +63,10 @@ namespace Banshee.Streaming
         {
             return Choose (priority, fallback, false);
         }
-    
+
         private static string Choose (string priority, string fallback, bool flip)
         {
-            return flip 
+            return flip
                 ? IsNullOrEmpty (fallback) ? priority : fallback
                 : IsNullOrEmpty (priority) ? fallback : priority;
         }
@@ -77,31 +77,31 @@ namespace Banshee.Streaming
         }
 
         #pragma warning disable 0169
-        
+
         private static int Choose (int priority, int fallback)
         {
             return Choose (priority, fallback, false);
         }
-        
+
         #pragma warning restore 0169
-        
+
         private static int Choose (int priority, int fallback, bool flip)
         {
-            return flip 
+            return flip
                 ? (fallback <= 0 ? priority : fallback)
                 : (priority <= 0 ? fallback : priority);
         }
-        
+
         private static void FindTrackMediaAttributes (TrackInfo track, TagLib.File file)
         {
             if ((file.Properties.MediaTypes & TagLib.MediaTypes.Audio) != 0) {
                 track.MediaAttributes |= TrackMediaAttributes.AudioStream;
             }
-            
+
             if ((file.Properties.MediaTypes & TagLib.MediaTypes.Video) != 0) {
                 track.MediaAttributes |= TrackMediaAttributes.VideoStream;
             }
-            
+
             if (file.Tag.FirstGenre == "Podcast" || file.Tag.Album == "Podcast") {
                 track.MediaAttributes |= TrackMediaAttributes.Podcast;
             }
@@ -126,7 +126,7 @@ namespace Banshee.Streaming
                 track.TrackTitle = uri.AbsoluteUri;
             }
         }
-        
+
         public static void TrackInfoMerge (TrackInfo track, TagLib.File file)
         {
             TrackInfoMerge (track, file, false);
@@ -144,9 +144,9 @@ namespace Banshee.Streaming
                 track.MimeType = file.MimeType;
                 track.Duration = file.Properties.Duration;
                 track.BitRate  = file.Properties.AudioBitrate;
-                
+
                 FindTrackMediaAttributes (track, file);
-    
+
                 track.ArtistName = Choose (file.Tag.JoinedPerformers, track.ArtistName, preferTrackInfo);
                 track.ArtistNameSort = Choose (file.Tag.JoinedPerformersSort, track.ArtistNameSort, preferTrackInfo);
                 track.AlbumTitle = Choose (file.Tag.Album, track.AlbumTitle, preferTrackInfo);
@@ -154,7 +154,7 @@ namespace Banshee.Streaming
                 track.AlbumArtist = Choose (file.Tag.FirstAlbumArtist, track.AlbumArtist, preferTrackInfo);
                 track.AlbumArtistSort = Choose (file.Tag.FirstAlbumArtistSort, track.AlbumArtistSort, preferTrackInfo);
                 track.IsCompilation = IsCompilation (file);
-                
+
                 track.TrackTitle = Choose (file.Tag.Title, track.TrackTitle, preferTrackInfo);
                 track.TrackTitleSort = Choose (file.Tag.TitleSort, track.TrackTitleSort, preferTrackInfo);
                 track.Genre = Choose (file.Tag.FirstGenre, track.Genre, preferTrackInfo);
@@ -163,7 +163,7 @@ namespace Banshee.Streaming
                 track.Grouping = Choose (file.Tag.Grouping, track.Grouping, preferTrackInfo);
                 track.Copyright = Choose (file.Tag.Copyright, track.Copyright, preferTrackInfo);
                 track.Comment = Choose (file.Tag.Comment, track.Comment, preferTrackInfo);
-    
+
                 track.TrackNumber = Choose ((int)file.Tag.Track, track.TrackNumber, preferTrackInfo);
                 track.TrackCount = Choose ((int)file.Tag.TrackCount, track.TrackCount, preferTrackInfo);
                 track.DiscNumber = Choose ((int)file.Tag.Disc, track.DiscNumber, preferTrackInfo);
@@ -189,12 +189,12 @@ namespace Banshee.Streaming
                     }
                 } catch {}
             }
-            
+
             // TODO look for track number in the file name if not set?
             // TODO could also pull artist/album from folders _iff_ files two levels deep in the MusicLibrary folder
             // TODO these ideas could also be done in an extension that collects such hacks
         }
-            
+
         private static bool IsCompilation (TagLib.File file)
         {
             try {
@@ -208,7 +208,7 @@ namespace Banshee.Streaming
                 if (apple_tag != null && apple_tag.IsCompilation)
                     return true;
             } catch {}
-            
+
             // FIXME the FirstAlbumArtist != FirstPerformer check might return true for half the
             // tracks on a compilation album, but false for some
             // TODO checked for 'Soundtrack' (and translated) in the title?
@@ -247,13 +247,13 @@ namespace Banshee.Streaming
                 Hyena.Log.DebugFormat ("Avoiding 100% cpu bug with taglib# by not writing metadata to video file {0}", track);
                 return false;
             }
-        
+
             // Note: this should be kept in sync with the metadata read in StreamTagger.cs
             TagLib.File file = ProcessUri (track.Uri);
             if (file == null) {
                 return false;
             }
-            
+
             file.Tag.Performers = new string [] { track.ArtistName };
             file.Tag.PerformersSort = new string [] { track.ArtistNameSort };
             file.Tag.Album = track.AlbumTitle;
@@ -277,7 +277,7 @@ namespace Banshee.Streaming
             file.Tag.DiscCount = (uint)track.DiscCount;
             file.Tag.Year = (uint)track.Year;
             file.Tag.BeatsPerMinute = (uint)track.Bpm;
-            
+
             SaveIsCompilation (file, track.IsCompilation);
             file.Save ();
 
@@ -286,7 +286,7 @@ namespace Banshee.Streaming
             track.LastSyncedStamp = DateTime.Now;
             return true;
         }
-    
+
         public static void TrackInfoMerge (TrackInfo track, StreamTag tag)
         {
             try {
@@ -303,7 +303,7 @@ namespace Banshee.Streaming
                         string title = Choose ((string)tag.Value, track.TrackTitle);
 
                         // Try our best to figure out common patterns in poor radio metadata.
-                        // Often only one tag is sent on track changes inside the stream, 
+                        // Often only one tag is sent on track changes inside the stream,
                         // which is title, and usually contains artist and track title, separated
                         // with a " - " string.
                         if (track.IsLive && title.Contains (" - ")) {
@@ -375,7 +375,7 @@ namespace Banshee.Streaming
                     case CommonTags.MoreInfoUri:
                         track.MoreInfoUri = (SafeUri)tag.Value;
                         break;
-                    /* No year tag in GST it seems 
+                    /* No year tag in GST it seems
                     case CommonTags.Year:
                         track.Year = (uint)tag.Value;
                         break;*/
diff --git a/src/Core/Banshee.Services/Banshee.Base/ThreadAssist.cs b/src/Core/Banshee.Services/Banshee.Base/ThreadAssist.cs
index 44220ae..9344230 100644
--- a/src/Core/Banshee.Services/Banshee.Base/ThreadAssist.cs
+++ b/src/Core/Banshee.Services/Banshee.Base/ThreadAssist.cs
@@ -38,20 +38,20 @@ namespace Banshee.Base
         public static Thread MainThread {
             get { return main_thread; }
         }
-        
+
         public static void InitializeMainThread ()
         {
             main_thread = Thread.CurrentThread;
             main_thread.Name = "Main Thread";
         }
-        
+
         public static bool InMainThread {
             get {
                 if (main_thread == null) {
                     throw new ApplicationException ("ThreadAssist.InitializeMainThread must be called first");
                 }
- 
-                return main_thread.Equals (Thread.CurrentThread); 
+
+                return main_thread.Equals (Thread.CurrentThread);
             }
         }
 
@@ -61,14 +61,14 @@ namespace Banshee.Base
                 Hyena.Log.Warning ("In GUI thread, will probably block it", System.Environment.StackTrace);
             }
         }
-        
+
         public static void AssertInMainThread ()
         {
             if (ApplicationContext.Debugging && !InMainThread) {
                 Hyena.Log.Warning ("Not in main thread!", System.Environment.StackTrace);
             }
         }
-        
+
         public static void ProxyToMain (InvokeHandler handler)
         {
             if (!InMainThread) {
@@ -86,7 +86,7 @@ namespace Banshee.Base
                 threadedMethod ();
             }
         }
-        
+
         public static Thread Spawn (ThreadStart threadedMethod, bool autoStart)
         {
             Thread thread = new Thread (threadedMethod);
@@ -97,7 +97,7 @@ namespace Banshee.Base
             }
             return thread;
         }
-        
+
         public static Thread Spawn (ThreadStart threadedMethod)
         {
             return Spawn (threadedMethod, true);
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs
index cb6351f..e63b02e 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/CachedList.cs
@@ -54,7 +54,7 @@ namespace Banshee.Collection.Database
         }
 
         private BansheeModelCache<T> cache;
-        
+
         public static CachedList<DatabaseTrackInfo> CreateFromSourceModel (DatabaseTrackListModel model)
         {
             CachedList<DatabaseTrackInfo> list = new CachedList<DatabaseTrackInfo> (DatabaseTrackInfo.Provider);
@@ -63,16 +63,16 @@ namespace Banshee.Collection.Database
                 INSERT INTO CoreCache (ModelID, ItemID)
                     SELECT ?, CoreTracks.TrackID {0}", model.UnfilteredQuery
             ));
-            
+
             lock (model) {
                 ServiceManager.DbConnection.Execute (model_cache_command, list.CacheId);
             }
 
             list.cache.UpdateAggregates ();
 
-            return list;  
+            return list;
         }
-        
+
         public static CachedList<DatabaseTrackInfo> CreateFromModel (DatabaseTrackListModel model)
         {
             Selection selection = new Selection ();
@@ -80,7 +80,7 @@ namespace Banshee.Collection.Database
             selection.SelectAll ();
             return CreateFromModelAndSelection (model, selection);
         }
-        
+
         public static CachedList<DatabaseTrackInfo> CreateFromModelSelection (DatabaseTrackListModel model)
         {
             return CreateFromModelAndSelection (model, model.Selection);
@@ -116,7 +116,7 @@ namespace Banshee.Collection.Database
         {
             ServiceManager.DbConnection.Execute ("DELETE FROM CoreCache WHERE ModelId = ?", CacheId);
         }
-        
+
         public void Remove (IEnumerable<T> items)
         {
             lock (cache) {
@@ -126,19 +126,19 @@ namespace Banshee.Collection.Database
                     if (!first) {
                         builder.Append (',');
                     }
-                    
+
                     builder.Append (item.CacheEntryId);
                     first = false;
                 }
-                
+
                 ServiceManager.DbConnection.Execute (String.Format (
-                    "DELETE FROM CoreCache WHERE ModelId = {0} AND ItemId IN ({1})", 
+                    "DELETE FROM CoreCache WHERE ModelId = {0} AND ItemId IN ({1})",
                     CacheId, builder));
-                    
+
                 cache.UpdateAggregates ();
             }
         }
-        
+
         public T this[int index] {
             get { return cache.GetValue (index); }
         }
@@ -157,7 +157,7 @@ namespace Banshee.Collection.Database
                 yield return cache.GetValue (i);
             }
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumInfo.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumInfo.cs
index 1cfe0ea..d6db36d 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumInfo.cs
@@ -64,7 +64,7 @@ namespace Banshee.Collection.Database
         private static int last_artist_id;
         private static string last_title;
         private static DatabaseAlbumInfo last_album;
-        
+
         public static void Reset ()
         {
             last_artist_id = -1;
@@ -89,7 +89,7 @@ namespace Banshee.Collection.Database
             }
             return db.Query (default_select_command, artist_id, title);
         }
-        
+
         public static DatabaseAlbumInfo FindOrCreate (DatabaseArtistInfo artist, DatabaseAlbumInfo album)
         {
             if (album.Title == last_title && artist.DbId == last_artist_id && last_album != null) {
@@ -110,7 +110,7 @@ namespace Banshee.Collection.Database
                         last_album.ArtistName = artist.Name;
                         save = true;
                     }
-                    
+
                     // Ditto artist sort name
                     if (last_album.ArtistNameSort != artist.NameSort) {
                         last_album.ArtistNameSort = artist.NameSort;
@@ -140,7 +140,7 @@ namespace Banshee.Collection.Database
                     last_album = album;
                 }
             }
-            
+
             last_title = album.Title;
             last_artist_id = artist.DbId;
             return last_album;
@@ -184,19 +184,19 @@ namespace Banshee.Collection.Database
             get { return artist_id; }
             set { artist_id = value; }
         }
-        
+
         [DatabaseColumn("MusicBrainzID")]
         public override string MusicBrainzId {
             get { return base.MusicBrainzId; }
             set { base.MusicBrainzId = value; }
         }
-        
+
         [DatabaseColumn]
         public override DateTime ReleaseDate {
             get { return base.ReleaseDate; }
             set { base.ReleaseDate = value; }
         }
-        
+
         [DatabaseColumn]
         public override bool IsCompilation {
             get { return base.IsCompilation; }
@@ -208,13 +208,13 @@ namespace Banshee.Collection.Database
             get { return base.Title; }
             set { base.Title = value; }
         }
-        
+
         [DatabaseColumn]
         public override string TitleSort {
             get { return base.TitleSort; }
             set { base.TitleSort = value; }
         }
-        
+
         [DatabaseColumn(Select = false)]
         internal byte[] TitleSortKey {
             get { return Hyena.StringUtil.SortKey (TitleSort ?? DisplayTitle); }
@@ -241,7 +241,7 @@ namespace Banshee.Collection.Database
         internal byte[] ArtistNameSortKey {
             get { return Hyena.StringUtil.SortKey (ArtistNameSort ?? DisplayArtistName); }
         }
-        
+
         [DatabaseColumn(Select = false)]
         internal string ArtistNameLowered {
             get { return Hyena.StringUtil.SearchKey (DisplayArtistName); }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs
index 76c32b9..b409d2d 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs
@@ -42,7 +42,7 @@ namespace Banshee.Collection.Database
 {
     public class DatabaseAlbumListModel : DatabaseFilterListModel<DatabaseAlbumInfo, AlbumInfo>
     {
-        public DatabaseAlbumListModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, BansheeDbConnection connection, string uuid) 
+        public DatabaseAlbumListModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, BansheeDbConnection connection, string uuid)
             : base (Banshee.Query.BansheeQuery.AlbumField.Name, Banshee.Query.BansheeQuery.AlbumField.Label,
                     source, trackModel, connection, DatabaseAlbumInfo.Provider, new AlbumInfo (null), uuid)
         {
@@ -53,16 +53,16 @@ namespace Banshee.Collection.Database
                                   CoreCache.ItemId = {2} {3})
                     ORDER BY CoreAlbums.TitleSortKey, CoreAlbums.ArtistNameSortKey";
         }
-        
+
         public override string FilterColumn {
             get { return "CoreTracks.AlbumID"; }
         }
-        
+
         protected override string ItemToFilterValue (object item)
         {
             return (item is DatabaseAlbumInfo) ? (item as DatabaseAlbumInfo).DbId.ToString () : null;
         }
-        
+
         public override void UpdateSelectAllItem (long count)
         {
             select_all_item.Title = String.Format (Catalog.GetString ("All Albums ({0})"), count);
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistInfo.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistInfo.cs
index 6a63e63..e3887ab 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistInfo.cs
@@ -60,7 +60,7 @@ namespace Banshee.Collection.Database
             provider.Select, provider.From,
             (String.IsNullOrEmpty (provider.Where) ? "1=1" : provider.Where)
         ));
-        
+
         private static string last_artist_name = null;
         private static DatabaseArtistInfo last_artist = null;
 
@@ -69,7 +69,7 @@ namespace Banshee.Collection.Database
             last_artist_name = null;
             last_artist = null;
         }
-        
+
         public static DatabaseArtistInfo FindOrCreate (string artistName, string artistNameSort)
         {
             DatabaseArtistInfo artist = new DatabaseArtistInfo ();
@@ -77,7 +77,7 @@ namespace Banshee.Collection.Database
             artist.NameSort = artistNameSort;
             return FindOrCreate (artist);
         }
-        
+
         private static IDataReader FindExistingArtists (string name)
         {
             HyenaSqliteConnection db = ServiceManager.DbConnection;
@@ -86,7 +86,7 @@ namespace Banshee.Collection.Database
             }
             return db.Query (default_select_command, name);
         }
-        
+
         public static DatabaseArtistInfo FindOrCreate (DatabaseArtistInfo artist)
         {
             if (artist.Name == last_artist_name && last_artist != null) {
@@ -96,7 +96,7 @@ namespace Banshee.Collection.Database
             if (String.IsNullOrEmpty (artist.Name) || artist.Name.Trim () == String.Empty) {
                 artist.Name = null;
             }
-            
+
             using (IDataReader reader = FindExistingArtists (artist.Name)) {
                 if (reader.Read ()) {
                     last_artist = provider.Load (reader);
@@ -109,7 +109,7 @@ namespace Banshee.Collection.Database
                     last_artist = artist;
                 }
             }
-            
+
             last_artist_name = artist.Name;
             return last_artist;
         }
@@ -126,7 +126,7 @@ namespace Banshee.Collection.Database
             }
             return artist;
         }
-        
+
         public DatabaseArtistInfo () : base (null, null)
         {
         }
@@ -163,13 +163,13 @@ namespace Banshee.Collection.Database
         internal byte[] NameSortKey {
             get { return Hyena.StringUtil.SortKey (NameSort ?? DisplayName); }
         }
-        
+
         [DatabaseColumn("MusicBrainzID")]
         public override string MusicBrainzId {
             get { return base.MusicBrainzId; }
             set { base.MusicBrainzId = value; }
         }
-        
+
         public override string ToString ()
         {
             return String.Format ("DatabaseArtistInfo<DbId: {0}, Name: {1}>", DbId, Name);
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs
index 697f28c..602453a 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs
@@ -41,8 +41,8 @@ namespace Banshee.Collection.Database
 {
     public class DatabaseArtistListModel : DatabaseFilterListModel<DatabaseArtistInfo, ArtistInfo>
     {
-        public DatabaseArtistListModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, BansheeDbConnection connection, string uuid) 
-            : base (Banshee.Query.BansheeQuery.ArtistField.Name, Banshee.Query.BansheeQuery.ArtistField.Label, 
+        public DatabaseArtistListModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, BansheeDbConnection connection, string uuid)
+            : base (Banshee.Query.BansheeQuery.ArtistField.Name, Banshee.Query.BansheeQuery.ArtistField.Label,
                     source, trackModel, connection, DatabaseArtistInfo.Provider, new ArtistInfo (null, null), uuid)
         {
             ReloadFragmentFormat = @"
@@ -52,16 +52,16 @@ namespace Banshee.Collection.Database
                               CoreCache.ItemID = {2} {3})
                     ORDER BY NameSortKey";
         }
-        
+
         public override string FilterColumn {
             get { return "CoreTracks.ArtistID"; }
         }
-        
+
         protected override string ItemToFilterValue (object item)
         {
             return (item is DatabaseArtistInfo) ? (item as DatabaseArtistInfo).DbId.ToString () : null;
         }
-        
+
         public override void UpdateSelectAllItem (long count)
         {
             select_all_item.Name = String.Format (Catalog.GetString ("All Artists ({0})"), count);
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs
index 39342ee..f49658f 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs
@@ -40,13 +40,13 @@ using Banshee.Collection;
 using Banshee.Database;
 
 namespace Banshee.Collection.Database
-{   
+{
     public abstract class DatabaseFilterListModel<T, U> : FilterListModel<U>, ICacheableDatabaseModel
         where T : U, new () where U : ICacheableItem, new()
     {
         private readonly BansheeModelCache<T> cache;
         private readonly Banshee.Sources.DatabaseSource source;
-        
+
         private long count;
         private string reload_fragment;
 
@@ -55,28 +55,28 @@ namespace Banshee.Collection.Database
             get { return reload_fragment_format; }
             set { reload_fragment_format = value; }
         }
-        
+
         protected readonly U select_all_item;
         private HyenaSqliteConnection connection;
 
-        public DatabaseFilterListModel (string name, string label, Banshee.Sources.DatabaseSource source, 
-                                        DatabaseTrackListModel trackModel, HyenaSqliteConnection connection, SqliteModelProvider<T> provider, U selectAllItem, string uuid) 
+        public DatabaseFilterListModel (string name, string label, Banshee.Sources.DatabaseSource source,
+                                        DatabaseTrackListModel trackModel, HyenaSqliteConnection connection, SqliteModelProvider<T> provider, U selectAllItem, string uuid)
             : base (trackModel)
         {
             this.source = source;
             FilterName = name;
             FilterLabel = label;
             select_all_item = selectAllItem;
-            
+
             this.connection = connection;
             cache = new BansheeModelCache <T> (connection, uuid, this, provider);
             cache.HasSelectAllItem = true;
         }
-        
+
         public override void Clear ()
         {
         }
-        
+
         protected virtual void GenerateReloadFragment ()
         {
             ReloadFragment = String.Format (
@@ -116,16 +116,16 @@ namespace Banshee.Collection.Database
                 }
             }
         }
-        
+
         public virtual bool CachesValues { get { return false; } }
-        
+
         protected abstract string ItemToFilterValue (object o);
 
         // Ick, duplicated from DatabaseTrackListModel
         public override string GetSqlFilter ()
         {
             string filter = null;
-            
+
             // If the only item is the "All" item, then we shouldn't allow any matches, so insert an always-false condition
             if (Count == 1) {
                 return "0=1";
@@ -140,10 +140,10 @@ namespace Banshee.Collection.Database
                     delegate (string new_filter) { filter = new_filter; }
                 );
             }
-            
+
             return filter;
         }
-        
+
         public abstract void UpdateSelectAllItem (long count);
 
         public override void Reload (bool notify)
@@ -160,13 +160,13 @@ namespace Banshee.Collection.Database
 
                 count = cache.Count + 1;
             }
-            
+
             UpdateSelectAllItem (count - 1);
 
             if (notify)
                 OnReloaded ();
         }
-        
+
         public override U this[int index] {
             get {
                 if (index == 0)
@@ -178,7 +178,7 @@ namespace Banshee.Collection.Database
             }
         }
 
-        public override int Count { 
+        public override int Count {
             get { return (int) count; }
         }
 
@@ -201,7 +201,7 @@ namespace Banshee.Collection.Database
                 }
             }
         }
-        
+
         public IEnumerable<object> GetSelectedObjects ()
         {
             foreach (object o in SelectedItems) {
@@ -218,7 +218,7 @@ namespace Banshee.Collection.Database
                 OnReloaded ();
             }
         }
-        
+
         public abstract string FilterColumn { get; }
 
         public virtual string JoinTable { get { return null; } }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs
index 9d6f48d..5b6d5c7 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs
@@ -1,4 +1,4 @@
-// 
+//
 // DatabaseImportManager.cs
 //
 // Authors:
@@ -51,19 +51,19 @@ namespace Banshee.Collection.Database
         // in this list do not mean they are actually supported - this list is just
         // used to see if we should allow the file to be processed by TagLib. The
         // point is to rule out, at the path level, files that we won't support.
-        
+
         public static readonly Banshee.IO.ExtensionSet WhiteListFileExtensions = new Banshee.IO.ExtensionSet (
-            "3g2",  "3gp",  "3gp2", "3gpp", "aac",  "ac3",  "aif",  "aifc", 
-            "aiff", "al",   "alaw", "ape",  "asf",  "asx",  "au",   "avi", 
-            "cda",  "cdr",  "divx", "dv",   "flac", "flv",  "gvi",  "gvp", 
-            "m1v",  "m21",  "m2p",  "m2v",  "m4a",  "m4b",  "m4e",  "m4p",  
+            "3g2",  "3gp",  "3gp2", "3gpp", "aac",  "ac3",  "aif",  "aifc",
+            "aiff", "al",   "alaw", "ape",  "asf",  "asx",  "au",   "avi",
+            "cda",  "cdr",  "divx", "dv",   "flac", "flv",  "gvi",  "gvp",
+            "m1v",  "m21",  "m2p",  "m2v",  "m4a",  "m4b",  "m4e",  "m4p",
             "m4u",  "m4v",  "mp+",  "mid",  "midi", "mjp",  "mkv",  "moov",
             "mov",  "movie","mp1",  "mp2",  "mp21", "mp3",  "mp4",  "mpa",
-            "mpc",  "mpe",  "mpeg", "mpg",  "mpga", "mpp",  "mpu",  "mpv",  
+            "mpc",  "mpe",  "mpeg", "mpg",  "mpga", "mpp",  "mpu",  "mpv",
             "mpv2", "oga",  "ogg",  "ogv",  "ogm",  "omf",  "qt",   "ra",
-            "ram",  "raw",  "rm",   "rmvb", "rts",  "smil", "swf",  "tivo", 
-            "u",    "vfw",  "vob",  "wav",  "wave", "wax",  "wm",   "wma",  
-            "wmd",  "wmv",  "wmx",  "wv",   "wvc",  "wvx",  "yuv",  "f4v",  
+            "ram",  "raw",  "rm",   "rmvb", "rts",  "smil", "swf",  "tivo",
+            "u",    "vfw",  "vob",  "wav",  "wave", "wax",  "wm",   "wma",
+            "wmd",  "wmv",  "wmx",  "wv",   "wvc",  "wvx",  "yuv",  "f4v",
             "f4a",  "f4b",  "669",  "it",   "med",  "mod",  "mol",  "mtm",
             "nst",  "s3m",  "stm",  "ult",  "wow",  "xm",   "xnm",  "spx",
             "ts"
@@ -82,15 +82,15 @@ namespace Banshee.Collection.Database
         private int [] primary_source_ids;
         private string base_directory;
         private bool force_copy;
-        
+
         public event DatabaseImportResultHandler ImportResult;
-    
+
         public DatabaseImportManager (PrimarySource psource) :
             this (psource.ErrorSource, delegate { return psource; }, new int [] {psource.DbId}, psource.BaseDirectory)
         {
         }
 
-        public DatabaseImportManager (ErrorSource error_source, TrackPrimarySourceChooser chooser, 
+        public DatabaseImportManager (ErrorSource error_source, TrackPrimarySourceChooser chooser,
             int [] primarySourceIds, string baseDirectory) : this (chooser)
         {
             this.error_source = error_source;
@@ -117,7 +117,7 @@ namespace Banshee.Collection.Database
             get { return base_directory; }
             set { base_directory = value; }
         }
-        
+
         protected virtual bool ForceCopy {
             get { return force_copy; }
             set { force_copy = value; }
@@ -128,12 +128,12 @@ namespace Banshee.Collection.Database
             try {
                 DatabaseTrackInfo track = ImportTrack (path);
                 if (track != null && track.TrackId > 0) {
-                    UpdateProgress (String.Format ("{0} - {1}", 
+                    UpdateProgress (String.Format ("{0} - {1}",
                         track.DisplayArtistName, track.DisplayTrackTitle));
                 } else {
                     UpdateProgress (null);
                 }
-                
+
                 OnImportResult (track, path, null);
             } catch (Exception e) {
                 LogError (path, e);
@@ -141,7 +141,7 @@ namespace Banshee.Collection.Database
                 OnImportResult (null, path, e);
             }
         }
-        
+
         protected virtual void OnImportResult (DatabaseTrackInfo track, string path, Exception error)
         {
             DatabaseImportResultHandler handler = ImportResult;
@@ -149,7 +149,7 @@ namespace Banshee.Collection.Database
                 handler (this, new DatabaseImportResultArgs (track, path, error));
             }
         }
-        
+
         public DatabaseTrackInfo ImportTrack (string path)
         {
             return ImportTrack (new SafeUri (path));
@@ -176,7 +176,7 @@ namespace Banshee.Collection.Database
                 track = new DatabaseTrackInfo ();
                 track.Uri = uri;
                 StreamTagger.TrackInfoMerge (track, StreamTagger.ProcessUri (uri));
-                
+
                 track.PrimarySource = trackPrimarySourceChooser (track);
 
                 bool save_track = true;
@@ -195,7 +195,7 @@ namespace Banshee.Collection.Database
             }
 
             counts[track.PrimarySourceId] = counts.ContainsKey (track.PrimarySourceId) ? counts[track.PrimarySourceId] + 1 : 1;
-            
+
             // Reload every 20% or every 250 tracks, whatever is more (eg at most reload 5 times during an import)
             if (counts[track.PrimarySourceId] >= Math.Max (TotalCount/5, 250)) {
                 counts[track.PrimarySourceId] = 0;
@@ -219,7 +219,7 @@ namespace Banshee.Collection.Database
             ErrorSource.AddMessage (path, msg);
             Log.Error (path, msg, false);
         }
-        
+
         public void NotifyAllSources ()
         {
             foreach (int primary_source_id in counts.Keys) {
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportResultHandler.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportResultHandler.cs
index 740ea1c..c3d0a1f 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportResultHandler.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportResultHandler.cs
@@ -44,11 +44,11 @@ namespace Banshee.Collection.Database
             this.path = path;
             this.error = error;
         }
-                
+
         public string Path {
             get { return path; }
         }
-        
+
         public DatabaseTrackInfo Track {
             get { return track; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs
index b9ee544..d1b62a1 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs
@@ -43,21 +43,21 @@ namespace Banshee.Collection.Database
         private QueryField field;
         private string select_all_fmt;
 
-        public DatabaseQueryFilterModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, 
+        public DatabaseQueryFilterModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel,
             HyenaSqliteConnection connection, string select_all_fmt, string uuid, QueryField field, string filter_column)
             : base (field.Name, field.Label, source, trackModel, connection, QueryFilterInfo<T>.CreateProvider (filter_column, field), new QueryFilterInfo<T> (), String.Format ("{0}-{1}", uuid, field.Name))
         {
             this.field = field;
             this.select_all_fmt = select_all_fmt;
-            
+
             ReloadFragmentFormat = @"
                 FROM CoreTracks, CoreCache{0}
                     WHERE CoreCache.ModelID = {1} AND CoreCache.ItemID = {2} {3}
                     ORDER BY Value";
         }
-        
+
         public override bool CachesValues { get { return true; } }
-        
+
         public override string GetSqlFilter ()
         {
             if (Selection.AllSelected)
@@ -87,7 +87,7 @@ namespace Banshee.Collection.Database
                         //sql = field.ToSql (NullQueryValue.IsNullOrEmpty, NullQueryValue.Instance, true);
                         sql = field.ToSql (NullQueryValue.IsNullOrEmpty, NullQueryValue.Instance);
                     }
-                    
+
                     if (sql != null) {
                         if (first) {
                             first = false;
@@ -101,25 +101,25 @@ namespace Banshee.Collection.Database
             sb.Append (")");
             return first ? null : sb.ToString ();
         }
-        
+
         protected override string ItemToFilterValue (object o)
         {
             throw new NotImplementedException ();
         }
-        
+
         public override string FilterColumn {
             get { return String.Empty; }
         }
-        
+
         public override void UpdateSelectAllItem (long count)
         {
             select_all_item.Title = String.Format (select_all_fmt, count);
         }
     }
-    
+
     /*public class DatabaseNumericQueryFilterModel<T> : DatabaseQueryFilterModel<T>
     {
-        public DatabaseNumericQueryFilterModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, 
+        public DatabaseNumericQueryFilterModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel,
             BansheeDbConnection connection, SqliteModelProvider<T> provider, U selectAllItem, string uuid, QueryField field)
             : base (source, trackModel
     }*/
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
index 6af4aa6..cfdedff 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
@@ -62,7 +62,7 @@ namespace Banshee.Collection.Database
         }
 
         private bool artist_changed = false, album_changed = false;
-        
+
         public DatabaseTrackInfo () : base ()
         {
         }
@@ -76,7 +76,7 @@ namespace Banshee.Collection.Database
         {
             if (ProviderRefresh()) {
                 base.OnPlaybackFinished (percentCompleted);
-                Save (true, BansheeQuery.ScoreField, BansheeQuery.SkipCountField, BansheeQuery.LastSkippedField, 
+                Save (true, BansheeQuery.ScoreField, BansheeQuery.SkipCountField, BansheeQuery.LastSkippedField,
                     BansheeQuery.PlayCountField, BansheeQuery.LastPlayedField);
             }
         }
@@ -86,7 +86,7 @@ namespace Banshee.Collection.Database
             if (PrimarySource != null && PrimarySource.TrackEqualHandler != null) {
                 return PrimarySource.TrackEqualHandler (this, track);
             }
-            
+
             DatabaseTrackInfo db_track = track as DatabaseTrackInfo;
             if (db_track == null) {
                 return base.TrackEqual (track);
@@ -107,7 +107,7 @@ namespace Banshee.Collection.Database
         {
             return a != null && b != null && a.TrackId == b.TrackId;
         }
-        
+
         public DatabaseArtistInfo Artist {
             get { return DatabaseArtistInfo.FindOrCreate (ArtistName, ArtistNameSort); }
         }
@@ -140,17 +140,17 @@ namespace Banshee.Collection.Database
 
         public void Save (bool notify, params QueryField [] fields_changed)
         {
-            // If either the artist or album changed, 
+            // If either the artist or album changed,
             if (ArtistId == 0 || AlbumId == 0 || artist_changed == true || album_changed == true) {
                 DatabaseArtistInfo artist = Artist;
                 ArtistId = artist.DbId;
-           
+
                 DatabaseAlbumInfo album = Album;
                 AlbumId = album.DbId;
-                
+
                 // TODO get rid of unused artists/albums
             }
-            
+
             if (fields_changed.Length == 0 || !transient_fields.IsSupersetOf (fields_changed)) {
                 DateUpdated = DateTime.Now;
             }
@@ -170,7 +170,7 @@ namespace Banshee.Collection.Database
                 }
             }
         }
-        
+
         protected virtual void ProviderSave ()
         {
             Provider.Save (this);
@@ -180,12 +180,12 @@ namespace Banshee.Collection.Database
         {
             ProviderRefresh ();
         }
-        
+
         protected virtual bool ProviderRefresh ()
         {
             return Provider.Refresh (this);
         }
-        
+
         private int track_id;
         [DatabaseColumn ("TrackID", Constraints = DatabaseColumnConstraints.PrimaryKey)]
         public int TrackId {
@@ -211,7 +211,7 @@ namespace Banshee.Collection.Database
             get { return artist_id; }
             set { artist_id = value; }
         }
-        
+
         private int album_id;
         [DatabaseColumn ("AlbumID")]
         public int AlbumId {
@@ -308,7 +308,7 @@ namespace Banshee.Collection.Database
                 album_changed = true;
             }
         }
-        
+
         [VirtualDatabaseColumn ("ArtistNameSort", "CoreAlbums", "AlbumID", "AlbumID")]
         protected string AlbumArtistSortField {
             get { return AlbumArtistSort; }
@@ -326,7 +326,7 @@ namespace Banshee.Collection.Database
                 album_changed = true;
             }
         }
-        
+
         [VirtualDatabaseColumn ("IsCompilation", "CoreAlbums", "AlbumID", "AlbumID")]
         protected bool IsCompilationField {
             get { return IsCompilation; }
@@ -340,28 +340,28 @@ namespace Banshee.Collection.Database
                 album_changed = true;
             }
         }
-        
+
         private static string CleanseString (string input, string old_val)
         {
             if (input == old_val)
                 return null;
-                    
+
             if (input != null)
                 input = input.Trim ();
-            
+
             if (input == old_val)
                 return null;
-            
+
             return input;
         }
-        
+
         private int tag_set_id;
         [DatabaseColumn]
         public int TagSetID {
             get { return tag_set_id; }
             set { tag_set_id = value; }
         }
-        
+
         [DatabaseColumn ("MusicBrainzID")]
         public override string MusicBrainzId {
             get { return base.MusicBrainzId; }
@@ -373,13 +373,13 @@ namespace Banshee.Collection.Database
             get { return Uri == null ? null : Uri.AbsoluteUri; }
             set { Uri = value == null ? null : new SafeUri (value); }
         }
-        
+
         [DatabaseColumn]
         public override string MimeType {
             get { return base.MimeType; }
             set { base.MimeType = value; }
         }
-        
+
         [DatabaseColumn]
         public override long FileSize {
             get { return base.FileSize; }
@@ -397,30 +397,30 @@ namespace Banshee.Collection.Database
             get { return base.LastSyncedStamp; }
             set { base.LastSyncedStamp = value; }
         }
-        
+
         [DatabaseColumn ("Attributes")]
         public override TrackMediaAttributes MediaAttributes {
             get { return base.MediaAttributes; }
             set { base.MediaAttributes = value; }
         }
-        
+
         [DatabaseColumn ("Title")]
         public override string TrackTitle {
             get { return base.TrackTitle; }
             set { base.TrackTitle = value; }
         }
-        
+
         [DatabaseColumn ("TitleSort")]
         public override string TrackTitleSort {
             get { return base.TrackTitleSort; }
             set { base.TrackTitleSort = value; }
         }
-        
+
         [DatabaseColumn("TitleSortKey", Select = false)]
         internal byte[] TrackTitleSortKey {
             get { return Hyena.StringUtil.SortKey (TrackTitleSort ?? DisplayTrackTitle); }
         }
-        
+
         [DatabaseColumn(Select = false)]
         internal string TitleLowered {
             get { return Hyena.StringUtil.SearchKey (DisplayTrackTitle); }
@@ -430,19 +430,19 @@ namespace Banshee.Collection.Database
         public override string MetadataHash {
             get { return base.MetadataHash; }
         }
-        
+
         [DatabaseColumn]
         public override int TrackNumber {
             get { return base.TrackNumber; }
             set { base.TrackNumber = value; }
         }
-        
+
         [DatabaseColumn]
         public override int TrackCount {
             get { return base.TrackCount; }
             set { base.TrackCount = value; }
         }
-        
+
         [DatabaseColumn ("Disc")]
         public override int DiscNumber {
             get { return base.DiscNumber; }
@@ -454,13 +454,13 @@ namespace Banshee.Collection.Database
             get { return base.DiscCount; }
             set { base.DiscCount = value; }
         }
-        
+
         [DatabaseColumn]
         public override TimeSpan Duration {
             get { return base.Duration; }
             set { base.Duration = value; }
         }
-        
+
         [DatabaseColumn]
         public override int Year {
             get { return base.Year; }
@@ -508,7 +508,7 @@ namespace Banshee.Collection.Database
             get { return base.Comment; }
             set { base.Comment = value; }
         }
-        
+
         [DatabaseColumn("BPM")]
         public override int Bpm {
             get { return base.Bpm; }
@@ -520,7 +520,7 @@ namespace Banshee.Collection.Database
             get { return base.BitRate; }
             set { base.BitRate = value; }
         }
-        
+
         [DatabaseColumn("Rating")]
         protected int rating;
         public override int Rating {
@@ -543,19 +543,19 @@ namespace Banshee.Collection.Database
                 }
             }
         }
-        
+
         [DatabaseColumn]
         public override int PlayCount {
             get { return base.PlayCount; }
             set { base.PlayCount = value; }
         }
-        
+
         [DatabaseColumn]
         public override int SkipCount {
             get { return base.SkipCount; }
             set { base.SkipCount = value; }
         }
-        
+
         private long external_id;
         [DatabaseColumn ("ExternalID")]
         public long ExternalId {
@@ -572,7 +572,7 @@ namespace Banshee.Collection.Database
                 return external_object;
             }
         }
-        
+
         [DatabaseColumn ("LastPlayedStamp")]
         public override DateTime LastPlayed {
             get { return base.LastPlayed; }
@@ -584,7 +584,7 @@ namespace Banshee.Collection.Database
             get { return base.LastSkipped; }
             set { base.LastSkipped = value; }
         }
-        
+
         [DatabaseColumn ("DateAddedStamp")]
         public override DateTime DateAdded {
             get { return base.DateAdded; }
@@ -597,7 +597,7 @@ namespace Banshee.Collection.Database
             get { return date_updated; }
             set { date_updated = value; }
         }
-        
+
         [DatabaseColumn ("LastStreamError")]
         protected StreamPlaybackError playback_error;
         public override StreamPlaybackError PlaybackError {
@@ -606,8 +606,8 @@ namespace Banshee.Collection.Database
                 if (playback_error == value) {
                     return;
                 }
-                
-                playback_error = value; 
+
+                playback_error = value;
             }
         }
 
@@ -620,7 +620,7 @@ namespace Banshee.Collection.Database
                 // Get out quick, no URI set yet.
                 return copy_success;
             }
-            
+
             bool in_library = old_uri.AbsolutePath.StartsWith (PrimarySource.BaseDirectoryWithSeparator);
 
             if (!in_library && (LibrarySchema.CopyOnImport.Get () || force_copy)) {
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
index afcf511..6ce2013 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
@@ -46,25 +46,25 @@ using Banshee.Database;
 using Banshee.PlaybackController;
 
 namespace Banshee.Collection.Database
-{       
-    public class DatabaseTrackListModel : TrackListModel, IExportableModel, 
+{
+    public class DatabaseTrackListModel : TrackListModel, IExportableModel,
         ICacheableDatabaseModel, IFilterable, ISortable, ICareAboutView
     {
         private readonly BansheeDbConnection connection;
         private IDatabaseTrackModelProvider provider;
         protected IDatabaseTrackModelCache cache;
         private Banshee.Sources.DatabaseSource source;
-        
+
         private long count;
 
         private long filtered_count;
         private TimeSpan filtered_duration;
         private long filtered_filesize, filesize;
-        
+
         private ISortableColumn sort_column;
         private string sort_query;
         private bool forced_sort_query;
-        
+
         private string reload_fragment;
         private string join_table, join_fragment, join_primary_key, join_column, condition, condition_from;
 
@@ -72,14 +72,14 @@ namespace Banshee.Collection.Database
         private string user_query;
 
         private int rows_in_view;
-        
+
         public DatabaseTrackListModel (BansheeDbConnection connection, IDatabaseTrackModelProvider provider, Banshee.Sources.DatabaseSource source)
         {
             this.connection = connection;
             this.provider = provider;
             this.source = source;
         }
-        
+
         protected HyenaSqliteConnection Connection {
             get { return connection; }
         }
@@ -95,7 +95,7 @@ namespace Banshee.Collection.Database
             cache.AggregatesUpdated += HandleCacheAggregatesUpdated;
             GenerateSortQueryPart ();
         }
-        
+
         private bool have_new_user_query = true;
         private void GenerateUserQueryFragment ()
         {
@@ -132,7 +132,7 @@ namespace Banshee.Collection.Database
         {
             SortQuery = (SortColumn == null || SortColumn.SortType == SortType.None)
                 ? (SortColumn != null && source is Banshee.Playlist.PlaylistSource)
-                    ? "CorePlaylistEntries.ViewOrder ASC, CorePlaylistEntries.EntryID ASC" 
+                    ? "CorePlaylistEntries.ViewOrder ASC, CorePlaylistEntries.EntryID ASC"
                     : BansheeQuery.GetSort ("Artist", true)
                 : BansheeQuery.GetSort (SortColumn.SortKey, SortColumn.SortType == SortType.Ascending);
         }
@@ -164,7 +164,7 @@ namespace Banshee.Collection.Database
             filtered_duration = TimeSpan.FromMilliseconds (reader.IsDBNull (1) ? 0 : Convert.ToInt64 (reader[1]));
             filtered_filesize = reader.IsDBNull (2) ? 0 : Convert.ToInt64 (reader[2]);
         }
-        
+
         public override void Clear ()
         {
             cache.Clear ();
@@ -214,7 +214,7 @@ namespace Banshee.Collection.Database
             HyenaSqliteCommand count_command = new HyenaSqliteCommand (String.Format (
                 "SELECT COUNT(*), SUM(CoreTracks.FileSize) {0}", UnfilteredQuery
             ));
-            
+
             using (HyenaDataReader reader = new HyenaDataReader (connection.Query (count_command))) {
                 count = reader.Get<long> (0);
                 filesize = reader.Get<long> (1);
@@ -258,12 +258,12 @@ namespace Banshee.Collection.Database
                     foreach (IFilterListModel model in reload_models) {
                         model.Reload (false);
                     }
-                    
+
                     bool have_filters = false;
                     foreach (IFilterListModel filter in source.CurrentFilters) {
                         have_filters |= !filter.Selection.AllSelected;
                     }
-                    
+
                     // Unless both artist/album selections are "all" (eg unfiltered), reload
                     // the track model again with the artist/album filters now in place.
                     if (have_filters) {
@@ -294,7 +294,7 @@ namespace Banshee.Collection.Database
         {
             StringBuilder qb = new StringBuilder ();
             qb.Append (UnfilteredQuery);
-            
+
             if (with_filters) {
                 foreach (IFilterListModel filter in source.CurrentFilters) {
                     string filter_sql = filter.GetSqlFilter ();
@@ -304,17 +304,17 @@ namespace Banshee.Collection.Database
                     }
                 }
             }
-            
+
             if (query_fragment != null) {
                 qb.Append (" AND ");
                 qb.Append (query_fragment);
             }
-            
+
             if (sort_query != null) {
                 qb.Append (" ORDER BY ");
                 qb.Append (sort_query);
             }
-            
+
             reload_fragment = qb.ToString ();
             cache.Reload ();
         }
@@ -370,11 +370,11 @@ namespace Banshee.Collection.Database
         public long FileSize {
             get { return filtered_filesize; }
         }
-        
+
         public long UnfilteredFileSize {
             get { return filesize; }
         }
-        
+
         public int UnfilteredCount {
             get { return (int) count; }
             set { count = value; }
@@ -382,17 +382,17 @@ namespace Banshee.Collection.Database
 
         public string UserQuery {
             get { return user_query; }
-            set { 
+            set {
                 lock (this) {
-                    user_query = value; 
+                    user_query = value;
                     have_new_user_query = true;
                 }
             }
         }
-        
+
         public string ForcedSortQuery {
             get { return forced_sort_query ? sort_query : null; }
-            set { 
+            set {
                 forced_sort_query = value != null;
                 sort_query = value;
                 if (cache != null) {
@@ -427,7 +427,7 @@ namespace Banshee.Collection.Database
         {
             AddCondition (null, part);
         }
-        
+
         public void AddCondition (string tables, string part)
         {
             if (!String.IsNullOrEmpty (part)) {
@@ -438,7 +438,7 @@ namespace Banshee.Collection.Database
                 }
             }
         }
-        
+
         public string Condition {
             get { return condition; }
         }
@@ -478,20 +478,20 @@ namespace Banshee.Collection.Database
             get { return (int) cache.CacheId; }
         }
 
-        public ISortableColumn SortColumn { 
+        public ISortableColumn SortColumn {
             get { return sort_column; }
         }
-                
+
         public virtual int RowsInView {
             protected get { return rows_in_view; }
             set { rows_in_view = value; }
         }
 
-        int IExportableModel.GetLength () 
+        int IExportableModel.GetLength ()
         {
             return Count;
         }
-        
+
         IDictionary<string, object> IExportableModel.GetMetadata (int index)
         {
             return this[index].GenerateExportable ();
@@ -533,7 +533,7 @@ namespace Banshee.Collection.Database
         public string ReloadFragment {
             get { return reload_fragment; }
         }
-        
+
         public bool CachesValues { get { return false; } }
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/FilterModelProvider.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/FilterModelProvider.cs
index ea8c83f..d663433 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/FilterModelProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/FilterModelProvider.cs
@@ -36,23 +36,23 @@ namespace Banshee.Collection.Database
     public class FilterModelProvider<T> : SqliteModelProvider<T> where T : new()
     {
         private string table_name;
-        
+
         public FilterModelProvider (HyenaSqliteConnection conn, string table_name, string pk_column, PropertyInfo pk_info, string value_column, PropertyInfo value_info) : base (conn)
         {
             this.table_name = table_name;
             PrimaryKey = pk_column;
-            
+
             DatabaseColumnAttribute pk_attr = new DatabaseColumnAttribute ();
             pk_attr.Constraints = DatabaseColumnConstraints.PrimaryKey;
             AddColumn (new DatabaseColumn (pk_info, pk_attr), true);
 
             AddColumn (new DatabaseColumn (value_info, new DatabaseColumnAttribute ()), true);
-            
+
             select = String.Format ("{0} as Value", value_column);
         }
-        
+
         public override string TableName { get { return table_name; } }
-        
+
         private string select;
         public override string Select {
             get { return select; }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/QueryFilterInfo.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/QueryFilterInfo.cs
index eeb2f60..7cac73d 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/QueryFilterInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/QueryFilterInfo.cs
@@ -46,10 +46,10 @@ namespace Banshee.Collection.Database
                 "TrackID", typeof(QueryFilterInfo<T>).GetMember ("DbId")[0] as PropertyInfo,
                 filter_column, typeof(QueryFilterInfo<T>).GetMember ("Value")[0] as PropertyInfo
             );
-                
+
             return provider;
         }
-        
+
         private long dbid;
         public long DbId {
             get { return dbid; }
@@ -61,15 +61,15 @@ namespace Banshee.Collection.Database
             get { return obj; }
             set { obj = value; }
         }
-        
+
         private string title;
         public string Title {
             get { return title ?? ToString (); }
             set { title = value; }
         }
-        
+
         public object ValueObject { get { return Value; } }
-        
+
         public override string ToString ()
         {
             return Value == null ? String.Empty : Value.ToString ();
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseAlbumInfoTests.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseAlbumInfoTests.cs
index 563fd7f..f22dbcc 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseAlbumInfoTests.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseAlbumInfoTests.cs
@@ -46,14 +46,14 @@ namespace Banshee.Collection.Database.Tests
             info.TitleSort = title_sort;
             Assert.AreEqual (expected, info.TitleSortKey);
         }
-        
+
         protected void AssertTitleLowered (string title, string expected)
         {
             DatabaseAlbumInfo info = new DatabaseAlbumInfo ();
             info.Title = title;
             Assert.AreEqual (expected, info.TitleLowered);
         }
-        
+
         protected void AssertArtistNameSort (string name, string name_sort, byte[] expected)
         {
             DatabaseAlbumInfo info = new DatabaseAlbumInfo ();
@@ -61,14 +61,14 @@ namespace Banshee.Collection.Database.Tests
             info.ArtistNameSort = name_sort;
             Assert.AreEqual (expected, info.ArtistNameSortKey);
         }
-        
+
         protected void AssertArtistNameLowered (string name, string expected)
         {
             DatabaseAlbumInfo info = new DatabaseAlbumInfo ();
             info.ArtistName = name;
             Assert.AreEqual (expected, info.ArtistNameLowered);
         }
-        
+
         [Test]
         public void TestWithoutTitleSortKey ()
         {
@@ -77,14 +77,14 @@ namespace Banshee.Collection.Database.Tests
             AssertTitleSort ("a", "",   new byte[] {14, 2, 1, 1, 1, 1, 0});
             AssertTitleSort ("A", null, new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestTitleSortKey ()
         {
             AssertTitleSort ("Title", "a", new byte[] {14, 2, 1, 1, 1, 1, 0});
             AssertTitleSort ("Title", "A", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestTitleLowered ()
         {
@@ -92,7 +92,7 @@ namespace Banshee.Collection.Database.Tests
             AssertTitleLowered ("A", "a");
             AssertTitleLowered ("\u0104", "a");
         }
-        
+
         [Test]
         public void TestWithoutArtistNameSortKey ()
         {
@@ -102,14 +102,14 @@ namespace Banshee.Collection.Database.Tests
 
             AssertArtistNameSort ("a", "", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestArtistNameSortKey ()
         {
             AssertArtistNameSort ("Title", "a", new byte[] {14, 2, 1, 1, 1, 1, 0});
             AssertArtistNameSort ("Title", "A", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestArtistNameLowered ()
         {
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseArtistInfoTests.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseArtistInfoTests.cs
index 9a309eb..165003e 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseArtistInfoTests.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseArtistInfoTests.cs
@@ -46,14 +46,14 @@ namespace Banshee.Collection.Database.Tests
             info.NameSort = name_sort;
             Assert.AreEqual (expected, info.NameSortKey);
         }
-        
+
         protected void AssertNameLowered (string name, string expected)
         {
             DatabaseArtistInfo info = new DatabaseArtistInfo ();
             info.Name = name;
             Assert.AreEqual (expected, info.NameLowered);
         }
-        
+
         [Test]
         public void TestWithoutNameSortKey ()
         {
@@ -63,14 +63,14 @@ namespace Banshee.Collection.Database.Tests
 
             AssertNameSort ("a", "", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestNameSortKey ()
         {
             AssertNameSort ("Title", "a", new byte[] {14, 2, 1, 1, 1, 1, 0});
             AssertNameSort ("Title", "A", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestNameLowered ()
         {
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseTrackInfoTests.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseTrackInfoTests.cs
index 5b6074a..225b89b 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseTrackInfoTests.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/Tests/DatabaseTrackInfoTests.cs
@@ -46,14 +46,14 @@ namespace Banshee.Collection.Database.Tests
             info.TrackTitleSort = title_sort;
             Assert.AreEqual (expected, info.TrackTitleSortKey);
         }
-        
+
         protected void AssertTitleLowered (string title, string expected)
         {
             DatabaseTrackInfo info = new DatabaseTrackInfo ();
             info.TrackTitle = title;
             Assert.AreEqual (expected, info.TitleLowered);
         }
-        
+
         [Test]
         public void TestWithoutTitleSortKey ()
         {
@@ -63,14 +63,14 @@ namespace Banshee.Collection.Database.Tests
 
             AssertTitleSort ("a", "", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestTitleSortKey ()
         {
             AssertTitleSort ("Title", "a", new byte[] {14, 2, 1, 1, 1, 1, 0});
             AssertTitleSort ("Title", "A", new byte[] {14, 2, 1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestTitleLowered ()
         {
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs b/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs
index c735fcf..6c1e59f 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexer.cs
@@ -46,62 +46,62 @@ namespace Banshee.Collection.Indexer
     public class CollectionIndexer : ICollectionIndexer, IService, IDBusExportable, IDisposable
     {
         private static int instance_count = 0;
-        
+
         private CollectionIndexerService service;
         private List<CachedList<DatabaseTrackInfo>> model_caches = new List<CachedList<DatabaseTrackInfo>> ();
         private string [] export_fields;
-        
+
         private event ActionHandler indexing_finished;
         event ActionHandler ICollectionIndexer.IndexingFinished {
             add { indexing_finished += value; }
             remove { indexing_finished -= value; }
         }
-        
+
         private event SaveToXmlFinishedHandler save_to_xml_finished;
         event SaveToXmlFinishedHandler ICollectionIndexer.SaveToXmlFinished {
             add { save_to_xml_finished += value; }
             remove { save_to_xml_finished -= value; }
         }
-        
+
         public event EventHandler IndexingFinished;
-        
+
         internal CollectionIndexer (CollectionIndexerService service)
         {
             this.service = service;
         }
-        
+
         public void Dispose ()
         {
             lock (this) {
                 DisposeModels ();
-            
+
                 if (service != null) {
                     service.DisposeIndexer (this);
                 }
             }
         }
-        
+
         private void DisposeModels ()
         {
             foreach (CachedList<DatabaseTrackInfo> model in model_caches) {
                 model.Dispose ();
             }
-            
+
             model_caches.Clear ();
         }
-        
+
         public void SetExportFields (string [] fields)
         {
             lock (this) {
                 export_fields = fields;
             }
         }
-        
+
         public void Index ()
         {
             lock (this) {
                 DisposeModels ();
-                
+
                 foreach (Source source in ServiceManager.SourceManager.Sources) {
                     LibrarySource library = source as LibrarySource;
                     if (library != null && library.Indexable) {
@@ -110,44 +110,44 @@ namespace Banshee.Collection.Indexer
                     }
                 }
             }
-            
+
             OnIndexingFinished ();
         }
-        
+
         void ICollectionIndexer.Index ()
         {
             ThreadPool.QueueUserWorkItem (delegate { Index (); });
         }
-        
+
         public void SaveToXml (string path)
         {
             lock (this) {
                 uint timer_id = Hyena.Log.DebugTimerStart ();
                 bool success = false;
-                
+
                 try {
                     XmlTextWriter writer = new XmlTextWriter (path, System.Text.Encoding.UTF8);
                     writer.Formatting = Formatting.Indented;
                     writer.Indentation = 2;
                     writer.IndentChar = ' ';
-                    
+
                     writer.WriteStartDocument (true);
-                    
+
                     writer.WriteStartElement ("banshee-collection");
                     writer.WriteStartAttribute ("version");
                     writer.WriteString (TrackInfo.ExportVersion);
                     writer.WriteEndAttribute ();
-                   
-                    for (int i = 0; i < model_caches.Count; i++) { 
+
+                    for (int i = 0; i < model_caches.Count; i++) {
                         CachedList<DatabaseTrackInfo> model = model_caches[i];
                         if (model.Count <= 0) {
                             continue;
                         }
-                        
+
                         writer.WriteStartElement ("model");
                         for (int j = 0; j < model.Count; j++) {
                             writer.WriteStartElement ("item");
-                            
+
                             foreach (KeyValuePair<string, object> item in model[j].GenerateExportable (export_fields)) {
                                 string type = "string";
                                 if      (item.Value is Boolean) type = "bool";
@@ -162,7 +162,7 @@ namespace Banshee.Collection.Indexer
                                 else if (item.Value is Char)    type = "char";
                                 else if (item.Value is Double)  type = "double";
                                 else if (item.Value is Single)  type = "float";
-                                
+
                                 writer.WriteStartElement (item.Key);
                                 writer.WriteStartAttribute ("type");
                                 writer.WriteString (type);
@@ -170,89 +170,89 @@ namespace Banshee.Collection.Indexer
                                 writer.WriteString (item.Value.ToString ());
                                 writer.WriteEndElement ();
                             }
-                            
+
                             writer.WriteEndElement ();
                         }
-                        
+
                         writer.WriteEndElement ();
                     }
-                    
+
                     writer.WriteEndElement ();
                     writer.WriteEndDocument ();
                     writer.Close ();
-                    
+
                     success = true;
                 } catch (Exception e) {
                     Log.Exception (e);
                 }
-                
+
                 Hyena.Log.DebugTimerPrint (timer_id, "CollectionIndexer.SaveToXml: {0}");
-                
+
                 SaveToXmlFinishedHandler handler = save_to_xml_finished;
                 if (handler != null) {
                     handler (success, path);
                 }
             }
         }
-        
+
         void ICollectionIndexer.SaveToXml (string path)
-        {   
+        {
             ThreadPool.QueueUserWorkItem (delegate { SaveToXml (path); });
         }
-        
+
         public IDictionary<string, object> GetResult (int modelIndex, int itemIndex)
         {
             lock (this) {
                 if (modelIndex < 0 || modelIndex >= model_caches.Count) {
                     throw new IndexOutOfRangeException ("modelIndex");
                 }
-                
+
                 CachedList<DatabaseTrackInfo> model = model_caches[modelIndex];
-                
+
                 if (itemIndex < 0 || itemIndex >= model.Count) {
                     throw new IndexOutOfRangeException ("itemIndex");
                 }
-                
+
                 return model[itemIndex].GenerateExportable (export_fields);
             }
         }
-        
+
         public int GetModelCounts ()
         {
             lock (this) {
                 return model_caches.Count;
             }
         }
-        
+
         public int GetModelResultsCount (int modelIndex)
         {
             lock (this) {
                 if (modelIndex < 0 || modelIndex >= model_caches.Count) {
                     return -1;
                 }
-                
+
                 return model_caches[modelIndex].Count;
             }
         }
-        
+
         protected virtual void OnIndexingFinished ()
         {
             EventHandler handler = IndexingFinished;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
-        
+
             ActionHandler dbus_handler = indexing_finished;
             if (dbus_handler != null) {
                 dbus_handler ();
             }
         }
-        
+
         private string service_name = String.Format ("CollectionIndexer_{0}", instance_count++);
         string IService.ServiceName {
             get { return service_name; }
         }
-        
+
         IDBusExportable IDBusExportable.Parent {
             get { return service; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs b/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs
index b4b4595..041f743 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Indexer/CollectionIndexerService.cs
@@ -47,40 +47,40 @@ namespace Banshee.Collection.Indexer
         private List<LibrarySource> libraries = new List<LibrarySource> ();
         private string [] available_export_fields;
         private int open_indexers;
-        
+
         public event ActionHandler CollectionChanged;
         public event ActionHandler CleanupAndShutdown;
-        
+
         private ActionHandler shutdown_handler;
         public ActionHandler ShutdownHandler {
             get { return shutdown_handler; }
             set { shutdown_handler = value; }
         }
-        
+
         public CollectionIndexerService ()
         {
             DBusConnection.Connect ("CollectionIndexer");
-            
+
             ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             ServiceManager.SourceManager.SourceRemoved += OnSourceRemoved;
-        
+
             foreach (Source source in ServiceManager.SourceManager.Sources) {
                 MonitorLibrary (source as LibrarySource);
             }
         }
-        
+
         public void Dispose ()
         {
             while (libraries.Count > 0) {
                 UnmonitorLibrary (libraries[0]);
             }
         }
-        
+
         void ICollectionIndexerService.Hello ()
         {
             Hyena.Log.DebugFormat ("Hello called on {0}", GetType ());
         }
-        
+
         public void Shutdown ()
         {
             lock (this) {
@@ -89,7 +89,7 @@ namespace Banshee.Collection.Indexer
                 }
             }
         }
-        
+
         public void ForceShutdown ()
         {
             Dispose ();
@@ -97,14 +97,14 @@ namespace Banshee.Collection.Indexer
                 shutdown_handler ();
             }
         }
-        
+
         public ICollectionIndexer CreateIndexer ()
         {
             lock (this) {
                 return new CollectionIndexer (null);
             }
         }
-        
+
         internal void DisposeIndexer (CollectionIndexer indexer)
         {
             lock (this) {
@@ -112,7 +112,7 @@ namespace Banshee.Collection.Indexer
                 open_indexers--;
             }
         }
-        
+
         ObjectPath ICollectionIndexerService.CreateIndexer ()
         {
             lock (this) {
@@ -121,21 +121,21 @@ namespace Banshee.Collection.Indexer
                 return path;
             }
         }
-        
-        
+
+
         public bool HasCollectionCountChanged (int count)
         {
             lock (this) {
                 int total_count = 0;
-                
+
                 foreach (LibrarySource library in libraries) {
                     total_count += library.Count;
                 }
-                
+
                 return count != total_count;
             }
         }
-        
+
         public bool HasCollectionLastModifiedChanged (long time)
         {
             lock (this) {
@@ -146,73 +146,73 @@ namespace Banshee.Collection.Indexer
                         String.Format ("SELECT MAX(CoreTracks.DateUpdatedStamp) {0}",
                             library.DatabaseTrackModel.UnfilteredQuery)));
                 }
-                
+
                 return last_updated > time;
             }
         }
-        
+
         public string [] GetAvailableExportFields ()
         {
             lock (this) {
                 if (available_export_fields != null) {
                     return available_export_fields;
                 }
-                
+
                 List<string> fields = new List<string> ();
-                
+
                 foreach (KeyValuePair<string, System.Reflection.PropertyInfo> field in TrackInfo.GetExportableProperties (
                     typeof (Banshee.Collection.Database.DatabaseTrackInfo))) {
                     fields.Add (field.Key);
                 }
-                
+
                 available_export_fields = fields.ToArray ();
                 return available_export_fields;
             }
         }
-        
+
         private void MonitorLibrary (LibrarySource library)
         {
             if (library == null || !library.Indexable || libraries.Contains (library)) {
                 return;
             }
-            
+
             libraries.Add (library);
-            
+
             library.TracksAdded += OnLibraryChanged;
             library.TracksDeleted += OnLibraryChanged;
             library.TracksChanged += OnLibraryChanged;
         }
-        
+
         private void UnmonitorLibrary (LibrarySource library)
         {
             if (library == null || !libraries.Contains (library)) {
                 return;
             }
-            
+
             library.TracksAdded -= OnLibraryChanged;
             library.TracksDeleted -= OnLibraryChanged;
             library.TracksChanged -= OnLibraryChanged;
-            
+
             libraries.Remove (library);
         }
-        
+
         private void OnSourceAdded (SourceAddedArgs args)
         {
             MonitorLibrary (args.Source as LibrarySource);
         }
-        
+
         private void OnSourceRemoved (SourceEventArgs args)
         {
             UnmonitorLibrary (args.Source as LibrarySource);
         }
-        
+
         private void OnLibraryChanged (object o, TrackEventArgs args)
         {
             if (args.ChangedFields == null) {
                 OnCollectionChanged ();
                 return;
             }
-            
+
             foreach (Hyena.Query.QueryField field in args.ChangedFields) {
                 if (field != Banshee.Query.BansheeQuery.LastPlayedField &&
                     field != Banshee.Query.BansheeQuery.LastSkippedField &&
@@ -223,7 +223,7 @@ namespace Banshee.Collection.Indexer
                 }
             }
         }
-        
+
         public void RequestCleanupAndShutdown ()
         {
             ActionHandler handler = CleanupAndShutdown;
@@ -231,7 +231,7 @@ namespace Banshee.Collection.Indexer
                 handler ();
             }
         }
-        
+
         private void OnCollectionChanged ()
         {
             ActionHandler handler = CollectionChanged;
@@ -239,11 +239,11 @@ namespace Banshee.Collection.Indexer
                 handler ();
             }
         }
-        
-        IDBusExportable IDBusExportable.Parent { 
+
+        IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         string IService.ServiceName {
             get { return "CollectionIndexerService"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs b/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs
index 684bed0..8fd60c5 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexer.cs
@@ -33,22 +33,22 @@ using NDesk.DBus;
 namespace Banshee.Collection.Indexer
 {
     public delegate void SaveToXmlFinishedHandler (bool success, string path);
-    
+
     [Interface ("org.bansheeproject.CollectionIndexer.Indexer")]
     public interface ICollectionIndexer
     {
         event ActionHandler IndexingFinished;
         event SaveToXmlFinishedHandler SaveToXmlFinished;
-        
+
         void Index ();
         void Dispose ();
-        
+
         void SetExportFields (string [] fields);
-        
+
         int GetModelCounts ();
         int GetModelResultsCount (int modelIndex);
         IDictionary<string, object> GetResult (int modelIndex, int itemIndex);
-        
+
         void SaveToXml (string path);
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs b/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs
index 6100762..2cce19a 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Indexer/ICollectionIndexerService.cs
@@ -38,7 +38,7 @@ namespace Banshee.Collection.Indexer
     {
         event ActionHandler CollectionChanged;
         event ActionHandler CleanupAndShutdown;
-        
+
         void Hello ();
         void Shutdown ();
         ObjectPath CreateIndexer ();
diff --git a/src/Core/Banshee.Services/Banshee.Collection/AlbumListModel.cs b/src/Core/Banshee.Services/Banshee.Collection/AlbumListModel.cs
index bf8061a..e99870a 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/AlbumListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/AlbumListModel.cs
@@ -41,13 +41,13 @@ namespace Banshee.Collection
             selection = new SelectAllSelection ();
             selection.SelectAll ();
         }
-        
+
         public AlbumListModel(IDBusExportable parent) : base(parent)
         {
             selection = new SelectAllSelection ();
             selection.SelectAll ();
         }
-        
+
         public override void Clear ()
         {
         }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/ArtistListModel.cs b/src/Core/Banshee.Services/Banshee.Collection/ArtistListModel.cs
index d946d9f..a226268 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/ArtistListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/ArtistListModel.cs
@@ -40,7 +40,7 @@ namespace Banshee.Collection
             selection = new SelectAllSelection ();
             selection.SelectAll ();
         }
-        
+
         public ArtistListModel(IDBusExportable parent) : base(parent)
         {
             selection = new SelectAllSelection ();
diff --git a/src/Core/Banshee.Services/Banshee.Collection/FilterListModel.cs b/src/Core/Banshee.Services/Banshee.Collection/FilterListModel.cs
index 4373105..104b4a5 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/FilterListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/FilterListModel.cs
@@ -48,52 +48,52 @@ namespace Banshee.Collection
         public FilterListModel (DatabaseTrackListModel trackModel) : base ()
         {
             browsing_model = trackModel;
-            
+
             selection = new SelectAllSelection ();
             selection.SelectAll ();
-            
+
             Selection.Changed += HandleSelectionChanged;
         }
-        
+
         public FilterListModel (IDBusExportable parent) : base (parent)
         {
             selection = new SelectAllSelection ();
             selection.SelectAll ();
         }
-        
+
         public override void Reload ()
         {
             Reload (false);
         }
-        
+
         public abstract void Reload (bool notify);
-        
+
         private void HandleSelectionChanged (object sender, EventArgs args)
         {
             Banshee.Base.ThreadAssist.SpawnFromMain (ReloadBrowsingModel);
-        } 
+        }
 
         private void ReloadBrowsingModel ()
         {
             browsing_model.Reload (this);
         }
-        
+
 #region IFilterModel Implementation
 
         public abstract string GetSqlFilter ();
-        
+
         private string filter_name;
         public string FilterName {
             get { return filter_name; }
             protected set { filter_name = value; }
         }
-        
+
         private string filter_label;
         public string FilterLabel {
             get { return filter_label; }
             protected set { filter_label = value; }
         }
-        
+
         public virtual void InvalidateCache (bool notify)
         {
         }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/ImportEventHandler.cs b/src/Core/Banshee.Services/Banshee.Collection/ImportEventHandler.cs
index 132a5d3..22b49a1 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/ImportEventHandler.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/ImportEventHandler.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ImportEventHandler.cs
 //
 // Author:
@@ -31,21 +31,21 @@ using System;
 namespace Banshee.Collection
 {
     public delegate void ImportEventHandler (object o, ImportEventArgs args);
-    
+
     public class ImportEventArgs : EventArgs
     {
         private string filename;
         private string return_message;
-        
+
         public ImportEventArgs (string filename)
         {
             this.filename = filename;
         }
-        
+
         public string FileName {
             get { return filename; }
         }
-        
+
         public string ReturnMessage {
             get { return return_message; }
             set { return_message = value; }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/ImportManager.cs b/src/Core/Banshee.Services/Banshee.Collection/ImportManager.cs
index d759a5a..a321572 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/ImportManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/ImportManager.cs
@@ -48,7 +48,7 @@ namespace Banshee.Collection
         private class ImportElement : QueuePipelineElement<string>
         {
             private ImportManager manager;
-            
+
             public ImportElement (ImportManager manager)
             {
                 this.manager = manager;
@@ -59,7 +59,7 @@ namespace Banshee.Collection
                 base.Enqueue (item);
                 manager.UpdateScannerProgress ();
             }
-        
+
             protected override string ProcessItem (string item)
             {
                 try {
@@ -67,50 +67,50 @@ namespace Banshee.Collection
                 } catch (Exception e) {
                     Hyena.Log.Exception (e);
                 }
-                return null;   
+                return null;
             }
         }
-        
+
 #endregion
-        
+
         private static NumberFormatInfo number_format = new NumberFormatInfo ();
-        
+
         private DirectoryScannerPipelineElement scanner_element;
         private ImportElement import_element;
-        
+
         private readonly object user_job_mutex = new object ();
         private UserJob user_job;
         private uint timer_id;
-        
+
         public event ImportEventHandler ImportRequested;
-        
+
         public ImportManager ()
         {
             AddElement (scanner_element = new DirectoryScannerPipelineElement ());
             AddElement (import_element = new ImportElement (this));
         }
-        
+
 #region Public API
-                      
+
         public virtual void Enqueue (UriList uris)
         {
             CreateUserJob ();
-            
+
             foreach (string path in uris.LocalPaths) {
                 base.Enqueue (path);
             }
         }
-        
+
         public override void Enqueue (string source)
         {
             Enqueue (new UriList (source));
         }
-        
+
         public void Enqueue (string [] paths)
         {
             Enqueue (new UriList (paths));
         }
-        
+
         public bool IsImportInProgress {
             get { return import_element.Processing; }
         }
@@ -120,20 +120,20 @@ namespace Banshee.Collection
             get { return keep_user_job_hidden; }
             set { keep_user_job_hidden = value; }
         }
-        
+
 #endregion
-        
+
 #region User Job / Interaction
-        
+
         private void CreateUserJob ()
         {
             lock (user_job_mutex) {
                 if (user_job != null || KeepUserJobHidden) {
                     return;
                 }
-                
+
                 timer_id = Log.DebugTimerStart ();
-                
+
                 user_job = new UserJob (Title, Catalog.GetString ("Scanning for media"));
                 user_job.SetResources (Resource.Cpu, Resource.Disk, Resource.Database);
                 user_job.PriorityHints = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
@@ -147,42 +147,42 @@ namespace Banshee.Collection
                 }
             }
         }
-        
+
         private void DestroyUserJob ()
         {
             lock (user_job_mutex) {
                 if (user_job == null) {
                     return;
                 }
-                
+
                 if (!KeepUserJobHidden) {
                     Log.DebugTimerPrint (timer_id, Title + " duration: {0}");
                 }
-                
+
                 user_job.CancelRequested -= OnCancelRequested;
                 user_job.Finish ();
                 user_job = null;
             }
         }
-        
+
         private void OnCancelRequested (object o, EventArgs args)
         {
             scanner_element.Cancel ();
         }
-        
+
         protected void UpdateProgress (string message)
         {
             CreateUserJob ();
             if (user_job != null) {
                 double new_progress = (double)import_element.ProcessedCount / (double)import_element.TotalCount;
                 double old_progress = user_job.Progress;
-                
+
                 if (new_progress >= 0.0 && new_progress <= 1.0 && Math.Abs (new_progress - old_progress) > 0.001) {
                     lock (number_format) {
-                        string disp_progress = String.Format (ProgressMessage, 
-                            import_element.ProcessedCount, 
+                        string disp_progress = String.Format (ProgressMessage,
+                            import_element.ProcessedCount,
                             import_element.TotalCount);
-                        
+
                         user_job.Title = disp_progress;
                         user_job.Status = String.IsNullOrEmpty (message) ? Catalog.GetString ("Scanning...") : message;
                         user_job.Progress = new_progress;
@@ -190,9 +190,9 @@ namespace Banshee.Collection
                 }
             }
         }
-        
+
         private DateTime last_enqueue_display = DateTime.Now;
-        
+
         private void UpdateScannerProgress ()
         {
             CreateUserJob ();
@@ -200,18 +200,18 @@ namespace Banshee.Collection
                 if (DateTime.Now - last_enqueue_display > TimeSpan.FromMilliseconds (400)) {
                     lock (number_format) {
                         number_format.NumberDecimalDigits = 0;
-                        user_job.Status = String.Format (Catalog.GetString ("Scanning ({0} files)..."), 
+                        user_job.Status = String.Format (Catalog.GetString ("Scanning ({0} files)..."),
                             import_element.TotalCount.ToString ("N", number_format));
                         last_enqueue_display = DateTime.Now;
                     }
                 }
             }
         }
-        
+
 #endregion
-        
+
 #region Protected Import Hooks
-        
+
         protected virtual void OnImportRequested (string path)
         {
             ImportEventHandler handler = ImportRequested;
@@ -223,17 +223,17 @@ namespace Banshee.Collection
                 UpdateProgress (null);
             }
         }
-        
+
         protected override void OnFinished ()
         {
             DestroyUserJob ();
             base.OnFinished ();
         }
-        
+
 #endregion
 
 #region Properties
-        
+
         private string title = Catalog.GetString ("Importing Media");
         public string Title {
             get { return title; }
@@ -256,11 +256,11 @@ namespace Banshee.Collection
         public bool Threaded {
             set { import_element.Threaded = scanner_element.Threaded = value; }
         }
-        
+
         protected int TotalCount {
             get { return import_element == null ? 0 : import_element.TotalCount; }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/MemoryTrackListModel.cs b/src/Core/Banshee.Services/Banshee.Collection/MemoryTrackListModel.cs
index b39a777..a3a8d9f 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/MemoryTrackListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/MemoryTrackListModel.cs
@@ -48,7 +48,7 @@ namespace Banshee.Collection
                 tracks.Clear ();
             }
         }
-        
+
         public override void Reload ()
         {
             lock (this) {
@@ -76,7 +76,7 @@ namespace Banshee.Collection
                 return IndexOf (track) != -1;
             }
         }
-    
+
         public override TrackInfo this[int index] {
             get { lock (this) { return (index >= 0 && index < tracks.Count) ? tracks[index] : null; } }
         }
@@ -89,10 +89,10 @@ namespace Banshee.Collection
             return this [random.Next (0, Count - 1)];
         }
 
-        public override int Count { 
+        public override int Count {
             get { lock (this) { return tracks.Count; } }
         }
-        
+
         public override int IndexOf (TrackInfo track)
         {
             lock (this) { return tracks.IndexOf (track); }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/ModelHelper.cs b/src/Core/Banshee.Services/Banshee.Collection/ModelHelper.cs
index 7600e42..d7ad603 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/ModelHelper.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/ModelHelper.cs
@@ -35,15 +35,15 @@ namespace Banshee.Collection
     {
         public delegate string SingleIdFilterHandler<T>(T t);
         public delegate void IdFilterChangedHandler(string newFilter);
-        
+
         public static void BuildIdFilter<T>(IEnumerable<T> value, string field, string oldFilter,
             SingleIdFilterHandler<T> singleFilterHandler, IdFilterChangedHandler filterChangedHandler)
         {
             int count = 0;
-            string new_filter = null;    
-            
+            string new_filter = null;
+
             System.Text.StringBuilder builder = new System.Text.StringBuilder();
-                
+
             if(value != null) {
                 foreach(T t in value) {
                     string t_f = singleFilterHandler(t);
@@ -52,16 +52,16 @@ namespace Banshee.Collection
                         count++;
                     }
                 }
-                
+
                 if(count > 0) {
                     builder.Remove(builder.Length - 1, 1);
                     builder.Insert(0, String.Format(" {0} IN (", field));
                     builder.Append(") ");
-                
+
                     new_filter = builder.ToString();
-                } 
+                }
             }
-            
+
             if(new_filter != oldFilter) {
                 filterChangedHandler(new_filter);
             }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
index 6cc1b87..25f2f58 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
@@ -50,7 +50,7 @@ namespace Banshee.Collection
     // 4. Remove tracks that aren't on disk and weren't found to have moved
     //
     // Approach:
-    // 1. For each file in the source's directory, find orphaned db track if any, or add if new 
+    // 1. For each file in the source's directory, find orphaned db track if any, or add if new
     //    and update if modified; update the LastScannedAt stamp
     // 2. Remove all db tracks from the database that weren't scanned (LastScannedAt < scan_started)
     public class RescanPipeline : QueuePipeline<string>
@@ -68,7 +68,7 @@ namespace Banshee.Collection
             AddElement (new Banshee.IO.DirectoryScannerPipelineElement ());
             AddElement (track_sync = new TrackSyncPipelineElement (psource, scan_started));
             Finished += OnFinished;
-            
+
             BuildJob ();
             Enqueue (psource.BaseDirectory);
         }
@@ -159,14 +159,14 @@ namespace Banshee.Collection
             //Hyena.Log.DebugFormat ("Rescanning item {0}", file_path);
             try {
                 SafeUri uri = new SafeUri (file_path);
-                
+
                 IDataReader reader = ServiceManager.DbConnection.Query (fetch_command, psource.DbId, uri.AbsoluteUri);
                 if (reader.Read () ) {
                     //Hyena.Log.DebugFormat ("Found it in the db!");
                     DatabaseTrackInfo track = DatabaseTrackInfo.Provider.Load (reader);
-                    
+
                     MergeIfModified (track);
-    
+
                     // Either way, update the LastSyncStamp
                     track.LastSyncedStamp = DateTime.Now;
                     track.Save (false);
@@ -175,7 +175,7 @@ namespace Banshee.Collection
                     // This URI is not in the database - try to find it based on MetadataHash in case it was simply moved
                     DatabaseTrackInfo track = new DatabaseTrackInfo ();
                     Banshee.Streaming.StreamTagger.TrackInfoMerge (track, uri);
-    
+
                     IDataReader similar_reader = ServiceManager.DbConnection.Query (fetch_similar_command, psource.DbId, scan_started, track.MetadataHash);
                     DatabaseTrackInfo similar_track = null;
                     while (similar_reader.Read ()) {
@@ -191,7 +191,7 @@ namespace Banshee.Collection
                         }
                         similar_track = null;
                     }
-    
+
                     // If we still couldn't find it, try to import it
                     if (similar_track == null) {
                         //Hyena.Log.DebugFormat ("Couldn't find it, so queueing to import it");
diff --git a/src/Core/Banshee.Services/Banshee.Collection/TrackListModel.cs b/src/Core/Banshee.Services/Banshee.Collection/TrackListModel.cs
index 043ae3d..41d12f9 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/TrackListModel.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/TrackListModel.cs
@@ -43,12 +43,12 @@ namespace Banshee.Collection
         {
             selection = new Selection ();
         }
-        
+
         public TrackListModel(IDBusExportable parent) : base(parent)
         {
             selection = new Selection ();
         }
-        
+
         public abstract int IndexOf (TrackInfo track);
 
         public abstract TrackInfo GetRandom (DateTime since);
diff --git a/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs b/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs
index 325fbae..6b53454 100644
--- a/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs
+++ b/src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs
@@ -4,24 +4,24 @@
  *  Written by Scott Peterson <lunchtimemama gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -40,7 +40,7 @@ namespace Banshee.Configuration
         public static DatabaseConfigurationClient Client {
             get { return ServiceManager.DbConnection.Configuration; }
         }
-        
+
         private readonly BansheeDbConnection connection;
         private readonly HyenaSqliteCommand select_value_command;
         private readonly HyenaSqliteCommand select_id_command;
@@ -50,16 +50,16 @@ namespace Banshee.Configuration
         public DatabaseConfigurationClient(BansheeDbConnection connection)
         {
             this.connection = connection;
-            
+
             select_value_command = new HyenaSqliteCommand (String.Format (
                 "SELECT Value FROM {0} WHERE Key=?", TableName));
-            
+
             select_id_command = new HyenaSqliteCommand (String.Format (
                 "SELECT EntryID FROM {0} WHERE Key=?", TableName));
-            
+
             insert_command = new HyenaSqliteCommand (String.Format (
                 "INSERT INTO {0} (EntryID, Key, Value) VALUES (NULL, ?, ?)", TableName));
-            
+
             update_command = new HyenaSqliteCommand (String.Format (
                 "UPDATE {0} SET Value=? WHERE Key=?", TableName));
         }
@@ -89,10 +89,10 @@ namespace Banshee.Configuration
                 }
             }
         }
-        
+
         private IDataReader Get (string namespce, string key)
         {
-            return connection.Query (select_value_command, 
+            return connection.Query (select_value_command,
                 Banshee.Configuration.MemoryConfigurationClient.MakeKey (namespce, key));
         }
 
diff --git a/src/Core/Banshee.Services/Banshee.Configuration/DefaultApplicationHelper.cs b/src/Core/Banshee.Services/Banshee.Configuration/DefaultApplicationHelper.cs
index cad68e5..94ff0ce 100644
--- a/src/Core/Banshee.Services/Banshee.Configuration/DefaultApplicationHelper.cs
+++ b/src/Core/Banshee.Services/Banshee.Configuration/DefaultApplicationHelper.cs
@@ -39,16 +39,16 @@ namespace Banshee.Configuration
         bool IsDefault { get; }
         void MakeDefault ();
     }
-    
+
     public static class DefaultApplicationHelper
     {
         public static SchemaEntry<bool> MakeDefaultSchema = new SchemaEntry<bool> ("core", "make_default", true,
             "Whether to ensure Banshee is the default media player every time it starts", null);
-        
-        public static SchemaEntry<bool> RememberChoiceSchema = new SchemaEntry<bool> ("core", "remember_make_default", false, 
+
+        public static SchemaEntry<bool> RememberChoiceSchema = new SchemaEntry<bool> ("core", "remember_make_default", false,
             "Whether to remember whether to ensure Banshee is the default media player every time it starts", null);
 
-        public static SchemaEntry<bool> EverAskedSchema = new SchemaEntry<bool> ("core", "ever_asked_make_default", false, 
+        public static SchemaEntry<bool> EverAskedSchema = new SchemaEntry<bool> ("core", "ever_asked_make_default", false,
             "Whether the user has ever responded to whether they'd like to make Banshee the default player", null);
 
         private static IDefaultHelper helper;
@@ -61,7 +61,7 @@ namespace Banshee.Configuration
                             Log.DebugFormat ("Loaded Default Application Helper: {0}", helper.GetType ().FullName);
                             break;
                         } catch (Exception e) {
-                            Log.Exception ("Default Application Helper backend failed to load", e);    
+                            Log.Exception ("Default Application Helper backend failed to load", e);
                         }
                     }
                 }
diff --git a/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs b/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs
index a51d17f..e8267ac 100644
--- a/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs
+++ b/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs
@@ -65,7 +65,7 @@ namespace Banshee.Database
 
             migrator = new BansheeDbFormatMigrator (this);
             configuration = new DatabaseConfigurationClient (this);
-            
+
             if (Banshee.Base.ApplicationContext.CommandLine.Contains ("debug-sql")) {
                 Hyena.Data.Sqlite.HyenaSqliteCommand.LogAll = true;
                 WarnIfCalledFromThread = Banshee.Base.ThreadAssist.MainThread;
@@ -83,7 +83,7 @@ namespace Banshee.Database
                 } catch (Exception e) {
                     Log.Exception ("Error determining if ANALYZE is necessary", e);
                 }
-                
+
                 // Update cached sorting keys
                 SortKeyUpdater.Update ();
             }
@@ -96,7 +96,7 @@ namespace Banshee.Database
             string [] tables_with_indexes = {"CoreTracks", "CoreArtists", "CoreAlbums",
                 "CorePlaylistEntries", "PodcastItems", "PodcastEnclosures",
                 "PodcastSyndications", "CoverArtDownloads"};
-            
+
             if (TableExists ("sqlite_stat1")) {
                 foreach (string table_name in tables_with_indexes) {
                     if (TableExists (table_name)) {
@@ -115,13 +115,13 @@ namespace Banshee.Database
             } else {
                 needs_analyze = true;
             }
-            
+
             if (needs_analyze) {
                 Log.DebugFormat ("Running ANALYZE against database to improve performance");
                 Execute ("ANALYZE");
             }
         }
- 
+
         public BansheeDbFormatMigrator Migrator {
             get { lock (this) { return migrator; } }
         }
@@ -131,16 +131,16 @@ namespace Banshee.Database
                 if (ApplicationContext.CommandLine.Contains ("db")) {
                     return ApplicationContext.CommandLine["db"];
                 }
-                
+
                 string proper_dbfile = Path.Combine (Paths.ApplicationData, "banshee.db");
                 if (File.Exists (proper_dbfile)) {
                     return proper_dbfile;
                 }
 
                 string dbfile = Path.Combine (Path.Combine (Environment.GetFolderPath (
-                    Environment.SpecialFolder.ApplicationData), 
-                    "banshee"), 
-                    "banshee.db"); 
+                    Environment.SpecialFolder.ApplicationData),
+                    "banshee"),
+                    "banshee.db");
 
                 if (!File.Exists (dbfile)) {
                     string tdbfile = Path.Combine (Path.Combine (Path.Combine (Environment.GetFolderPath (
@@ -151,12 +151,12 @@ namespace Banshee.Database
 
                     dbfile = tdbfile;
                 }
-                
+
                 if (File.Exists (dbfile)) {
                     Log.InformationFormat ("Copying your old Banshee Database to {0}", proper_dbfile);
                     File.Copy (dbfile, proper_dbfile);
                 }
-                
+
                 return proper_dbfile;
             }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs b/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
index 04e4c01..fbce6df 100644
--- a/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
+++ b/src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs
@@ -58,39 +58,39 @@ namespace Banshee.Database
         //       MUST be supplied to match the new version number
         protected const int CURRENT_VERSION = 36;
         protected const int CURRENT_METADATA_VERSION = 6;
-        
+
 #region Migration Driver
-        
+
         public delegate void SlowStartedHandler(string title, string message);
-        
+
         public event SlowStartedHandler SlowStarted;
         public event EventHandler SlowPulse;
         public event EventHandler SlowFinished;
 
         public event EventHandler Started;
         public event EventHandler Finished;
-                
-        protected class DatabaseVersionAttribute : Attribute 
+
+        protected class DatabaseVersionAttribute : Attribute
         {
             private int version;
-            
+
             public DatabaseVersionAttribute(int version)
             {
                 this.version = version;
             }
-            
+
             public int Version {
                 get { return version; }
             }
         }
-        
+
         private HyenaSqliteConnection connection;
-        
+
         public BansheeDbFormatMigrator (HyenaSqliteConnection connection)
         {
             this.connection = connection;
         }
-        
+
         protected virtual void OnSlowStarted(string title, string message)
         {
             SlowStartedHandler handler = SlowStarted;
@@ -98,7 +98,7 @@ namespace Banshee.Database
                 handler(title, message);
             }
         }
-        
+
         protected virtual void OnSlowPulse()
         {
             EventHandler handler = SlowPulse;
@@ -106,7 +106,7 @@ namespace Banshee.Database
                 handler(this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnSlowFinished()
         {
             EventHandler handler = SlowFinished;
@@ -130,11 +130,11 @@ namespace Banshee.Database
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void Migrate ()
         {
             try {
-                
+
                 if (DatabaseVersion < CURRENT_VERSION) {
                     Execute ("BEGIN");
                     InnerMigrate ();
@@ -142,7 +142,7 @@ namespace Banshee.Database
                 } else {
                     Log.DebugFormat ("Database version {0} is up to date", DatabaseVersion);
                 }
-                
+
                 // Trigger metadata refreshes if necessary
                 int metadata_version = connection.Query<int> ("SELECT Value FROM CoreConfiguration WHERE Key = 'MetadataVersion'");
                 if (DatabaseVersion == CURRENT_VERSION && metadata_version < CURRENT_METADATA_VERSION) {
@@ -156,13 +156,13 @@ namespace Banshee.Database
 
             OnFinished ();
         }
-        
+
         private void InnerMigrate ()
         {
             MethodInfo [] methods = GetType ().GetMethods (BindingFlags.Instance | BindingFlags.NonPublic);
             bool terminate = false;
             bool ran_migration_step = false;
-            
+
             Log.DebugFormat ("Migrating from database version {0} to {1}", DatabaseVersion, CURRENT_VERSION);
             for (int i = DatabaseVersion + 1; i <= CURRENT_VERSION; i++) {
                 foreach (MethodInfo method in methods) {
@@ -171,7 +171,7 @@ namespace Banshee.Database
                         if (attr.Version != i) {
                             continue;
                         }
-                        
+
                         if (!ran_migration_step) {
                             ran_migration_step = true;
                             OnStarted ();
@@ -180,80 +180,80 @@ namespace Banshee.Database
                         if (!(bool)method.Invoke (this, null)) {
                             terminate = true;
                         }
-                        
+
                         break;
                     }
                 }
-                
+
                 if (terminate) {
                     break;
                 }
             }
-            
+
             Execute (String.Format ("UPDATE CoreConfiguration SET Value = {0} WHERE Key = 'DatabaseVersion'", CURRENT_VERSION));
         }
-        
+
         protected bool TableExists(string tableName)
         {
             return connection.TableExists (tableName);
         }
-        
+
         protected void Execute(string query)
         {
             connection.Execute (query);
         }
-            
+
         protected int DatabaseVersion {
             get {
                 if (!TableExists("CoreConfiguration")) {
                     return 0;
                 }
-                
+
                 return connection.Query<int> ("SELECT Value FROM CoreConfiguration WHERE Key = 'DatabaseVersion'");
             }
         }
-        
+
 #endregion
-        
+
 #pragma warning disable 0169
 
 #region Version 1
-                                
+
         [DatabaseVersion (1)]
         private bool Migrate_1 ()
         {
             if (TableExists("Tracks")) {
                 InitializeFreshDatabase (true);
-                
+
                 uint timer_id = Log.DebugTimerStart ("Database Schema Migration");
 
-                OnSlowStarted (Catalog.GetString ("Upgrading your Banshee Database"), 
+                OnSlowStarted (Catalog.GetString ("Upgrading your Banshee Database"),
                     Catalog.GetString ("Please wait while your old Banshee database is migrated to the new format."));
-            
+
                 Thread thread = new Thread (MigrateFromLegacyBanshee);
                 thread.Name = "Database Migrator";
                 thread.Start ();
-            
+
                 while (thread.IsAlive) {
                     OnSlowPulse ();
                     Thread.Sleep (100);
                 }
 
                 Log.DebugTimerPrint (timer_id);
-            
+
                 OnSlowFinished ();
-                
+
                 return false;
             } else {
                 InitializeFreshDatabase (false);
                 return false;
             }
         }
-        
+
 #endregion
 
 #region Version 2
-        
+
         [DatabaseVersion (2)]
         private bool Migrate_2 ()
         {
@@ -291,7 +291,7 @@ namespace Banshee.Database
 #endregion
 
 #region Version 5
-        
+
         [DatabaseVersion (5)]
         private bool Migrate_5 ()
         {
@@ -327,7 +327,7 @@ namespace Banshee.Database
             Execute ("CREATE INDEX IF NOT EXISTS CoreAlbumsIndex       ON CoreAlbums(ArtistID, TitleLowered)");
             Execute ("CREATE INDEX IF NOT EXISTS CoreSmartPlaylistEntriesIndex ON CoreSmartPlaylistEntries(SmartPlaylistID, TrackID)");
             Execute ("CREATE INDEX IF NOT EXISTS CorePlaylistEntriesIndex ON CorePlaylistEntries(PlaylistID, TrackID)");
-            
+
             return true;
         }
 
@@ -341,7 +341,7 @@ namespace Banshee.Database
             Execute ("INSERT INTO CoreConfiguration (EntryID, Key, Value) VALUES (null, 'MetadataVersion', 0)");
             return true;
         }
-        
+
 #endregion
 
 #region Version 7
@@ -355,7 +355,7 @@ namespace Banshee.Database
             try { Execute ("DELETE FROM CoreCache; DELETE FROM CoreCacheModels"); } catch {}
             return true;
         }
-        
+
 #endregion
 
 #region Version 8
@@ -371,7 +371,7 @@ namespace Banshee.Database
             Application.ClientStarted += ReloadAllSources;
             return true;
         }
-        
+
 #endregion
 
 #region Version 9
@@ -398,18 +398,18 @@ namespace Banshee.Database
             Execute ("ALTER TABLE CoreTracks ADD COLUMN ExternalID INTEGER");
             return true;
         }
-        
+
 #endregion
 
 #region Version 11
-        
+
         [DatabaseVersion (11)]
         private bool Migrate_11 ()
         {
             Execute("CREATE INDEX CoreTracksExternalIDIndex ON CoreTracks(PrimarySourceID, ExternalID)");
             return true;
         }
-        
+
 #endregion
 
 #region Version 12
@@ -421,7 +421,7 @@ namespace Banshee.Database
             Execute ("ALTER TABLE CoreAlbums ADD COLUMN ArtistNameLowered STRING");
             return true;
         }
-        
+
 #endregion
 
 #region Version 13
@@ -433,7 +433,7 @@ namespace Banshee.Database
             Execute("CREATE INDEX CoreTracksUriIndex ON CoreTracks(PrimarySourceID, Uri)");
             return true;
         }
-        
+
 #endregion
 
 #region Version 14
@@ -444,7 +444,7 @@ namespace Banshee.Database
             InitializeOrderedTracks ();
             return true;
         }
-        
+
 #endregion
 
 #region Version 15
@@ -458,7 +458,7 @@ namespace Banshee.Database
             }
             return true;
         }
-        
+
 #endregion
 
 #region Version 16
@@ -472,9 +472,9 @@ namespace Banshee.Database
             Execute ("ANALYZE");
             return true;
         }
-        
+
 #endregion
-        
+
 #region Version 17
 
         [DatabaseVersion (17)]
@@ -484,7 +484,7 @@ namespace Banshee.Database
             Execute ("ANALYZE");
             return true;
         }
-        
+
 #endregion
 
 #region Version 18
@@ -495,9 +495,9 @@ namespace Banshee.Database
             Execute ("ALTER TABLE CoreTracks ADD COLUMN MetadataHash TEXT");
             return true;
         }
-        
+
 #endregion
-        
+
 #region Version 19
 
         [DatabaseVersion (19)]
@@ -511,7 +511,7 @@ namespace Banshee.Database
             Execute ("ALTER TABLE CoreTracks ADD COLUMN BitRate INTEGER DEFAULT 0");
             return true;
         }
-        
+
 #endregion
 
 #region Version 20
@@ -524,7 +524,7 @@ namespace Banshee.Database
             Execute ("ALTER TABLE CorePrimarySources ADD COLUMN IsTemporary INTEGER DEFAULT 0");
             return true;
         }
-        
+
 #endregion
 
 #region Version 21
@@ -539,7 +539,7 @@ namespace Banshee.Database
             }
             return true;
         }
-        
+
 #endregion
 
 #region Version 22
@@ -552,7 +552,7 @@ namespace Banshee.Database
             Execute ("UPDATE CoreTracks SET LastSyncedStamp = DateAddedStamp;");
             return true;
         }
-        
+
 #endregion
 
 #region Version 23
@@ -567,7 +567,7 @@ namespace Banshee.Database
 
             return true;
         }
-        
+
 #endregion
 
 #region Version 24
@@ -593,7 +593,7 @@ namespace Banshee.Database
             Execute ("ALTER TABLE CoreTracks ADD COLUMN TitleSortKey BLOB");
             return true;
         }
-        
+
 #endregion
 
 #region Version 26
@@ -606,7 +606,7 @@ namespace Banshee.Database
             string unknown_title = "Unknown Title";
 
             connection.Execute ("UPDATE CoreArtists SET Name = NULL, NameLowered = HYENA_SEARCH_KEY(?)" +
-                                " WHERE Name  IN ('', ?, ?) OR Name IS NULL", 
+                                " WHERE Name  IN ('', ?, ?) OR Name IS NULL",
                                 ArtistInfo.UnknownArtistName, unknown_artist, ArtistInfo.UnknownArtistName);
 
             connection.Execute ("UPDATE CoreAlbums SET ArtistName = NULL, ArtistNameLowered = HYENA_SEARCH_KEY(?)" +
@@ -623,7 +623,7 @@ namespace Banshee.Database
 
             return true;
         }
-        
+
 #endregion
 
 #region Version 27
@@ -758,7 +758,7 @@ namespace Banshee.Database
             Execute ("ANALYZE");
             return true;
         }
-        
+
 #endregion
 
 #region Version 33
@@ -830,9 +830,9 @@ namespace Banshee.Database
 #endregion
 
 #pragma warning restore 0169
-        
+
 #region Fresh database setup
-        
+
         private void InitializeFreshDatabase (bool refresh_metadata)
         {
             Execute("DROP TABLE IF EXISTS CoreConfiguration");
@@ -846,7 +846,7 @@ namespace Banshee.Database
             Execute("DROP TABLE IF EXISTS CoreRemovedTracks");
             Execute("DROP TABLE IF EXISTS CoreTracksCache");
             Execute("DROP TABLE IF EXISTS CoreCache");
-            
+
             Execute(@"
                 CREATE TABLE CoreConfiguration (
                     EntryID             INTEGER PRIMARY KEY,
@@ -858,7 +858,7 @@ namespace Banshee.Database
             if (!refresh_metadata) {
                 Execute (String.Format ("INSERT INTO CoreConfiguration (EntryID, Key, Value) VALUES (null, 'MetadataVersion', {0})", CURRENT_METADATA_VERSION));
             }
-            
+
             Execute(@"
                 CREATE TABLE CorePrimarySources (
                     PrimarySourceID     INTEGER PRIMARY KEY,
@@ -880,7 +880,7 @@ namespace Banshee.Database
                     AlbumID             INTEGER,
                     TagSetID            INTEGER,
                     ExternalID          INTEGER,
-                    
+
                     MusicBrainzID       TEXT,
 
                     Uri                 TEXT,
@@ -889,7 +889,7 @@ namespace Banshee.Database
                     BitRate             INTEGER,
                     Attributes          INTEGER DEFAULT {0},
                     LastStreamError     INTEGER DEFAULT {1},
-                    
+
                     Title               TEXT,
                     TitleLowered        TEXT,
                     TitleSort           TEXT,
@@ -928,13 +928,13 @@ namespace Banshee.Database
             Execute("CREATE INDEX CoreTracksExternalIDIndex ON CoreTracks(PrimarySourceID, ExternalID)");
             Execute("CREATE INDEX CoreTracksUriIndex ON CoreTracks(PrimarySourceID, Uri)");
             Execute("CREATE INDEX CoreTracksCoverArtIndex ON CoreTracks (PrimarySourceID, AlbumID, DateUpdatedStamp)");
-            
+
             Execute(@"
                 CREATE TABLE CoreAlbums (
                     AlbumID             INTEGER PRIMARY KEY,
                     ArtistID            INTEGER,
                     TagSetID            INTEGER,
-                    
+
                     MusicBrainzID       TEXT,
 
                     Title               TEXT,
@@ -946,12 +946,12 @@ namespace Banshee.Database
                     Duration            INTEGER,
                     Year                INTEGER,
                     IsCompilation       INTEGER DEFAULT 0,
-                    
+
                     ArtistName          TEXT,
                     ArtistNameLowered   TEXT,
                     ArtistNameSort      TEXT,
                     ArtistNameSortKey   BLOB,
-                    
+
                     Rating              INTEGER
                 )
             ");
@@ -971,7 +971,7 @@ namespace Banshee.Database
                 )
             ");
             Execute ("CREATE INDEX CoreArtistsIndex ON CoreArtists(NameSortKey)");
-            
+
             Execute(@"
                 CREATE TABLE CorePlaylists (
                     PrimarySourceID     INTEGER,
@@ -984,7 +984,7 @@ namespace Banshee.Database
                     IsTemporary         INTEGER DEFAULT 0
                 )
             ");
-            
+
             Execute(@"
                 CREATE TABLE CorePlaylistEntries (
                     EntryID             INTEGER PRIMARY KEY,
@@ -995,7 +995,7 @@ namespace Banshee.Database
                 )
             ");
             Execute("CREATE INDEX CorePlaylistEntriesIndex ON CorePlaylistEntries(PlaylistID, TrackID)");
-            
+
             Execute(@"
                 CREATE TABLE CoreSmartPlaylists (
                     PrimarySourceID     INTEGER,
@@ -1009,7 +1009,7 @@ namespace Banshee.Database
                     IsTemporary         INTEGER DEFAULT 0
                 )
             ");
-                
+
             Execute(@"
                 CREATE TABLE CoreSmartPlaylistEntries (
                     EntryID             INTEGER PRIMARY KEY,
@@ -1055,35 +1055,35 @@ namespace Banshee.Database
                 )
             ");
         }
-        
+
 #endregion
 
 #region Legacy database migration
-        
+
         private void MigrateFromLegacyBanshee()
         {
             Execute(@"
                 INSERT INTO CoreArtists
                     (ArtistID, TagSetID, MusicBrainzID, Name, NameLowered, NameSort, Rating)
                     SELECT DISTINCT null, 0, null, Artist, NULL, NULL, 0
-                        FROM Tracks 
+                        FROM Tracks
                         ORDER BY Artist
             ");
-            
+
             Execute(@"
                 INSERT INTO CoreAlbums
                     (AlbumID, ArtistID, TagSetID, MusicBrainzID, Title, TitleLowered, TitleSort, ReleaseDate,
                     Duration, Year, IsCompilation, ArtistName, ArtistNameLowered, ArtistNameSort, Rating)
                     SELECT DISTINCT null,
-                        (SELECT ArtistID 
-                            FROM CoreArtists 
+                        (SELECT ArtistID
+                            FROM CoreArtists
                             WHERE Name = Tracks.Artist
                             LIMIT 1),
                         0, null, AlbumTitle, NULL, NULL, ReleaseDate, 0, 0, 0, Artist, NULL, NULL, 0
                         FROM Tracks
                         ORDER BY AlbumTitle
             ");
-            
+
             Execute (String.Format (@"
                 INSERT INTO CoreTracks
                     (PrimarySourceID, TrackID, ArtistID, AlbumID, TagSetID, ExternalID, MusicBrainzID, Uri, MimeType,
@@ -1091,15 +1091,15 @@ namespace Banshee.Database
                     Disc, DiscCount, Duration, Year, Genre, Composer, Conductor, Grouping, Copyright, LicenseUri,
                     Comment, Rating, Score, PlayCount, SkipCount, LastPlayedStamp, LastSkippedStamp, DateAddedStamp,
                     DateUpdatedStamp, MetadataHash, BPM, LastSyncedStamp, FileModifiedStamp)
-                    SELECT 
+                    SELECT
                         1,
-                        TrackID, 
-                        (SELECT ArtistID 
-                            FROM CoreArtists 
+                        TrackID,
+                        (SELECT ArtistID
+                            FROM CoreArtists
                             WHERE Name = Artist),
-                        (SELECT a.AlbumID 
+                        (SELECT a.AlbumID
                             FROM CoreAlbums a, CoreArtists b
-                            WHERE a.Title = AlbumTitle 
+                            WHERE a.Title = AlbumTitle
                                 AND a.ArtistID = b.ArtistID
                                 AND b.Name = Artist),
                         0,
@@ -1167,7 +1167,7 @@ namespace Banshee.Database
 
             Execute ("UPDATE CoreSmartPlaylists SET PrimarySourceID = 1");
             Execute ("UPDATE CorePlaylists SET PrimarySourceID = 1");
-            
+
             InitializeOrderedTracks ();
             Migrate_15 ();
         }
@@ -1179,9 +1179,9 @@ namespace Banshee.Database
         private void InitializeOrderedTracks ()
         {
             foreach (long playlist_id in connection.QueryEnumerable<long> ("SELECT PlaylistID FROM CorePlaylists ORDER BY PlaylistID")) {
-                if (connection.Query<long> (@"SELECT COUNT(*) FROM CorePlaylistEntries 
+                if (connection.Query<long> (@"SELECT COUNT(*) FROM CorePlaylistEntries
                     WHERE PlaylistID = ? AND ViewOrder > 0", playlist_id) <= 0) {
-                
+
                     long first_id = connection.Query<long> ("SELECT COUNT(*) FROM CorePlaylistEntries WHERE PlaylistID < ?", playlist_id);
                     connection.Execute (
                         @"UPDATE CorePlaylistEntries SET ViewOrder = (ROWID - ?) WHERE PlaylistID = ?",
@@ -1210,7 +1210,7 @@ namespace Banshee.Database
                 RefreshMetadataDelayed ();
             }
         }
-        
+
         private void ReloadAllSources (Client client)
         {
             Application.ClientStarted -= ReloadAllSources;
@@ -1220,9 +1220,9 @@ namespace Banshee.Database
                 }
             }
         }
-        
+
 #endregion
-        
+
 #region Metadata Refresh Driver
 
         private void RefreshMetadataDelayed ()
@@ -1275,7 +1275,7 @@ namespace Banshee.Database
                                 Log.Warning (String.Format ("Failed to update metadata for {0}", track),
                                     e.GetType ().ToString (), false);
                             }
-                            
+
                             track.Save (false);
                             track.Artist.Save ();
                             track.Album.Save ();
@@ -1299,7 +1299,7 @@ namespace Banshee.Database
             job.Finish ();
             ServiceManager.SourceManager.MusicLibrary.NotifyTracksChanged ();
         }
-        
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.Services/Banshee.Database/BansheeModelCache.cs b/src/Core/Banshee.Services/Banshee.Database/BansheeModelCache.cs
index e0633eb..83a66da 100644
--- a/src/Core/Banshee.Services/Banshee.Database/BansheeModelCache.cs
+++ b/src/Core/Banshee.Services/Banshee.Database/BansheeModelCache.cs
@@ -44,11 +44,11 @@ namespace Banshee.Database
             : base (connection, uuid, model, provider)
         {
         }
-        
+
         protected override string CacheModelsTableName {
             get { return "CoreCacheModels"; }
         }
-        
+
         protected override string CacheTableName {
             get { return "CoreCache"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Database/BansheeModelProvider.cs b/src/Core/Banshee.Services/Banshee.Database/BansheeModelProvider.cs
index d92cec4..033c69e 100644
--- a/src/Core/Banshee.Services/Banshee.Database/BansheeModelProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Database/BansheeModelProvider.cs
@@ -48,15 +48,15 @@ namespace Banshee.Database
             : base (connection, table_name, BansheeDatabaseSettings.CheckTables)
         {
         }
-        
+
         protected override sealed void CheckVersion ()
         {
             CheckVersion (TableName, "ModelVersion", ModelVersion, MigrateTable);
             CheckVersion ("Database", "Version", DatabaseVersion, MigrateDatabase);
         }
-        
+
         private delegate void MigrateDel (int version);
-        
+
         private static void CheckVersion (string namespce, string key, int new_version, MigrateDel func)
         {
             int old_version = DatabaseConfigurationClient.Client.Get <int> (
diff --git a/src/Core/Banshee.Services/Banshee.Database/SortKeyUpdater.cs b/src/Core/Banshee.Services/Banshee.Database/SortKeyUpdater.cs
index 09a4358..5ca91f1 100644
--- a/src/Core/Banshee.Services/Banshee.Database/SortKeyUpdater.cs
+++ b/src/Core/Banshee.Services/Banshee.Database/SortKeyUpdater.cs
@@ -43,12 +43,12 @@ namespace Banshee.Database
                 ForceUpdate (locale);
             }
         }
-        
+
         public static void ForceUpdate ()
         {
             ForceUpdate (CultureInfo.CurrentCulture.Name);
         }
-        
+
         protected static void ForceUpdate (string new_locale)
         {
             ServiceManager.DbConnection.Execute (@"
@@ -75,7 +75,7 @@ namespace Banshee.Database
 
             DatabaseConfigurationClient.Client.Set<string> ("SortKeyLocale", new_locale);
         }
-        
+
         protected static string PreviousLocale {
             get {
                 return DatabaseConfigurationClient.Client.Get<string> ("SortKeyLocale", "");
diff --git a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs
index 31d792b..e9037d9 100644
--- a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerManager.cs
@@ -43,11 +43,11 @@ namespace Banshee.Equalizer
     {
         private List<EqualizerSetting> equalizers = new List<EqualizerSetting> ();
         private string path;
-        
+
         public event EqualizerSettingEventHandler EqualizerAdded;
         public event EqualizerSettingEventHandler EqualizerRemoved;
         public event EqualizerSettingEventHandler EqualizerChanged;
-        
+
         private static EqualizerManager instance;
         public static EqualizerManager Instance {
             get {
@@ -55,25 +55,25 @@ namespace Banshee.Equalizer
                     instance = new EqualizerManager (System.IO.Path.Combine (
                         Paths.ApplicationData, "equalizers.xml"));
                 }
-                
+
                 return instance;
             }
         }
-        
+
         public EqualizerManager ()
         {
         }
-        
+
         public EqualizerManager (string path)
         {
             this.path = path;
-            
+
             try {
                 Load ();
             } catch {
             }
         }
-    
+
         public void Add (EqualizerSetting eq)
         {
             eq.Changed += OnEqualizerSettingChanged;
@@ -81,98 +81,98 @@ namespace Banshee.Equalizer
             QueueSave ();
             OnEqualizerAdded (eq);
         }
-        
+
         public void Remove (EqualizerSetting eq)
         {
             Remove (eq, true);
         }
-        
+
         private void Remove (EqualizerSetting eq, bool shouldQueueSave)
         {
             if (eq == null) {
                 return;
             }
-            
+
             eq.Changed -= OnEqualizerSettingChanged;
             equalizers.Remove (eq);
             OnEqualizerRemoved (eq);
-            
+
             if (shouldQueueSave) {
                 QueueSave ();
             }
         }
-        
+
         public void Clear ()
         {
             while (equalizers.Count > 0) {
                 Remove (equalizers[0], false);
             }
-            
+
             QueueSave ();
         }
-        
+
         public void Enable (EqualizerSetting eq)
         {
             if (eq != null) {
                 eq.Enabled = true;
-                
+
                 // Make a copy of the Dictionary first, otherwise it'll become out of sync
                 // when we begin to change the gain on the bands.
                 Dictionary<uint, double> bands = new Dictionary<uint, double> (eq.Bands);
-                
+
                 foreach(KeyValuePair<uint, double> band in bands)
                 {
                     eq.SetGain (band.Key, band.Value);
                 }
-                
+
                 // Reset preamp.
                 eq.AmplifierLevel = eq.AmplifierLevel;
             }
         }
-        
+
         public void Disable (EqualizerSetting eq)
         {
             if (eq != null) {
                 eq.Enabled = false;
-            
+
                 // Set the actual equalizer gain on all bands to 0 dB,
                 // but don't change the gain in the dictionary (we can use/change those values
                 // later, but not affect the actual audio stream until we're enabled again).
                 for (uint i = 0; i < eq.BandCount; i++) {
                     ((IEqualizer) ServiceManager.PlayerEngine.ActiveEngine).SetEqualizerGain (i, 0);
                 }
-                
+
                 ((IEqualizer) ServiceManager.PlayerEngine.ActiveEngine).AmplifierLevel = 0;
             }
         }
-        
+
         public void Load ()
         {
             Load (path);
         }
-        
+
         public void Load (string path)
         {
             XmlDocument doc = new XmlDocument ();
-            
+
             try {
                 doc.Load (path);
             } catch {
             }
-            
+
             Clear ();
-            
+
             if (doc.DocumentElement == null || doc.DocumentElement.ChildNodes == null) {
                 return;
             }
-            
+
             foreach (XmlNode node in doc.DocumentElement.ChildNodes) {
                 if(node.Name != "equalizer") {
                     throw new XmlException ("equalizer node was expected");
                 }
-                
+
                 EqualizerSetting eq = new EqualizerSetting (node.Attributes["name"].Value);
-                
+
                 foreach (XmlNode child in node) {
                     if (child.Name == "preamp") {
                         eq.AmplifierLevel = Convert.ToDouble (child.InnerText);
@@ -183,32 +183,32 @@ namespace Banshee.Equalizer
                         throw new XmlException ("Invalid node, expected one of preamp or band");
                     }
                 }
-                
+
                 Add (eq);
             }
         }
-        
+
         public void Save ()
         {
             Save (path);
         }
-        
+
         public void Save (string path)
         {
             XmlDocument doc = new XmlDocument ();
             XmlNode root = doc.CreateNode (XmlNodeType.Element, "equalizers", null);
             doc.AppendChild (root);
-            
+
             foreach (EqualizerSetting eq in this) {
                 XmlNode root_node = doc.CreateNode (XmlNodeType.Element, "equalizer", null);
-            
+
                 XmlAttribute name_node = doc.CreateAttribute ("name");
                 name_node.Value = eq.Name;
                 XmlNode preamp_node = doc.CreateNode (XmlNodeType.Element, "preamp", null);
                 XmlNode preamp_node_value = doc.CreateNode (XmlNodeType.Text, "value", null);
                 preamp_node_value.Value = Convert.ToString (eq.AmplifierLevel);
                 preamp_node.AppendChild (preamp_node_value);
-                
+
                 root_node.Attributes.Append (name_node);
                 root_node.AppendChild (preamp_node);
 
@@ -217,20 +217,20 @@ namespace Banshee.Equalizer
                     XmlNode band_node_value = doc.CreateNode (XmlNodeType.Text, "value", null);
                     band_node_value.Value = Convert.ToString (band.Value);
                     band_node.AppendChild (band_node_value);
-                    
+
                     XmlAttribute frequency_node = doc.CreateAttribute ("num");
                     frequency_node.Value = Convert.ToString (band.Key);
                     band_node.Attributes.Append (frequency_node);
-                    
+
                     root_node.AppendChild (band_node);
                 }
-                
+
                 root.AppendChild (root_node);
             }
-            
+
             doc.Save (path);
         }
-        
+
         protected virtual void OnEqualizerAdded (EqualizerSetting eq)
         {
             EqualizerSettingEventHandler handler = EqualizerAdded;
@@ -238,7 +238,7 @@ namespace Banshee.Equalizer
                 handler (this, new EqualizerSettingEventArgs (eq));
             }
         }
-        
+
         protected virtual void OnEqualizerRemoved (EqualizerSetting eq)
         {
             EqualizerSettingEventHandler handler = EqualizerRemoved;
@@ -246,7 +246,7 @@ namespace Banshee.Equalizer
                 handler (this, new EqualizerSettingEventArgs (eq));
             }
         }
-        
+
         protected virtual void OnEqualizerChanged (EqualizerSetting eq)
         {
             EqualizerSettingEventHandler handler = EqualizerChanged;
@@ -254,37 +254,37 @@ namespace Banshee.Equalizer
                 handler (this, new EqualizerSettingEventArgs (eq));
             }
         }
-        
+
         private void OnEqualizerSettingChanged (object o, EventArgs args)
         {
             OnEqualizerChanged (o as EqualizerSetting);
             QueueSave ();
         }
-        
+
         private uint queue_save_id = 0;
         private void QueueSave ()
         {
             if (queue_save_id > 0) {
                 return;
             }
-            
+
             queue_save_id = GLib.Timeout.Add (2500, delegate {
                 Save ();
                 queue_save_id = 0;
                 return false;
             });
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return equalizers.GetEnumerator ();
         }
-        
+
         public IEnumerator<EqualizerSetting> GetEnumerator ()
         {
             return equalizers.GetEnumerator ();
         }
-        
+
         public string Path {
             get { return path; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs
index ed9cd21..a12fce9 100644
--- a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs
+++ b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSetting.cs
@@ -42,19 +42,19 @@ namespace Banshee.Equalizer
         private double amp = 0;    // amplifier dB (0 dB == passthrough)
         private bool enabled = true;
         private const uint bandcount = 10;
-        
+
         public event EventHandler Changed;
-        
+
         public EqualizerSetting (string name)
         {
             this.name = name;
-            
+
             // Fill in 0 dB for all bands at init.
             for (uint i = 0; i < bandcount; i++) {
                 bands.Add(i, 0);
             }
         }
-        
+
         /// <summary>
         /// Human-readable name of this equalizer instance.
         /// </summary>
@@ -67,27 +67,27 @@ namespace Banshee.Equalizer
                 OnChanged ();
             }
         }
-        
+
         public bool Enabled {
             get { return enabled; }
             set
             {
                 enabled = value;
                 EnabledSchema.Set (value);
-                
+
                 // Make this the new default preset (last changed).
                 PresetSchema.Set (this.name);
             }
         }
-        
+
         public Dictionary<uint, double> Bands {
             get { return bands; }
         }
-        
+
         public uint BandCount {
             get { return bandcount; }
         }
-        
+
         /// <summary>
         /// Sets/gets the preamp gain.
         /// </summary>
@@ -115,20 +115,20 @@ namespace Banshee.Equalizer
             } else {
                 bands.Add (band, val);
             }
-            
+
             // Tell engine that we've changed.
             if (enabled) {
                 ((IEqualizer) ServiceManager.PlayerEngine.ActiveEngine).SetEqualizerGain (band, val);
             }
-            
+
             OnChanged ();
         }
-        
+
         public double this[uint band] {
             get { return bands[band]; }
             set { SetGain (band, value); }
         }
-        
+
         protected virtual void OnChanged ()
         {
             EventHandler handler = Changed;
@@ -136,14 +136,14 @@ namespace Banshee.Equalizer
                 handler (this, new EventArgs ());
             }
         }
-        
+
         public static readonly SchemaEntry<bool> EnabledSchema = new SchemaEntry<bool> (
             "player_engine", "equalizer_enabled",
             false,
             "Equalizer status",
             "Whether or not the equalizer is set to be enabled."
         );
-        
+
         public static readonly SchemaEntry<string> PresetSchema = new SchemaEntry<string> (
             "player_engine", "equalizer_preset",
             "",
diff --git a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSettingEvent.cs b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSettingEvent.cs
index 2ec1a54..b33ec61 100644
--- a/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSettingEvent.cs
+++ b/src/Core/Banshee.Services/Banshee.Equalizer/EqualizerSettingEvent.cs
@@ -31,16 +31,16 @@ using System;
 namespace Banshee.Equalizer
 {
     public delegate void EqualizerSettingEventHandler (object o, EqualizerSettingEventArgs args);
-    
+
     public class EqualizerSettingEventArgs : EventArgs
     {
         private EqualizerSetting eq;
-        
+
         public EqualizerSettingEventArgs (EqualizerSetting eq)
         {
             this.eq = eq;
         }
-        
+
         public EqualizerSetting EqualizerSetting {
             get { return eq; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/DeviceCommand.cs b/src/Core/Banshee.Services/Banshee.Hardware/DeviceCommand.cs
index cd65c12..7b13a41 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/DeviceCommand.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/DeviceCommand.cs
@@ -66,7 +66,7 @@ namespace Banshee.Hardware
             }
 
             DeviceCommand d_command = null;
-            
+
             switch (command) {
                 case "device-activate-play":
                     d_command = new DeviceCommand (DeviceCommandAction.Activate | DeviceCommandAction.Play);
@@ -84,7 +84,7 @@ namespace Banshee.Hardware
                     return null;
             }
 
-            // FIXME: Should use GIO here to resolve UNIX device nodes or 
+            // FIXME: Should use GIO here to resolve UNIX device nodes or
             // HAL UDIs from the GIO URI that we were likely given by Nautilus
 
             try {
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs b/src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs
index 6feb20b..656aa7c 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs
@@ -40,38 +40,38 @@ namespace Banshee.Hardware
     {
         private IHardwareManager manager;
         private Dictionary<string, ICustomDeviceProvider> custom_device_providers = new Dictionary<string, ICustomDeviceProvider> ();
-        
+
         public event DeviceAddedHandler DeviceAdded;
         public event DeviceRemovedHandler DeviceRemoved;
-        
+
         public HardwareManager ()
         {
             foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/Platform/HardwareManager")) {
                 try {
                     if (manager != null) {
                         throw new Exception (String.Format (
-                            "A HardwareManager has already been loaded ({0}). Only one can be loaded.", 
+                            "A HardwareManager has already been loaded ({0}). Only one can be loaded.",
                             manager.GetType ().FullName));
                     }
-                    
+
                     manager = (IHardwareManager)node.CreateInstance (typeof (IHardwareManager));
                 } catch (Exception e) {
                     Log.Warning ("Hardware manager extension failed to load", e.Message);
                 }
             }
-            
+
             if (manager == null) {
                 throw new Exception ("No HardwareManager extensions could be loaded. Hardware support will be disabled.");
             }
-            
+
             manager.DeviceAdded += OnDeviceAdded;
             manager.DeviceRemoved += OnDeviceRemoved;
-            
+
             ServiceManager.Get<DBusCommandService> ().ArgumentPushed += OnCommandLineArgument;
 
             AddinManager.AddExtensionNodeHandler ("/Banshee/Platform/HardwareDeviceProvider", OnExtensionChanged);
         }
-        
+
         public void Dispose ()
         {
             lock (this) {
@@ -83,25 +83,25 @@ namespace Banshee.Hardware
                 }
 
                 ServiceManager.Get<DBusCommandService> ().ArgumentPushed -= OnCommandLineArgument;
-                
+
                 if (custom_device_providers != null) {
                     foreach (ICustomDeviceProvider provider in custom_device_providers.Values) {
                         provider.Dispose ();
                     }
-                    
+
                     custom_device_providers.Clear ();
                     custom_device_providers = null;
                 }
-                
+
                 AddinManager.RemoveExtensionNodeHandler ("/Banshee/Platform/HardwareDeviceProvider", OnExtensionChanged);
             }
         }
-        
-        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args) 
+
+        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args)
         {
             lock (this) {
                 TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;
-                
+
                 if (args.Change == ExtensionChange.Add && !custom_device_providers.ContainsKey (node.Id)) {
                     custom_device_providers.Add (node.Id, (ICustomDeviceProvider)node.CreateInstance ());
                 } else if (args.Change == ExtensionChange.Remove && custom_device_providers.ContainsKey (node.Id)) {
@@ -125,9 +125,9 @@ namespace Banshee.Hardware
                     }
                 }
             }
-            
+
             remove { device_command -= value; }
-        }           
+        }
 
         private Banshee.Hardware.DeviceCommand startup_device_command;
         private bool startup_device_command_checked = false;
@@ -167,7 +167,7 @@ namespace Banshee.Hardware
         }
 
 #endregion
-        
+
         private void OnDeviceAdded (object o, DeviceAddedArgs args)
         {
             lock (this) {
@@ -175,16 +175,16 @@ namespace Banshee.Hardware
                 if (handler != null) {
                     DeviceAddedArgs raise_args = args;
                     IDevice cast_device = CastToCustomDevice<IDevice> (args.Device);
-                    
+
                     if (cast_device != args.Device) {
                         raise_args = new DeviceAddedArgs (cast_device);
                     }
-                    
+
                     handler (this, raise_args);
                 }
             }
         }
-        
+
         private void OnDeviceRemoved (object o, DeviceRemovedArgs args)
         {
             lock (this) {
@@ -194,7 +194,7 @@ namespace Banshee.Hardware
                 }
             }
         }
-        
+
         private T CastToCustomDevice<T> (T device) where T : class, IDevice
         {
             foreach (ICustomDeviceProvider provider in custom_device_providers.Values) {
@@ -203,10 +203,10 @@ namespace Banshee.Hardware
                     return new_device;
                 }
             }
-            
+
             return device;
         }
-        
+
         private IEnumerable<T> CastToCustomDevice<T> (IEnumerable<T> devices) where T : class, IDevice
         {
             foreach (T device in devices) {
@@ -218,34 +218,34 @@ namespace Banshee.Hardware
         {
             return CastToCustomDevice<IDevice> (manager.GetAllDevices ());
         }
-        
+
         public IEnumerable<IBlockDevice> GetAllBlockDevices ()
         {
             return CastToCustomDevice<IBlockDevice> (manager.GetAllBlockDevices ());
         }
-        
+
         public IEnumerable<ICdromDevice> GetAllCdromDevices ()
         {
             return CastToCustomDevice<ICdromDevice> (manager.GetAllCdromDevices ());
         }
-        
+
         public IEnumerable<IDiskDevice> GetAllDiskDevices ()
         {
             return CastToCustomDevice<IDiskDevice> (manager.GetAllDiskDevices ());
         }
-        
+
         public void Test ()
         {
             Console.WriteLine ("All Block Devices:");
             PrintBlockDeviceList (GetAllBlockDevices ());
-            
+
             Console.WriteLine ("All CD-ROM Devices:");
             PrintBlockDeviceList (GetAllCdromDevices ());
-            
+
             Console.WriteLine ("All Disk Devices:");
             PrintBlockDeviceList (GetAllDiskDevices ());
         }
-        
+
         private void PrintBlockDeviceList (System.Collections.IEnumerable devices)
         {
             foreach (IBlockDevice device in devices) {
@@ -255,9 +255,9 @@ namespace Banshee.Hardware
                 }
             }
         }
-             
+
         string IService.ServiceName {
             get { return "HardwareManager"; }
-        } 
+        }
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/IDevice.cs b/src/Core/Banshee.Services/Banshee.Hardware/IDevice.cs
index 0fb4cc1..4c76bf5 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/IDevice.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/IDevice.cs
@@ -40,16 +40,16 @@ namespace Banshee.Hardware
         string Vendor { get; }
 
         IDeviceMediaCapabilities MediaCapabilities { get; }
-        
+
         bool PropertyExists (string key);
-        
+
         string GetPropertyString (string key);
         double GetPropertyDouble (string key);
         bool GetPropertyBoolean (string key);
         int GetPropertyInteger (string key);
         ulong GetPropertyUInt64 (string key);
         string [] GetPropertyStringList (string key);
-        
+
         IUsbDevice ResolveRootUsbDevice ();
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/IHardwareManager.cs b/src/Core/Banshee.Services/Banshee.Hardware/IHardwareManager.cs
index bf01ed4..e1c512c 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/IHardwareManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/IHardwareManager.cs
@@ -35,7 +35,7 @@ namespace Banshee.Hardware
     {
         event DeviceAddedHandler DeviceAdded;
         event DeviceRemovedHandler DeviceRemoved;
-    
+
         IEnumerable<IDevice> GetAllDevices ();
         IEnumerable<IBlockDevice> GetAllBlockDevices ();
         IEnumerable<ICdromDevice> GetAllCdromDevices ();
@@ -44,30 +44,30 @@ namespace Banshee.Hardware
 
     public delegate void DeviceAddedHandler (object o, DeviceAddedArgs args);
     public delegate void DeviceRemovedHandler (object o, DeviceRemovedArgs args);
-    
+
     public sealed class DeviceAddedArgs : EventArgs
     {
         private IDevice device;
-        
+
         public DeviceAddedArgs (IDevice device)
         {
             this.device = device;
         }
-        
+
         public IDevice Device {
             get { return device; }
         }
     }
-    
+
     public sealed class DeviceRemovedArgs : EventArgs
     {
         private string device_uuid;
-        
+
         public DeviceRemovedArgs (string deviceUuid)
         {
             this.device_uuid = deviceUuid;
         }
-        
+
         public string DeviceUuid {
             get { return device_uuid; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs b/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs
index c46f404..4020a49 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs
@@ -41,10 +41,10 @@ namespace Banshee.Hardware
 
         bool ShouldIgnore { get; }
         string FileSystem { get; }
-        
+
         bool CanEject { get; }
         void Eject ();
-        
+
         bool CanUnmount { get; }
         void Unmount ();
     }
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/VendorProductDeviceNode.cs b/src/Core/Banshee.Services/Banshee.Hardware/VendorProductDeviceNode.cs
index 15afb8d..180d614 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/VendorProductDeviceNode.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/VendorProductDeviceNode.cs
@@ -41,32 +41,32 @@ namespace Banshee.Hardware
     {
         private short [] vendor_ids;
         private short [] product_ids;
-        
+
         private string vendor_name;
         public string VendorName {
             get { return vendor_name; }
         }
-        
+
         private string product_name;
         public string ProductName {
             get { return product_name; }
         }
-        
+
         public bool Matches (short vendorId, short productId)
         {
             return Match (vendor_ids, vendorId) && Match (product_ids, productId);
         }
-        
+
         protected override void Read (NodeElement elem)
         {
             base.Read (elem);
-            
+
             vendor_name = elem.GetAttribute ("vendor-name");
             product_name = elem.GetAttribute ("product-name");
             vendor_ids = ParseIds (elem.GetAttribute ("vendor-id"));
             product_ids = ParseIds (elem.GetAttribute ("product-id"));
-        }        
-        
+        }
+
         private static bool Match (short [] ids, short match)
         {
             for (int i = 0; i < ids.Length; i++) {
@@ -76,7 +76,7 @@ namespace Banshee.Hardware
             }
             return false;
         }
-        
+
         private static short [] ParseIds (string value)
         {
             string [] split = value.Split (',');
@@ -86,13 +86,13 @@ namespace Banshee.Hardware
             }
             return ids;
         }
-        
+
         private static short ParseId (string value)
         {
             // Parse as an integer, then typecast, to avoid overflow issues
             // with regards to the sign bit.
             int result = 0;
-            
+
             if (value.StartsWith ("0x")) {
                 Int32.TryParse (value.Substring (2), NumberStyles.HexNumber,
                     CultureInfo.InvariantCulture, out result);
@@ -100,7 +100,7 @@ namespace Banshee.Hardware
                 Int32.TryParse (value, NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite,
                     CultureInfo.InvariantCulture, out result);
             }
-            
+
             return (short)result;
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.Hardware/VendorProductInfo.cs b/src/Core/Banshee.Services/Banshee.Hardware/VendorProductInfo.cs
index eb8e7e8..06e9e12 100644
--- a/src/Core/Banshee.Services/Banshee.Hardware/VendorProductInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Hardware/VendorProductInfo.cs
@@ -33,7 +33,7 @@ namespace Banshee.Hardware
     public struct VendorProductInfo
     {
         public static VendorProductInfo Zero;
-    
+
         public VendorProductInfo (string vendorName, string productName, int vendorProductId)
         {
             vendor_name = vendorName;
@@ -41,8 +41,8 @@ namespace Banshee.Hardware
             vendor_id = (short)(vendorProductId >> 16);
             product_id = (short)(vendorProductId & 0xffff);
         }
-    
-        public VendorProductInfo (string vendorName, string productName, 
+
+        public VendorProductInfo (string vendorName, string productName,
             short vendorId, short productId)
         {
             vendor_name = vendorName;
@@ -50,42 +50,42 @@ namespace Banshee.Hardware
             vendor_id = vendorId;
             product_id = productId;
         }
-        
+
         public override int GetHashCode()
         {
             return VendorProductId;
         }
-        
+
         public override string ToString()
         {
-            return String.Format ("{0}, {1}; Vendor ID = {2}, Product ID = {3} ({4})", 
+            return String.Format ("{0}, {1}; Vendor ID = {2}, Product ID = {3} ({4})",
                 VendorName, ProductName, VendorId, ProductId, VendorProductId);
         }
-        
+
         private string vendor_name;
         public string VendorName {
             get { return vendor_name; }
             set { vendor_name = value; }
         }
-        
+
         private string product_name;
         public string ProductName {
             get { return product_name; }
             set { product_name = value; }
         }
-    
+
         private short vendor_id;
         public short VendorId {
             get { return vendor_id; }
             set { vendor_id = value; }
         }
-        
+
         private short product_id;
         public short ProductId {
             get { return product_id; }
             set { product_id = value; }
-        }   
-        
+        }
+
         public int VendorProductId {
             get { return (int)(vendor_id << 16) | product_id; }
             set {
diff --git a/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
index 4c81870..c93ba97 100644
--- a/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
@@ -43,21 +43,21 @@ namespace Banshee.Library
                 Environment.GetFolderPath (Environment.SpecialFolder.Personal)
             );
         }
-        
+
         public string Name {
             get { return Catalog.GetString ("Home Folder"); }
         }
 
         public string ImportLabel { get { return null; } }
-        
+
         public string [] IconNames {
             get { return new string [] { "user-home", "gtk-home" }; }
         }
-        
+
         public bool CanImport {
             get { return true; }
         }
-        
+
         public int SortOrder {
             get { return 10; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs b/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs
index 8761f6d..029d086 100644
--- a/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ImportSourceManager.cs
 //
 // Author:
@@ -42,7 +42,7 @@ namespace Banshee.Library
         public ImportSourceManager ()
         {
         }
-        
+
         public IEnumerator<IImportSource> GetEnumerator ()
         {
             List<IImportSource> import_sources = new List<IImportSource> ();
@@ -53,15 +53,15 @@ namespace Banshee.Library
                     import_sources.Add (source);
                 }
             }
-            
+
             return import_sources.GetEnumerator ();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
+
         string IService.ServiceName {
             get { return "ImportSourceManager"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs b/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
index 89d6878..d308982 100644
--- a/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/LibraryImportManager.cs
@@ -1,4 +1,4 @@
-// 
+//
 // LibraryImportManager.cs
 //
 // Authors:
@@ -64,11 +64,11 @@ namespace Banshee.Library
             get {
                 if (base.PrimarySourceIds == null) {
                     base.PrimarySourceIds = new int [] {
-                        ServiceManager.SourceManager.VideoLibrary.DbId, 
+                        ServiceManager.SourceManager.VideoLibrary.DbId,
                         ServiceManager.SourceManager.MusicLibrary.DbId
                     };
                 }
-                
+
                 return base.PrimarySourceIds;
             }
         }
@@ -85,7 +85,7 @@ namespace Banshee.Library
                 return ServiceManager.SourceManager.MusicLibrary;
             }
         }
-        
+
         string IService.ServiceName {
             get { return "LibraryImportManager"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
index 31d41b1..ad713e1 100644
--- a/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/LibrarySource.cs
@@ -59,8 +59,8 @@ namespace Banshee.Library
             IsLocal = true;
             base_dir_schema = CreateSchema<string> ("library-location", null, "The base directory under which files for this library are stored", null);
             AfterInitialized ();
-            
-            Section library_section = PreferencesPage.Add (new Section ("library-location", 
+
+            Section library_section = PreferencesPage.Add (new Section ("library-location",
                 // Translators: {0} is the library name, eg 'Music Library' or 'Podcasts'
                 String.Format (Catalog.GetString ("{0} Folder"), Name), 2));
 
@@ -106,9 +106,9 @@ namespace Banshee.Library
                 base.BaseDirectory = value;
             }
         }
-        
+
         public abstract string DefaultBaseDirectory { get; }
-        
+
         public override bool Indexable {
             get { return true; }
         }
@@ -125,7 +125,7 @@ namespace Banshee.Library
             } catch (System.IO.FileNotFoundException) {
             } catch (System.IO.DirectoryNotFoundException) {
             }
-            
+
             return true;
         }
 
diff --git a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
index 35ce580..7eb8f3c 100644
--- a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
@@ -48,7 +48,7 @@ namespace Banshee.Library
             MediaTypes = TrackMediaAttributes.Music | TrackMediaAttributes.AudioStream;
             NotMediaTypes = TrackMediaAttributes.Podcast | TrackMediaAttributes.VideoStream | TrackMediaAttributes.AudioBook;
             Properties.SetStringList ("Icon.Name", "audio-x-generic", "source-library");
-            
+
             // Migrate the old library-location schema, if necessary
             if (DatabaseConfigurationClient.Client.Get<int> ("MusicLibraryLocationMigrated", 0) != 1) {
                 string old_location = OldLocationSchema.Get ();
@@ -58,13 +58,13 @@ namespace Banshee.Library
                 DatabaseConfigurationClient.Client.Set<int> ("MusicLibraryLocationMigrated", 1);
             }
 
-            Section file_system = PreferencesPage.Add (new Section ("file-system", 
+            Section file_system = PreferencesPage.Add (new Section ("file-system",
                 Catalog.GetString ("File System Organization"), 5));
 
-            file_system.Add (new SchemaPreference<string> (LibrarySchema.FolderPattern, 
+            file_system.Add (new SchemaPreference<string> (LibrarySchema.FolderPattern,
                 Catalog.GetString ("Folder hie_rarchy")));
-            
-            file_system.Add (new SchemaPreference<string> (LibrarySchema.FilePattern,     
+
+            file_system.Add (new SchemaPreference<string> (LibrarySchema.FilePattern,
                 Catalog.GetString ("File _name")));
 
             PreferencesPage.Add (new Section ("misc", Catalog.GetString ("Miscellaneous"), 10));
@@ -74,7 +74,7 @@ namespace Banshee.Library
         {
             return Banshee.Base.Paths.GetXdgDirectoryUnderHome ("XDG_MUSIC_DIR", "Music");
         }
-        
+
         public override string DefaultBaseDirectory {
             get { return GetDefaultBaseDirectory (); }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
index 191c650..8047be7 100644
--- a/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
@@ -45,14 +45,14 @@ namespace Banshee.Library
         private bool importing;
         private UserJob user_job;
         private readonly object user_job_mutex = new object ();
-        
+
         private void CreateUserJob ()
         {
             lock (user_job_mutex) {
                 if(user_job != null) {
                     return;
                 }
-                
+
                 user_job = new UserJob (UserJobTitle, UserJobTitle, Catalog.GetString ("Importing Songs"));
                 user_job.SetResources (Resource.Cpu, Resource.Disk, Resource.Database);
                 user_job.PriorityHints = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
@@ -62,19 +62,19 @@ namespace Banshee.Library
                 user_job.Register ();
             }
         }
-        
+
         private void DestroyUserJob ()
         {
             lock(user_job_mutex) {
                 if(user_job == null) {
                     return;
                 }
-                
+
                 user_job.Finish ();
                 user_job = null;
             }
         }
-        
+
         protected void UpdateUserJob (int processed, int count, string artist, string title)
         {
             user_job.Title = String.Format(
@@ -83,7 +83,7 @@ namespace Banshee.Library
             user_job.Status = String.Format("{0} - {1}", artist, title);
             user_job.Progress = processed / (double)count;
         }
-        
+
         protected void LogError (string path, Exception e)
         {
             LogError (path, e.Message);
@@ -94,18 +94,18 @@ namespace Banshee.Library
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 ErrorSource error_source = ServiceManager.SourceManager.MusicLibrary.ErrorSource;
                 error_source.AddMessage (path, msg);
-    
+
                 Log.Error (path, msg, false);
             });
         }
-        
+
         protected bool CheckForCanceled ()
         {
             lock(user_job_mutex) {
                 return user_job != null && user_job.IsCancelRequested;
             }
         }
-        
+
         private string user_job_title;
         protected virtual string UserJobTitle {
             get {
@@ -115,24 +115,24 @@ namespace Banshee.Library
                 return user_job_title;
             }
         }
-        
+
         private string cancel_message = Catalog.GetString ("The import process is currently running. Would you like to stop it?");
         protected virtual string CancelMessage {
             get { return cancel_message; }
         }
-    
+
         protected virtual bool CanCancel {
             get { return true; }
         }
-        
+
 #region IImportSource
-        
+
         public abstract string Name { get; }
 
         public virtual string ImportLabel { get { return null; } }
 
         public abstract string[] IconNames { get; }
-        
+
         public abstract int SortOrder { get; }
 
         public virtual bool CanImport {
@@ -144,15 +144,15 @@ namespace Banshee.Library
             if (importing || !ConfirmImport ()) {
                 return;
             }
-            
+
             importing = true;
             CreateUserJob ();
             ThreadPool.QueueUserWorkItem (ImportCore);
             importing = false;
         }
-        
+
 #endregion
-        
+
         private void ImportCore (object o)
         {
             ImportCore ();
@@ -165,6 +165,6 @@ namespace Banshee.Library
         }
 
         protected abstract void ImportCore ();
-        
+
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs
index 467b40e..7a6ebdd 100644
--- a/src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs
@@ -67,11 +67,11 @@ namespace Banshee.Library
         public override bool ShowBrowser {
             get { return false; }
         }
-        
+
         protected override bool HasArtistAlbum {
             get { return false; }
         }
-        
+
         public override string DefaultBaseDirectory {
             get { return Banshee.Base.Paths.GetXdgDirectoryUnderHome ("XDG_VIDEOS_DIR", "Videos"); }
         }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/IAudioCdRipper.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/IAudioCdRipper.cs
index e317616..8feb756 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/IAudioCdRipper.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/IAudioCdRipper.cs
@@ -36,20 +36,20 @@ namespace Banshee.MediaEngine
     public delegate void AudioCdRipperProgressHandler (object o, AudioCdRipperProgressArgs args);
     public delegate void AudioCdRipperTrackFinishedHandler (object o, AudioCdRipperTrackFinishedArgs args);
     public delegate void AudioCdRipperErrorHandler (object o, AudioCdRipperErrorArgs args);
- 
+
     public interface IAudioCdRipper
     {
         event AudioCdRipperProgressHandler Progress;
         event AudioCdRipperTrackFinishedHandler TrackFinished;
         event AudioCdRipperErrorHandler Error;
-        
+
         void Begin (string device, bool enableErrorCorrection);
         void Finish ();
         void Cancel ();
-        
+
         void RipTrack (int trackIndex, TrackInfo track, SafeUri outputUri, out bool taggingSupported);
     }
-                             
+
     public sealed class AudioCdRipperProgressArgs : EventArgs
     {
         public AudioCdRipperProgressArgs (TrackInfo track, TimeSpan encodedTime, TimeSpan totalTime)
@@ -58,7 +58,7 @@ namespace Banshee.MediaEngine
             this.encoded_time = encodedTime;
             this.total_time = totalTime;
         }
-        
+
         private TimeSpan encoded_time;
         public TimeSpan EncodedTime {
             get { return encoded_time; }
@@ -87,13 +87,13 @@ namespace Banshee.MediaEngine
         public TrackInfo Track {
             get { return track; }
         }
-        
+
         private SafeUri uri;
         public SafeUri Uri {
             get { return uri; }
         }
     }
-    
+
     public sealed class AudioCdRipperErrorArgs : EventArgs
     {
         public AudioCdRipperErrorArgs (TrackInfo track, string message)
@@ -101,12 +101,12 @@ namespace Banshee.MediaEngine
             this.track = track;
             this.message = message;
         }
-        
+
         private TrackInfo track;
         public TrackInfo Track {
             get { return track; }
         }
-        
+
         private string message;
         public string Message {
             get { return message; }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/IBpmDetector.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/IBpmDetector.cs
index 888a4ab..a5aabfc 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/IBpmDetector.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/IBpmDetector.cs
@@ -35,7 +35,7 @@ using Banshee.Collection;
 namespace Banshee.MediaEngine
 {
     public delegate void BpmEventHandler (object o, BpmEventArgs args);
-    
+
     public class BpmEventArgs : EventArgs
     {
         public SafeUri Uri { get; private set; }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/IEqualizer.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/IEqualizer.cs
index 4d01bc4..3ca8ca8 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/IEqualizer.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/IEqualizer.cs
@@ -37,25 +37,25 @@ namespace Banshee.MediaEngine
         /// Sets the gain of an equalizer band.
         /// </summary>
         void SetEqualizerGain (uint band, double value);
-        
+
         /// <summary>
         /// Whether or not the engine supports the equalizer.
         /// </summary>
         bool SupportsEqualizer {
             get;
         }
-        
+
         double AmplifierLevel {
             set;
         }
-        
+
         /// <summary>
         /// Minimum and maximum dB values for equalizer bands.
         /// </summary>
         int [] BandRange {
             get;
         }
-        
+
         uint [] EqualizerFrequencies {
             get;
         }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/IPlayerEngineService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/IPlayerEngineService.cs
index f0feccc..62dab5e 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/IPlayerEngineService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/IPlayerEngineService.cs
@@ -1,4 +1,4 @@
-// 
+//
 // IPlayerEngineService.cs
 //
 // Author:
@@ -39,20 +39,20 @@ namespace Banshee.MediaEngine
     {
         event DBusPlayerEventHandler EventChanged;
         event DBusPlayerStateHandler StateChanged;
-    
+
         void Open (string uri);
-        
+
         void Close ();
         void Pause ();
         void Play ();
         void TogglePlaying ();
-        
+
         IDictionary<string, object> CurrentTrack { get; }
         string CurrentUri { get; }
-        
+
         string CurrentState { get; }
         string LastState { get; }
-    
+
         ushort Volume { get; set; }
         uint Position { get; set; }
         bool CanSeek { get; }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/ITranscoder.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/ITranscoder.cs
index b108de9..17f19de 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/ITranscoder.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/ITranscoder.cs
@@ -37,18 +37,18 @@ namespace Banshee.MediaEngine
     public delegate void TranscoderProgressHandler (object o, TranscoderProgressArgs args);
     public delegate void TranscoderTrackFinishedHandler (object o, TranscoderTrackFinishedArgs args);
     public delegate void TranscoderErrorHandler (object o, TranscoderErrorArgs args);
- 
+
     public interface ITranscoder
     {
         event TranscoderProgressHandler Progress;
         event TranscoderTrackFinishedHandler TrackFinished;
         event TranscoderErrorHandler Error;
-        
+
         void TranscodeTrack (TrackInfo track, SafeUri outputUri, ProfileConfiguration config);
         void Finish ();
         void Cancel ();
     }
-                             
+
     public sealed class TranscoderProgressArgs : EventArgs
     {
         public TranscoderProgressArgs (TrackInfo track, double fraction, TimeSpan totalTime)
@@ -57,7 +57,7 @@ namespace Banshee.MediaEngine
             this.fraction = fraction;
             this.total_time = totalTime;
         }
-        
+
         private double fraction;
         public double Fraction {
             get { return fraction; }
@@ -86,13 +86,13 @@ namespace Banshee.MediaEngine
         public TrackInfo Track {
             get { return track; }
         }
-        
+
         private SafeUri uri;
         public SafeUri Uri {
             get { return uri; }
         }
     }
-    
+
     public sealed class TranscoderErrorArgs : EventArgs
     {
         public TranscoderErrorArgs (TrackInfo track, string message)
@@ -100,12 +100,12 @@ namespace Banshee.MediaEngine
             this.track = track;
             this.message = message;
         }
-        
+
         private TrackInfo track;
         public TrackInfo Track {
             get { return track; }
         }
-        
+
         private string message;
         public string Message {
             get { return message; }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs
index 0a40f9d..5f9f4c3 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs
@@ -30,7 +30,7 @@ using System;
 namespace Banshee.MediaEngine
 {
     public delegate void VisualizationDataHandler (float [][] pcm, float [][] spectrum);
-    
+
     public interface IVisualizationDataSource
     {
         event VisualizationDataHandler DataAvailable;
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/NullPlayerEngine.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/NullPlayerEngine.cs
index d8c04fd..a437ade 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/NullPlayerEngine.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/NullPlayerEngine.cs
@@ -38,7 +38,7 @@ namespace Banshee.MediaEngine
         protected override void OpenUri (SafeUri uri)
         {
         }
-        
+
         public override void Play ()
         {
             OnStateChanged (PlayerState.Playing);
@@ -48,50 +48,50 @@ namespace Banshee.MediaEngine
         {
             OnStateChanged (PlayerState.Paused);
         }
-        
+
         private ushort volume;
         public override ushort Volume {
             get { return volume; }
             set { volume = value; }
         }
-        
+
         public override uint Position {
             get { return 0; }
             set { return; }
         }
-        
+
         public override bool CanSeek {
             get { return false; }
         }
-        
+
         public override uint Length {
             get { return 0; }
         }
-        
+
         public override bool SupportsEqualizer {
             get { return false; }
         }
-        
+
         public override VideoDisplayContextType VideoDisplayContextType {
             get { return VideoDisplayContextType.Unsupported; }
         }
-        
+
         private static string [] source_capabilities = { "file", "http", "cdda" };
         public override IEnumerable SourceCapabilities {
             get { return source_capabilities; }
         }
-        
+
         public override IEnumerable ExplicitDecoderCapabilities {
             get { return new string[0]; }
         }
-        
+
         public override string Id {
             get { return "nullplayerengine"; }
         }
-        
+
         public override string Name {
             get { return "Null Player Engine"; }
         }
-        
+
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
index 1f7a1ec..b074d2b 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
@@ -42,17 +42,17 @@ namespace Banshee.MediaEngine
     {
         public const int VolumeDelta = 10;
         public const int SkipDelta = 10;
-    
+
         public event PlayerEventHandler EventChanged;
-        
+
         private TrackInfo current_track;
         private SafeUri current_uri;
         private PlayerState current_state = PlayerState.NotReady;
         private PlayerState last_state = PlayerState.NotReady;
-        
+
         // will be changed to PlayerState.Idle after going to PlayerState.Ready
-        private PlayerState idle_state = PlayerState.NotReady; 
-        
+        private PlayerState idle_state = PlayerState.NotReady;
+
         protected abstract void OpenUri (SafeUri uri);
 
         internal protected virtual bool DelayedInitialize {
@@ -71,30 +71,30 @@ namespace Banshee.MediaEngine
             current_uri = null;
             OnStateChanged (idle_state);
         }
-        
+
         public virtual void Close (bool fullShutdown)
         {
             OnStateChanged (idle_state);
         }
-        
+
         public virtual void Dispose ()
         {
             Close (true);
         }
-        
+
         public void Open (TrackInfo track)
         {
             current_uri = track.Uri;
             current_track = track;
-            
+
             HandleOpen (track.Uri);
         }
-        
+
         public void Open (SafeUri uri)
         {
             current_uri = uri;
             current_track = new UnknownTrackInfo (uri);
-            
+
             HandleOpen (uri);
         }
 
@@ -103,7 +103,7 @@ namespace Banshee.MediaEngine
             if (current_state != PlayerState.Idle && current_state != PlayerState.NotReady && current_state != PlayerState.Contacting) {
                 Close (false);
             }
-        
+
             try {
                 OnStateChanged (PlayerState.Loading);
                 OpenUri (uri);
@@ -112,7 +112,7 @@ namespace Banshee.MediaEngine
                 OnEventChanged (new PlayerEventErrorArgs (e.Message));
             }
         }
-        
+
         public abstract void Play ();
 
         public abstract void Pause ();
@@ -121,46 +121,46 @@ namespace Banshee.MediaEngine
         {
             throw new NotImplementedException ("Engine must implement VideoExpose since this method only gets called when SupportsVideo is true");
         }
-        
+
         public virtual IntPtr [] GetBaseElements ()
         {
             return null;
         }
-        
+
         protected virtual void OnStateChanged (PlayerState state)
         {
             if (current_state == state) {
                 return;
             }
-            
+
             if (idle_state == PlayerState.NotReady && state != PlayerState.Ready) {
                 Hyena.Log.Warning ("Engine must transition to the ready state before other states can be entered", false);
                 return;
             } else if (idle_state == PlayerState.NotReady && state == PlayerState.Ready) {
                 idle_state = PlayerState.Idle;
             }
-            
+
             last_state = current_state;
             current_state = state;
-            
+
             Log.DebugFormat ("Player state change: {0} -> {1}", last_state, current_state);
-            
+
             OnEventChanged (new PlayerEventStateChangeArgs (last_state, current_state));
-            
+
             // Going to the Ready state automatically transitions to the Idle state
             // The Ready state is advertised so one-time startup processes can easily
             // happen outside of the engine itself
-            
+
             if (state == PlayerState.Ready) {
                 OnStateChanged (PlayerState.Idle);
             }
         }
-        
+
         protected void OnEventChanged (PlayerEvent evnt)
         {
             OnEventChanged (new PlayerEventArgs (evnt));
         }
-        
+
         protected virtual void OnEventChanged (PlayerEventArgs args)
         {
             if (ThreadAssist.InMainThread) {
@@ -171,7 +171,7 @@ namespace Banshee.MediaEngine
                 });
             }
         }
-        
+
         private void RaiseEventChanged (PlayerEventArgs args)
         {
             PlayerEventHandler handler = EventChanged;
@@ -179,9 +179,9 @@ namespace Banshee.MediaEngine
                 handler (args);
             }
         }
-        
+
         private uint track_info_updated_timeout = 0;
-        
+
         protected void OnTagFound (StreamTag tag)
         {
             if (tag.Equals (StreamTag.Zero) || current_track == null || current_track.Uri.IsFile) {
@@ -189,82 +189,82 @@ namespace Banshee.MediaEngine
             }
 
             StreamTagger.TrackInfoMerge (current_track, tag);
-            
+
             if (track_info_updated_timeout <= 0) {
                 track_info_updated_timeout = Application.RunTimeout (250, OnTrackInfoUpdated);
             }
         }
-        
+
         private bool OnTrackInfoUpdated ()
         {
             TrackInfoUpdated ();
             track_info_updated_timeout = 0;
             return false;
         }
-        
+
         public void TrackInfoUpdated ()
         {
             OnEventChanged (PlayerEvent.TrackInfoUpdated);
         }
-        
+
         public TrackInfo CurrentTrack {
             get { return current_track; }
         }
-        
+
         public SafeUri CurrentUri {
             get { return current_uri; }
         }
-        
+
         public PlayerState CurrentState {
             get { return current_state; }
         }
-        
+
         public PlayerState LastState {
             get { return last_state; }
         }
-        
+
         public abstract ushort Volume {
             get;
             set;
         }
-        
+
         public virtual bool CanSeek {
             get { return true; }
         }
-        
+
         public abstract uint Position {
             get;
             set;
         }
-        
+
         public abstract uint Length {
             get;
         }
-        
+
         public abstract IEnumerable SourceCapabilities {
             get;
         }
-        
+
         public abstract IEnumerable ExplicitDecoderCapabilities {
             get;
         }
-        
+
         public abstract string Id {
             get;
         }
-        
+
         public abstract string Name {
             get;
         }
-        
+
         public abstract bool SupportsEqualizer {
             get;
         }
-        
+
         public abstract VideoDisplayContextType VideoDisplayContextType {
             get;
         }
-        
+
         public virtual IntPtr VideoDisplayContext {
             set { }
             get { return IntPtr.Zero; }
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
index 87af023..2ad3f74 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
@@ -47,9 +47,9 @@ namespace Banshee.MediaEngine
 {
     public delegate bool TrackInterceptHandler (TrackInfo track);
 
-    public class PlayerEngineService : IInitializeService, IDelayedInitializeService, 
+    public class PlayerEngineService : IInitializeService, IDelayedInitializeService,
         IRequiredService, IPlayerEngineService, IDisposable
-    {   
+    {
         private List<PlayerEngine> engines = new List<PlayerEngine> ();
         private PlayerEngine active_engine;
         private PlayerEngine default_engine;
@@ -64,7 +64,7 @@ namespace Banshee.MediaEngine
         public event TrackInterceptHandler TrackIntercept;
         public event Action<PlayerEngine> EngineBeforeInitialize;
         public event Action<PlayerEngine> EngineAfterInitialize;
-        
+
         private event DBusPlayerEventHandler dbus_event_changed;
         event DBusPlayerEventHandler IPlayerEngineService.EventChanged {
             add { dbus_event_changed += value; }
@@ -76,30 +76,30 @@ namespace Banshee.MediaEngine
             add { dbus_state_changed += value; }
             remove { dbus_state_changed -= value; }
         }
-        
+
         public PlayerEngineService ()
         {
         }
-        
+
         void IInitializeService.Initialize ()
         {
             preferred_engine_id = EngineSchema.Get();
-            
+
             if (default_engine == null && engines.Count > 0) {
                 default_engine = engines[0];
             }
-            
+
             foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/MediaEngine/PlayerEngine")) {
                 LoadEngine (node);
             }
-            
+
             if (default_engine != null) {
                 active_engine = default_engine;
                 Log.Debug (Catalog.GetString ("Default player engine"), active_engine.Name);
             } else {
                 default_engine = active_engine;
             }
-            
+
             if (default_engine == null || active_engine == null || engines == null || engines.Count == 0) {
                 Log.Warning (Catalog.GetString (
                     "No player engines were found. Please ensure Banshee has been cleanly installed."),
@@ -109,9 +109,9 @@ namespace Banshee.MediaEngine
                 active_engine = null_engine;
                 default_engine = null_engine;
             }
-            
+
             MetadataService.Instance.HaveResult += OnMetadataServiceHaveResult;
-            
+
             TrackInfo.IsPlayingMethod = track => IsPlaying (track) &&
                 track.CacheModelId == CurrentTrack.CacheModelId &&
                 (track.CacheEntryId == null || track.CacheEntryId.Equals (CurrentTrack.CacheEntryId));
@@ -123,16 +123,16 @@ namespace Banshee.MediaEngine
             if (handler != null) {
                 handler (engine);
             }
-            
+
             engine.Initialize ();
             engine.IsInitialized = true;
-            
+
             handler = EngineAfterInitialize;
             if (handler != null) {
                 handler (engine);
             }
         }
-        
+
         void IDelayedInitializeService.DelayedInitialize ()
         {
             foreach (var engine in Engines) {
@@ -141,18 +141,18 @@ namespace Banshee.MediaEngine
                 }
             }
         }
-        
+
         private void LoadEngine (TypeExtensionNode node)
         {
             LoadEngine ((PlayerEngine) node.CreateInstance (typeof (PlayerEngine)));
         }
-        
+
         private void LoadEngine (PlayerEngine engine)
         {
             if (!engine.DelayedInitialize) {
                 InitializeEngine (engine);
             }
-            
+
             engine.EventChanged += OnEngineEventChanged;
 
             if (engine.Id == preferred_engine_id) {
@@ -168,31 +168,31 @@ namespace Banshee.MediaEngine
         public void Dispose ()
         {
             MetadataService.Instance.HaveResult -= OnMetadataServiceHaveResult;
-            
+
             foreach (PlayerEngine engine in engines) {
                 engine.Dispose ();
             }
-            
+
             active_engine = null;
             default_engine = null;
             pending_engine = null;
-            
+
             preferred_engine_id = null;
-            
+
             engines.Clear ();
         }
-        
+
         private void OnMetadataServiceHaveResult (object o, MetadataLookupResultArgs args)
         {
             if (CurrentTrack != null && args.Track == CurrentTrack) {
                 foreach (StreamTag tag in args.ResultTags) {
                     StreamTagger.TrackInfoMerge (CurrentTrack, tag);
                 }
-                
+
                 OnEngineEventChanged (new PlayerEventArgs (PlayerEvent.TrackInfoUpdated));
             }
         }
-        
+
         private void HandleStateChange (PlayerEventStateChangeArgs args)
         {
             if (args.Current == PlayerState.Loaded && CurrentTrack != null) {
@@ -213,7 +213,7 @@ namespace Banshee.MediaEngine
                                 break;
                             }
                         }
-                        
+
                         if (equalizer != null) {
                             Log.DebugFormat ("Enabling equalizer preset: {0}", equalizer.Name);
                             manager.Enable (equalizer);
@@ -227,7 +227,7 @@ namespace Banshee.MediaEngine
                     pending_playback_for_not_ready_play = false;
                 }
             }
-            
+
             DBusPlayerStateHandler dbus_handler = dbus_state_changed;
             if (dbus_handler != null) {
                 dbus_handler (args.Current.ToString ().ToLower ());
@@ -237,33 +237,33 @@ namespace Banshee.MediaEngine
         private void OnEngineEventChanged (PlayerEventArgs args)
         {
             if (CurrentTrack != null) {
-                if (args.Event == PlayerEvent.Error 
+                if (args.Event == PlayerEvent.Error
                     && CurrentTrack.PlaybackError == StreamPlaybackError.None) {
                     CurrentTrack.SavePlaybackError (StreamPlaybackError.Unknown);
-                } else if (args.Event == PlayerEvent.Iterate 
+                } else if (args.Event == PlayerEvent.Iterate
                     && CurrentTrack.PlaybackError != StreamPlaybackError.None) {
                     CurrentTrack.SavePlaybackError (StreamPlaybackError.None);
                 }
             }
-            
+
             RaiseEvent (args);
-            
+
             // Do not raise iterate across DBus to avoid so many calls;
-            // DBus clients should do their own iterating and 
+            // DBus clients should do their own iterating and
             // event/state checking locally
             if (args.Event == PlayerEvent.Iterate) {
                 return;
             }
-            
+
             DBusPlayerEventHandler dbus_handler = dbus_event_changed;
             if (dbus_handler != null) {
-                dbus_handler (args.Event.ToString ().ToLower (), 
-                    args is PlayerEventErrorArgs ? ((PlayerEventErrorArgs)args).Message : String.Empty, 
+                dbus_handler (args.Event.ToString ().ToLower (),
+                    args is PlayerEventErrorArgs ? ((PlayerEventErrorArgs)args).Message : String.Empty,
                     args is PlayerEventBufferingArgs ? ((PlayerEventBufferingArgs)args).Progress : 0
                 );
             }
         }
-        
+
         private void OnPlayWhenIdleRequest ()
         {
             EventHandler handler = PlayWhenIdleRequest;
@@ -271,49 +271,49 @@ namespace Banshee.MediaEngine
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         private bool OnTrackIntercept (TrackInfo track)
         {
             TrackInterceptHandler handler = TrackIntercept;
             if (handler == null) {
                 return false;
             }
-            
+
             bool handled = false;
-            
+
             foreach (TrackInterceptHandler single_handler in handler.GetInvocationList ()) {
                 handled |= single_handler (track);
             }
-            
+
             return handled;
         }
-        
+
         public void Open (TrackInfo track)
         {
             OpenPlay (track, false);
         }
-        
+
         public void Open (SafeUri uri)
         {
             OpenCheck (uri);
         }
-        
+
         void IPlayerEngineService.Open (string uri)
         {
             OpenCheck (new SafeUri (uri));
         }
-        
+
         public void OpenPlay (TrackInfo track)
         {
             OpenPlay (track, true);
         }
-        
+
         private void OpenPlay (TrackInfo track, bool play)
         {
             if (track == null || !track.CanPlay || OnTrackIntercept (track)) {
                 return;
             }
-        
+
             try {
                 OpenCheck (track, true);
             } catch (Exception e) {
@@ -328,7 +328,7 @@ namespace Banshee.MediaEngine
         {
             OpenCheck (o, false);
         }
-        
+
         private void OpenCheck (object o, bool play)
         {
             if (CurrentState == PlayerState.NotReady) {
@@ -336,10 +336,10 @@ namespace Banshee.MediaEngine
                 pending_playback_for_not_ready_play = play;
                 return;
             }
-        
+
             SafeUri uri = null;
             TrackInfo track = null;
-        
+
             if (o is SafeUri) {
                 uri = (SafeUri)o;
             } else if (o is TrackInfo) {
@@ -350,10 +350,10 @@ namespace Banshee.MediaEngine
             }
 
             IncrementLastPlayed ();
-            
+
             FindSupportingEngine (uri);
             CheckPending ();
-            
+
             if (track != null) {
                 active_engine.Open (track);
                 incremented_last_played = false;
@@ -380,7 +380,7 @@ namespace Banshee.MediaEngine
                 incremented_last_played = true;
             }
         }
-        
+
         private void FindSupportingEngine (SafeUri uri)
         {
             foreach (PlayerEngine engine in engines) {
@@ -395,7 +395,7 @@ namespace Banshee.MediaEngine
                     return;
                 }
             }
-        
+
             foreach (PlayerEngine engine in engines) {
                 foreach (string scheme in engine.SourceCapabilities) {
                     bool supported = scheme == uri.Scheme;
@@ -410,19 +410,19 @@ namespace Banshee.MediaEngine
                 }
             }
         }
-        
+
         public void Close ()
         {
             Close (false);
         }
-        
+
         public void Close (bool fullShutdown)
         {
             IncrementLastPlayed ();
             active_engine.Reset ();
             active_engine.Close (fullShutdown);
         }
-        
+
         public void Play ()
         {
             if (CurrentState == PlayerState.Idle) {
@@ -431,7 +431,7 @@ namespace Banshee.MediaEngine
                 active_engine.Play ();
             }
         }
-        
+
         public void Pause ()
         {
             if (!CanPause) {
@@ -460,7 +460,7 @@ namespace Banshee.MediaEngine
                 }
             }
         }
-        
+
         public void TogglePlaying ()
         {
             if (IsPlaying () && CurrentState != PlayerState.Paused) {
@@ -469,31 +469,31 @@ namespace Banshee.MediaEngine
                 Play ();
             }
         }
-        
+
         public void VideoExpose (IntPtr displayContext, bool direct)
         {
             active_engine.VideoExpose (displayContext, direct);
         }
-        
+
         public IntPtr VideoDisplayContext {
             set { active_engine.VideoDisplayContext = value; }
             get { return active_engine.VideoDisplayContext; }
         }
-        
+
         public void TrackInfoUpdated ()
         {
             active_engine.TrackInfoUpdated ();
         }
-        
+
         public bool IsPlaying (TrackInfo track)
         {
             return IsPlaying () && track != null && track.TrackEqual (CurrentTrack);
         }
-        
+
         public bool IsPlaying ()
         {
-            return CurrentState == PlayerState.Playing || 
-                CurrentState == PlayerState.Paused || 
+            return CurrentState == PlayerState.Playing ||
+                CurrentState == PlayerState.Paused ||
                 CurrentState == PlayerState.Loaded ||
                 CurrentState == PlayerState.Loading ||
                 CurrentState == PlayerState.Contacting;
@@ -505,136 +505,136 @@ namespace Banshee.MediaEngine
                 if(active_engine.CurrentState == PlayerState.Idle) {
                     Close ();
                 }
-                
+
                 active_engine = pending_engine;
                 pending_engine = null;
-            } 
+            }
         }
-    
+
         public TrackInfo CurrentTrack {
             get { return active_engine.CurrentTrack ?? synthesized_contacting_track; }
         }
-        
+
         private Dictionary<string, object> dbus_sucks;
         IDictionary<string, object> IPlayerEngineService.CurrentTrack {
-            get { 
+            get {
                 // FIXME: Managed DBus sucks - it explodes if you transport null
                 // or even an empty dictionary (a{sv} in our case). Piece of shit.
                 if (dbus_sucks == null) {
                     dbus_sucks = new Dictionary<string, object> ();
                     dbus_sucks.Add (String.Empty, String.Empty);
                 }
-                
+
                 return CurrentTrack == null ? dbus_sucks : CurrentTrack.GenerateExportable ();
             }
         }
-        
+
         public SafeUri CurrentSafeUri {
             get { return active_engine.CurrentUri; }
         }
-        
+
         string IPlayerEngineService.CurrentUri {
             get { return CurrentSafeUri == null ? String.Empty : CurrentSafeUri.AbsoluteUri; }
         }
-        
+
         public PlayerState CurrentState {
             get { return synthesized_contacting_track != null ? PlayerState.Contacting : active_engine.CurrentState; }
         }
-        
+
         string IPlayerEngineService.CurrentState {
             get { return CurrentState.ToString ().ToLower (); }
         }
-        
+
         public PlayerState LastState {
             get { return active_engine.LastState; }
         }
-        
+
         string IPlayerEngineService.LastState {
             get { return LastState.ToString ().ToLower (); }
         }
-        
+
         public ushort Volume {
             get { return active_engine.Volume; }
-            set { 
+            set {
                 foreach (PlayerEngine engine in engines) {
                     engine.Volume = value;
                 }
             }
         }
-        
+
         public uint Position {
             get { return active_engine.Position; }
             set { active_engine.Position = value; }
         }
-        
+
         public bool CanSeek {
             get { return active_engine.CanSeek; }
         }
-        
+
         public bool CanPause {
             get { return CurrentTrack != null && !CurrentTrack.IsLive; }
         }
-        
+
         public bool SupportsEqualizer {
             get { return ((active_engine is IEqualizer) && active_engine.SupportsEqualizer); }
         }
-        
+
         public VideoDisplayContextType VideoDisplayContextType {
             get { return active_engine.VideoDisplayContextType; }
         }
-        
+
         public uint Length {
-            get { 
+            get {
                 uint length = active_engine.Length;
                 if (length > 0) {
                     return length;
                 } else if (CurrentTrack == null) {
                     return 0;
                 }
-                
+
                 return (uint) CurrentTrack.Duration.TotalSeconds;
             }
         }
-    
+
         public PlayerEngine ActiveEngine {
             get { return active_engine; }
             set { pending_engine = value; }
         }
-        
+
         public PlayerEngine DefaultEngine {
             get { return default_engine; }
-            set { 
+            set {
                 if (engines.Contains (value)) {
                     engines.Remove (value);
                 }
-                
+
                 engines.Insert (0, value);
-            
+
                 default_engine = value;
                 EngineSchema.Set (value.Id);
             }
         }
-        
+
         public IEnumerable<PlayerEngine> Engines {
             get { return engines; }
         }
-        
+
 #region Player Event System
 
         private LinkedList<PlayerEventHandlerSlot> event_handlers = new LinkedList<PlayerEventHandlerSlot> ();
-        
+
         private struct PlayerEventHandlerSlot
         {
             public PlayerEvent EventMask;
             public PlayerEventHandler Handler;
-            
+
             public PlayerEventHandlerSlot (PlayerEvent mask, PlayerEventHandler handler)
             {
                 EventMask = mask;
                 Handler = handler;
             }
         }
-        
+
         private const PlayerEvent event_all_mask = PlayerEvent.Iterate
             | PlayerEvent.StateChange
             | PlayerEvent.StartOfStream
@@ -645,38 +645,38 @@ namespace Banshee.MediaEngine
             | PlayerEvent.Volume
             | PlayerEvent.Metadata
             | PlayerEvent.TrackInfoUpdated;
-        
+
         private const PlayerEvent event_default_mask = event_all_mask & ~PlayerEvent.Iterate;
-        
+
         private static void VerifyEventMask (PlayerEvent eventMask)
         {
             if (eventMask <= PlayerEvent.None || eventMask > event_all_mask) {
                 throw new ArgumentOutOfRangeException ("eventMask", "A valid event mask must be provided");
             }
         }
-        
+
         public void ConnectEvent (PlayerEventHandler handler)
         {
             ConnectEvent (handler, event_default_mask, false);
         }
-        
+
         public void ConnectEvent (PlayerEventHandler handler, PlayerEvent eventMask)
         {
             ConnectEvent (handler, eventMask, false);
         }
-        
+
         public void ConnectEvent (PlayerEventHandler handler, bool connectAfter)
         {
             ConnectEvent (handler, event_default_mask, connectAfter);
         }
-        
+
         public void ConnectEvent (PlayerEventHandler handler, PlayerEvent eventMask, bool connectAfter)
         {
             lock (event_handlers) {
                 VerifyEventMask (eventMask);
-            
+
                 PlayerEventHandlerSlot slot = new PlayerEventHandlerSlot (eventMask, handler);
-                
+
                 if (connectAfter) {
                     event_handlers.AddLast (slot);
                 } else {
@@ -684,7 +684,7 @@ namespace Banshee.MediaEngine
                 }
             }
         }
-        
+
         private LinkedListNode<PlayerEventHandlerSlot> FindEventNode (PlayerEventHandler handler)
         {
             LinkedListNode<PlayerEventHandlerSlot> node = event_handlers.First;
@@ -694,10 +694,10 @@ namespace Banshee.MediaEngine
                 }
                 node = node.Next;
             }
-            
+
             return null;
         }
-        
+
         public void DisconnectEvent (PlayerEventHandler handler)
         {
             lock (event_handlers) {
@@ -707,12 +707,12 @@ namespace Banshee.MediaEngine
                 }
             }
         }
-        
+
         public void ModifyEvent (PlayerEvent eventMask, PlayerEventHandler handler)
         {
             lock (event_handlers) {
                 VerifyEventMask (eventMask);
-                
+
                 LinkedListNode<PlayerEventHandlerSlot> node = FindEventNode (handler);
                 if (node != null) {
                     PlayerEventHandlerSlot slot = node.Value;
@@ -721,14 +721,14 @@ namespace Banshee.MediaEngine
                 }
             }
         }
-        
+
         private void RaiseEvent (PlayerEventArgs args)
         {
             lock (event_handlers) {
                 if (args.Event == PlayerEvent.StateChange && args is PlayerEventStateChangeArgs) {
                     HandleStateChange ((PlayerEventStateChangeArgs)args);
                 }
-            
+
                 LinkedListNode<PlayerEventHandlerSlot> node = event_handlers.First;
                 while (node != null) {
                     if ((node.Value.EventMask & args.Event) == args.Event) {
@@ -740,15 +740,15 @@ namespace Banshee.MediaEngine
         }
 
 #endregion
-        
+
         string IService.ServiceName {
             get { return "PlayerEngine"; }
         }
-        
-        IDBusExportable IDBusExportable.Parent { 
+
+        IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         public static readonly SchemaEntry<int> VolumeSchema = new SchemaEntry<int> (
             "player_engine", "volume",
             80,
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEvent.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEvent.cs
index ff3487e..96b1b79 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEvent.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEvent.cs
@@ -1,4 +1,4 @@
-// 
+//
 // PlayerEvent.cs
 //
 // Author:
@@ -33,68 +33,68 @@ namespace Banshee.MediaEngine
     public delegate void DBusPlayerStateHandler (string state);
     public delegate void DBusPlayerEventHandler (string evnt, string message, double bufferingPercent);
     public delegate void PlayerEventHandler (PlayerEventArgs args);
-    
+
     public class PlayerEventArgs : EventArgs
     {
         private PlayerEvent @event;
         public PlayerEvent Event {
             get { return @event; }
         }
-        
+
         public PlayerEventArgs (PlayerEvent @event)
         {
             this  event = @event;
         }
     }
-    
+
     public class PlayerEventStateChangeArgs : PlayerEventArgs
     {
         private PlayerState previous;
         public PlayerState Previous {
             get { return previous; }
         }
-        
+
         private PlayerState current;
         public PlayerState Current {
             get { return current; }
         }
-        
+
         public PlayerEventStateChangeArgs (PlayerState previous, PlayerState current) : base (PlayerEvent.StateChange)
         {
             this.previous = previous;
             this.current = current;
         }
     }
-    
+
     public class PlayerEventErrorArgs : PlayerEventArgs
     {
         private string message;
         public string Message {
             get { return message; }
         }
-        
+
         public PlayerEventErrorArgs (string message) : base (PlayerEvent.Error)
         {
             this.message = message;
         }
     }
-    
+
     public sealed class PlayerEventBufferingArgs : PlayerEventArgs
     {
         private double progress;
         public double Progress {
             get { return progress; }
         }
-        
+
         public PlayerEventBufferingArgs (double progress) : base (PlayerEvent.Buffering)
         {
             this.progress = progress;
         }
     }
-    
-    // WARNING: If you add events to the list below, you MUST update the 
+
+    // WARNING: If you add events to the list below, you MUST update the
     // "all" mask in PlayerEngineService.cs to reflect your addition!
-    
+
     [Flags]
     public enum PlayerEvent
     {
@@ -110,8 +110,8 @@ namespace Banshee.MediaEngine
         Metadata = 256,
         TrackInfoUpdated = 512
     }
-    
-    public enum PlayerState 
+
+    public enum PlayerState
     {
         NotReady,
         Ready,
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs
index 77db232..0a4100b 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs
@@ -57,7 +57,7 @@ namespace Banshee.MediaEngine
             public TranscodeCancelledHandler CancelledHandler;
             public TranscodeErrorHandler ErrorHandler;
 
-            public TranscodeContext (TrackInfo track, SafeUri out_uri, ProfileConfiguration config, 
+            public TranscodeContext (TrackInfo track, SafeUri out_uri, ProfileConfiguration config,
                 TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler, TranscodeErrorHandler errorHandler)
             {
                 Track = track;
@@ -72,7 +72,7 @@ namespace Banshee.MediaEngine
         private static bool transcoder_extension_queried = false;
         private static TypeExtensionNode transcoder_extension_node = null;
         private static TypeExtensionNode TranscoderExtensionNode {
-            get { 
+            get {
                 if (!transcoder_extension_queried) {
                     transcoder_extension_queried = true;
                     foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (
@@ -84,7 +84,7 @@ namespace Banshee.MediaEngine
                 return transcoder_extension_node;
             }
         }
-                
+
         public static bool Supported {
             get { return TranscoderExtensionNode != null; }
         }
@@ -106,7 +106,7 @@ namespace Banshee.MediaEngine
         }
 
         private static string cache_dir = Paths.Combine (Paths.ApplicationCache, "transcoder");
-        
+
         public static SafeUri GetTempUriFor (string extension)
         {
             return new SafeUri (Paths.GetTempFileName (cache_dir, extension));
@@ -144,7 +144,7 @@ namespace Banshee.MediaEngine
                 return user_job;
             }
         }
-        
+
         private void Reset ()
         {
             lock (queue) {
@@ -154,7 +154,7 @@ namespace Banshee.MediaEngine
                     user_job.Finish ();
                     user_job = null;
                 }
-                
+
                 if (transcoder != null) {
                     transcoder.Finish ();
                     transcoder = null;
@@ -173,13 +173,13 @@ namespace Banshee.MediaEngine
             }
         }
 
-        public void Enqueue (TrackInfo track, ProfileConfiguration config, 
+        public void Enqueue (TrackInfo track, ProfileConfiguration config,
             TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler, TranscodeErrorHandler errorHandler)
         {
             Enqueue (track, GetTempUriFor (config.Profile.OutputFileExtension), config, handler, cancelledHandler, errorHandler);
         }
 
-        public void Enqueue (TrackInfo track, SafeUri out_uri, ProfileConfiguration config, 
+        public void Enqueue (TrackInfo track, SafeUri out_uri, ProfileConfiguration config,
             TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler, TranscodeErrorHandler errorHandler)
         {
             bool start = false;
@@ -228,7 +228,7 @@ namespace Banshee.MediaEngine
 
             ProcessQueue ();
         }
-        
+
         private void OnProgress (object o, TranscoderProgressArgs args)
         {
             if (user_job == null) {
@@ -237,7 +237,7 @@ namespace Banshee.MediaEngine
 
             UserJob.DetailedProgress = args.Fraction;
         }
-        
+
         private void OnError (object o, TranscoderErrorArgs args)
         {
             transcoding = false;
@@ -253,19 +253,19 @@ namespace Banshee.MediaEngine
         }
 
 #endregion
-                                
-#region User Job Event Handlers        
-        
+
+#region User Job Event Handlers
+
         private void OnCancelRequested (object o, EventArgs args)
         {
             Reset ();
         }
-        
+
         private void OnFinished (object o, EventArgs args)
         {
             Reset ();
         }
-        
+
 #endregion
 
         string IService.ServiceName {
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Expression.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Expression.cs
index 47d3f66..ca8f3bc 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Expression.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Expression.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -39,16 +39,16 @@ namespace Abakos.Compiler
         private Queue<Symbol> infix_queue;
         private Queue<Symbol> postfix_queue;
         private Dictionary<string, double> variable_table = new Dictionary<string, double>();
-        
+
         private static Regex tokenizer_regex = null;
-        
+
         public Expression(string expression)
         {
             raw_expression = "(" + expression + ")";
             infix_queue = ToInfixQueue(raw_expression);
             postfix_queue = ToPostfixQueue(infix_queue);
         }
-        
+
         public void DefineVariable(string variable, double value)
         {
             if(variable_table.ContainsKey(variable)) {
@@ -57,41 +57,41 @@ namespace Abakos.Compiler
                 variable_table.Add(variable, value);
             }
         }
-        
+
         public Queue<Symbol> InfixQueue {
             get { return infix_queue; }
         }
-        
+
         public Queue<Symbol> PostfixQueue {
             get { return postfix_queue; }
         }
-        
+
         public string RawExpression {
             get { return raw_expression; }
         }
-        
+
         public static Queue<Symbol> ToInfixQueue(string expression)
         {
             if(tokenizer_regex == null) {
                 Queue<string> skipped = new Queue<string>();
                 StringBuilder expr = new StringBuilder();
                 expr.Append("([\\,");
-                
+
                 foreach(OperatorSymbol op in OperatorSymbol.Operators) {
                     if(op.Name.Length > 1){
                         skipped.Enqueue(op.Name);
                         continue;
                     }
-                    
+
                     expr.Append("\\");
                     expr.Append(op.Name);
                 }
-                
+
                 foreach(GroupSymbol gp in GroupSymbol.GroupSymbols) {
                     expr.Append("\\");
                     expr.Append(gp.Name);
                 }
-                
+
                 expr.Append("]{1}");
 
                 while(skipped.Count > 0) {
@@ -100,28 +100,28 @@ namespace Abakos.Compiler
                 }
 
                 expr.Append(")");
-    
+
                 tokenizer_regex = new Regex(expr.ToString(), RegexOptions.IgnorePatternWhitespace);
             }
-            
+
             string [] tokens = tokenizer_regex.Split(expression);
             List<Symbol> symbol_list = new List<Symbol>();
-            
+
             for(int i = 0; i < tokens.Length; i++) {
                 string token = tokens[i].Trim();
                 string next_token = null;
-                
+
                 if(token == String.Empty) {
                     continue;
                 }
-                
+
                 if(i < tokens.Length - 1) {
                     next_token = tokens[i + 1].Trim();
                 }
-                
+
                 Symbol symbol = Symbol.FromString(token, next_token);
                 symbol_list.Add(symbol);
-                
+
                 // I'm too tired to fix this at the stack/execution level right now;
                 // injecting void at the parsing level for zero-arg functions
                 if(symbol_list.Count >= 3 && GroupSymbol.IsRight(symbol) &&
@@ -130,21 +130,21 @@ namespace Abakos.Compiler
                     symbol_list.Insert(symbol_list.Count - 1, new VoidSymbol());
                 }
             }
-            
+
             Queue<Symbol> queue = new Queue<Symbol>();
             foreach(Symbol symbol in symbol_list) {
                 queue.Enqueue(symbol);
             }
-            
+
             return queue;
         }
-        
+
         public static Queue<Symbol> ToPostfixQueue(Queue<Symbol> infix)
         {
             Stack<Symbol> stack = new Stack<Symbol>();
             Queue<Symbol> postfix = new Queue<Symbol>();
             Symbol temp_symbol;
-            
+
             foreach(Symbol symbol in infix) {
                 if(symbol is ValueSymbol) {
                     postfix.Enqueue(symbol);
@@ -166,25 +166,25 @@ namespace Abakos.Compiler
                             postfix.Enqueue(temp_symbol);
                             temp_symbol = stack.Pop();
                         }
-                        
-                        if(OperationSymbol.Compare(temp_symbol, symbol)) { 
+
+                        if(OperationSymbol.Compare(temp_symbol, symbol)) {
                             postfix.Enqueue(temp_symbol);
                         } else {
                             stack.Push(temp_symbol);
                         }
                     }
-                
+
                     stack.Push(symbol);
                 }
             }
-            
+
             while(stack.Count > 0) {
                 postfix.Enqueue(stack.Pop());
             }
-           
+
             return postfix;
         }
-        
+
         public Stack<Symbol> Evaluate()
         {
             return EvaluatePostfix(postfix_queue, variable_table);
@@ -194,11 +194,11 @@ namespace Abakos.Compiler
         {
             return ((NumberSymbol)Evaluate().Pop()).Value;
         }
-        
+
         public static Stack<Symbol> EvaluatePostfix(Queue<Symbol> postfix, IDictionary<string, double> variableTable)
         {
             Stack<Symbol> stack = new Stack<Symbol>();
-            
+
             foreach(Symbol current_symbol in postfix) {
                 if(current_symbol is VariableSymbol) {
                     stack.Push((current_symbol as VariableSymbol).Resolve(variableTable));
@@ -210,17 +210,17 @@ namespace Abakos.Compiler
                     stack.Push((current_symbol as OperatorSymbol).Evaluate(b, a));
                 } else if(current_symbol is FunctionSymbol) {
                     Stack<Symbol> argument_stack = new Stack<Symbol>();
-                    
+
                     if(stack.Count > 0) {
                         Symbol argument = stack.Pop();
-                        
+
                         if(!(argument is CommaSymbol) && !(argument is VoidSymbol)) {
                             argument_stack.Push(argument);
                         } else if(argument is CommaSymbol) {
                             while(argument is CommaSymbol) {
                                 argument = stack.Pop();
                                 argument_stack.Push(argument);
-                                
+
                                 argument = stack.Pop();
                                 if(!(argument is CommaSymbol)) {
                                     argument_stack.Push(argument);
@@ -228,11 +228,11 @@ namespace Abakos.Compiler
                             }
                         }
                     }
-                    
+
                     stack.Push(FunctionTable.Execute(current_symbol as FunctionSymbol, argument_stack));
-                } 
+                }
             }
-            
+
             return stack;
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Functions.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Functions.cs
index 974b61e..cc5c125 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Functions.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Functions.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Reflection;
 using System.Collections;
@@ -37,12 +37,12 @@ namespace Abakos.Compiler
     public class FunctionAttribute : Attribute
     {
         private string name;
-        
+
         public FunctionAttribute(string name)
         {
             this.name = name;
         }
-        
+
         public string Name {
             get { return name; }
             set { name = value; }
@@ -58,30 +58,30 @@ namespace Abakos.Compiler
             public MethodInfo Method;
             public int ArgumentCount;
         }
-        
+
         private static List<Assembly> assemblies = new List<Assembly>();
         private static Dictionary<string,FunctionCache> cached_functions;
-         
+
         static FunctionTable()
         {
             //assemblies.Add(Assembly.GetExecutingAssembly());
         }
-        
+
         public static IEnumerable<FunctionCache> Functions {
             get { return cached_functions.Values; }
         }
-         
+
         public static void AddAssembly(Assembly assembly)
         {
             if(!assemblies.Contains(assembly)) {
                 assemblies.Add(assembly);
             }
         }
-        
+
         private static void LoadFunctionCache()
         {
             cached_functions = new Dictionary<string,FunctionCache>();
-        
+
             foreach(Assembly assembly in assemblies) {
                 foreach(Type type in assembly.GetTypes()) {
                     foreach(MethodInfo method in type.GetMethods()) {
@@ -90,14 +90,14 @@ namespace Abakos.Compiler
                             if(attribute == null) {
                                 continue;
                             }
-                            
+
                             LoadFunction(attribute, method);
                         }
                     }
                 }
             }
         }
-        
+
         private static void LoadFunction(FunctionAttribute attribute, MethodInfo method)
         {
             ParameterInfo [] parameters = method.GetParameters();
@@ -109,8 +109,8 @@ namespace Abakos.Compiler
             cache.RawSymbols = method.ReturnType == typeof(Symbol);
 
             if(parameters != null) {
-                if(parameters.Length == 1 && parameters[0].ParameterType.IsArray && 
-                    parameters[0].ParameterType.HasElementType && 
+                if(parameters.Length == 1 && parameters[0].ParameterType.IsArray &&
+                    parameters[0].ParameterType.HasElementType &&
                     parameters[0].ParameterType.GetElementType() == method.ReturnType) {
                     cache.ArgumentCount = -1;
                 } else {
@@ -126,22 +126,22 @@ namespace Abakos.Compiler
 
             cached_functions.Add(cache.Name, cache);
         }
-        
+
         public static Symbol Execute(FunctionSymbol symbol, Stack<Symbol> arguments)
         {
             if(cached_functions == null) {
                 LoadFunctionCache();
             }
-            
+
             if(!cached_functions.ContainsKey(symbol.Name)) {
                 throw new InvalidFunctionException(symbol.Name);
             }
-            
+
             FunctionCache function = cached_functions[symbol.Name];
             if(arguments.Count != function.ArgumentCount && function.ArgumentCount >= 0) {
                 throw new ArgumentException(symbol.Name);
             }
-            
+
             if(function.RawSymbols) {
                 if(function.ArgumentCount == -1) {
                     return (Symbol)function.Method.Invoke(null, new object [] { arguments.ToArray() });
@@ -149,9 +149,9 @@ namespace Abakos.Compiler
                     return (Symbol)function.Method.Invoke(null, arguments.ToArray());
                 }
             }
-            
+
             ArrayList resolved_arguments = new ArrayList();
-            
+
             while(arguments.Count > 0) {
                 Symbol argument = arguments.Pop();
                 if(!(argument is ValueSymbol)) {
@@ -159,15 +159,15 @@ namespace Abakos.Compiler
                 }
                 resolved_arguments.Add((argument as ValueSymbol).Value);
             }
-            
+
             double retval;
-            
+
             if(function.ArgumentCount == -1) {
                 retval = (double)function.Method.Invoke(null, new object [] { resolved_arguments.ToArray(typeof(double)) });
             } else {
                 retval = (double)function.Method.Invoke(null, resolved_arguments.ToArray());
             }
-            
+
             return new NumberSymbol(retval);
         }
     }
@@ -177,13 +177,13 @@ namespace Abakos.Compiler
         public FunctionSymbol(string name) : base(name, 4)
         {
         }
-        
+
         public static new FunctionSymbol FromString(string token)
         {
             return new FunctionSymbol(token);
         }
     }
-    
+
     public static class MathFunctions
     {
         [Function("sum")]
@@ -192,16 +192,16 @@ namespace Abakos.Compiler
             if(args == null) {
                 return 0.0;
             }
-            
+
             double sum = 0.0;
-            
+
             foreach(double arg in args) {
                 sum += arg;
             }
-            
+
             return sum;
         }
-      
+
         [Function("min")]
         public static double Min(double [] args)
         {
@@ -228,7 +228,7 @@ namespace Abakos.Compiler
             if(args == null || args.Length != 2) {
                 throw new ArgumentException("closest_power requires 2 arguments");
             }
-            
+
             int pow = (int)args[0];
             while(pow < args[1]) {
                 pow <<= 1;
@@ -236,7 +236,7 @@ namespace Abakos.Compiler
 
             return (double)pow;
         }
-     
+
          [Function("lt_jmp")]
         public static double LessThan(double [] args)
         {
@@ -246,7 +246,7 @@ namespace Abakos.Compiler
 
             return args[0] < args[1] ? args[2] : args[3];
         }
-         
+
         [Function("gt_jmp")]
         public static double GreaterThan(double [] args)
         {
@@ -256,7 +256,7 @@ namespace Abakos.Compiler
 
             return args[0] > args[1] ? args[2] : args[3];
         }
- 
+
         [Function("lte_jmp")]
         public static double LessThanOrEqualTo(double [] args)
         {
@@ -266,7 +266,7 @@ namespace Abakos.Compiler
 
             return args[0] <= args[1] ? args[2] : args[3];
         }
-         
+
         [Function("gte_jmp")]
         public static double GreaterThanOrEqualTo(double [] args)
         {
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidFunctionException.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidFunctionException.cs
index c569691..8b06cfc 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidFunctionException.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidFunctionException.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Abakos.Compiler
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidOperandException.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidOperandException.cs
index 8a76ae9..9838169 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidOperandException.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidOperandException.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Abakos.Compiler
@@ -35,11 +35,11 @@ namespace Abakos.Compiler
         public InvalidOperandException() : base()
         {
         }
-        
+
         public InvalidOperandException(Symbol a, Symbol b) : base(String.Format("{0}, {1}", a, b))
         {
         }
-        
+
         public InvalidOperandException(Symbol symbol) : base(symbol.ToString())
         {
         }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidTokenException.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidTokenException.cs
index 082b402..9bbed5f 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidTokenException.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/InvalidTokenException.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operations.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operations.cs
index 82a11ed..c208da8 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operations.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operations.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Abakos.Compiler
@@ -33,21 +33,21 @@ namespace Abakos.Compiler
     public abstract class OperationSymbol : Symbol
     {
         private int precedence;
-        
+
         protected OperationSymbol(string name, int precedence) : base(name)
         {
-            this.precedence = precedence;   
+            this.precedence = precedence;
         }
-        
+
         public int Precedence {
             get { return precedence; }
         }
-        
+
         public static bool Compare(Symbol a, Symbol b)
         {
             OperationSymbol op_a = a as OperationSymbol;
             OperationSymbol op_b = b as OperationSymbol;
-            
+
             if(op_a == null || op_b == null) {
                 return false;
             }
@@ -77,10 +77,10 @@ namespace Abakos.Compiler
             new GroupSymbol("}", GroupType.Brace, GroupDirection.Right),
             new GroupSymbol("]", GroupType.Bracket, GroupDirection.Right)
         };
-        
+
         private GroupDirection direction;
         private GroupType type;
-        
+
         public GroupSymbol(string name, GroupType type, GroupDirection direction) : base(name, 5)
         {
             this.direction = direction;
@@ -94,7 +94,7 @@ namespace Abakos.Compiler
         public GroupType Type {
             get { return type; }
         }
-        
+
         public static GroupSymbol [] GroupSymbols {
             get { return symbol_table; }
         }
@@ -109,13 +109,13 @@ namespace Abakos.Compiler
 
             throw new InvalidTokenException(token);
         }
-        
+
         public static bool IsLeft(Symbol symbol)
         {
             GroupSymbol group = symbol as GroupSymbol;
             return group != null && group.Direction == GroupSymbol.GroupDirection.Left;
         }
-        
+
         public static bool IsRight(Symbol symbol)
         {
             GroupSymbol group = symbol as GroupSymbol;
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operators.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operators.cs
index dc9dc64..2afb2c0 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operators.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Operators.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Abakos.Compiler
@@ -42,30 +42,30 @@ namespace Abakos.Compiler
             new LShiftOperatorSymbol(),
             new RShiftOperatorSymbol()
         };
-        
+
         public OperatorSymbol(string name, int precedence) : base(name, precedence)
         {
         }
-        
+
         public virtual Symbol Evaluate(Symbol a, Symbol b)
         {
             if(a is VoidSymbol || b is VoidSymbol) {
                 throw new InvalidOperandException(a, b);
             }
-        
+
             try {
                 return Evaluate((ValueSymbol)a, (ValueSymbol)b);
             } catch {
                 throw new InvalidOperandException(a, b);
             }
         }
-        
+
         protected virtual Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol(0);
         }
 
-        public static OperatorSymbol [] Operators { 
+        public static OperatorSymbol [] Operators {
             get { return symbol_table; }
         }
 
@@ -80,73 +80,73 @@ namespace Abakos.Compiler
             throw new InvalidTokenException(token);
         }
     }
-    
+
     public class PowOperatorSymbol : OperatorSymbol
     {
         public PowOperatorSymbol() : base("^", 3)
         {
         }
-        
+
         protected override Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol(Math.Pow(a.Value, b.Value));
         }
     }
-    
+
     public class DivOperatorSymbol : OperatorSymbol
     {
         public DivOperatorSymbol() : base("/", 2)
         {
         }
-        
+
         protected override Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol(a.Value / b.Value);
         }
     }
-    
+
     public class MulOperatorSymbol : OperatorSymbol
     {
         public MulOperatorSymbol() : base("*", 2)
         {
         }
-        
+
         protected override Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol(a.Value * b.Value);
         }
     }
-    
+
     public class ModOperatorSymbol : OperatorSymbol
     {
         public ModOperatorSymbol() : base("%", 2)
         {
         }
-        
+
         protected override Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol((int)a.Value % (int)b.Value);
         }
     }
-    
+
     public class AddOperatorSymbol : OperatorSymbol
     {
         public AddOperatorSymbol() : base("+", 1)
         {
         }
-        
+
         protected override Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol(a.Value + b.Value);
         }
     }
-    
+
     public class SubOperatorSymbol : OperatorSymbol
     {
         public SubOperatorSymbol() : base("-", 1)
         {
         }
-        
+
         protected override Symbol Evaluate(ValueSymbol a, ValueSymbol b)
         {
             return new NumberSymbol(a.Value - b.Value);
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Symbol.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Symbol.cs
index d0f4f98..6888c01 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Symbol.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Symbol.cs
@@ -5,46 +5,46 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Reflection;
 
 namespace Abakos.Compiler
 {
     public abstract class Symbol
-    {    
-        private struct SymbolResolve 
+    {
+        private struct SymbolResolve
         {
             public Type Type;
             public MethodInfo Method;
-            
+
             public SymbolResolve(Type type)
             {
                 Type = type;
                 Method = null;
             }
         }
-    
+
         private static SymbolResolve [] symbol_resolution_table = {
             new SymbolResolve(typeof(OperatorSymbol)),
             new SymbolResolve(typeof(NumberSymbol)),
@@ -54,9 +54,9 @@ namespace Abakos.Compiler
             new SymbolResolve(typeof(FunctionSymbol)),
             new SymbolResolve(typeof(VariableSymbol))
         };
-    
+
         private string name;
-        
+
         protected Symbol(string name)
         {
             this.name = name;
@@ -75,32 +75,32 @@ namespace Abakos.Compiler
         {
             for(int i = 0; i < symbol_resolution_table.Length; i++) {
                 SymbolResolve sr = symbol_resolution_table[i];
-                
+
                 if(sr.Method == null) {
                     sr.Method = sr.Type.GetMethod("FromString");
                     if(sr.Method == null) {
                         throw new ApplicationException(sr.Type + " does not have a FromString method");
                     }
-                    
+
                     symbol_resolution_table[i].Method = sr.Method;
                 }
-                
+
                 if(nextToken != null) {
-                    Symbol next_symbol = FromString(nextToken, null); 
+                    Symbol next_symbol = FromString(nextToken, null);
                     if(sr.Type == typeof(FunctionSymbol)) {
-                        if((next_symbol is GroupSymbol && (next_symbol as GroupSymbol).Direction == 
+                        if((next_symbol is GroupSymbol && (next_symbol as GroupSymbol).Direction ==
                             GroupSymbol.GroupDirection.Right) || !(next_symbol is GroupSymbol)) {
                             continue;
                         }
                     }
                 }
-                
+
                 try {
                     return (Symbol)sr.Method.Invoke(null, new object [] { token });
                 } catch {
                 }
             }
-            
+
             throw new InvalidTokenException(token);
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/UnkownVariableException.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/UnkownVariableException.cs
index de2d652..ea43b4b 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/UnkownVariableException.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/UnkownVariableException.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Abakos.Compiler
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Values.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Values.cs
index 6996305..06fe1e1 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Values.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Abakos.Compiler/Values.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections.Generic;
 
@@ -34,54 +34,54 @@ namespace Abakos.Compiler
     public abstract class ValueSymbol : Symbol
     {
         private double value;
-    
+
         protected ValueSymbol(string name) : this(name, 0.0)
         {
         }
-        
+
         protected ValueSymbol(string name, double value) : base(name)
         {
             this.value = value;
         }
-        
+
         public double Value {
             get { return value; }
         }
     }
-    
+
     public class VariableSymbol : ValueSymbol
     {
         public VariableSymbol(string name) : base(name)
         {
         }
-        
+
         public Symbol Resolve(IDictionary<string, double> table)
         {
             if(!table.ContainsKey(Name)) {
                 throw new UnknownVariableException(Name);
             }
-            
+
             return new NumberSymbol(table[Name]);
         }
-        
+
         public new static VariableSymbol FromString(string token)
         {
             return new VariableSymbol(token);
         }
     }
-    
+
     public class VoidSymbol : ValueSymbol
     {
         public VoidSymbol() : base("void")
         {
         }
-        
+
         public static new VoidSymbol FromString(string token)
         {
             if(token == "void") {
                 return new VoidSymbol();
             }
-            
+
             throw new InvalidTokenException();
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
index 2e75926..59c6556 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.IO;
 using System.Text;
@@ -41,16 +41,16 @@ namespace Banshee.MediaProfiles
     {
         private bool profile_available = true;
         private Profile profile;
-        
+
         public TestProfileArgs(Profile profile)
         {
             this.profile = profile;
         }
-        
+
         public Profile Profile {
             get { return profile; }
         }
-        
+
         public bool ProfileAvailable {
             get { return profile_available; }
             set { profile_available = value; }
@@ -64,7 +64,7 @@ namespace Banshee.MediaProfiles
         internal static System.Globalization.CultureInfo CultureInfo {
             get { return System.Globalization.CultureInfo.InvariantCulture; }
         }
-    
+
         private XmlDocument document;
         private List<Profile> profiles;
         private Dictionary<string, PipelineVariable> preset_variables;
@@ -96,7 +96,7 @@ namespace Banshee.MediaProfiles
                 if(File.Exists(base_file)) {
                     LoadFromFile(base_file);
                 }
-                
+
                 foreach(string file in Directory.GetFiles(path, "*.xml")) {
                     if(Path.GetFileName(file) != "base.xml") {
                         LoadFromFile(file);
@@ -111,7 +111,7 @@ namespace Banshee.MediaProfiles
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         private void LoadFromFile(string path)
         {
             document = new XmlDocument();
@@ -122,7 +122,7 @@ namespace Banshee.MediaProfiles
             } catch(Exception e) {
                 Console.WriteLine("Could not load profile: {0}\n{1}", path, e);
             }
-            
+
             document = null;
         }
 
@@ -137,7 +137,7 @@ namespace Banshee.MediaProfiles
             if(node == null) {
                 return;
             }
-            
+
             foreach(XmlNode variable_node in node.SelectNodes("variable")) {
                 try {
                     PipelineVariable variable = new PipelineVariable(variable_node);
@@ -189,14 +189,14 @@ namespace Banshee.MediaProfiles
             Initialize ();
             return preset_variables[id];
         }
-        
+
         protected virtual bool OnTestProfile(Profile profile)
         {
             TestProfileHandler handler = TestProfile;
             if(handler == null) {
                 return true;
             }
-            
+
             TestProfileArgs args = new TestProfileArgs(profile);
             handler(this, args);
             return args.ProfileAvailable;
@@ -210,20 +210,20 @@ namespace Banshee.MediaProfiles
                 if(profile.Available == null) {
                     profile.Available = OnTestProfile(profile);
                 }
-                
+
                 if(profile.Available == true) {
                     yield return profile;
                 }
             }
         }
-        
+
         public ProfileConfiguration GetActiveProfileConfiguration (string id)
         {
             Initialize ();
 
             return ProfileConfiguration.LoadActive (this, id);
         }
-        
+
         public ProfileConfiguration GetActiveProfileConfiguration(string id, string [] mimetypes)
         {
             Initialize ();
@@ -239,7 +239,7 @@ namespace Banshee.MediaProfiles
                     }
                 }
             }
-            
+
             foreach(string mimetype in mimetypes) {
                 Profile profile = GetProfileForMimeType(mimetype);
                 if(profile != null) {
@@ -247,10 +247,10 @@ namespace Banshee.MediaProfiles
                     return profile.Configuration;
                 }
             }
-            
+
             return null;
         }
-        
+
         public void TestAll()
         {
             Initialize ();
@@ -259,7 +259,7 @@ namespace Banshee.MediaProfiles
                 profile.Available = OnTestProfile(profile);
             }
         }
-        
+
         public Profile GetProfileForMimeType(string mimetype)
         {
             Initialize ();
@@ -269,7 +269,7 @@ namespace Banshee.MediaProfiles
                     return profile;
                 }
             }
-            
+
             return null;
         }
 
@@ -280,7 +280,7 @@ namespace Banshee.MediaProfiles
 
             if (extension[0] == '.')
                 extension = extension.Substring (1, extension.Length - 1);
-            
+
             Initialize ();
 
             foreach (Profile profile in this) {
@@ -311,11 +311,11 @@ namespace Banshee.MediaProfiles
             Initialize ();
             return profiles.GetEnumerator();
         }
-        
+
         public int ProfileCount {
             get { Initialize (); return profiles.Count; }
         }
-        
+
         public int AvailableProfileCount {
             get {
                 Initialize ();
@@ -333,24 +333,24 @@ namespace Banshee.MediaProfiles
         string Banshee.ServiceStack.IService.ServiceName {
             get { return "MediaProfileManager"; }
         }
-        
+
         public override string ToString()
         {
             Initialize ();
             StringBuilder builder = new StringBuilder();
-            
+
             builder.Append("Preset Pipeline Variables:\n\n");
             foreach(PipelineVariable variable in preset_variables.Values) {
                 builder.Append(variable);
                 builder.Append("\n");
             }
-            
+
             builder.Append("Profiles:\n\n");
             foreach(Profile profile in profiles) {
                 builder.Append(profile);
                 builder.Append("\n\n");
             }
-            
+
             return builder.ToString().Trim();
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Pipeline.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Pipeline.cs
index 26c5ee2..a64072f 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Pipeline.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Pipeline.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Text;
 using System.Xml;
@@ -43,44 +43,44 @@ namespace Banshee.MediaProfiles
         public struct Process : IComparable<Process>
         {
             public static readonly Process Zero;
-        
+
             private string id;
             private int order;
             private string pipeline;
-            
+
             public Process(string id, int order, string pipeline)
             {
                 this.id = id;
                 this.order = order;
                 this.pipeline = pipeline;
             }
-            
+
             public int CompareTo(Process process)
             {
                 int id_cmp = id.CompareTo(process.ID);
                 return id_cmp != 0 ? id_cmp : order.CompareTo(process.Order);
             }
-            
+
             public string ID {
                 get { return id; }
             }
-            
-            public int Order { 
+
+            public int Order {
                 get { return order; }
             }
-            
+
             public string Pipeline {
                 get { return pipeline; }
             }
         }
-    
-        private static Dictionary<string, SExpFunctionHandler> sexpr_functions = 
+
+        private static Dictionary<string, SExpFunctionHandler> sexpr_functions =
             new Dictionary<string, SExpFunctionHandler>();
-            
+
         private List<PipelineVariable> variables = new List<PipelineVariable>();
         private Dictionary<string, string> processes = new Dictionary<string, string>();
         private List<Process> processes_pending = new List<Process>();
-        
+
         internal Pipeline(MediaProfileManager manager, XmlNode node)
         {
             foreach(XmlNode process_node in node.SelectNodes("process")) {
@@ -94,7 +94,7 @@ namespace Banshee.MediaProfiles
                     }
                 } catch {
                 }
-                
+
                 processes_pending.Add(new Process(process_id, order, process));
             }
 
@@ -113,27 +113,27 @@ namespace Banshee.MediaProfiles
                 }
             }
         }
-        
+
         public static void AddSExprFunction(string name, SExpFunctionHandler handler)
         {
-            if(!sexpr_functions.ContainsKey(name)) { 
+            if(!sexpr_functions.ContainsKey(name)) {
                 sexpr_functions.Add(name, handler);
             }
         }
-        
+
         public string CompileProcess(Process process)
         {
             return CompileProcess(process.Pipeline, process.ID);
         }
-        
+
         public string CompileProcess(string process, string id)
         {
             Evaluator eval = new Evaluator();
-            
+
             foreach(KeyValuePair<string, SExpFunctionHandler> function in sexpr_functions) {
                 eval.RegisterFunction(function.Value, function.Key);
             }
-            
+
             foreach(PipelineVariable variable in this) {
                 double ?numeric = variable.CurrentValueNumeric;
                 if(numeric != null) {
@@ -146,7 +146,7 @@ namespace Banshee.MediaProfiles
                     eval.RegisterVariable(variable.Id, variable.CurrentValue);
                 }
             }
-            
+
             TreeNode result = eval.EvaluateString(process);
             if(eval.Success && result is StringLiteral) {
                 return (result.Flatten() as StringLiteral).Value;
@@ -157,19 +157,19 @@ namespace Banshee.MediaProfiles
                 Console.WriteLine(eval.ErrorMessage);
                 Console.WriteLine("-----");
                 Console.WriteLine("Stack Trace:");
-            
+
                 foreach(Exception e in eval.Exceptions) {
                     Console.WriteLine(e.Message);
                 }
-                
+
                 Console.WriteLine("-----");
                 Console.WriteLine("Expression Tree:");
                 Hyena.SExpEngine.TreeNode.DumpTree(eval.ExpressionTree);
             }
-            
+
             return null;
         }
-        
+
         public void AddProcess(Process process)
         {
             AddProcess(process.ID, process.Pipeline);
@@ -188,34 +188,34 @@ namespace Banshee.MediaProfiles
         {
             processes.Remove(id);
         }
-        
+
         public string GetProcessById(string id)
         {
             if(processes.ContainsKey(id)) {
                 return CompileProcess(processes[id], id);
             }
-            
+
             throw new ApplicationException("No processes in pipeline");
         }
-        
+
         public string GetProcessByIdOrDefault(string id)
         {
             if(processes.ContainsKey(id)) {
                 return GetProcessById(id);
-            } 
-            
+            }
+
             return GetDefaultProcess();
         }
-        
+
         public string GetDefaultProcess()
         {
             foreach(KeyValuePair<string, string> process in processes) {
                 return CompileProcess(process.Value, process.Key);
             }
-            
+
             throw new ApplicationException("No processes in pipeline");
         }
-        
+
         public IList<Process> GetPendingProcessesById(string id)
         {
             List<Process> processes = new List<Process>();
@@ -233,7 +233,7 @@ namespace Banshee.MediaProfiles
             if(variables.Contains(variable)) {
                 throw new ApplicationException(String.Format("A variable with ID '{0}' already exists in this profile", variable.Id));
             }
-            
+
             variables.Add(variable);
         }
 
@@ -263,7 +263,7 @@ namespace Banshee.MediaProfiles
         public IDictionary<string, string> Processes {
             get { return processes; }
         }
-        
+
         public IList<PipelineVariable> Variables {
             get { return variables; }
         }
@@ -275,9 +275,9 @@ namespace Banshee.MediaProfiles
                 }
             }
         }
-        
+
         public string this[string variableName] {
-            set { 
+            set {
                 foreach(PipelineVariable variable in this) {
                     if(variable.Id == variableName) {
                         variable.CurrentValue = value;
@@ -290,7 +290,7 @@ namespace Banshee.MediaProfiles
         public override string ToString()
         {
             StringBuilder builder = new StringBuilder();
-                
+
             builder.Append("\tProcesses:\n");
             foreach(KeyValuePair<string, string> process in processes) {
                 builder.Append(String.Format("\t{0} = {1}\n", process.Key, process.Value));
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/PipelineVariable.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/PipelineVariable.cs
index c5bc06e..9603456 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/PipelineVariable.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/PipelineVariable.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Text;
 using System.Xml;
@@ -34,14 +34,14 @@ using System.Collections.Generic;
 
 namespace Banshee.MediaProfiles
 {
-    public enum PipelineVariableControlType 
+    public enum PipelineVariableControlType
     {
         Text,
         Slider,
         Combo,
         Check
     }
-    
+
     public class PipelineVariable
     {
         public struct PossibleValue
@@ -50,7 +50,7 @@ namespace Banshee.MediaProfiles
             public string Display;
             public string [] Enables;
             public string [] Disables;
-            
+
             public PossibleValue(string value, string display)
             {
                 Value = value;
@@ -58,13 +58,13 @@ namespace Banshee.MediaProfiles
                 Enables = null;
                 Disables = null;
             }
-            
+
             public override string ToString()
             {
                 return Display;
             }
         }
-    
+
         private PipelineVariableControlType control_type;
         private string id;
         private string name;
@@ -79,17 +79,17 @@ namespace Banshee.MediaProfiles
         private int step_precision;
         private string [] enables = new string[0];
         private string [] disables = new string[0];
-        
+
         private Dictionary<string, PossibleValue> possible_values = new Dictionary<string, PossibleValue>();
         private List<string> possible_values_keys = new List<string>();
         private bool advanced;
-    
+
         internal PipelineVariable(XmlNode node)
         {
             id = node.Attributes["id"].Value.Trim();
             name = Banshee.Base.Localization.SelectSingleNode(node, "name").InnerText.Trim();
             control_type = StringToControlType(node.SelectSingleNode("control-type").InnerText.Trim());
-            
+
             XmlAttribute enables_attr = node.Attributes["enables"];
             if(enables_attr != null && enables_attr.Value != null) {
                 string [] vars = enables_attr.Value.Split(',');
@@ -100,7 +100,7 @@ namespace Banshee.MediaProfiles
                     }
                 }
             }
-            
+
             XmlAttribute disables_attr = node.Attributes["disables"];
             if(disables_attr != null && disables_attr.Value != null) {
                 string [] vars = disables_attr.Value.Split(',');
@@ -111,7 +111,7 @@ namespace Banshee.MediaProfiles
                     }
                 }
             }
-            
+
             try {
                 XmlNode unit_node = node.SelectSingleNode("unit");
                 if(unit_node != null) {
@@ -119,7 +119,7 @@ namespace Banshee.MediaProfiles
                 }
             } catch {
             }
-            
+
             try {
                 XmlNode advanced_node = node.SelectSingleNode("advanced");
                 if(advanced_node != null) {
@@ -133,35 +133,35 @@ namespace Banshee.MediaProfiles
             max_value = ToDouble(ReadValue(node, "max-value"));
             min_label = ReadValue(node, "min-label", true);
             max_label = ReadValue(node, "max-label", true);
-            
+
             string step_value_str = ReadValue(node, "step-value");
             if(step_value_str != null) {
                 bool zeros = true;
                 step_precision = step_value_str.IndexOf(".") + 1;
-                
+
                 for(int i = step_precision; i > 0 && i < step_value_str.Length; i++) {
                     if(step_value_str[i] != '0') {
                         zeros = false;
                         break;
                     }
                 }
-                
+
                 step_precision = zeros ? 0 : step_value_str.Length - step_precision;
                 step_value = ToDouble(step_value_str);
             }
-            
+
             if(default_value != null && default_value != String.Empty && (current_value == null ||
                 current_value == String.Empty)) {
                 current_value = default_value;
             }
-            
+
             foreach(XmlNode possible_value_node in Banshee.Base.Localization.SelectNodes(node, "possible-values/value")) {
                 try {
                     string value = possible_value_node.Attributes["value"].Value.Trim();
                     string display = possible_value_node.InnerText.Trim();
 
                     PossibleValue possible_value = new PossibleValue(value, display);
-                    
+
                     XmlAttribute attr = possible_value_node.Attributes["enables"];
                     if(attr != null && attr.Value != null) {
                         string [] vars = attr.Value.Split(',');
@@ -183,7 +183,7 @@ namespace Banshee.MediaProfiles
                             }
                         }
                     }
-                    
+
                     if(!possible_values.ContainsKey(value)) {
                         possible_values.Add(value, possible_value);
                         possible_values_keys.Add(value);
@@ -201,14 +201,14 @@ namespace Banshee.MediaProfiles
         private static string ReadValue(XmlNode node, string name, bool localize)
         {
             try {
-                XmlNode str_node = localize ? 
-                    Banshee.Base.Localization.SelectSingleNode(node, name) : 
+                XmlNode str_node = localize ?
+                    Banshee.Base.Localization.SelectSingleNode(node, name) :
                     node.SelectSingleNode(name);
-                    
+
                 if(str_node == null) {
                     return null;
                 }
-                
+
                 string str = str_node.InnerText.Trim();
                 return str == String.Empty ? null : str;
             } catch {
@@ -230,10 +230,10 @@ namespace Banshee.MediaProfiles
         private static PipelineVariableControlType StringToControlType(string str)
         {
             switch(str.ToLower()) {
-                case "combo": return PipelineVariableControlType.Combo; 
+                case "combo": return PipelineVariableControlType.Combo;
                 case "slider": return PipelineVariableControlType.Slider;
                 case "check": return PipelineVariableControlType.Check;
-                case "text": 
+                case "text":
                 default:
                     return PipelineVariableControlType.Text;
             }
@@ -244,7 +244,7 @@ namespace Banshee.MediaProfiles
             if(advanced == null || advanced.Trim() == String.Empty) {
                 return true;
             }
-            
+
             switch(advanced.Trim().ToLower()) {
                 case "true":
                 case "yes":
@@ -275,12 +275,12 @@ namespace Banshee.MediaProfiles
             get { return control_type; }
             set { control_type = value; }
         }
-        
+
         public bool Advanced {
             get { return advanced; }
             set { advanced = value; }
         }
-        
+
         public string DefaultValue {
             get { return default_value; }
             set { default_value = value; }
@@ -295,20 +295,20 @@ namespace Banshee.MediaProfiles
             get { return min_label; }
             set { min_label = value; }
         }
-        
+
         public string MaxLabel {
             get { return max_label; }
             set { max_label = value; }
         }
-        
+
         public int StepPrecision {
             get { return step_precision; }
         }
-        
+
         public string [] Enables {
             get { return enables; }
         }
-        
+
         public string [] Disables {
             get { return disables; }
         }
@@ -355,15 +355,15 @@ namespace Banshee.MediaProfiles
             get { return step_value; }
             set { step_value = value; }
         }
-        
+
         public IDictionary<string, PossibleValue> PossibleValues {
             get { return possible_values; }
         }
-        
+
         public ICollection<string> PossibleValuesKeys {
             get { return possible_values_keys; }
         }
-        
+
         public int PossibleValuesCount {
             get { return possible_values.Count; }
         }
@@ -382,13 +382,13 @@ namespace Banshee.MediaProfiles
             builder.Append(String.Format("\tMax Value     = {0}\n", MaxValue));
             builder.Append(String.Format("\tStep Value    = {0}\n", StepValue));
             builder.Append(String.Format("\tPossible Values:\n"));
-            
+
             foreach(KeyValuePair<string, PossibleValue> value in PossibleValues) {
                 builder.Append(String.Format("\t\t{0} => {1}\n", value.Value, value.Key));
             }
 
             builder.Append("\n");
-            
+
             return builder.ToString();
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/Profile.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/Profile.cs
index 7d712b6..7ee4cec 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/Profile.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/Profile.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Text;
 using System.Xml;
@@ -51,19 +51,19 @@ namespace Banshee.MediaProfiles
             name = Banshee.Base.Localization.SelectSingleNode(node, "name").InnerText.Trim();
             description = Banshee.Base.Localization.SelectSingleNode(node, "description").InnerText.Trim();
             output_file_extension = node.SelectSingleNode("output-file-extension").InnerText.Trim();
-            
+
             foreach(XmlNode mimetype_node in node.SelectNodes("mimetype")) {
                 mimetypes.Add(mimetype_node.InnerText.Trim());
             }
-            
+
             pipeline = new Pipeline(manager, node.SelectSingleNode("pipeline"));
         }
-        
+
         public void LoadConfiguration(string configurationId)
         {
             SetConfiguration (ProfileConfiguration.Load(this, configurationId));
         }
-        
+
         public void SetConfiguration(ProfileConfiguration configuration)
         {
             this.configuration = configuration;
@@ -71,40 +71,40 @@ namespace Banshee.MediaProfiles
                 pipeline[variable.Key] = variable.Value;
             }
         }
-        
+
         public void SaveConfiguration()
         {
             SaveConfiguration(configuration.Id);
         }
-        
+
         public void SaveConfiguration(string configurationId)
         {
             if(configuration == null) {
                 LoadConfiguration(configurationId);
             }
-            
+
             foreach(PipelineVariable variable in pipeline) {
                 configuration.Add(variable.Id, variable.CurrentValue);
             }
-            
+
             configuration.Save();
         }
-        
-        public bool HasMimeType(string mimetype) 
+
+        public bool HasMimeType(string mimetype)
         {
             return mimetypes.Contains(mimetype);
         }
-        
+
         public string Id {
             get { return id; }
             set { id = value; }
         }
-        
+
         public bool? Available {
             get { return available; }
             internal set { available = value; }
         }
-        
+
         public string Name {
             get { return name; }
             set { name = value; }
@@ -124,11 +124,11 @@ namespace Banshee.MediaProfiles
             get { return pipeline; }
             set { pipeline = value; }
         }
-        
+
         public ProfileConfiguration Configuration {
             get { return configuration; }
         }
-        
+
         public IList<string> MimeTypes {
             get { return mimetypes; }
         }
@@ -143,7 +143,7 @@ namespace Banshee.MediaProfiles
             builder.Append(String.Format("Extension   = {0}\n", OutputFileExtension));
             builder.Append("Pipeline    =\n");
             builder.Append(Pipeline);
-            
+
             return builder.ToString();
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.MediaProfiles/ProfileConfiguration.cs b/src/Core/Banshee.Services/Banshee.MediaProfiles/ProfileConfiguration.cs
index 130d6c5..58471e1 100644
--- a/src/Core/Banshee.Services/Banshee.MediaProfiles/ProfileConfiguration.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaProfiles/ProfileConfiguration.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Text;
 using System.Xml;
@@ -41,7 +41,7 @@ namespace Banshee.MediaProfiles
         private Dictionary<string, string> variable_values = new Dictionary<string, string>();
         private string id;
         private Profile profile;
-        
+
         public static ProfileConfiguration Load(Profile profile, string id)
         {
             ProfileConfiguration configuration = new ProfileConfiguration(profile, id);
@@ -66,12 +66,12 @@ namespace Banshee.MediaProfiles
 
             return null;
         }
-        
+
         public static void SaveActiveProfile(Profile profile, string id)
         {
             ConfigurationClient.Set<string>(MakeConfNamespace(id), "active_profile", profile.Id);
         }
-        
+
         public ProfileConfiguration(Profile profile, string id)
         {
             this.profile = profile;
@@ -94,7 +94,7 @@ namespace Banshee.MediaProfiles
             }
             ConfigurationClient.Set<string[]>(ConfNamespace, "variables", variable_names.ToArray());
         }
-        
+
         public void Add(string variable, string value)
         {
             if(variable_values.ContainsKey(variable)) {
@@ -103,28 +103,28 @@ namespace Banshee.MediaProfiles
                 variable_values.Add(variable, value);
             }
         }
-        
+
         public void Remove(string variable)
         {
             if(variable_values.ContainsKey(variable)) {
                 variable_values.Remove(variable);
             }
         }
-        
+
         public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
         {
             return variable_values.GetEnumerator();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator()
         {
             return variable_values.GetEnumerator();
         }
-        
+
         public string this[string variable] {
             get { return variable_values[variable]; }
         }
-        
+
         public string Id {
             get { return id; }
         }
@@ -132,7 +132,7 @@ namespace Banshee.MediaProfiles
         public int Count {
             get { return variable_values.Count; }
         }
-        
+
         public Profile Profile {
             get {
                 if (profile.Configuration != this)
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedMetadataProvider.cs
index 7e71ce7..673c074 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedMetadataProvider.cs
@@ -41,7 +41,7 @@ namespace Banshee.Metadata.Embedded
         public EmbeddedMetadataProvider() : base()
         {
         }
-        
+
         public override IMetadataLookupJob CreateJob(IBasicTrackInfo track)
         {
             return new EmbeddedQueryJob(track);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs b/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs
index b4d119e..c4a7512 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs
@@ -42,22 +42,22 @@ namespace Banshee.Metadata.Embedded
     public class EmbeddedQueryJob : MetadataServiceJob
     {
         private TrackInfo track;
-        
+
         public EmbeddedQueryJob(IBasicTrackInfo track)
         {
             Track = track;
             this.track = track as TrackInfo;
         }
-        
+
         public override void Run()
         {
             if(track == null || CoverArtSpec.CoverExists (track.ArtworkId)) {
                 return;
             }
-          
+
             Fetch();
         }
-        
+
         protected void Fetch()
         {
             if (track.Uri == null || !track.Uri.IsFile || !Banshee.IO.File.Exists (track.Uri))
@@ -68,49 +68,49 @@ namespace Banshee.Metadata.Embedded
             if(artist_album_id == null) {
                 return;
             }
-            
+
             IPicture [] pictures = GetEmbeddedPictures(track.Uri);
-                    
+
             if(pictures != null && pictures.Length > 0) {
                 int preferred_index = GetPictureIndexToUse(pictures);
                 IPicture picture = pictures[preferred_index];
                 string path = CoverArtSpec.GetPath(artist_album_id);
-                
-                if(SavePicture(picture, path)) {    
+
+                if(SavePicture(picture, path)) {
                     StreamTag tag = new StreamTag();
                     tag.Name = CommonTags.AlbumCoverId;
-                    tag.Value = artist_album_id;   
-                    
+                    tag.Value = artist_album_id;
+
                     AddTag(tag);
-                } 
+                }
             }
         }
 
         protected IPicture [] GetEmbeddedPictures(SafeUri uri)
         {
-            TagLib.File file = StreamTagger.ProcessUri(uri);            
-            return file == null ? null : file.Tag.Pictures;            
+            TagLib.File file = StreamTagger.ProcessUri(uri);
+            return file == null ? null : file.Tag.Pictures;
         }
-        
+
         protected int GetPictureIndexToUse(IPicture [] pictures)
         {
             int preferred_index = -1;
-            
-            // Use the front cover.  If we don't find it, use the first image. 
+
+            // Use the front cover.  If we don't find it, use the first image.
             for(int i = 0; i < pictures.Length; i++) {
                 if(preferred_index == -1) {
                     preferred_index = i;
                 }
-                
+
                 if(pictures[i].Type == PictureType.FrontCover) {
                     preferred_index = i;
                     break;
                 }
             }
-            
+
             return preferred_index;
         }
-        
+
         protected bool SavePicture (IPicture picture, string image_path)
         {
             if (picture == null || picture.Data == null || picture.Data.Count == 0) {
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemMetadataProvider.cs
index c2f636e..2a92f95 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemMetadataProvider.cs
@@ -40,7 +40,7 @@ namespace Banshee.Metadata.FileSystem
         public FileSystemMetadataProvider() : base()
         {
         }
-        
+
         public override IMetadataLookupJob CreateJob (IBasicTrackInfo track)
         {
             return new FileSystemQueryJob (track);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs b/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs
index 5287ae3..87d482a 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.FileSystem/FileSystemQueryJob.cs
@@ -47,26 +47,26 @@ namespace Banshee.Metadata.FileSystem
             Track = track;
             this.track = track as TrackInfo;
         }
-        
+
         public override void Run ()
         {
             if (Track == null || CoverArtSpec.CoverExists (Track.ArtworkId)) {
                 return;
             }
-          
+
             Fetch ();
         }
-        
+
         private static string [] extensions = new string [] { ".jpg", ".jpeg", ".png", ".bmp" };
         private static string [] filenames = new string [] { "cover", "folder", "front" };
-        
+
         protected void Fetch ()
         {
             if (Track.Uri == null || !Track.Uri.IsFile ||
                     Track.ArtworkId == null || !Banshee.IO.File.Exists (Track.Uri)) {
                 return;
             }
-            
+
             string directory = System.IO.Path.GetDirectoryName (Track.Uri.AbsolutePath);
 
             // Get the largest (in terms of file size) JPEG in the directory
@@ -88,11 +88,11 @@ namespace Banshee.Metadata.FileSystem
                     }
                     return;
                 }
-                
+
                 if (found_definite_best) {
                     continue;
                 }
-                
+
                 string extension = System.IO.Path.GetExtension (file).ToLower ();
                 if (Array.IndexOf (extensions, extension) != -1) {
                     string filename = System.IO.Path.GetFileNameWithoutExtension (file).ToLower ();
@@ -108,7 +108,7 @@ namespace Banshee.Metadata.FileSystem
                     }
                 }
             }
-            
+
             if (best_file != null) {
                 try {
                     string extension = "cover";
@@ -125,7 +125,7 @@ namespace Banshee.Metadata.FileSystem
                     tag.Name = CommonTags.AlbumCoverId;
                     tag.Value = Track.ArtworkId;
                     AddTag (tag);
-                    
+
                     Log.Debug ("Got cover art from track's folder", best_file);
                 } catch (Exception e) {
                     Log.Exception (e);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMMetadataProvider.cs
index 1032fc3..89f8797 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMMetadataProvider.cs
@@ -3,9 +3,9 @@
 //
 // Author:
 //   Peter de Kraker <peterdk dev umito nl>
-// 
+//
 // Based on RhapsodyMetadataProvider.cs
-//   
+//
 // Copyright (C) 2006-2008 Novell, Inc.
 //
 // Permission is hereby granted, free of charge, to any person obtaining
@@ -42,7 +42,7 @@ namespace Banshee.Metadata.LastFM
         public LastFMMetadataProvider () : base ()
         {
         }
-        
+
         public override IMetadataLookupJob CreateJob (IBasicTrackInfo track)
         {
             return new LastFMQueryJob (track);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMQueryJob.cs b/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMQueryJob.cs
index 546f354..0a7f6ba 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMQueryJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.LastFM/LastFMQueryJob.cs
@@ -50,39 +50,39 @@ using Lastfm;
 namespace Banshee.Metadata.LastFM
 {
     public class LastFMQueryJob : MetadataServiceJob
-    {        
+    {
         public LastFMQueryJob (IBasicTrackInfo track)
         {
-            Track = track;                
+            Track = track;
         }
-        
+
         public override void Run ()
         {
-            
+
             if (Track == null || (Track.MediaAttributes & TrackMediaAttributes.Podcast) != 0) {
                 return;
             }
-        
+
             string artwork_id = Track.ArtworkId;
 
             if (artwork_id == null || CoverArtSpec.CoverExists (artwork_id) || !ServiceManager.Get<Network> ().Connected) {
                 return;
             }
-            
+
             // Lastfm uses double url-encoding in their current 1.2 api for albuminfo.
             string lastfmArtist = HttpUtility.UrlEncode (HttpUtility.UrlEncode (Track.AlbumArtist));
             string lastfmAlbum = HttpUtility.UrlEncode (HttpUtility.UrlEncode (Track.AlbumTitle));
-             
+
             Lastfm.Data.LastfmAlbumData album = null;
-            
-            try { 
+
+            try {
                 album = new Lastfm.Data.LastfmAlbumData (lastfmArtist, lastfmAlbum);
             } catch {
                 return;
             }
 
             // AllUrls is an array with [small,medium,large] coverart url
-            string [] album_cover_urls = album.AlbumCoverUrls.AllUrls ();              
+            string [] album_cover_urls = album.AlbumCoverUrls.AllUrls ();
 
             // Select the URL for the coverart with highest resolution
             string best_url = String.Empty;
@@ -94,22 +94,22 @@ namespace Banshee.Metadata.LastFM
 
             // No URL's found
             if (String.IsNullOrEmpty (best_url) || best_url.Contains ("noimage")) {
-                //string upload_url = String.Format ("http://www.last.fm/music/{0}/{1}/+images";, lastfmArtist, lastfmAlbum);  
+                //string upload_url = String.Format ("http://www.last.fm/music/{0}/{1}/+images";, lastfmArtist, lastfmAlbum);
                 //Log.DebugFormat ("No coverart provided by lastfm. (you can upload it here: {0}) - {1} ", upload_url, Track.ArtworkId);
                 return;
             }
-            
+
             // Hack: You can get higher resolution artwork by replacing 130X130 with 300x300 in lastfm hosted albumart
             string high_res_url = null;
             if (best_url.Contains ("130x130")) {
                 high_res_url = best_url.Replace ("130x130", "300x300");
             }
-            
+
             // Hack: You can get higher resolution artwork from Amazon too (lastfm sometimes uses amazon links)
-            if (best_url.Contains ("MZZZZZZZ")) {                                        
+            if (best_url.Contains ("MZZZZZZZ")) {
                 high_res_url = best_url.Replace ("MZZZZZZZ", "LZZZZZZZ");
             }
-                
+
             // Download the cover
             try {
                 if ((high_res_url != null && SaveHttpStreamCover (new Uri (high_res_url), artwork_id, null)) ||
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzMetadataProvider.cs
index fb4c3d6..19551d3 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzMetadataProvider.cs
@@ -40,7 +40,7 @@ namespace Banshee.Metadata.MusicBrainz
         public MusicBrainzMetadataProvider() : base()
         {
         }
-        
+
         public override IMetadataLookupJob CreateJob(IBasicTrackInfo track)
         {
             return new MusicBrainzQueryJob(track);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs b/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs
index 8748b0b..92fdb91 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs
@@ -46,32 +46,32 @@ namespace Banshee.Metadata.MusicBrainz
     public class MusicBrainzQueryJob : MetadataServiceJob
     {
         private static string AmazonUriFormat = "http://images.amazon.com/images/P/{0}.01._SCLZZZZZZZ_.jpg";;
-    
+
         private string asin;
-        
+
         public MusicBrainzQueryJob (IBasicTrackInfo track)
         {
             Track = track;
         }
-        
+
         public MusicBrainzQueryJob (IBasicTrackInfo track, string asin) : this (track)
         {
             this.asin = asin;
         }
-        
+
         public override void Run ()
         {
             Lookup ();
         }
-        
+
         public bool Lookup ()
         {
             if (Track == null || (Track.MediaAttributes & TrackMediaAttributes.Podcast) != 0) {
                 return false;
             }
-            
+
             string artwork_id = Track.ArtworkId;
-            
+
             if (artwork_id == null) {
                 return false;
             } else if (CoverArtSpec.CoverExists (artwork_id)) {
@@ -79,15 +79,15 @@ namespace Banshee.Metadata.MusicBrainz
             } else if (!InternetConnected) {
                 return false;
             }
-            
+
             if (asin == null) {
                 asin = FindAsin ();
                 if (asin == null) {
                     return false;
                 }
             }
-            
-            if (SaveHttpStreamCover (new Uri (String.Format (AmazonUriFormat, asin)), artwork_id, 
+
+            if (SaveHttpStreamCover (new Uri (String.Format (AmazonUriFormat, asin)), artwork_id,
                 new string [] { "image/gif" })) {
                 Log.Debug ("Downloaded cover art from Amazon", artwork_id);
                 StreamTag tag = new StreamTag ();
@@ -95,17 +95,17 @@ namespace Banshee.Metadata.MusicBrainz
                 tag.Value = artwork_id;
 
                 AddTag (tag);
-                
+
                 return true;
             }
-            
+
             return false;
         }
 
-        // MusicBrainz has this new XML API, so I'm using that here 
-        // instead of using the stuff in the MusicBrainz namespace 
+        // MusicBrainz has this new XML API, so I'm using that here
+        // instead of using the stuff in the MusicBrainz namespace
         // which sucks and doesn't even appear to work anymore.
-        
+
         private string FindAsin ()
         {
             Uri uri = new Uri (String.Format ("http://musicbrainz.org/ws/1/release/?type=xml&artist={0}&title={1}";,
@@ -115,12 +115,12 @@ namespace Banshee.Metadata.MusicBrainz
             if (response == null) {
                 return null;
             }
-            
+
             using (Stream stream = response.GetResponseStream ()) {
                 XmlTextReader reader = new XmlTextReader (stream);
-    
+
                 bool haveMatch = false;
-                
+
                 while (reader.Read ()) {
                     if (reader.NodeType == XmlNodeType.Element) {
                         switch (reader.LocalName) {
@@ -138,7 +138,7 @@ namespace Banshee.Metadata.MusicBrainz
                     }
                 }
             }
-            
+
             return null;
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyMetadataProvider.cs
index 2f8c097..4119377 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyMetadataProvider.cs
@@ -40,7 +40,7 @@ namespace Banshee.Metadata.Rhapsody
         public RhapsodyMetadataProvider() : base()
         {
         }
-        
+
         public override IMetadataLookupJob CreateJob(IBasicTrackInfo track)
         {
             return new RhapsodyQueryJob(track);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs b/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs
index 7365ff9..02d42e2 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs
@@ -47,38 +47,38 @@ namespace Banshee.Metadata.Rhapsody
     public class RhapsodyQueryJob : MetadataServiceJob
     {
         private static Uri base_uri = new Uri("http://www.rhapsody.com/";);
-        
+
         public RhapsodyQueryJob(IBasicTrackInfo track)
         {
             Track = track;
         }
-        
+
         public override void Run()
         {
             if (Track == null || (Track.MediaAttributes & TrackMediaAttributes.Podcast) != 0) {
                 return;
             }
-        
+
             string artwork_id = Track.ArtworkId;
-            
+
             if(artwork_id == null || CoverArtSpec.CoverExists(artwork_id) || !InternetConnected) {
                 return;
             }
-            
+
             Uri data_uri = new Uri(base_uri, String.Format("/{0}/data.xml", artwork_id.Replace('-', '/')));
-        
+
             XmlDocument doc = new XmlDocument();
             HttpWebResponse response = GetHttpStream (data_uri);
             if (response == null) {
                 return;
             }
-            
+
             string [] content_types = response.Headers.GetValues ("Content-Type");
             if (content_types.Length == 0 || content_types[0] != "text/xml") {
                 response.Close ();
                 return;
             }
-            
+
             using (Stream stream = response.GetResponseStream ()) {
                 doc.Load (stream);
             }
@@ -89,17 +89,17 @@ namespace Banshee.Metadata.Rhapsody
                 string second_attempt = art_node.Attributes["src"].Value;
                 string first_attempt = second_attempt.Replace("170x170", "500x500");
 
-                if(SaveHttpStreamCover(new Uri(first_attempt), artwork_id, null) || 
+                if(SaveHttpStreamCover(new Uri(first_attempt), artwork_id, null) ||
                     SaveHttpStreamCover(new Uri(second_attempt), artwork_id, null)) {
                     Log.Debug ("Downloaded cover art from Rhapsody", artwork_id);
                     StreamTag tag = new StreamTag();
                     tag.Name = CommonTags.AlbumCoverId;
                     tag.Value = artwork_id;
-                
+
                     AddTag(tag);
                 }
             }
-            
+
             response.Close ();
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/BaseMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata/BaseMetadataProvider.cs
index 97cabc9..2835328 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/BaseMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/BaseMetadataProvider.cs
@@ -39,36 +39,36 @@ namespace Banshee.Metadata
     public abstract class BaseMetadataProvider : IMetadataProvider
     {
         public event MetadataLookupResultHandler HaveResult;
-        
+
         protected BaseMetadataProvider()
         {
         }
-        
+
         public abstract IMetadataLookupJob CreateJob(IBasicTrackInfo track);
-        
+
         public virtual void Lookup(IBasicTrackInfo track)
         {
             IMetadataLookupJob job = CreateJob(track);
             job.Run();
         }
-        
+
         public virtual void Cancel(IBasicTrackInfo track)
         {
         }
-        
+
         public virtual void Cancel()
         {
         }
-        
+
         protected virtual void OnHaveResult(IBasicTrackInfo track, IList<StreamTag> tags)
         {
             if(tags == null) {
                 return;
             }
-            
+
             MetadataLookupResultHandler handler = HaveResult;
             if(handler != null) {
-                handler(this, new MetadataLookupResultArgs(track, 
+                handler(this, new MetadataLookupResultArgs(track,
                     new ReadOnlyCollection<StreamTag>(tags)));
             }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/IMetadataProvider.cs b/src/Core/Banshee.Services/Banshee.Metadata/IMetadataProvider.cs
index 21f4ee3..b9b3ed6 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/IMetadataProvider.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/IMetadataProvider.cs
@@ -36,33 +36,33 @@ using Banshee.Streaming;
 namespace Banshee.Metadata
 {
     public delegate void MetadataLookupResultHandler(object o, MetadataLookupResultArgs args);
-    
+
     public class MetadataLookupResultArgs : EventArgs
     {
         private IBasicTrackInfo track;
         private ReadOnlyCollection<StreamTag> tags;
-        
+
         public MetadataLookupResultArgs(IBasicTrackInfo track, ReadOnlyCollection<StreamTag> tags)
         {
             this.track = track;
             this.tags = tags;
         }
-        
+
         public IBasicTrackInfo Track {
             get { return track; }
         }
-        
+
         public ReadOnlyCollection<StreamTag> ResultTags {
             get { return tags; }
         }
     }
-    
+
     public interface IMetadataProvider
     {
         event MetadataLookupResultHandler HaveResult;
-        
+
         IMetadataLookupJob CreateJob(IBasicTrackInfo track);
-        
+
         void Lookup(IBasicTrackInfo track);
         void Cancel(IBasicTrackInfo track);
         void Cancel();
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/MetadataService.cs b/src/Core/Banshee.Services/Banshee.Metadata/MetadataService.cs
index 9210cd0..54f2258 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/MetadataService.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/MetadataService.cs
@@ -39,18 +39,18 @@ namespace Banshee.Metadata
     public class MetadataService : BaseMetadataProvider
     {
         private static MetadataService instance;
-        
+
         public static MetadataService Instance {
             get {
                 if (instance == null) {
                     instance = new MetadataService ();
                 }
-                
+
                 return instance;
             }
         }
-        
-        private Dictionary<IBasicTrackInfo, IMetadataLookupJob> queries 
+
+        private Dictionary<IBasicTrackInfo, IMetadataLookupJob> queries
             = new Dictionary<IBasicTrackInfo, IMetadataLookupJob> ();
         private List<IMetadataProvider> providers = new List<IMetadataProvider> ();
 
@@ -61,7 +61,7 @@ namespace Banshee.Metadata
             AddProvider (new Banshee.Metadata.Rhapsody.RhapsodyMetadataProvider ());
             AddProvider (new Banshee.Metadata.MusicBrainz.MusicBrainzMetadataProvider ());
             AddProvider (new Banshee.Metadata.LastFM.LastFMMetadataProvider ());
-            
+
             Scheduler.JobFinished += OnSchedulerJobFinished;
             Scheduler.JobUnscheduled += OnSchedulerJobUnscheduled;
         }
@@ -70,25 +70,25 @@ namespace Banshee.Metadata
         {
             return new MetadataServiceJob (this, track);
         }
-        
+
         public override void Lookup (IBasicTrackInfo track)
         {
             Lookup (track, JobPriority.Highest);
         }
-        
+
         public void Lookup (IBasicTrackInfo track, JobPriority priority)
         {
             if (track == null || queries == null || track.ArtworkId == null) {
                 return;
             }
-            
+
             lock (((ICollection)queries).SyncRoot) {
                 if (!queries.ContainsKey (track)) {
                     IMetadataLookupJob job = CreateJob (track);
                     if (job == null) {
                         return;
                     }
-                    
+
                     queries.Add (track, job);
                     Scheduler.Schedule (job, priority);
                 }
@@ -117,42 +117,42 @@ namespace Banshee.Metadata
                 providers.Remove (provider);
             }
         }
-        
+
         private bool RemoveJob (IMetadataLookupJob job)
         {
             if (job == null || job.Track == null) {
                 return false;
             }
-            
+
             lock (((ICollection)queries).SyncRoot) {
                 if (queries.ContainsKey (job.Track)) {
                     queries.Remove (job.Track);
                     return true;
                 }
-                
+
                 return false;
             }
         }
-        
+
         private void OnSchedulerJobFinished (IJob job)
         {
             if (!(job is IMetadataLookupJob)) {
                 return;
             }
-            
+
             IMetadataLookupJob lookup_job = (IMetadataLookupJob)job;
             if (RemoveJob (lookup_job)) {
-                Banshee.Base.ThreadAssist.ProxyToMain (delegate { 
-                    OnHaveResult (lookup_job.Track, lookup_job.ResultTags); 
+                Banshee.Base.ThreadAssist.ProxyToMain (delegate {
+                    OnHaveResult (lookup_job.Track, lookup_job.ResultTags);
                 });
             }
         }
-        
+
         private void OnSchedulerJobUnscheduled (IJob job)
         {
             RemoveJob (job as IMetadataLookupJob);
         }
-        
+
         public ReadOnlyCollection<IMetadataProvider> Providers {
             get {
                 lock (providers) {
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs b/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
index 97308c1..d4f8794 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
@@ -47,15 +47,15 @@ namespace Banshee.Metadata
         private IBasicTrackInfo track;
         private List<StreamTag> tags = new List<StreamTag>();
         private IMetadataLookupJob current_job;
-        
+
         protected bool InternetConnected {
             get { return ServiceManager.Get<Network> ().Connected; }
         }
-        
+
         protected MetadataServiceJob()
         {
         }
-        
+
         public MetadataServiceJob(MetadataService service, IBasicTrackInfo track)
         {
             this.service = service;
@@ -71,7 +71,7 @@ namespace Banshee.Metadata
                 }
             }
         }
-    
+
         public virtual void Run()
         {
             foreach(IMetadataProvider provider in service.Providers) {
@@ -87,7 +87,7 @@ namespace Banshee.Metadata
 
                     if (cancelled)
                         break;;
-                    
+
                     foreach(StreamTag tag in current_job.ResultTags) {
                         AddTag(tag);
                     }
@@ -102,21 +102,21 @@ namespace Banshee.Metadata
                 }
             }
         }
-        
-        public virtual IBasicTrackInfo Track { 
+
+        public virtual IBasicTrackInfo Track {
             get { return track; }
             protected set { track = value; }
         }
-        
-        public virtual IList<StreamTag> ResultTags { 
+
+        public virtual IList<StreamTag> ResultTags {
             get { return tags; }
         }
-        
+
         protected void AddTag(StreamTag tag)
         {
             tags.Add(tag);
         }
-        
+
         protected HttpWebResponse GetHttpStream(Uri uri)
         {
             return GetHttpStream(uri, null);
@@ -127,15 +127,15 @@ namespace Banshee.Metadata
             if(!InternetConnected) {
                 throw new NetworkUnavailableException();
             }
-        
+
             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri.AbsoluteUri);
             request.UserAgent = Banshee.Web.Browser.UserAgent;
             request.Timeout = 10 * 1000;
             request.KeepAlive = false;
             request.AllowAutoRedirect = true;
-            
+
             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
-            
+
             if(ignoreMimeTypes != null) {
                 string [] content_types = response.Headers.GetValues("Content-Type");
                 if(content_types != null) {
@@ -148,15 +148,15 @@ namespace Banshee.Metadata
                     }
                 }
             }
-            
+
             return response;
         }
-        
+
         protected bool SaveHttpStream(Uri uri, string path)
         {
             return SaveHttpStream(uri, path, null);
         }
-        
+
         protected bool SaveHttpStream(Uri uri, string path, string [] ignoreMimeTypes)
         {
             HttpWebResponse response = GetHttpStream(uri, ignoreMimeTypes);
@@ -169,12 +169,12 @@ namespace Banshee.Metadata
             }
 
             SaveAtomically (path, from_stream);
-            
+
             from_stream.Close ();
-                
+
             return true;
         }
-        
+
         protected bool SaveHttpStreamCover (Uri uri, string albumArtistId, string [] ignoreMimeTypes)
         {
             return SaveHttpStream (uri, CoverArtSpec.GetPath (albumArtistId), ignoreMimeTypes);
@@ -190,7 +190,7 @@ namespace Banshee.Metadata
             if (Banshee.IO.File.Exists (path_uri)) {
                 return;
             }
-            
+
             // Save the file to a temporary path while downloading/copying,
             // so that nobody sees it and thinks it's ready for use before it is
             SafeUri tmp_uri = new SafeUri (String.Format ("{0}.part", path));
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataJob.cs b/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataJob.cs
index 7956667..52081e3 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataJob.cs
@@ -67,7 +67,7 @@ namespace Banshee.Metadata
         public bool RenameEnabled { get; set; }
 
         private HyenaSqliteCommand update_synced_at;
-    
+
         protected override void IterateCore (HyenaDataReader reader)
         {
             DatabaseTrackInfo track = DatabaseTrackInfo.Provider.Load (reader.Reader);
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataService.cs b/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataService.cs
index 499bc30..e2bcc98 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataService.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/SaveTrackMetadataService.cs
@@ -44,7 +44,7 @@ namespace Banshee.Metadata
     public class SaveTrackMetadataService : IService
     {
         public static SchemaPreference<bool> WriteEnabled = new SchemaPreference<bool> (
-                LibrarySchema.WriteMetadata, 
+                LibrarySchema.WriteMetadata,
                 Catalog.GetString ("Write _metadata to files"),
                 Catalog.GetString ("Save tags and other metadata inside supported media files")
         );
diff --git a/src/Core/Banshee.Services/Banshee.Networking/Network.cs b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
index 5d98152..9f8d073 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/Network.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
@@ -61,15 +61,15 @@ namespace Banshee.Networking
     public class Network : IService, IRegisterOnDemandService, IDisposable
     {
         public event NetworkStateChangedHandler StateChanged;
-        
+
         private INetworkAvailabilityService manager;
         private State current_state;
         private bool disable_internet_access = false;
-        
+
         public Network ()
         {
             InstallPreferences ();
-            
+
             try {
                 ConnectToManager ();
             } catch(Exception) {
@@ -80,7 +80,7 @@ namespace Banshee.Networking
                     false);
             }
         }
-        
+
         public void Dispose ()
         {
             UninstallPreferences ();
@@ -99,7 +99,7 @@ namespace Banshee.Networking
             manager.StateChange += OnNetworkManagerEvent;
             current_state = manager.State;
         }
-        
+
         private void OnNetworkManagerEvent(State new_state)
         {
             try {
@@ -110,7 +110,7 @@ namespace Banshee.Networking
                     if (Connected != was_connected) {
                         OnStateChanged ();
                     }
-                    
+
                 }
             } catch(Exception) {
             }
@@ -124,22 +124,22 @@ namespace Banshee.Networking
                 state_changed_args.Connected = Connected;
                 handler(this, state_changed_args);
             }
-            
+
             if(Connected) {
                 Log.Debug("Network Connection Established", "Connected");
             } else {
                 Log.Debug("Network Connection Unavailable", "Disconnected");
             }
         }
-        
+
         public bool Connected {
             get { return disable_internet_access ? false : (manager == null ? true : current_state == State.Connected); }
         }
-        
+
         public INetworkAvailabilityService Manager {
             get { return manager; }
         }
-        
+
 #region Offline Preference
 
         private PreferenceBase disable_internet_access_preference;
@@ -147,13 +147,13 @@ namespace Banshee.Networking
         private void InstallPreferences ()
         {
             disable_internet_access = DisableInternetAccess.Get ();
-            
+
             PreferenceService service = ServiceManager.Get<PreferenceService> ();
             if (service == null) {
                 return;
             }
-            
-            disable_internet_access_preference = service["general"]["misc"].Add (new SchemaPreference<bool> (DisableInternetAccess, 
+
+            disable_internet_access_preference = service["general"]["misc"].Add (new SchemaPreference<bool> (DisableInternetAccess,
                 Catalog.GetString ("_Disable features requiring Internet access"),
                 Catalog.GetString ("Some features require a broadband Internet connection such as Last.fm or cover art fetching"),
                 delegate {
@@ -165,20 +165,20 @@ namespace Banshee.Networking
                 }
             ));
         }
-        
+
         private void UninstallPreferences ()
         {
             PreferenceService service = ServiceManager.Get<PreferenceService> ();
             if (service == null) {
                 return;
             }
-            
+
             service["general"]["misc"].Remove (disable_internet_access_preference);
             disable_internet_access_preference = null;
         }
-        
+
         public static readonly SchemaEntry<bool> DisableInternetAccess = new SchemaEntry<bool> (
-            "core", "disable_internet_access", 
+            "core", "disable_internet_access",
             false,
             "Disable internet access",
             "Do not allow components to have internet access within Banshee"
diff --git a/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs b/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
index 255c034..ddeed94 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
@@ -42,12 +42,12 @@ namespace Banshee.Networking
             event StateChangeHandler StateChange;
             State state ();
         }
-    
+
         private const string BusName = "org.freedesktop.NetworkManager";
         private const string ObjectPath = "/org/freedesktop/NetworkManager";
 
         private INetworkManager manager;
-        
+
         public event StateChangeHandler StateChange;
 
         public NetworkManager()
@@ -59,7 +59,7 @@ namespace Banshee.Networking
             manager = Bus.System.GetObject<INetworkManager>(BusName, new ObjectPath(ObjectPath));
             manager.StateChange += OnStateChange;
         }
-        
+
         private void OnStateChange(State state)
         {
             StateChangeHandler handler = StateChange;
diff --git a/src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs b/src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs
index 7d22dcb..8a1afe2 100644
--- a/src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs
+++ b/src/Core/Banshee.Services/Banshee.PlatformServices/ScreensaverManager.cs
@@ -36,7 +36,7 @@ namespace Banshee.PlatformServices
     {
         private IScreensaverManager manager;
         bool inhibited = false;
-        
+
         public ScreensaverManager ()
         {
             foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/PlatformServices/ScreensaverManager")) {
@@ -45,16 +45,16 @@ namespace Banshee.PlatformServices
                     Log.DebugFormat ("Loaded IScreensaverManager: {0}", manager.GetType ().FullName);
                     break;
                 } catch (Exception e) {
-                    Log.Exception ("IScreensaverManager extension failed to load", e);    
+                    Log.Exception ("IScreensaverManager extension failed to load", e);
                 }
             }
         }
-        
+
         public void Dispose ()
         {
             UnInhibit ();
         }
-        
+
         public void Inhibit ()
         {
             if (manager != null && !inhibited) {
@@ -63,7 +63,7 @@ namespace Banshee.PlatformServices
                 inhibited = true;
             }
         }
-        
+
         public void UnInhibit ()
         {
             if (manager != null && inhibited) {
diff --git a/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackController.cs b/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackController.cs
index 31ef7e4..57d4e10 100644
--- a/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackController.cs
+++ b/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackController.cs
@@ -1,4 +1,4 @@
-// 
+//
 // IPlaybackController.cs
 //
 // Author:
diff --git a/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackControllerService.cs b/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackControllerService.cs
index 70b4d11..9c8883f 100644
--- a/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackControllerService.cs
+++ b/src/Core/Banshee.Services/Banshee.PlaybackController/IPlaybackControllerService.cs
@@ -1,4 +1,4 @@
-// 
+//
 // IPlaybackControllerExportable.cs
 //
 // Author:
@@ -34,21 +34,21 @@ using Banshee.ServiceStack;
 namespace Banshee.PlaybackController
 {
     public delegate void PlaybackControllerStoppedHandler ();
-    
+
     [Interface ("org.bansheeproject.Banshee.PlaybackController")]
     public interface IPlaybackControllerService : IDBusExportable
     {
         // FIXME: IPlaybackControllerExportable : IPlaybackController
-        // but NDesk DBus has a design flaw where it only exports 
-        // members of the top level interface where the [Interface] 
+        // but NDesk DBus has a design flaw where it only exports
+        // members of the top level interface where the [Interface]
         // attribute is applied
-        
+
         event PlaybackControllerStoppedHandler Stopped;
-        
+
         void First ();
         void Next (bool restart);
         void Previous (bool restart);
-        
+
         PlaybackShuffleMode ShuffleMode { get; set; }
         PlaybackRepeatMode RepeatMode { get; set; }
         bool StopWhenFinished { get; set; }
diff --git a/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerDatabaseStack.cs b/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerDatabaseStack.cs
index e5476b9..504415d 100644
--- a/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerDatabaseStack.cs
+++ b/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerDatabaseStack.cs
@@ -37,7 +37,7 @@ namespace Banshee.PlaybackController
     internal class PlaybackControllerDatabaseStack : IStackProvider<TrackInfo>
     {
         private Stack<TrackInfo> stack = new Stack<TrackInfo> ();
-    
+
     	public TrackInfo Peek ()
     	{
     	    return stack.Peek ();
diff --git a/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs b/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
index c7c5959..577c6f8 100644
--- a/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
+++ b/src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs
@@ -39,7 +39,7 @@ using Banshee.MediaEngine;
 
 namespace Banshee.PlaybackController
 {
-    public class PlaybackControllerService : IRequiredService, ICanonicalPlaybackController, 
+    public class PlaybackControllerService : IRequiredService, ICanonicalPlaybackController,
         IPlaybackController, IPlaybackControllerService
     {
         private enum Direction
@@ -47,10 +47,10 @@ namespace Banshee.PlaybackController
             Next,
             Previous
         }
-    
+
         private IStackProvider<TrackInfo> previous_stack;
         private IStackProvider<TrackInfo> next_stack;
-    
+
         private TrackInfo current_track;
         private TrackInfo prior_track;
         private TrackInfo changing_to_track;
@@ -60,21 +60,21 @@ namespace Banshee.PlaybackController
         private int consecutive_errors;
         private uint error_transition_id;
         private DateTime source_auto_set_at = DateTime.MinValue;
-    
+
         private PlaybackShuffleMode shuffle_mode;
         private PlaybackRepeatMode repeat_mode;
         private bool stop_when_finished = false;
-        
+
         private PlayerEngineService player_engine;
         private ITrackModelSource source;
         private ITrackModelSource next_source;
-        
+
         private event PlaybackControllerStoppedHandler dbus_stopped;
         event PlaybackControllerStoppedHandler IPlaybackControllerService.Stopped {
             add { dbus_stopped += value; }
             remove { dbus_stopped -= value; }
         }
-        
+
         public event EventHandler Stopped;
         public event EventHandler SourceChanged;
         public event EventHandler NextSourceChanged;
@@ -82,18 +82,18 @@ namespace Banshee.PlaybackController
         public event EventHandler Transition;
         public event EventHandler<ShuffleModeChangedEventArgs> ShuffleModeChanged;
         public event EventHandler<RepeatModeChangedEventArgs> RepeatModeChanged;
-        
+
         public PlaybackControllerService ()
         {
             InstantiateStacks ();
-            
+
             player_engine = ServiceManager.PlayerEngine;
             player_engine.PlayWhenIdleRequest += OnPlayerEnginePlayWhenIdleRequest;
-            player_engine.ConnectEvent (OnPlayerEvent, 
-                PlayerEvent.EndOfStream | 
+            player_engine.ConnectEvent (OnPlayerEvent,
+                PlayerEvent.EndOfStream |
                 PlayerEvent.StartOfStream |
                 PlayerEvent.StateChange |
-                PlayerEvent.Error, 
+                PlayerEvent.Error,
                 true);
 
             ServiceManager.SourceManager.ActiveSourceChanged += delegate {
@@ -104,13 +104,13 @@ namespace Banshee.PlaybackController
                 }
             };
         }
-        
+
         protected virtual void InstantiateStacks ()
         {
             previous_stack = new PlaybackControllerDatabaseStack ();
             next_stack = new PlaybackControllerDatabaseStack ();
         }
-        
+
         private void OnPlayerEnginePlayWhenIdleRequest (object o, EventArgs args)
         {
             ITrackModelSource next_source = NextSource;
@@ -123,7 +123,7 @@ namespace Banshee.PlaybackController
                 Next ();
             }
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
@@ -140,7 +140,7 @@ namespace Banshee.PlaybackController
                         OnStopped ();
                         break;
                     }
-                    
+
                     CancelErrorTransition ();
                     // TODO why is this so long? any reason not to be instantaneous?
                     Application.RunTimeout (250, EosTransition);
@@ -149,14 +149,14 @@ namespace Banshee.PlaybackController
                     if (((PlayerEventStateChangeArgs)args).Current != PlayerState.Loading) {
                         break;
                     }
-                       
+
                     TrackInfo track = player_engine.CurrentTrack;
                     if (changing_to_track != track && track != null) {
                         CurrentTrack = track;
                     }
-                    
+
                     changing_to_track = null;
-                    
+
                     if (!raise_started_after_transition) {
                         transition_track_started = false;
                         OnTrackStarted ();
@@ -164,9 +164,9 @@ namespace Banshee.PlaybackController
                         transition_track_started = true;
                     }
                     break;
-            }       
+            }
         }
-        
+
         private void CancelErrorTransition ()
         {
             if (error_transition_id > 0) {
@@ -174,7 +174,7 @@ namespace Banshee.PlaybackController
                 error_transition_id = 0;
             }
         }
-        
+
         private bool EosTransition ()
         {
             if (!StopWhenFinished) {
@@ -187,47 +187,47 @@ namespace Banshee.PlaybackController
             } else {
                 OnStopped ();
             }
-            
+
             StopWhenFinished = false;
             return false;
         }
-        
+
         public void First ()
         {
             CancelErrorTransition ();
-            
+
             Source = NextSource;
-            
+
             // This and OnTransition() below commented out b/c of BGO #524556
             //raise_started_after_transition = true;
-            
+
             if (Source is IBasicPlaybackController && ((IBasicPlaybackController)Source).First ()) {
             } else {
                 ((IBasicPlaybackController)this).First ();
             }
-            
+
             //OnTransition ();
         }
-        
+
         public void Next ()
         {
             Next (RepeatMode == PlaybackRepeatMode.RepeatAll);
         }
-        
+
         public void Next (bool restart)
         {
             CancelErrorTransition ();
-            
+
             Source = NextSource;
             raise_started_after_transition = true;
 
             player_engine.IncrementLastPlayed ();
-            
+
             if (Source is IBasicPlaybackController && ((IBasicPlaybackController)Source).Next (restart)) {
             } else {
                 ((IBasicPlaybackController)this).Next (restart);
             }
-            
+
             OnTransition ();
         }
 
@@ -235,24 +235,24 @@ namespace Banshee.PlaybackController
         {
             Previous (RepeatMode == PlaybackRepeatMode.RepeatAll);
         }
-        
+
         public void Previous (bool restart)
         {
             CancelErrorTransition ();
-            
+
             Source = NextSource;
             raise_started_after_transition = true;
 
             player_engine.IncrementLastPlayed ();
-            
+
             if (Source is IBasicPlaybackController && ((IBasicPlaybackController)Source).Previous (restart)) {
             } else {
                 ((IBasicPlaybackController)this).Previous (restart);
             }
-            
+
             OnTransition ();
         }
-        
+
         bool IBasicPlaybackController.First ()
         {
             if (Source.Count > 0) {
@@ -260,7 +260,7 @@ namespace Banshee.PlaybackController
             }
             return true;
         }
-        
+
         bool IBasicPlaybackController.Next (bool restart)
         {
             TrackInfo tmp_track = CurrentTrack;
@@ -279,14 +279,14 @@ namespace Banshee.PlaybackController
                 } else {
                     return true;
                 }
-                
+
                 CurrentTrack = next_track;
             }
-            
+
             QueuePlayTrack ();
             return true;
         }
-        
+
         bool IBasicPlaybackController.Previous (bool restart)
         {
             if (CurrentTrack != null && previous_stack.Count > 0) {
@@ -303,11 +303,11 @@ namespace Banshee.PlaybackController
                     return true;
                 }
             }
-            
+
             QueuePlayTrack ();
             return true;
         }
-        
+
         private TrackInfo QueryTrack (Direction direction, bool restart)
         {
             Log.DebugFormat ("Querying model for track to play in {0}:{1} mode", ShuffleMode, direction);
@@ -315,7 +315,7 @@ namespace Banshee.PlaybackController
                 ? QueryTrackLinear (direction, restart)
                 : QueryTrackRandom (ShuffleMode, restart);
         }
-        
+
         private TrackInfo QueryTrackLinear (Direction direction, bool restart)
         {
             if (Source.TrackModel.Count == 0)
@@ -341,7 +341,7 @@ namespace Banshee.PlaybackController
                 }
             }
         }
-        
+
         private TrackInfo QueryTrackRandom (PlaybackShuffleMode mode, bool restart)
         {
             var track_shuffler = Source.TrackModel as Banshee.Collection.Database.DatabaseTrackListModel;
@@ -352,7 +352,7 @@ namespace Banshee.PlaybackController
             last_was_skipped = true;
             return track;
         }
-        
+
         private void QueuePlayTrack ()
         {
             changing_to_track = CurrentTrack;
@@ -367,28 +367,28 @@ namespace Banshee.PlaybackController
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
-            
+
             PlaybackControllerStoppedHandler dbus_handler = dbus_stopped;
             if (dbus_handler != null) {
                 dbus_handler ();
             }
         }
-        
+
         protected virtual void OnTransition ()
         {
             EventHandler handler = Transition;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
-            
+
             if (raise_started_after_transition && transition_track_started) {
                 OnTrackStarted ();
             }
-            
+
             raise_started_after_transition = false;
             transition_track_started = false;
         }
-        
+
         protected virtual void OnSourceChanged ()
         {
             EventHandler handler = SourceChanged;
@@ -396,7 +396,7 @@ namespace Banshee.PlaybackController
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected void OnNextSourceChanged ()
         {
             EventHandler handler = NextSourceChanged;
@@ -404,7 +404,7 @@ namespace Banshee.PlaybackController
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnTrackStarted ()
         {
             EventHandler handler = TrackStarted;
@@ -412,7 +412,7 @@ namespace Banshee.PlaybackController
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public TrackInfo CurrentTrack {
             get { return current_track; }
             protected set { current_track = value; }
@@ -422,16 +422,16 @@ namespace Banshee.PlaybackController
             get { return prior_track ?? CurrentTrack; }
             set { prior_track = value; }
         }
-        
+
         protected DateTime source_set_at = DateTime.MinValue;
         public ITrackModelSource Source {
-            get { 
+            get {
                 if (source == null && ServiceManager.SourceManager.DefaultSource is ITrackModelSource) {
                     return (ITrackModelSource)ServiceManager.SourceManager.DefaultSource;
                 }
                 return source;
             }
-            
+
             set {
                 if (source != value) {
                     NextSource = value;
@@ -441,21 +441,21 @@ namespace Banshee.PlaybackController
                 }
             }
         }
-        
+
         public ITrackModelSource NextSource {
             get { return next_source ?? Source; }
             set {
                 if (next_source != value) {
                     next_source = value;
                     OnNextSourceChanged ();
-                    
+
                     if (!player_engine.IsPlaying ()) {
                         Source = next_source;
                     }
                 }
             }
         }
-        
+
         public PlaybackShuffleMode ShuffleMode {
             get { return shuffle_mode; }
             set {
@@ -466,7 +466,7 @@ namespace Banshee.PlaybackController
                 }
             }
         }
-        
+
         public PlaybackRepeatMode RepeatMode {
             get { return repeat_mode; }
             set {
@@ -477,16 +477,16 @@ namespace Banshee.PlaybackController
                 }
             }
         }
-        
+
         public bool StopWhenFinished {
             get { return stop_when_finished; }
             set { stop_when_finished = value; }
         }
-        
+
         string IService.ServiceName {
             get { return "PlaybackController"; }
         }
-        
+
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs
index 875f410..0654104 100644
--- a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs
@@ -23,48 +23,48 @@ namespace Banshee.Playlist
         public PlaylistImportCanceledException (string message) : base (message)
         {
         }
-        
+
         public PlaylistImportCanceledException () : base ()
         {
         }
     }
-    
+
     public static class PlaylistFileUtil
-    {        
+    {
         public static readonly SchemaEntry<string> DefaultExportFormat = new SchemaEntry<string> (
             "player_window", "default_export_format",
             String.Empty,
             "Export Format",
             "The default playlist export format"
         );
-        
+
         private static PlaylistFormatDescription [] export_formats = new PlaylistFormatDescription [] {
             M3uPlaylistFormat.FormatDescription,
             PlsPlaylistFormat.FormatDescription,
             XspfPlaylistFormat.FormatDescription
         };
-        
+
         public static readonly string [] PlaylistExtensions = new string [] {
             M3uPlaylistFormat.FormatDescription.FileExtension,
             PlsPlaylistFormat.FormatDescription.FileExtension,
             XspfPlaylistFormat.FormatDescription.FileExtension
         };
-        
+
         public static PlaylistFormatDescription [] ExportFormats {
             get { return export_formats; }
         }
-        
+
         public static bool IsSourceExportSupported (Source source)
         {
             bool supported = true;
-            
+
             if (source == null || !(source is AbstractPlaylistSource)) {
                 supported = false;
             }
-            
+
             return supported;
         }
-        
+
         public static PlaylistFormatDescription GetDefaultExportFormat ()
         {
             PlaylistFormatDescription default_format = null;
@@ -77,36 +77,36 @@ namespace Banshee.Playlist
                         break;
                     }
                 }
-            } catch {            
-                // Ignore errors, return our default if we encounter an error.                
+            } catch {
+                // Ignore errors, return our default if we encounter an error.
             } finally {
-                if (default_format == null) {                    
+                if (default_format == null) {
                     default_format = M3uPlaylistFormat.FormatDescription;
                 }
             }
             return default_format;
         }
-        
+
         public static void SetDefaultExportFormat (PlaylistFormatDescription format)
         {
             try {
-                DefaultExportFormat.Set (format.FileExtension);        
+                DefaultExportFormat.Set (format.FileExtension);
             } catch (Exception) {
-            }            
+            }
         }
-        
-        public static int GetFormatIndex (PlaylistFormatDescription [] formats, PlaylistFormatDescription playlist) 
+
+        public static int GetFormatIndex (PlaylistFormatDescription [] formats, PlaylistFormatDescription playlist)
         {
             int default_export_index = -1;
             foreach (PlaylistFormatDescription format in formats) {
                 default_export_index++;
-                if (format.FileExtension.Equals (playlist.FileExtension)) {                    
+                if (format.FileExtension.Equals (playlist.FileExtension)) {
                     break;
                 }
             }
             return default_export_index;
         }
-        
+
         public static string [] ImportPlaylist (string playlistUri)
         {
             return ImportPlaylist (playlistUri, null);
@@ -123,7 +123,7 @@ namespace Banshee.Playlist
             }
             return uris.ToArray ();
         }
-        
+
         public static bool PathHasPlaylistExtension (string playlistUri)
         {
             if (System.IO.Path.HasExtension (playlistUri)) {
@@ -134,28 +134,28 @@ namespace Banshee.Playlist
                     }
                 }
             }
-            
+
             return false;
         }
 
         public static IPlaylistFormat Load (string playlistUri, Uri baseUri)
         {
-            PlaylistFormatDescription [] formats = PlaylistFileUtil.ExportFormats;            
-            
-            // If the file has an extenstion, rearrange the format array so that the 
+            PlaylistFormatDescription [] formats = PlaylistFileUtil.ExportFormats;
+
+            // If the file has an extenstion, rearrange the format array so that the
             // appropriate format is tried first.
             if (System.IO.Path.HasExtension (playlistUri)) {
                 string extension = System.IO.Path.GetExtension (playlistUri);
                 extension = extension.ToLower ();
-                
+
                 int index = -1;
                 foreach (PlaylistFormatDescription format in formats) {
-                    index++;                    
-                    if (extension.Equals ("." + format.FileExtension)) {                        
+                    index++;
+                    if (extension.Equals ("." + format.FileExtension)) {
                         break;
-                    } 
+                    }
                 }
-                                
+
                 if (index != -1 && index != 0 && index < formats.Length) {
                     // Move to first position in array.
                     PlaylistFormatDescription preferredFormat = formats[index];
@@ -163,7 +163,7 @@ namespace Banshee.Playlist
                     formats[0] = preferredFormat;
                 }
             }
-            
+
             foreach (PlaylistFormatDescription format in formats) {
                 try {
                     IPlaylistFormat playlist = (IPlaylistFormat)Activator.CreateInstance (format.Type);
@@ -173,15 +173,15 @@ namespace Banshee.Playlist
                 } catch (InvalidPlaylistException) {
                 }
             }
-        
+
             return null;
         }
-        
+
         public static void ImportPlaylistToLibrary (string path)
         {
             ImportPlaylistToLibrary (path, ServiceManager.SourceManager.MusicLibrary, null);
         }
-        
+
         public static void ImportPlaylistToLibrary (string path, PrimarySource source, DatabaseImportManager importer)
         {
             try {
@@ -197,9 +197,9 @@ namespace Banshee.Playlist
                     foreach (Dictionary<string, object> element in parser.Elements) {
                         uris.Add (((Uri)element["uri"]).LocalPath);
                     }
-                    
+
                     ImportPlaylistWorker worker = new ImportPlaylistWorker (
-                        parser.Title, 
+                        parser.Title,
                         uris.ToArray (), source, importer);
                     worker.Import ();
                 }
@@ -208,16 +208,16 @@ namespace Banshee.Playlist
             }
         }
     }
-    
+
     public class ImportPlaylistWorker
     {
         private string [] uris;
         private string name;
-        
+
         private PrimarySource source;
         private DatabaseImportManager importer;
         private bool finished;
-        
+
         public ImportPlaylistWorker (string name, string [] uris, PrimarySource source, DatabaseImportManager importer)
         {
             this.name = name;
@@ -225,7 +225,7 @@ namespace Banshee.Playlist
             this.source = source;
             this.importer = importer;
         }
-        
+
         public void Import ()
         {
             try {
@@ -239,7 +239,7 @@ namespace Banshee.Playlist
                 Hyena.Log.Exception (e);
             }
         }
-        
+
         private void CreatePlaylist (object o, EventArgs args)
         {
             if (finished) {
@@ -264,7 +264,7 @@ namespace Banshee.Playlist
                         ServiceManager.DbConnection.Execute (insert_command, track_id);
                     }
                 }
-                
+
                 playlist.Reload ();
                 playlist.NotifyUser ();
             } catch (Exception e) {
diff --git a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
index ee97408..3605504 100644
--- a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs
@@ -69,7 +69,7 @@ namespace Banshee.Playlist
         protected override string TrackJoinTable {
             get { return "CorePlaylistEntries"; }
         }
-        
+
         protected long MaxViewOrder {
             get {
                 return ServiceManager.DbConnection.Query<long> (
@@ -77,7 +77,7 @@ namespace Banshee.Playlist
             }
         }
 
-        static PlaylistSource () 
+        static PlaylistSource ()
         {
             add_track_range_command = new HyenaSqliteCommand (@"
                 INSERT INTO CorePlaylistEntries
@@ -145,7 +145,7 @@ namespace Banshee.Playlist
                 //(source.Parent == Parent || Parent == null || (source.Parent == null && !(source is PrimarySource)))
             );
         }
-        
+
         public override SourceMergeType SupportedMergeTypes {
             get { return SourceMergeType.All; }
         }
@@ -238,12 +238,12 @@ namespace Banshee.Playlist
             ServiceManager.DbConnection.Execute (add_track_command, DbId, track_id, MaxViewOrder);
             OnTracksAdded ();
         }
-        
+
         protected override void AddTrack (DatabaseTrackInfo track)
         {
             AddTrack (track.TrackId);
         }
-        
+
         public override bool AddSelectedTracks (Source source)
         {
             if (Parent == null || source == Parent || source.Parent == Parent) {
@@ -257,28 +257,28 @@ namespace Banshee.Playlist
             }
             return false;
         }
-        
+
         public virtual void ReorderSelectedTracks (int drop_row)
         {
             if (TrackModel.Selection.Count == 0 || TrackModel.Selection.AllSelected) {
                 return;
             }
-            
+
             TrackInfo track = TrackModel[drop_row];
             long order = track == null
                 ? ServiceManager.DbConnection.Query<long> ("SELECT MAX(ViewOrder) + 1 FROM CorePlaylistEntries WHERE PlaylistID = ?", DbId)
                 : ServiceManager.DbConnection.Query<long> ("SELECT ViewOrder FROM CorePlaylistEntries WHERE PlaylistID = ? AND EntryID = ?", DbId, Convert.ToInt64 (track.CacheEntryId));
-            
+
             // Make room for our new items
             if (track != null) {
                 ServiceManager.DbConnection.Execute ("UPDATE CorePlaylistEntries SET ViewOrder = ViewOrder + ? WHERE PlaylistID = ? AND ViewOrder >= ?",
                     TrackModel.Selection.Count, DbId, order
                 );
             }
-            
+
             HyenaSqliteCommand update_command = new HyenaSqliteCommand (String.Format ("UPDATE CorePlaylistEntries SET ViewOrder = ? WHERE PlaylistID = {0} AND EntryID = ?", DbId));
             HyenaSqliteCommand select_command = new HyenaSqliteCommand (String.Format ("SELECT ItemID FROM CoreCache WHERE ModelID = {0} LIMIT ?, ?", DatabaseTrackModel.CacheId));
-            
+
             // Reorder the selected items
             ServiceManager.DbConnection.BeginTransaction ();
             foreach (RangeCollection.Range range in TrackModel.Selection.Ranges) {
@@ -287,7 +287,7 @@ namespace Banshee.Playlist
                 }
             }
             ServiceManager.DbConnection.CommitTransaction ();
-            
+
             Reload ();
         }
 
@@ -347,7 +347,7 @@ namespace Banshee.Playlist
         {
             ClearTemporary ();
             using (HyenaDataReader reader = new HyenaDataReader (ServiceManager.DbConnection.Query (
-                @"SELECT PlaylistID, Name, SortColumn, SortType, PrimarySourceID, CachedCount, IsTemporary FROM CorePlaylists 
+                @"SELECT PlaylistID, Name, SortColumn, SortType, PrimarySourceID, CachedCount, IsTemporary FROM CorePlaylists
                     WHERE Special = 0 AND PrimarySourceID = ?", parent.DbId))) {
                 while (reader.Read ()) {
                     yield return new PlaylistSource (
@@ -372,24 +372,24 @@ namespace Banshee.Playlist
                 ServiceManager.DbConnection.CommitTransaction ();
             }
         }
-        
+
         private static int GetPlaylistId (string name)
         {
             return ServiceManager.DbConnection.Query<int> (
                 "SELECT PlaylistID FROM Playlists WHERE Name = ? LIMIT 1", name
             );
         }
-        
+
         private static bool PlaylistExists (string name)
         {
             return GetPlaylistId (name) > 0;
         }
-        
-        public static string CreateUniqueName () 
+
+        public static string CreateUniqueName ()
         {
             return NamingUtil.PostfixDuplicate (Catalog.GetString ("New Playlist"), PlaylistExists);
         }
-        
+
         public static string CreateUniqueName (IEnumerable tracks)
         {
             return NamingUtil.PostfixDuplicate (NamingUtil.GenerateTrackCollectionName (
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsfReferencePlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsfReferencePlaylistFormat.cs
index 3c55602..7a8b012 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsfReferencePlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsfReferencePlaylistFormat.cs
@@ -42,7 +42,7 @@ namespace Banshee.Playlists.Formats
         public static readonly PlaylistFormatDescription FormatDescription = new PlaylistFormatDescription (
             typeof (AsfReferencePlaylistFormat), MagicHandler, Catalog.GetString ("Windows Media ASX"),
             "", new string [] {"video/x-ms-asx", "video/asx", "video/x-ms-asf"});
-        
+
         public static bool MagicHandler (StreamReader reader)
         {
             try {
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs
index 1bad962..de0d008 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs
@@ -35,17 +35,17 @@ using Mono.Unix;
 
 using Banshee.Base;
 using Banshee.Sources;
- 
+
 namespace Banshee.Playlists.Formats
 {
     // REFERENCE: http://msdn2.microsoft.com/en-us/library/ms925291.aspx
-    
+
     public class AsxPlaylistFormat : PlaylistFormatBase
     {
         public static readonly PlaylistFormatDescription FormatDescription = new PlaylistFormatDescription(
             typeof(AsxPlaylistFormat), MagicHandler, Catalog.GetString("Windows Media ASX (*.asx)"),
             "asx", new string [] {"video/x-ms-asx", "video/asx", "video/x-ms-asf"});
-        
+
         public static bool MagicHandler(StreamReader reader)
         {
             try {
@@ -56,51 +56,51 @@ namespace Banshee.Playlists.Formats
                 return false;
             }
         }
-        
+
         private static bool CheckAsxHeader(XmlTextReader xml_reader)
         {
             xml_reader.Read();
             if(xml_reader.NodeType == XmlNodeType.XmlDeclaration) {
                 xml_reader.Read();
             }
-                
-            return xml_reader.Depth == 0 && xml_reader.NodeType == XmlNodeType.Element 
+
+            return xml_reader.Depth == 0 && xml_reader.NodeType == XmlNodeType.Element
                 && String.Compare("asx", xml_reader.LocalName, true) == 0;
         }
-        
+
         public AsxPlaylistFormat()
         {
         }
-        
+
         public override void Load(StreamReader reader, bool validateHeader)
         {
             XmlTextReader xml_reader = new XmlTextReader(reader);
             xml_reader.WhitespaceHandling = WhitespaceHandling.None;
             xml_reader.EntityHandling = EntityHandling.ExpandCharEntities;
-            
+
             if(!CheckAsxHeader(xml_reader)) {
                 throw new InvalidPlaylistException();
             }
-            
+
             while(xml_reader.Read()) {
                 if(xml_reader.NodeType != XmlNodeType.Element || xml_reader.Depth != 1
                     || String.Compare(xml_reader.LocalName, "entry", true) != 0) {
                     continue;
                 }
-                
+
                 Dictionary<string, object> element = AddElement();
-                
+
                 do {
                     try {
                         xml_reader.Read();
                     } catch {
                         xml_reader.Skip();
                     }
-                    
+
                     if(xml_reader.NodeType != XmlNodeType.Element) {
                         continue;
                     }
-                    
+
                     switch(xml_reader.LocalName.ToLower()) {
                         case "title":
                             xml_reader.Read();
@@ -122,10 +122,10 @@ namespace Banshee.Playlists.Formats
                             }
                             break;
                     }
-                } while(!xml_reader.EOF && xml_reader.Depth > 1); 
+                } while(!xml_reader.EOF && xml_reader.Depth > 1);
             }
         }
-        
+
         public override void Save(Stream stream, ITrackModelSource source)
         {
             throw new NotImplementedException();
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/IPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/IPlaylistFormat.cs
index 82be8de..a8076e5 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/IPlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/IPlaylistFormat.cs
@@ -38,12 +38,12 @@ namespace Banshee.Playlists.Formats
     {
         void Load(Stream stream, bool validateHeader);
         void Load(StreamReader reader, bool validateHeader);
-        
+
         void Save(Stream stream, ITrackModelSource source);
-        
+
         Dictionary<string, object> Attributes { get; }
         List<Dictionary<string, object>> Elements { get; }
-        
+
         Uri BaseUri { get; set; }
         string Title { get; set; }
     }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/InvalidPlaylistException.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/InvalidPlaylistException.cs
index f7b472f..a46e183 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/InvalidPlaylistException.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/InvalidPlaylistException.cs
@@ -35,7 +35,7 @@ namespace Banshee.Playlists.Formats
         public InvalidPlaylistException() : base()
         {
         }
-        
+
         public InvalidPlaylistException(string message) : base(message)
         {
         }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/M3uPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/M3uPlaylistFormat.cs
index b827421..46bb44d 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/M3uPlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/M3uPlaylistFormat.cs
@@ -35,7 +35,7 @@ using Mono.Unix;
 using Banshee.Base;
 using Banshee.Collection;
 using Banshee.Sources;
- 
+
 namespace Banshee.Playlists.Formats
 {
     public class M3uPlaylistFormat : PlaylistFormatBase
@@ -43,36 +43,36 @@ namespace Banshee.Playlists.Formats
         public static readonly PlaylistFormatDescription FormatDescription = new PlaylistFormatDescription(
             typeof(M3uPlaylistFormat), MagicHandler, Catalog.GetString("MPEG Version 3.0 Extended (*.m3u)"),
             "m3u", new string [] {"audio/x-mpegurl", "audio/m3u", "audio/mpeg-url"});
-        
+
         public static bool MagicHandler(StreamReader reader)
         {
             string line = reader.ReadLine();
             if(line == null) {
                 return false;
             }
-            
+
             line = line.Trim();
             return line == "#EXTM3U" || line.StartsWith("http");
         }
-        
+
         public M3uPlaylistFormat()
         {
         }
-        
+
         public override void Load(StreamReader reader, bool validateHeader)
         {
             string line;
             Dictionary<string, object> element = null;
-                
+
             while((line = reader.ReadLine()) != null) {
                 line = line.Trim();
-               
+
                 if(line.Length == 0) {
                     continue;
                 }
-                    
+
                 bool extinf = line.StartsWith("#EXTINF:");
-                
+
                 if(!extinf && line[0] == '#') {
                     continue;
                 } else if(extinf) {
@@ -85,22 +85,22 @@ namespace Banshee.Playlists.Formats
                 } else if(element == null) {
                     element = AddElement();
                 }
-                    
+
                 try {
                     element["uri"] = ResolveUri(line);
                 } catch {
                     Elements.Remove(element);
                 }
-                
+
                 element = null;
             }
         }
-        
+
         private void ParseExtended(Dictionary<string, object> element, string line)
         {
             string split = line.Substring(8).TrimStart(',');
             string [] parts = split.Split(new char [] { ',' }, 2);
-            
+
             if(parts.Length == 2) {
                 element["duration"] = SecondsStringToTimeSpan(parts[0]);
                 element["title"] = parts[1].Trim();
@@ -108,7 +108,7 @@ namespace Banshee.Playlists.Formats
                 element["title"] = split.Trim();
             }
         }
-        
+
         public override void Save(Stream stream, ITrackModelSource source)
         {
             using(StreamWriter writer = new StreamWriter(stream)) {
@@ -120,7 +120,7 @@ namespace Banshee.Playlists.Formats
                     if(duration <= 0) {
                         duration = -1;
                     }
-                    
+
                     writer.WriteLine("#EXTINF:{0},{1} - {2}", duration, track.DisplayArtistName, track.DisplayTrackTitle);
                     writer.WriteLine(ExportUri(track.Uri));
                 }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs
index ca0e680..a6374c2 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs
@@ -41,56 +41,56 @@ namespace Banshee.Playlists.Formats
         private List<Dictionary<string, object>> elements = new List<Dictionary<string, object>>();
         private Uri base_uri = new Uri(Environment.CurrentDirectory);
         private string title = null;
-        
+
         public PlaylistFormatBase()
         {
             attributes = new Dictionary<string, object>();
             elements = new List<Dictionary<string, object>>();
         }
-        
+
         public virtual void Load(Stream stream, bool validateHeader)
         {
             using(StreamReader reader = new StreamReader(stream)) {
                 Load(reader, validateHeader);
             }
         }
-            
+
         public abstract void Load(StreamReader reader, bool validateHeader);
-        
+
         public abstract void Save(Stream stream, ITrackModelSource source);
-        
+
         protected virtual Dictionary<string, object> AddElement()
         {
             Dictionary<string, object> element = new Dictionary<string, object>();
             Elements.Add(element);
             return element;
         }
-        
+
         protected virtual Uri ResolveUri(string uri)
         {
             return BaseUri == null ? new Uri(uri) : new Uri(BaseUri, uri);
         }
-        
+
         protected virtual string ExportUri(SafeUri uri)
         {
             if(BaseUri == null) {
                 return uri.IsLocalPath ? uri.LocalPath : uri.AbsoluteUri;
             }
-            
+
             // TODO replace with call to Paths.MakeRelativeTo
             string base_uri = uri.IsLocalPath ? BaseUri.LocalPath : BaseUri.AbsoluteUri;
             string relative_uri = uri.IsLocalPath ? uri.LocalPath : uri.AbsoluteUri;
-            
+
             if(relative_uri.StartsWith(base_uri)) {
                 relative_uri = relative_uri.Substring(base_uri.Length);
                 if(relative_uri[0] == Path.DirectorySeparatorChar) {
                     relative_uri = relative_uri.Substring(1);
                 }
             }
-            
+
             return relative_uri;
         }
-        
+
         protected virtual TimeSpan SecondsStringToTimeSpan(string seconds)
         {
             try {
@@ -100,15 +100,15 @@ namespace Banshee.Playlists.Formats
                 return TimeSpan.Zero;
             }
         }
-        
-        public virtual Dictionary<string, object> Attributes { 
+
+        public virtual Dictionary<string, object> Attributes {
             get { return attributes; }
         }
-        
-        public virtual List<Dictionary<string, object>> Elements { 
+
+        public virtual List<Dictionary<string, object>> Elements {
             get { return elements; }
         }
-        
+
         public virtual Uri BaseUri {
             get { return base_uri; }
             set {
@@ -119,7 +119,7 @@ namespace Banshee.Playlists.Formats
                 base_uri = value;
             }
         }
-        
+
         public virtual string Title {
             get { return title; }
             set { title = value; }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatDescription.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatDescription.cs
index 8a145aa..416cb61 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatDescription.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatDescription.cs
@@ -31,7 +31,7 @@ using System;
 namespace Banshee.Playlists.Formats
 {
     public delegate bool PlaylistFormatMagicHandler(System.IO.StreamReader reader);
-    
+
     public class PlaylistFormatDescription
     {
         private Type type;
@@ -39,7 +39,7 @@ namespace Banshee.Playlists.Formats
         private string extension;
         private string [] mimetypes;
         private PlaylistFormatMagicHandler magic_handler;
-        
+
         public PlaylistFormatDescription(Type type, PlaylistFormatMagicHandler magic_handler, string name, string extension, string [] mimetypes)
         {
             this.type = type;
@@ -48,19 +48,19 @@ namespace Banshee.Playlists.Formats
             this.extension = extension;
             this.mimetypes = mimetypes;
         }
-        
+
         public Type Type {
             get { return type; }
         }
-        
+
         public PlaylistFormatMagicHandler MagicHandler {
             get { return magic_handler; }
         }
-        
+
         public string FormatName {
             get { return name; }
         }
-        
+
         public string FileExtension {
             get { return extension; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
index f4714fd..73019e6 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
@@ -36,7 +36,7 @@ using System.Collections.Generic;
 using Banshee.Base;
 
 namespace Banshee.Playlists.Formats
-{   
+{
     public class PlaylistParser
     {
         private static PlaylistFormatDescription [] playlist_formats = new PlaylistFormatDescription [] {
@@ -46,15 +46,15 @@ namespace Banshee.Playlists.Formats
             AsfReferencePlaylistFormat.FormatDescription,
             XspfPlaylistFormat.FormatDescription
         };
-        
+
         private List<Dictionary<string, object>> elements;
         private Uri base_uri = new Uri (Environment.CurrentDirectory);
         private string title = null;
-        
+
         public PlaylistParser ()
         {
         }
-        
+
         public bool Parse (SafeUri uri)
         {
             ThreadAssist.AssertNotInMainThread ();
@@ -65,7 +65,7 @@ namespace Banshee.Playlists.Formats
                 Stream web_stream = null;
                 bool partial_read = false;
                 long saved_position = 0;
-                
+
                 if (uri.Scheme == "file") {
                     stream = Banshee.IO.File.OpenRead (uri);
                 } else if (uri.Scheme == "http") {
@@ -89,10 +89,10 @@ namespace Banshee.Playlists.Formats
                         }
                         request.Credentials = new NetworkCredential (username, password);
                     }
-            
+
                     response = (HttpWebResponse)request.GetResponse ();
                     web_stream = response.GetResponseStream ();
-                    
+
                     try {
                         stream = new MemoryStream ();
 
@@ -108,7 +108,7 @@ namespace Banshee.Playlists.Formats
                             stream.Write (buffer, 0, read);
                             saved_position = stream.Position;
                         }
-                        
+
                         stream.Position = 0;
                     } finally {
                         if (!partial_read) {
@@ -120,12 +120,12 @@ namespace Banshee.Playlists.Formats
                     Hyena.Log.DebugFormat ("Not able to parse playlist at {0}", uri);
                     return false;
                 }
-                                  
+
                 PlaylistFormatDescription matching_format = null;
 
                 foreach (PlaylistFormatDescription format in playlist_formats) {
                     stream.Position = 0;
-                    
+
                     StreamReader reader = new StreamReader (stream);
                     if (format.MagicHandler (reader)) {
                         matching_format = format;
@@ -151,22 +151,22 @@ namespace Banshee.Playlists.Formats
                 playlist.BaseUri = BaseUri;
                 playlist.Load (stream, false);
                 stream.Dispose ();
-                
+
                 elements = playlist.Elements;
                 Title = playlist.Title ?? Path.GetFileNameWithoutExtension (uri.LocalPath);
                 return true;
             }
         }
-        
+
         public List<Dictionary<string, object>> Elements {
             get { return elements; }
         }
-        
+
         public Uri BaseUri {
             get { return base_uri; }
             set { base_uri = value; }
         }
-        
+
         public string Title {
             get { return title; }
             set { title = value; }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlsPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlsPlaylistFormat.cs
index bb6900c..b5179ac 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlsPlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlsPlaylistFormat.cs
@@ -35,7 +35,7 @@ using Mono.Unix;
 using Banshee.Base;
 using Banshee.Collection;
 using Banshee.Sources;
- 
+
 namespace Banshee.Playlists.Formats
 {
     public class PlsPlaylistFormat : PlaylistFormatBase
@@ -46,49 +46,49 @@ namespace Banshee.Playlists.Formats
             Title,
             Length
         }
-        
+
         public static readonly PlaylistFormatDescription FormatDescription = new PlaylistFormatDescription(
             typeof(PlsPlaylistFormat), MagicHandler, Catalog.GetString("Shoutcast Playlist version 2 (*.pls)"),
             "pls", new string [] {"audio/x-scpls"});
-        
+
         public static bool MagicHandler(StreamReader reader)
         {
             string line = reader.ReadLine();
             if(line == null) {
                 return false;
             }
-            
+
             return line.Trim() == "[playlist]";
         }
-        
+
         public PlsPlaylistFormat()
         {
         }
-        
+
         public override void Load(StreamReader reader, bool validateHeader)
         {
             string line;
-            
+
             if(validateHeader && !MagicHandler(reader)) {
                 throw new InvalidPlaylistException();
             }
-           
+
             while((line = reader.ReadLine()) != null) {
                 line = line.Trim();
-                
+
                 if(line.Length == 0) {
                     continue;
                 }
-               
+
                 int eq_offset = line.IndexOf('=');
                 int index_offset = 0;
-               
+
                 if(eq_offset <= 0) {
                     continue;
                 }
-               
+
                 PlsType element_type = PlsType.Unknown;
-               
+
                 if(line.StartsWith("File")) {
                     element_type = PlsType.File;
                     index_offset = 4;
@@ -101,15 +101,15 @@ namespace Banshee.Playlists.Formats
                 } else {
                     continue;
                 }
-               
+
                 try {
-                    int index = Int32.Parse(line.Substring(index_offset, eq_offset - index_offset), 
+                    int index = Int32.Parse(line.Substring(index_offset, eq_offset - index_offset),
                         ApplicationContext.InternalCultureInfo.NumberFormat) - 1;
                     string value_string = line.Substring(eq_offset + 1).Trim();
                     Dictionary<string, object> element = index < Elements.Count
-                        ? Elements[index] 
+                        ? Elements[index]
                         : AddElement();
-                   
+
                     switch(element_type) {
                         case PlsType.File:
                             element["uri"] = ResolveUri(value_string);
@@ -126,24 +126,24 @@ namespace Banshee.Playlists.Formats
                 }
             }
         }
-        
+
         public override void Save(Stream stream, ITrackModelSource source)
         {
             using(StreamWriter writer = new StreamWriter(stream)) {
                 int count = 0;
-                
+
                 writer.WriteLine("[playlist]");
-                
+
                 TrackInfo track;
                 for (int i = 0; i < source.TrackModel.Count; i++) {
                     track = source.TrackModel[i];
                     count++;
-                    
+
                     writer.WriteLine("File{0}={1}", count, ExportUri(track.Uri));
                     writer.WriteLine("Title{0}={1} - {2}", count, track.DisplayArtistName, track.DisplayTrackTitle);
                     writer.WriteLine("Length{0}={1}", count, (int)Math.Round(track.Duration.TotalSeconds));
                 }
-                                
+
                 writer.WriteLine("NumberOfEntries={0}", count);
                 writer.WriteLine("Version=2");
             }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs
index 22e5c5e..fc94b4e 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs
@@ -55,9 +55,9 @@ namespace Banshee.Playlists.Formats.Tests
         public void Init()
         {
             Mono.Addins.AddinManager.Initialize (BinDir);
-            
+
             playlists_dir = Path.Combine (TestsDir, "Banshee.Services/playlist-data");
-            IPlaylistFormat playlist = LoadPlaylist(new M3uPlaylistFormat(), "extended.m3u");            
+            IPlaylistFormat playlist = LoadPlaylist(new M3uPlaylistFormat(), "extended.m3u");
             foreach(Dictionary<string, object> element in playlist.Elements) {
                 elements.Add(element);
             }
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/XspfPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/XspfPlaylistFormat.cs
index 2a2d557..5c0fe26 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/XspfPlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/XspfPlaylistFormat.cs
@@ -33,7 +33,7 @@ using Mono.Unix;
 using Banshee.Collection;
 using Banshee.Sources;
 using Xspf = Media.Playlists.Xspf;
- 
+
 namespace Banshee.Playlists.Formats
 {
     public class XspfPlaylistFormat : PlaylistFormatBase
@@ -45,7 +45,7 @@ namespace Banshee.Playlists.Formats
             "xspf",
             new string [] {"application/xspf+xml"}
         );
-        
+
         public static bool MagicHandler (StreamReader stream)
         {
             try {
@@ -54,11 +54,11 @@ namespace Banshee.Playlists.Formats
                 return false;
             }
         }
-        
+
         public XspfPlaylistFormat ()
         {
         }
-        
+
         public override void Load (StreamReader stream, bool validateHeader)
         {
             Xspf.Playlist playlist = new Xspf.Playlist ();
@@ -70,7 +70,7 @@ namespace Banshee.Playlists.Formats
                 element["uri"] = track.GetLocationAt (0);
             }
         }
-        
+
         public override void Save (Stream stream, ITrackModelSource source)
         {
             Xspf.Playlist playlist = new Xspf.Playlist ();
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/Collection.cs b/src/Core/Banshee.Services/Banshee.Preferences/Collection.cs
index f8c6b7d..fd10743 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/Collection.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/Collection.cs
@@ -37,11 +37,11 @@ namespace Banshee.Preferences
     public class Collection<T> : Root, IList<T> where T : Root
     {
         private List<T> list = new List<T> ();
-        
+
         public Collection ()
         {
         }
-        
+
         public T Add (T item)
         {
             lock (this) {
@@ -53,18 +53,18 @@ namespace Banshee.Preferences
                 return item;
             }
         }
-        
+
         public T FindOrAdd (T item)
         {
             lock (this) {
                 return FindById (item.Id) ?? Add (item);
             }
         }
-        
+
         public T this[string id] {
             get { return FindById (id); }
         }
-        
+
         public T FindById (string id)
         {
             lock (this) {
@@ -73,7 +73,7 @@ namespace Banshee.Preferences
                         return item;
                     }
                 }
-                
+
                 return null;
             }
         }
@@ -99,16 +99,16 @@ namespace Banshee.Preferences
                 }
             }
         }
-        
+
 #endregion
-        
+
 #region IList
 
         void IList<T>.Insert (int index, T item)
         {
             list.Insert (index, item);
         }
-        
+
         void IList<T>.RemoveAt (int index)
         {
             list.RemoveAt (index);
@@ -125,31 +125,31 @@ namespace Banshee.Preferences
         }
 
 #endregion
-        
+
 #region ICollection
 
         void ICollection<T>.Add (T item)
         {
             list.Add (item);
         }
-        
+
         public bool Remove (T item)
         {
             lock (this) {
                 return list.Remove (item);
             }
         }
-        
+
         void ICollection<T>.Clear ()
         {
             list.Clear ();
         }
-        
+
         bool ICollection<T>.Contains (T item)
         {
             return list.Contains (item);
         }
-        
+
         void ICollection<T>.CopyTo (T [] array, int arrayIndex)
         {
             list.CopyTo (array, arrayIndex);
@@ -158,7 +158,7 @@ namespace Banshee.Preferences
         public int Count {
             get { lock (this) { return list.Count; } }
         }
-        
+
         bool ICollection<T>.IsReadOnly {
             get { return ((ICollection<T>)list).IsReadOnly; }
         }
@@ -171,7 +171,7 @@ namespace Banshee.Preferences
         {
             return list.GetEnumerator ();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/Page.cs b/src/Core/Banshee.Services/Banshee.Preferences/Page.cs
index 702c9ea..6e7e938 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/Page.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/Page.cs
@@ -47,7 +47,7 @@ namespace Banshee.Preferences
         {
             child_pages = new Collection<Page> ();
         }
-        
+
         public Page (string id, string name, int order) : this ()
         {
             Id = id;
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/Preference.cs b/src/Core/Banshee.Services/Banshee.Preferences/Preference.cs
index 7f5310f..9f63459 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/Preference.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/Preference.cs
@@ -33,15 +33,15 @@ namespace Banshee.Preferences
     public class Preference<T> : PreferenceBase
     {
         private T value;
-        
+
         public Preference (string id, string name) : this (id, name, null)
         {
         }
-        
+
         public Preference (string id, string name, string description) : this (id, name, description, default (T))
         {
         }
-        
+
         public Preference (string id, string name, string description, T value)
         {
             Id = id;
@@ -49,7 +49,7 @@ namespace Banshee.Preferences
             Description = description;
             this.value = value;
         }
-        
+
         public virtual T Value {
             get { return this.value; }
             set {
@@ -57,7 +57,7 @@ namespace Banshee.Preferences
                 OnValueChanged ();
             }
         }
-        
+
         public override object BoxedValue {
             get { return (object)Value; }
             set { Value = (T)value; }
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs b/src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs
index 9263ef0..437b0a2 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs
@@ -31,15 +31,15 @@ using System;
 namespace Banshee.Preferences
 {
     public abstract class PreferenceBase : Root
-    {        
+    {
         public event Action<Root> ValueChanged;
 
         public PreferenceBase ()
         {
         }
-        
+
         public abstract object BoxedValue { get; set; }
-        
+
         private bool show_label = true;
         public virtual bool ShowLabel {
             get { return show_label; }
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs b/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs
index 3a6b326..bcea2da 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs
@@ -42,7 +42,7 @@ namespace Banshee.Preferences
             add { install_widget_adapters += value; }
             remove { install_widget_adapters -= value; }
         }
-    
+
         public PreferenceService ()
         {
             // Pages (tabs)
@@ -52,17 +52,17 @@ namespace Banshee.Preferences
 
             // General policies
             Section policies = general.Add (new Section ("policies", Catalog.GetString ("File Policies"), 0));
-            
-            policies.Add (new SchemaPreference<bool> (LibrarySchema.CopyOnImport, 
+
+            policies.Add (new SchemaPreference<bool> (LibrarySchema.CopyOnImport,
                 Catalog.GetString ("Co_py files to media folders when importing")));
-            
+
             policies.Add (Banshee.Metadata.SaveTrackMetadataService.WriteEnabled);
             policies.Add (Banshee.Metadata.SaveTrackMetadataService.RenameEnabled);
 
             // Misc section
             general.Add (new Section ("misc", Catalog.GetString ("Miscellaneous"), 20));
         }
-        
+
         public void RequestWidgetAdapters ()
         {
             EventHandler handler = install_widget_adapters;
@@ -70,7 +70,7 @@ namespace Banshee.Preferences
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         string IService.ServiceName {
             get { return "PreferenceService"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/Root.cs b/src/Core/Banshee.Services/Banshee.Preferences/Root.cs
index ed8bfbd..9cf2164 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/Root.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/Root.cs
@@ -31,7 +31,7 @@ using System;
 namespace Banshee.Preferences
 {
     public abstract class Root : IComparable
-    {    
+    {
         private string id;
         private string name;
         private string description;
@@ -42,20 +42,20 @@ namespace Banshee.Preferences
         private object mnemonic_widget;
 
         public event Action<Root> Changed;
-                
+
         public Root ()
         {
             sensitive = true;
             visible = true;
         }
-        
+
         public int CompareTo (object o)
         {
             Root r = o as Root;
             if (r == null) {
                 return -1;
             }
-            
+
             return Order.CompareTo (r.Order);
         }
 
@@ -63,7 +63,7 @@ namespace Banshee.Preferences
             get { return id; }
             set { id = value; }
         }
-        
+
         public string Name {
             get { return name; }
             set {
@@ -71,7 +71,7 @@ namespace Banshee.Preferences
                 OnChanged ();
             }
         }
-        
+
         public string Description {
             get { return description; }
             set {
@@ -79,12 +79,12 @@ namespace Banshee.Preferences
                 OnChanged ();
             }
         }
-        
+
         public int Order {
             get { return order; }
             set { order = value; }
         }
-        
+
         public virtual bool Sensitive {
             get { return sensitive; }
             set {
@@ -92,7 +92,7 @@ namespace Banshee.Preferences
                 OnChanged ();
             }
         }
-        
+
         public virtual bool Visible {
             get { return visible; }
             set {
@@ -100,7 +100,7 @@ namespace Banshee.Preferences
                 OnChanged ();
             }
         }
-        
+
         public virtual object DisplayWidget {
             get { return display_widget; }
             set { display_widget = value; }
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/SchemaPreference.cs b/src/Core/Banshee.Services/Banshee.Preferences/SchemaPreference.cs
index 416510f..3eb06e7 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/SchemaPreference.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/SchemaPreference.cs
@@ -38,26 +38,26 @@ namespace Banshee.Preferences
     {
         private SchemaEntry<T> schema;
         private SchemaPreferenceUpdatedHandler handler;
-        
+
         public SchemaPreference (SchemaEntry<T> schema, string name) : this (schema, name, null)
         {
         }
-        
-        public SchemaPreference (SchemaEntry<T> schema, string name, string description) 
+
+        public SchemaPreference (SchemaEntry<T> schema, string name, string description)
             : this (schema, name, description, null)
         {
         }
-        
-        public SchemaPreference (SchemaEntry<T> schema, string name, string description, SchemaPreferenceUpdatedHandler handler) 
+
+        public SchemaPreference (SchemaEntry<T> schema, string name, string description, SchemaPreferenceUpdatedHandler handler)
             : base (schema.Key, name, description)
         {
             this.schema = schema;
             this.handler = handler;
         }
-        
+
         public override T Value {
             get { return schema.Get (); }
-            set { 
+            set {
                 if (!schema.Set (value)) {
                     return;
                 }
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/Section.cs b/src/Core/Banshee.Services/Banshee.Preferences/Section.cs
index b1bca36..3812bc7 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/Section.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/Section.cs
@@ -44,7 +44,7 @@ namespace Banshee.Preferences
         public Section ()
         {
         }
-        
+
         public Section (string id, string name, int order)
         {
             Id = id;
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/VoidPreference.cs b/src/Core/Banshee.Services/Banshee.Preferences/VoidPreference.cs
index 0e529d2..8bc11e8 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/VoidPreference.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/VoidPreference.cs
@@ -35,7 +35,7 @@ namespace Banshee.Preferences
         public VoidPreference (string id) : base (id, null)
         {
         }
-        
+
         public VoidPreference (string id, string name) : base (id, name)
         {
         }
diff --git a/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs b/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
index f3513cb..a4c8485 100644
--- a/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
+++ b/src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs
@@ -45,12 +45,12 @@ namespace Banshee.Query
         QueryFieldSet FieldSet { get; }
         string GetSqlSort (string key, bool asc);
     }
-    
+
     public class QueryDefines : IQueryDefines
     {
-        
+
     }*/
-    
+
     public static class BansheeQuery
     {
         private static bool asc = true;
@@ -89,7 +89,7 @@ namespace Banshee.Query
             new QueryLimit ("MB",      Catalog.GetString ("MB"), "CoreTracks.FileSize", (int) FileSizeFactor.MB),
             new QueryLimit ("GB",      Catalog.GetString ("GB"), "CoreTracks.FileSize", (int) FileSizeFactor.GB)
         };
-        
+
 #region QueryField Definitions
 
         public static QueryField ArtistField = new QueryField (
@@ -133,7 +133,7 @@ namespace Banshee.Query
             Catalog.GetString ("discs"), Catalog.GetString ("cds"),
             "discs", "cds"
         );
-        
+
         public static QueryField TrackNumberField = new QueryField (
             "track", "TrackNumber",
             // Translators: noun
@@ -329,7 +329,7 @@ namespace Banshee.Query
             Catalog.GetString ("score"),
             "score"
         );
-        
+
         public static QueryField PlaybackErrorField = new QueryField (
             "playbackerror", "PlaybackError",
             Catalog.GetString ("Playback Error"), "CoreTracks.LastStreamError", typeof(PlaybackErrorQueryValue),
@@ -372,40 +372,40 @@ namespace Banshee.Query
                 case "track":
                 case "grouping":
                     sort_query = String.Format (@"
-                        CoreAlbums.ArtistNameSortKey ASC, 
-                        CoreAlbums.TitleSortKey ASC, 
+                        CoreAlbums.ArtistNameSortKey ASC,
+                        CoreAlbums.TitleSortKey ASC,
                         CoreTracks.Disc ASC,
-                        CoreTracks.TrackNumber {0}", ascDesc); 
+                        CoreTracks.TrackNumber {0}", ascDesc);
                     break;
 
                 case "albumartist":
                     sort_query = String.Format (@"
-                        CoreAlbums.ArtistNameSortKey {0}, 
-                        CoreAlbums.TitleSortKey ASC, 
+                        CoreAlbums.ArtistNameSortKey {0},
+                        CoreAlbums.TitleSortKey ASC,
                         CoreTracks.Disc ASC,
-                        CoreTracks.TrackNumber ASC", ascDesc); 
+                        CoreTracks.TrackNumber ASC", ascDesc);
                     break;
 
                 case "artist":
                     sort_query = String.Format (@"
-                        CoreArtists.NameSortKey {0}, 
+                        CoreArtists.NameSortKey {0},
                         CoreAlbums.TitleSortKey ASC,
                         CoreTracks.Disc ASC,
-                        CoreTracks.TrackNumber ASC", ascDesc); 
+                        CoreTracks.TrackNumber ASC", ascDesc);
                     break;
 
                 case "album":
                     sort_query = String.Format (@"
                         CoreAlbums.TitleSortKey {0},
                         CoreTracks.Disc ASC,
-                        CoreTracks.TrackNumber ASC", ascDesc); 
+                        CoreTracks.TrackNumber ASC", ascDesc);
                     break;
 
                 case "title":
                     sort_query = String.Format (@"
                         CoreTracks.TitleSortKey {0},
-                        CoreAlbums.ArtistNameSortKey ASC, 
-                        CoreAlbums.TitleSortKey ASC", ascDesc); 
+                        CoreAlbums.ArtistNameSortKey ASC,
+                        CoreAlbums.TitleSortKey ASC", ascDesc);
                     break;
 
                 case "random":
@@ -414,8 +414,8 @@ namespace Banshee.Query
 
                 case "disc":
                     sort_query = String.Format (@"
-                        CoreAlbums.ArtistNameSortKey ASC, 
-                        CoreAlbums.TitleSortKey ASC, 
+                        CoreAlbums.ArtistNameSortKey ASC,
+                        CoreAlbums.TitleSortKey ASC,
                         CoreTracks.Disc {0},
                         CoreTracks.TrackNumber ASC", ascDesc);
                     break;
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs
index 67dfcd0..07279d2 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs
@@ -39,17 +39,17 @@ using Banshee.Sources;
 using Banshee.Base;
 
 namespace Banshee.ServiceStack
-{    
+{
     public delegate bool ShutdownRequestHandler ();
     public delegate bool TimeoutHandler ();
     public delegate bool IdleHandler ();
     public delegate bool IdleTimeoutRemoveHandler (uint id);
-    public delegate uint TimeoutImplementationHandler (uint milliseconds, TimeoutHandler handler); 
+    public delegate uint TimeoutImplementationHandler (uint milliseconds, TimeoutHandler handler);
     public delegate uint IdleImplementationHandler (IdleHandler handler);
     public delegate bool IdleTimeoutRemoveImplementationHandler (uint id);
-    
+
     public static class Application
-    {   
+    {
         public static event ShutdownRequestHandler ShutdownRequested;
         public static event Action<Client> ClientAdded;
 
@@ -79,10 +79,10 @@ namespace Banshee.ServiceStack
         public static void Run ()
         {
             Banshee.Base.PlatformHacks.TrapMonoJitSegv ();
-            
+
             Catalog.Init (Application.InternalName, System.IO.Path.Combine (
                 Banshee.Base.Paths.InstalledApplicationDataRoot, "locale"));
-                
+
             if (!DBusConnection.ConnectTried) {
                 DBusConnection.Connect ();
             }
@@ -92,14 +92,14 @@ namespace Banshee.ServiceStack
             ServiceManager.SourceManager.AddSource (new MusicLibrarySource (), true);
             ServiceManager.SourceManager.AddSource (new VideoLibrarySource (), false);
             ServiceManager.SourceManager.LoadExtensionSources ();
-            
+
             Banshee.Base.PlatformHacks.RestoreMonoJitSegv ();
         }
 
         public static bool ShuttingDown {
             get { return shutting_down; }
         }
-     
+
         public static void Shutdown ()
         {
             shutting_down = true;
@@ -111,13 +111,13 @@ namespace Banshee.ServiceStack
                     return;
                 }
             }
-            
+
             if (OnShutdownRequested ()) {
                 Dispose ();
             }
             shutting_down = false;
         }
-        
+
         public static void PushClient (Client client)
         {
             lock (running_clients) {
@@ -130,16 +130,16 @@ namespace Banshee.ServiceStack
                 handler (client);
             }
         }
-        
+
         public static Client PopClient ()
         {
             lock (running_clients) {
                 return running_clients.Pop ();
             }
         }
-        
+
         public static Client ActiveClient {
-            get { lock (running_clients) { return running_clients.Peek (); } } 
+            get { lock (running_clients) { return running_clients.Peek (); } }
         }
 
         private static void OnClientStarted (Client client)
@@ -150,7 +150,7 @@ namespace Banshee.ServiceStack
                 handler (client);
             }
         }
-        
+
         private static bool OnShutdownRequested ()
         {
             ShutdownRequestHandler handler = ShutdownRequested;
@@ -161,10 +161,10 @@ namespace Banshee.ServiceStack
                     }
                 }
             }
-            
+
             return true;
         }
-        
+
         public static void Invoke (InvokeHandler handler)
         {
             RunIdle (delegate { handler (); return false; });
@@ -175,161 +175,161 @@ namespace Banshee.ServiceStack
             if (idle_handler == null) {
                 throw new NotImplementedException ("The application client must provide an IdleImplementationHandler");
             }
-            
+
             return idle_handler (handler);
         }
-        
+
         public static uint RunTimeout (uint milliseconds, TimeoutHandler handler)
         {
             if (timeout_handler == null) {
                 throw new NotImplementedException ("The application client must provide a TimeoutImplementationHandler");
             }
-            
+
             return timeout_handler (milliseconds, handler);
         }
-        
+
         public static bool IdleTimeoutRemove (uint id)
         {
             if (idle_timeout_remove_handler == null) {
                 throw new NotImplementedException ("The application client must provide a IdleTimeoutRemoveImplementationHandler");
             }
-            
+
             return idle_timeout_remove_handler (id);
         }
-        
+
         private static void Dispose ()
         {
             ServiceManager.JobScheduler.CancelAll (true);
             ServiceManager.Shutdown ();
-            
+
             lock (running_clients) {
                 while (running_clients.Count > 0) {
                     running_clients.Pop ().Dispose ();
                 }
             }
         }
-        
+
         private static ShutdownRequestHandler shutdown_prompt_handler = null;
         public static ShutdownRequestHandler ShutdownPromptHandler {
             get { return shutdown_prompt_handler; }
             set { shutdown_prompt_handler = value; }
         }
-        
+
         private static TimeoutImplementationHandler timeout_handler = null;
         public static TimeoutImplementationHandler TimeoutHandler {
             get { return timeout_handler; }
             set { timeout_handler = value; }
         }
-        
+
         private static IdleImplementationHandler idle_handler = null;
         public static IdleImplementationHandler IdleHandler {
             get { return idle_handler; }
             set { idle_handler = value; }
         }
-        
+
         private static IdleTimeoutRemoveImplementationHandler idle_timeout_remove_handler = null;
         public static IdleTimeoutRemoveImplementationHandler IdleTimeoutRemoveHandler {
             get { return idle_timeout_remove_handler; }
             set { idle_timeout_remove_handler = value; }
         }
-        
+
         public static string InternalName {
             get { return "banshee-1"; }
         }
-        
+
         public static string IconName {
             get { return "media-player-banshee"; }
         }
-        
+
         private static string api_version;
         public static string ApiVersion {
-            get { 
+            get {
                 if (api_version != null) {
                     return api_version;
                 }
-                
+
                 try {
                     AssemblyName name = Assembly.GetEntryAssembly ().GetName ();
-                    api_version = String.Format ("{0}.{1}.{2}", name.Version.Major, 
+                    api_version = String.Format ("{0}.{1}.{2}", name.Version.Major,
                         name.Version.Minor, name.Version.Build);
                 } catch {
                     api_version = "unknown";
                 }
-                
+
                 return api_version;
             }
         }
-        
+
         private static string version;
         public static string Version {
             get { return version ?? (version = GetVersion ("ReleaseVersion")); }
         }
-        
+
         private static string display_version;
         public static string DisplayVersion {
             get { return display_version ?? (display_version = GetVersion ("DisplayVersion")); }
         }
-        
+
         private static string build_time;
         public static string BuildTime {
             get { return build_time ?? (build_time = GetBuildInfo ("BuildTime")); }
         }
-        
+
         private static string build_host_os;
         public static string BuildHostOperatingSystem {
             get { return build_host_os ?? (build_host_os = GetBuildInfo ("HostOperatingSystem")); }
         }
-        
+
         private static string build_host_cpu;
         public static string BuildHostCpu {
             get { return build_host_cpu ?? (build_host_cpu = GetBuildInfo ("HostCpu")); }
         }
-        
+
         private static string build_vendor;
         public static string BuildVendor {
             get { return build_vendor ?? (build_vendor = GetBuildInfo ("Vendor")); }
         }
-        
+
         private static string build_display_info;
         public static string BuildDisplayInfo {
             get {
                 if (build_display_info != null) {
                     return build_display_info;
                 }
-                
+
                 build_display_info = String.Format ("{0} ({1}, {2}) @ {3}",
                     BuildVendor, BuildHostOperatingSystem, BuildHostCpu, BuildTime);
                 return build_display_info;
             }
         }
-        
+
         private static string GetVersion (string versionName)
         {
-            return GetCustomAssemblyMetadata ("ApplicationVersionAttribute", versionName) 
+            return GetCustomAssemblyMetadata ("ApplicationVersionAttribute", versionName)
                 ?? Catalog.GetString ("Unknown");
         }
-        
+
         private static string GetBuildInfo (string buildField)
         {
             return GetCustomAssemblyMetadata ("ApplicationBuildInformationAttribute", buildField);
         }
-        
+
         private static string GetCustomAssemblyMetadata (string attrName, string field)
         {
             Assembly assembly = Assembly.GetEntryAssembly ();
             if (assembly == null) {
                 return null;
             }
-            
+
             foreach (Attribute attribute in assembly.GetCustomAttributes (false)) {
                 Type type = attribute.GetType ();
                 PropertyInfo property = type.GetProperty (field);
-                if (type.Name == attrName && property != null && 
+                if (type.Name == attrName && property != null &&
                     property.PropertyType == typeof (string)) {
-                    return (string)property.GetValue (attribute, null); 
+                    return (string)property.GetValue (attribute, null);
                 }
             }
-            
+
             return null;
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/BatchUserJob.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/BatchUserJob.cs
index eafc04e..2e0a6a1 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/BatchUserJob.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/BatchUserJob.cs
@@ -1,4 +1,4 @@
-// 
+//
 // BatchUserJob.cs
 //
 // Author:
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
index cd02672..fd207d3 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
@@ -37,13 +37,13 @@ namespace Banshee.ServiceStack
         public Client ()
         {
         }
-        
+
         public virtual void Dispose ()
         {
         }
-        
+
         public abstract string ClientId {
-            get; 
+            get;
         }
 
         private bool is_started;
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/DBusCommandService.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/DBusCommandService.cs
index 2259bbd..dea0a81 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/DBusCommandService.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/DBusCommandService.cs
@@ -37,21 +37,21 @@ namespace Banshee.ServiceStack
     public class DBusCommandService : MarshalByRefObject, IDBusExportable
     {
         public event DBusCommandHandler ArgumentPushed;
-        
+
         public DBusCommandService ()
         {
         }
-        
+
         public void PushArgument (string argument, object value)
         {
             OnArgumentPushed (argument, value, false);
         }
-        
+
         public void PushFile (string file)
         {
             OnArgumentPushed (file, String.Empty, true);
         }
-        
+
         private void OnArgumentPushed (string argument, object value, bool isFile)
         {
             DBusCommandHandler handler = ArgumentPushed;
@@ -59,11 +59,11 @@ namespace Banshee.ServiceStack
                 handler (argument, value, isFile);
             }
         }
-        
+
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         string IService.ServiceName {
             get { return "DBusCommandService"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs
index 15214ed..ed3b969 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/DBusConnection.cs
@@ -42,29 +42,29 @@ namespace Banshee.ServiceStack
         private const string BusPrefix = "org.bansheeproject";
         public const string DefaultServiceName = "Banshee";
         public const string DefaultBusName=  "org.bansheeproject.Banshee";
-    
+
         static DBusConnection ()
         {
             enabled = !ApplicationContext.CommandLine.Contains ("disable-dbus");
         }
-                    
-        private static List<string> active_connections = new List<string> (); 
-    
+
+        private static List<string> active_connections = new List<string> ();
+
         public static string MakeBusName (string serviceName)
         {
             return String.Format ("{0}.{1}", BusPrefix, serviceName);
         }
-    
+
         private static bool enabled;
         public static bool Enabled {
             get { return enabled; }
         }
-        
+
         private static bool connect_tried;
         public static bool ConnectTried {
             get { return connect_tried; }
         }
-        
+
         public static bool ApplicationInstanceAlreadyRunning {
             get {
                 try {
@@ -74,34 +74,34 @@ namespace Banshee.ServiceStack
                 }
             }
         }
-        
+
         public static bool ServiceIsConnected (string service)
         {
-            return active_connections.Contains (service);   
+            return active_connections.Contains (service);
         }
-        
+
         public static void Disconnect (string serviceName)
         {
             if (active_connections.Contains (serviceName)) {
                 active_connections.Remove (serviceName);
             }
-            
+
             Bus.Session.ReleaseName (MakeBusName (serviceName));
         }
-        
+
         public static bool Connect ()
         {
             return Connect (DefaultServiceName);
         }
-        
+
         public static bool Connect (string serviceName)
         {
             connect_tried = true;
-            
+
             if (!enabled) {
                 return false;
             }
-            
+
             try {
                 if (Connect (serviceName, true) == RequestNameReply.PrimaryOwner) {
                     active_connections.Add (serviceName);
@@ -111,10 +111,10 @@ namespace Banshee.ServiceStack
                 Log.Warning ("DBus support could not be started. Disabling for this session.");
                 enabled = false;
             }
-            
+
             return false;
         }
-        
+
         public static bool NameHasOwner (string serviceName)
         {
             try {
@@ -123,34 +123,34 @@ namespace Banshee.ServiceStack
                 return false;
             }
         }
-        
+
         private static RequestNameReply Connect (string serviceName, bool init)
         {
             connect_tried = true;
-            
+
             if (init) {
                 BusG.Init ();
             }
-            
+
             string bus_name = MakeBusName (serviceName);
             RequestNameReply name_reply = Bus.Session.RequestName (bus_name);
             Log.DebugFormat ("Bus.Session.RequestName ('{0}') replied with {1}", bus_name, name_reply);
             return name_reply;
         }
-        
+
         private static GLib.MainLoop mainloop;
-        
+
         public static void RunMainLoop ()
         {
             if (mainloop == null) {
                 mainloop = new GLib.MainLoop ();
             }
-            
+
             if (!mainloop.IsRunning) {
                 mainloop.Run ();
             }
         }
-        
+
         public static void QuitMainLoop ()
         {
             if (mainloop != null && mainloop.IsRunning) {
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs
index 3a37a84..80bcbb6 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/DBusServiceManager.cs
@@ -31,7 +31,7 @@ using System.Text;
 using System.Text.RegularExpressions;
 using System.Collections.Generic;
 using System.Reflection;
-    
+
 using NDesk.DBus;
 using org.freedesktop.DBus;
 
@@ -53,72 +53,72 @@ namespace Banshee.ServiceStack
     {
         public const string ObjectRoot = "/org/bansheeproject/Banshee";
         private Dictionary<object, ObjectPath> registered_objects = new Dictionary<object, ObjectPath> ();
-        
+
         public static string MakeDBusSafeString (string str)
         {
             return str == null ? String.Empty : Regex.Replace (str, @"[^A-Za-z0-9]*", String.Empty);
         }
-        
+
         public static string MakeObjectPath (IDBusExportable o)
         {
             StringBuilder object_path = new StringBuilder ();
-            
+
             object_path.Append (ObjectRoot);
             object_path.Append ('/');
-            
+
             Stack<string> paths = new Stack<string> ();
-            
+
             IDBusExportable p = o.Parent;
-            
+
             while (p != null) {
                 paths.Push (String.Format ("{0}/", GetObjectName (p)));
                 p = p.Parent;
             }
-            
+
             while (paths.Count > 0) {
                 object_path.Append (paths.Pop ());
             }
-            
+
             object_path.Append (GetObjectName (o));
-            
+
             return object_path.ToString ();
         }
-        
+
         private static string GetObjectName (IDBusExportable o)
         {
             return o is IDBusObjectName ? ((IDBusObjectName)o).ExportObjectName : o.ServiceName;
         }
-        
+
         public static string [] MakeObjectPathArray<T> (IEnumerable<T> collection) where T : IDBusExportable
         {
             List<string> paths = new List<string> ();
-            
+
             foreach (IDBusExportable item in collection) {
                 paths.Add (MakeObjectPath (item));
             }
-            
+
             return paths.ToArray ();
         }
-        
+
         public ObjectPath RegisterObject (IDBusExportable o)
         {
             return RegisterObject (DBusConnection.DefaultServiceName, o);
         }
-        
+
         public ObjectPath RegisterObject (string serviceName, IDBusExportable o)
         {
             return RegisterObject (serviceName, o, MakeObjectPath (o));
         }
-        
+
         public ObjectPath RegisterObject (object o, string objectName)
         {
             return RegisterObject (DBusConnection.DefaultServiceName, o, objectName);
         }
-        
+
         public ObjectPath RegisterObject (string serviceName, object o, string objectName)
         {
             ObjectPath path = null;
-            
+
             if (DBusConnection.Enabled && Bus.Session != null) {
                 object [] attrs = o.GetType ().GetCustomAttributes (typeof (DBusExportableAttribute), true);
                 if (attrs != null && attrs.Length > 0) {
@@ -127,20 +127,20 @@ namespace Banshee.ServiceStack
                         serviceName = dbus_attr.ServiceName;
                     }
                 }
-            
+
                 lock (registered_objects) {
                     registered_objects.Add (o, path = new ObjectPath (objectName));
                 }
-                
+
                 string bus_name = DBusConnection.MakeBusName (serviceName);
-                
+
                 Log.DebugFormat ("Registering remote object {0} ({1}) on {2}", path, o.GetType (), bus_name);
-                
+
                 #pragma warning disable 0618
                 Bus.Session.Register (bus_name, path, o);
                 #pragma warning restore 0618
             }
-            
+
             return path;
         }
 
@@ -149,34 +149,34 @@ namespace Banshee.ServiceStack
             ObjectPath path = null;
             lock (registered_objects) {
                 if (!registered_objects.TryGetValue (o, out path)) {
-                    Log.WarningFormat ("Unable to unregister DBus object {0}, does not appear to be registered", 
+                    Log.WarningFormat ("Unable to unregister DBus object {0}, does not appear to be registered",
                         o.GetType ());
                     return;
                 }
-                
+
                 registered_objects.Remove (o);
             }
-        
+
             Bus.Session.Unregister (path);
         }
-        
+
         public static T FindInstance<T> (string objectPath) where T : class
         {
             return FindInstance<T> (DBusConnection.DefaultBusName, true, objectPath);
         }
-        
+
         public static T FindInstance<T> (string serviceName, string objectPath) where T : class
         {
             return FindInstance<T> (serviceName, false, objectPath);
         }
-        
+
         public static T FindInstance<T> (string serviceName, bool isFullBusName, string objectPath) where T : class
         {
             string busName = isFullBusName ? serviceName : DBusConnection.MakeBusName (serviceName);
             if (!DBusConnection.Enabled || !Bus.Session.NameHasOwner (busName)) {
                 return null;
             }
-            
+
             string full_object_path = objectPath;
             if (!objectPath.StartsWith (ObjectRoot)) {
                 full_object_path = ObjectRoot + objectPath;
@@ -184,7 +184,7 @@ namespace Banshee.ServiceStack
 
             return Bus.Session.GetObject<T> (busName, new ObjectPath (full_object_path));
         }
-        
+
         string IService.ServiceName {
             get { return "DBusServiceManager"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/DbIteratorJob.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/DbIteratorJob.cs
index 6ce6820..137cb5c 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/DbIteratorJob.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/DbIteratorJob.cs
@@ -131,7 +131,7 @@ namespace Banshee.ServiceStack
         {
             OnFinished ();
         }
-   
+
         protected abstract void IterateCore (HyenaDataReader reader);
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/IUserJob.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/IUserJob.cs
index 9a06cce..390e76a 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/IUserJob.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/IUserJob.cs
@@ -1,4 +1,4 @@
-// 
+//
 // IUserJob.cs
 //
 // Author:
@@ -31,23 +31,23 @@ using System;
 using Hyena.Data;
 
 namespace Banshee.ServiceStack
-{   
+{
     public interface IUserJob
     {
         event EventHandler Finished;
         event EventHandler Updated;
-        
+
         void Cancel ();
-        
+
         string Title { get; }
         string Status { get; }
         double Progress { get; }
         string [] IconNames { get; }
         bool IsBackground { get; }
-        
-        string CancelMessage { get; }        
+
+        string CancelMessage { get; }
         bool CanCancel { get; }
-        
+
         bool IsFinished { get; }
         bool IsCancelRequested { get; }
         bool DelayShow { get; }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
index c5ccd62..0a77406 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
@@ -52,40 +52,40 @@ namespace Banshee.ServiceStack
         private static Stack<IService> dispose_services = new Stack<IService> ();
         private static List<Type> service_types = new List<Type> ();
         private static ExtensionNodeList extension_nodes;
-        
+
         private static bool is_initialized = false;
         private static readonly object self_mutex = new object ();
 
         public static event EventHandler StartupBegin;
         public static event EventHandler StartupFinished;
         public static event ServiceStartedHandler ServiceStarted;
-        
+
         public static void Initialize ()
         {
             Application.ClientStarted += OnClientStarted;
         }
-        
+
         public static void InitializeAddins ()
         {
-            AddinManager.Initialize (ApplicationContext.CommandLine.Contains ("uninstalled") 
+            AddinManager.Initialize (ApplicationContext.CommandLine.Contains ("uninstalled")
                 ? "." : Paths.ApplicationData);
-            
+
             IProgressStatus monitor = ApplicationContext.CommandLine.Contains ("debug-addins")
                 ? new ConsoleProgressStatus (true)
                 : null;
-        
+
             if (ApplicationContext.Debugging) {
                 AddinManager.Registry.Rebuild (monitor);
             } else {
                 AddinManager.Registry.Update (monitor);
             }
         }
-           
+
         public static void RegisterAddinServices ()
         {
             extension_nodes = AddinManager.GetExtensionNodes ("/Banshee/ServiceManager/Service");
         }
-        
+
         public static void RegisterDefaultServices ()
         {
             RegisterService<DBusServiceManager> ();
@@ -104,7 +104,7 @@ namespace Banshee.ServiceStack
             RegisterService<Banshee.Collection.Indexer.CollectionIndexerService> ();
             RegisterService<Banshee.Metadata.SaveTrackMetadataService> ();
         }
-        
+
         public static void DefaultInitialize ()
         {
             Initialize ();
@@ -117,50 +117,50 @@ namespace Banshee.ServiceStack
         {
             DelayedInitialize ();
         }
-        
+
         public static void Run()
         {
-            lock (self_mutex) {          
+            lock (self_mutex) {
                 OnStartupBegin ();
-                
+
                 uint cumulative_timer_id = Log.InformationTimerStart ();
-                
+
                 foreach (Type type in service_types) {
                     RegisterService (type);
                 }
-                
+
                 if (extension_nodes != null) {
                     foreach (TypeExtensionNode node in extension_nodes) {
                         StartExtension (node);
                     }
                 }
-                
+
                 if (AddinManager.IsInitialized) {
                     AddinManager.AddExtensionNodeHandler ("/Banshee/ServiceManager/Service", OnExtensionChanged);
                 }
-                
+
                 is_initialized = true;
-                
+
                 Log.InformationTimerPrint (cumulative_timer_id, "All services are started {0}");
-                
+
                 OnStartupFinished ();
             }
         }
-        
+
         private static IService RegisterService (Type type)
         {
             IService service = null;
-            
+
             try {
                 uint timer_id = Log.DebugTimerStart ();
                 service = (IService)Activator.CreateInstance (type);
                 RegisterService (service);
-                
+
                 Log.DebugTimerPrint (timer_id, String.Format (
                     "Core service started ({0}, {{0}})", service.ServiceName));
-                
+
                 OnServiceStarted (service);
-                
+
                 if (service is IDisposable) {
                     dispose_services.Push (service);
                 }
@@ -168,7 +168,7 @@ namespace Banshee.ServiceStack
                 if (service is IInitializeService) {
                     ((IInitializeService)service).Initialize ();
                 }
-                
+
                 return service;
             } catch (Exception e) {
                 if (service is IRequiredService) {
@@ -176,52 +176,52 @@ namespace Banshee.ServiceStack
                             service == null ? type.ToString () : service.ServiceName, false);
                     throw;
                 }
-                
-                Log.Warning (String.Format ("Service `{0}' not started: {1}", type.FullName, 
+
+                Log.Warning (String.Format ("Service `{0}' not started: {1}", type.FullName,
                     e.InnerException != null ? e.InnerException.Message : e.Message));
                 Log.Exception (e.InnerException ?? e);
             }
-            
+
             return null;
         }
-        
+
         private static void StartExtension (TypeExtensionNode node)
         {
             if (extension_services.ContainsKey (node.Path)) {
                 return;
             }
-        
+
             IExtensionService service = null;
-                    
+
             try {
                 uint timer_id = Log.DebugTimerStart ();
-                
+
                 service = (IExtensionService)node.CreateInstance (typeof (IExtensionService));
                 service.Initialize ();
                 RegisterService (service);
 
                 DelayedInitialize (service);
-            
+
                 Log.DebugTimerPrint (timer_id, String.Format (
                     "Extension service started ({0}, {{0}})", service.ServiceName));
-            
+
                 OnServiceStarted (service);
-                
+
                 extension_services.Add (node.Path, service);
-            
+
                 dispose_services.Push (service);
             } catch (Exception e) {
                 Log.Exception (e.InnerException ?? e);
-                Log.Warning (String.Format ("Extension `{0}' not started: {1}", 
+                Log.Warning (String.Format ("Extension `{0}' not started: {1}",
                     service == null ? node.Path : service.GetType ().FullName, e.Message));
             }
         }
-        
-        private static void OnExtensionChanged (object o, ExtensionNodeEventArgs args) 
+
+        private static void OnExtensionChanged (object o, ExtensionNodeEventArgs args)
         {
             lock (self_mutex) {
                 TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;
-                
+
                 if (args.Change == ExtensionChange.Add) {
                     StartExtension (node);
                 } else if (args.Change == ExtensionChange.Remove && extension_services.ContainsKey (node.Path)) {
@@ -229,9 +229,9 @@ namespace Banshee.ServiceStack
                     extension_services.Remove (node.Path);
                     services.Remove (service.ServiceName);
                     ((IDisposable)service).Dispose ();
-                    
+
                     Log.DebugFormat ("Extension service disposed ({0})", service.ServiceName);
-                    
+
                     // Rebuild the dispose stack excluding the extension service
                     IService [] tmp_services = new IService[dispose_services.Count - 1];
                     int count = tmp_services.Length;
@@ -258,7 +258,7 @@ namespace Banshee.ServiceStack
                 }
             }
         }
-        
+
         private static void DelayedInitialize (IService service)
         {
             try {
@@ -268,11 +268,11 @@ namespace Banshee.ServiceStack
                 }
             } catch (Exception e) {
                 Log.Exception (e.InnerException ?? e);
-                Log.Warning (String.Format ("Service `{0}' not initialized: {1}", 
+                Log.Warning (String.Format ("Service `{0}' not initialized: {1}",
                     service.GetType ().FullName, e.Message));
             }
         }
-        
+
         public static void Shutdown ()
         {
             lock (self_mutex) {
@@ -285,22 +285,22 @@ namespace Banshee.ServiceStack
                         Log.Exception (String.Format ("Service disposal ({0}) threw an exception", service.ServiceName), e);
                     }
                 }
-                
+
                 services.Clear ();
             }
         }
-        
+
         public static void RegisterService (IService service)
         {
             lock (self_mutex) {
                 services.Add (service.ServiceName, service);
-                
+
                 if(service is IDBusExportable) {
                     DBusServiceManager.RegisterObject ((IDBusExportable)service);
                 }
             }
         }
-        
+
         public static void RegisterService<T> () where T : IService
         {
             lock (self_mutex) {
@@ -311,7 +311,7 @@ namespace Banshee.ServiceStack
                 }
             }
         }
-        
+
         public static bool Contains (string serviceName)
         {
             lock (self_mutex) {
@@ -323,21 +323,21 @@ namespace Banshee.ServiceStack
         {
             return Contains (typeof (T).Name);
         }
-        
+
         public static IService Get (string serviceName)
         {
             if (services.ContainsKey (serviceName)) {
-                return services[serviceName]; 
+                return services[serviceName];
             }
-            
+
             return null;
         }
-        
+
         public static T Get<T> (string serviceName) where T : class, IService
         {
             return Get (serviceName) as T;
         }
-        
+
         public static T Get<T> () where T : class, IService
         {
             Type type = typeof (T);
@@ -345,10 +345,10 @@ namespace Banshee.ServiceStack
             if (service == null && type.GetInterface ("Banshee.ServiceStack.IRegisterOnDemandService") != null) {
                 return RegisterService (type) as T;
             }
-            
+
             return service;
         }
-        
+
         private static void OnStartupBegin ()
         {
             EventHandler handler = StartupBegin;
@@ -356,7 +356,7 @@ namespace Banshee.ServiceStack
                 handler (null, EventArgs.Empty);
             }
         }
-        
+
         private static void OnStartupFinished ()
         {
             EventHandler handler = StartupFinished;
@@ -364,7 +364,7 @@ namespace Banshee.ServiceStack
                 handler (null, EventArgs.Empty);
             }
         }
-        
+
         private static void OnServiceStarted (IService service)
         {
             ServiceStartedHandler handler = ServiceStarted;
@@ -372,23 +372,23 @@ namespace Banshee.ServiceStack
                 handler (new ServiceStartedArgs (service));
             }
         }
-        
+
         public static int StartupServiceCount {
             get { return service_types.Count + (extension_nodes == null ? 0 : extension_nodes.Count) + 1; }
         }
-        
+
         public static int ServiceCount {
             get { return services.Count; }
         }
-        
+
         public static bool IsInitialized {
             get { return is_initialized; }
         }
-        
+
         public static DBusServiceManager DBusServiceManager {
             get { return Get<DBusServiceManager> (); }
         }
-                
+
         public static BansheeDbConnection DbConnection {
             get { return (BansheeDbConnection)Get ("DbConnection"); }
         }
@@ -396,7 +396,7 @@ namespace Banshee.ServiceStack
         public static MediaProfileManager MediaProfileManager {
             get { return Get<MediaProfileManager> (); }
         }
-        
+
         public static SourceManager SourceManager {
             get { return (SourceManager)Get ("SourceManager"); }
         }
@@ -404,15 +404,15 @@ namespace Banshee.ServiceStack
         public static JobScheduler JobScheduler {
             get { return (JobScheduler)Get ("JobScheduler"); }
         }
-        
+
         public static PlayerEngineService PlayerEngine {
             get { return (PlayerEngineService)Get ("PlayerEngine"); }
         }
-        
+
         public static PlaybackControllerService PlaybackController {
             get { return (PlaybackControllerService)Get ("PlaybackController"); }
         }
-        
+
         public static HardwareManager HardwareManager {
             get { return Get<HardwareManager> (); }
         }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceStartedHandler.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceStartedHandler.cs
index d442e24..7af666f 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceStartedHandler.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceStartedHandler.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ServiceStartedHandler.cs
 //
 // Author:
@@ -31,16 +31,16 @@ using System;
 namespace Banshee.ServiceStack
 {
     public delegate void ServiceStartedHandler (ServiceStartedArgs args);
-    
+
     public class ServiceStartedArgs : EventArgs
     {
         private IService service;
-        
+
         public ServiceStartedArgs (IService service)
         {
             this.service = service;
         }
-        
+
         public IService Service {
             get { return service; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/TestUserJob.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/TestUserJob.cs
index 5109eeb..6d9060f 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/TestUserJob.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/TestUserJob.cs
@@ -1,4 +1,4 @@
-// 
+//
 // TestUserJob.cs
 //
 // Author:
@@ -38,32 +38,32 @@ namespace Banshee.ServiceStack
         private uint main_timeout_id = 0;
         private uint final_timeout_id = 0;
         private Random rand = new Random ();
-        
+
         private string [] icon_names_go = new string [] {
             "go-next", "go-down", "go-previous", "go-up"
         };
-        
+
         private string [] icon_names_rand = new string [] {
             "face-angel", "face-crying", "face-devilish", "face-glasses",
             "face-grin", "face-kiss", "face-monkey",  "face-plain",
             "face-sad", "face-smile-big", "face-smile", "face-surprise",
             "face-wink"
         };
-        
+
         public TestUserJob () : base ("UserJob Test Job", "Waiting for 7.5 seconds...")
         {
             CancelRequested += OnCancelRequested;
             DelayShow = true;
             Register ();
-            
+
             IconNames = new string [] { "media-eject" };
 
-            initial_timeout_id = Application.RunTimeout (7500, delegate {        
+            initial_timeout_id = Application.RunTimeout (7500, delegate {
                 Title = "New Title for Test Job";
-                
+
                 main_timeout_id = Application.RunTimeout (50, delegate {
                     Progress += 0.001;
-                    
+
                     if (Progress >= 0.45 && Progress <= 0.55) {
                         Status = null;
                     } else {
@@ -75,7 +75,7 @@ namespace Banshee.ServiceStack
                     } else if (Title == null) {
                         Title = "The final Title";
                     }
-                    
+
                     if (Progress >= 0.25 && Progress <= 0.35 && icon_timeout_id == 0) {
                         icon_timeout_id = Application.RunTimeout (100, delegate {
                             icon_index = (icon_index + 1) % icon_names_go.Length;
@@ -87,7 +87,7 @@ namespace Banshee.ServiceStack
                             return false;
                         });
                     }
-                    
+
                     if (Progress >= 0.45 && Progress <= 0.70 && icon_timeout_id == 0) {
                         icon_timeout_id = Application.RunTimeout (250, delegate {
                             icon_index = rand.Next (0, icon_names_rand.Length - 1);
@@ -99,9 +99,9 @@ namespace Banshee.ServiceStack
                             return false;
                         });
                     }
-                    
-                    CanCancel = (Progress >= 0.15 && Progress <= 0.30) || (Progress >= 0.65 && Progress <= 0.85); 
-                    
+
+                    CanCancel = (Progress >= 0.15 && Progress <= 0.30) || (Progress >= 0.65 && Progress <= 0.85);
+
                     if (Progress == 1.0) {
                         Progress = 0.0;
                         Title = "Bouncing";
@@ -110,43 +110,43 @@ namespace Banshee.ServiceStack
                             Finish ();
                             return false;
                         });
-                        
+
                         return false;
                     }
-                    
+
                     return true;
                 });
-                
+
                 return false;
             });
         }
-        
+
         private void OnCancelRequested (object o, EventArgs args)
         {
             if (initial_timeout_id > 0) {
                 Application.IdleTimeoutRemove (initial_timeout_id);
             }
-            
+
             if (main_timeout_id > 0) {
                 Application.IdleTimeoutRemove (main_timeout_id);
             }
-            
+
             if (icon_timeout_id > 0) {
                 Application.IdleTimeoutRemove (icon_timeout_id);
             }
-            
+
             if (final_timeout_id > 0) {
                 Application.IdleTimeoutRemove (final_timeout_id);
             }
-            
+
             OnFinished ();
         }
 
         public static void SpawnLikeFish (int count)
         {
             int i = 0;
-            Application.RunTimeout (2000, delegate { 
-                new TestUserJob (); 
+            Application.RunTimeout (2000, delegate {
+                new TestUserJob ();
                 return ++i < count;
             });
         }
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/UserJob.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/UserJob.cs
index 0e0320e..4a86c6d 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/UserJob.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/UserJob.cs
@@ -1,4 +1,4 @@
-// 
+//
 // UserJob.cs
 //
 // Author:
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/UserJobEventHandler.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/UserJobEventHandler.cs
index bd0f677..3fccb11 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/UserJobEventHandler.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/UserJobEventHandler.cs
@@ -1,4 +1,4 @@
-// 
+//
 // UserJobEventHandler.cs
 //
 // Author:
@@ -31,16 +31,16 @@ using System;
 namespace Banshee.ServiceStack
 {
     public delegate void UserJobEventHandler (object o, UserJobEventArgs args);
-    
+
     public class UserJobEventArgs : EventArgs
     {
         private IUserJob user_job;
-        
+
         public UserJobEventArgs (IUserJob job)
         {
             this.user_job = job;
         }
-        
+
         public IUserJob Job {
             get { return user_job; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/Migrator.cs b/src/Core/Banshee.Services/Banshee.SmartPlaylist/Migrator.cs
index 7a208f9..150aa14 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/Migrator.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/Migrator.cs
@@ -386,7 +386,7 @@ namespace Banshee.SmartPlaylist
                 Catalog.GetString ("is not"),
                 QueryOperator.NotInSmartPlaylist
             );
-        
+
             // caution: the equal/not-equal operators for text fields (TextIs and TextNotIs) have to be defined
             // before the ones for non-text fields. Otherwise MatchesCondition will not return the right column names.
             // (because the regular expression for non-string fields machtes also for string fields)
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs
index 64668df..eea45b0 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs
@@ -29,7 +29,7 @@
 using System;
 
 using Hyena.Query;
- 
+
 using Banshee.Query;
 using Banshee.Sources;
 
@@ -55,7 +55,7 @@ namespace Banshee.SmartPlaylist
         {
         }
 
-        public SmartPlaylistDefinition (string name, string description, string condition, 
+        public SmartPlaylistDefinition (string name, string description, string condition,
             int limit_number, QueryLimit limit, QueryOrder order)
         {
             Name = name;
diff --git a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
index 9322c33..7583bc6 100644
--- a/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
+++ b/src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs
@@ -37,7 +37,7 @@ using Mono.Unix;
 using Hyena;
 using Hyena.Query;
 using Hyena.Data.Sqlite;
- 
+
 using Banshee.Base;
 using Banshee.Query;
 using Banshee.Sources;
@@ -55,7 +55,7 @@ namespace Banshee.SmartPlaylist
     {
         private static List<SmartPlaylistSource> playlists = new List<SmartPlaylistSource> ();
         private static uint timeout_id = 0;
-        
+
         static SmartPlaylistSource () {
             Migrator.MigrateAll ();
 
@@ -65,13 +65,13 @@ namespace Banshee.SmartPlaylist
 
         private static string generic_name = Catalog.GetString ("Smart Playlist");
         private static string properties_label = Catalog.GetString ("Edit Smart Playlist");
-    
+
         private QueryOrder query_order;
         private QueryLimit limit;
         private IntegerQueryValue limit_value;
-        
+
         private List<SmartPlaylistSource> dependencies = new List<SmartPlaylistSource>();
-        
+
 
 #region Properties
 
@@ -116,7 +116,7 @@ namespace Banshee.SmartPlaylist
                 if (condition != null) {
                     condition_sql = condition.ToSql (BansheeQuery.FieldSet);
                     condition_xml = condition.ToXml (BansheeQuery.FieldSet);
-                    
+
                     foreach (QueryTermNode term in condition.GetTerms ()) {
                         if (!relevant_fields.Contains (term.Field))
                             relevant_fields.Add (term.Field);
@@ -176,7 +176,7 @@ namespace Banshee.SmartPlaylist
                 return (Limit != null && LimitValue != null && !LimitValue.IsEmpty && QueryOrder != null);
             }
         }
-        
+
         public override bool HasDependencies {
             get { return dependencies.Count > 0; }
         }
@@ -244,17 +244,17 @@ namespace Banshee.SmartPlaylist
         }
 
 #endregion
-        
+
 #region Private Methods
-        
+
         private void UpdateDependencies ()
         {
             foreach (SmartPlaylistSource s in dependencies) {
                 s.Updated -= OnDependencyUpdated;
             }
-            
+
             dependencies.Clear ();
-            
+
             if (ConditionTree != null) {
                 foreach (SmartPlaylistQueryValue value in ConditionTree.SearchForValues<SmartPlaylistQueryValue> ()) {
                     SmartPlaylistSource playlist = value.ObjectValue;
@@ -265,12 +265,12 @@ namespace Banshee.SmartPlaylist
                 }
             }
         }
-        
+
         private void OnDependencyUpdated (object sender, EventArgs args)
         {
             Reload ();
         }
-        
+
 #endregion
 
 #region AbstractPlaylist overrides
@@ -357,7 +357,7 @@ namespace Banshee.SmartPlaylist
 
         public void Refresh ()
         {
-            // Wipe the member list clean and repopulate it 
+            // Wipe the member list clean and repopulate it
             string reload_str = String.Format (
                 @"DELETE FROM CoreSmartPlaylistEntries WHERE SmartPlaylistID = {0};
                   INSERT INTO CoreSmartPlaylistEntries
@@ -374,7 +374,7 @@ namespace Banshee.SmartPlaylist
             if (IsLimited && !Limit.RowBased) {
                 // Identify where the cut off mark is
                 HyenaSqliteCommand limit_command = new HyenaSqliteCommand (String.Format (
-                    @"SELECT EntryID, {0} 
+                    @"SELECT EntryID, {0}
                       FROM CoreTracks, CoreSmartPlaylistEntries
                       WHERE SmartPlaylistID = {1} AND CoreSmartPlaylistEntries.TrackID = CoreTracks.TrackID
                       ORDER BY EntryID",
@@ -501,7 +501,7 @@ namespace Banshee.SmartPlaylist
                     } catch (Exception e) {
                         Log.Warning ("Ignoring Smart Playlist", String.Format ("Caught error: {0}", e), false);
                     }
-                    
+
                     if (playlist != null) {
                         yield return playlist;
                     }
diff --git a/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs b/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
index d18906c..23c8f2c 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
@@ -65,7 +65,7 @@ namespace Banshee.Sources
         public DatabaseSource (string generic_name, string name, string id, int order) : this (generic_name, name, id, order, null)
         {
         }
-        
+
         public DatabaseSource (string generic_name, string name, string id, int order, Source parent) : base (generic_name, name, order, id)
         {
             if (parent != null) {
@@ -118,7 +118,7 @@ namespace Banshee.Sources
         private void DatabaseSourceInitialize ()
         {
             InitializeTrackModel ();
-            
+
             current_filters_schema = CreateSchema<string[]> ("current_filters");
 
             DatabaseSource filter_src = Parent as DatabaseSource ?? this;
@@ -255,7 +255,7 @@ namespace Banshee.Sources
         public virtual bool CanDeleteTracks {
             get { return true; }
         }
-        
+
         public virtual bool ConfirmRemoveTracks {
             get { return true; }
         }
@@ -275,8 +275,8 @@ namespace Banshee.Sources
         public TrackListModel TrackModel {
             get { return DatabaseTrackModel; }
         }
-        
-        public virtual bool ShowBrowser { 
+
+        public virtual bool ShowBrowser {
             get { return true; }
         }
 
@@ -299,31 +299,31 @@ namespace Banshee.Sources
         {
             return base.AcceptsUserInputFromSource (source) && CanAddTracks;
         }
-                
+
         public override bool HasViewableTrackProperties {
             get { return true; }
         }
-        
+
         public override bool HasEditableTrackProperties {
             get { return true; }
         }
 
 #endregion
-        
+
 #region Filters (aka Browsers)
-        
+
         private IList<IFilterListModel> available_filters;
         public IList<IFilterListModel> AvailableFilters {
             get { return available_filters ?? (available_filters = new List<IFilterListModel> ()); }
             protected set { available_filters = value; }
         }
-        
+
         private IList<IFilterListModel> default_filters;
         public IList<IFilterListModel> DefaultFilters {
             get { return default_filters ?? (default_filters = new List<IFilterListModel> ()); }
             protected set { default_filters = value; }
         }
-        
+
         private IList<IFilterListModel> current_filters;
         public IList<IFilterListModel> CurrentFilters {
             get {
@@ -349,7 +349,7 @@ namespace Banshee.Sources
             }
             protected set { current_filters = value; }
         }
-        
+
         public void ReplaceFilter (IFilterListModel old_filter, IFilterListModel new_filter)
         {
             int i = current_filters.IndexOf (old_filter);
@@ -358,7 +358,7 @@ namespace Banshee.Sources
                 SaveCurrentFilters ();
             }
         }
-        
+
         public void AppendFilter (IFilterListModel filter)
         {
             if (current_filters.IndexOf (filter) == -1) {
@@ -366,14 +366,14 @@ namespace Banshee.Sources
                 SaveCurrentFilters ();
             }
         }
-        
+
         public void RemoveFilter (IFilterListModel filter)
         {
             if (current_filters.Remove (filter)) {
                 SaveCurrentFilters ();
             }
         }
-        
+
         private void SaveCurrentFilters ()
         {
             Reload ();
@@ -387,13 +387,13 @@ namespace Banshee.Sources
                 }
                 current_filters_schema.Set (filters);
             }
-            
+
             EventHandler handler = FiltersChanged;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         private SchemaEntry<string[]> current_filters_schema;
 
 #endregion
@@ -418,7 +418,7 @@ namespace Banshee.Sources
         public virtual bool HasDependencies {
             get { return false; }
         }
-        
+
         public void RemoveTrack (int index)
         {
             if (index != -1) {
@@ -524,9 +524,9 @@ namespace Banshee.Sources
                 AddSelectedTracks (source);
             }
         }
-        
+
 #endregion
-        
+
 #region Protected Methods
 
         protected virtual void OnTracksAdded ()
@@ -590,7 +590,7 @@ namespace Banshee.Sources
                     if (track_model.CachesJoinTableEntries) {
                         rate_track_range_command = new HyenaSqliteCommand (String.Format (@"
                             UPDATE CoreTracks SET Rating = ?, DateUpdatedStamp = ? WHERE
-                                TrackID IN (SELECT TrackID FROM {0} WHERE 
+                                TrackID IN (SELECT TrackID FROM {0} WHERE
                                     {1} IN (SELECT ItemID FROM CoreCache WHERE ModelID = {2} LIMIT ?, ?))",
                             track_model.JoinTable, track_model.JoinPrimaryKey, track_model.CacheId
                         ));
@@ -612,7 +612,7 @@ namespace Banshee.Sources
             if (!ever_reloaded)
                 Reload ();
         }
-        
+
         public override void Deactivate ()
         {
             DatabaseTrackModel.InvalidateCache (false);
@@ -635,7 +635,7 @@ namespace Banshee.Sources
         {
             Log.ErrorFormat ("AddTrackRange not implemented by {0}", this);
         }
-        
+
         protected virtual void AddTrack (DatabaseTrackInfo track)
         {
             Log.ErrorFormat ("AddTrack not implemented by {0}", this);
diff --git a/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs b/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs
index 69e0911..4e4ac03 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs
@@ -36,18 +36,18 @@ using Hyena;
 namespace Banshee.Sources
 {
     public delegate void DurationStatusFormatHandler (StringBuilder builder, TimeSpan span);
-    
+
     public class DurationStatusFormatters : List<DurationStatusFormatHandler>
     {
         private static StringBuilder default_builder = new StringBuilder ();
-        
+
         public DurationStatusFormatters ()
         {
             Add (AwesomeConciseFormatter);
             Add (AnnoyingPreciseFormatter);
             Add (ConfusingPreciseFormatter);
         }
-        
+
         public static string AwesomeConciseFormatter (TimeSpan span)
         {
             lock (default_builder) {
@@ -56,24 +56,24 @@ namespace Banshee.Sources
                 return default_builder.ToString ();
             }
         }
-        
+
         public static void AwesomeConciseFormatter (StringBuilder builder, TimeSpan span)
         {
             if (span.Days > 0) {
                 double days = span.Days + (span.Hours / 24.0);
-                builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days", 
+                builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days",
                     StringUtil.DoubleToPluralInt (days)), StringUtil.DoubleToTenthsPrecision (days));
             } else if (span.Hours > 0) {
                 double hours = span.Hours + (span.Minutes / 60.0);
-                builder.AppendFormat (Catalog.GetPluralString ("{0} hour", "{0} hours", 
+                builder.AppendFormat (Catalog.GetPluralString ("{0} hour", "{0} hours",
                     StringUtil.DoubleToPluralInt (hours)), StringUtil.DoubleToTenthsPrecision (hours));
             } else {
                 double minutes = span.Minutes + (span.Seconds / 60.0);
-                builder.AppendFormat (Catalog.GetPluralString ("{0} minute", "{0} minutes", 
+                builder.AppendFormat (Catalog.GetPluralString ("{0} minute", "{0} minutes",
                     StringUtil.DoubleToPluralInt (minutes)), StringUtil.DoubleToTenthsPrecision (minutes));
             }
         }
-        
+
         public static string AnnoyingPreciseFormatter (TimeSpan span)
         {
             lock (default_builder) {
@@ -82,14 +82,14 @@ namespace Banshee.Sources
                 return default_builder.ToString ();
             }
         }
-        
+
         public static void AnnoyingPreciseFormatter (StringBuilder builder, TimeSpan span)
         {
             if (span.Days > 0) {
                 builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days", span.Days), span.Days);
                 builder.Append (", ");
             }
-            
+
             if (span.Hours > 0) {
                 builder.AppendFormat (Catalog.GetPluralString ("{0} hour", "{0} hours", span.Hours), span.Hours);
                 builder.Append (", ");
@@ -99,7 +99,7 @@ namespace Banshee.Sources
             builder.Append (", ");
             builder.AppendFormat (Catalog.GetPluralString ("{0} second", "{0} seconds", span.Seconds), span.Seconds);
         }
-        
+
         public static string ConfusingPreciseFormatter (TimeSpan span)
         {
             lock (default_builder) {
@@ -108,7 +108,7 @@ namespace Banshee.Sources
                 return default_builder.ToString ();
             }
         }
-        
+
         public static void ConfusingPreciseFormatter (StringBuilder builder, TimeSpan span)
         {
             if (span.Days > 0) {
@@ -116,14 +116,14 @@ namespace Banshee.Sources
             } else if (span.Hours > 0) {
                 builder.AppendFormat ("{0}:", span.Hours);
             }
-            
+
             if (span.TotalHours < 1 || span.TotalMinutes < 1) {
                 builder.AppendFormat ("{0}:{1:00}", span.Minutes, span.Seconds);
             } else {
                 builder.AppendFormat ("{0:00}:{1:00}", span.Minutes, span.Seconds);
             }
         }
-        
+
         public static string ApproximateVerboseFormatter (TimeSpan span)
         {
             lock (default_builder) {
@@ -132,7 +132,7 @@ namespace Banshee.Sources
                 return default_builder.ToString ();
             }
         }
-        
+
         public static void ApproximateVerboseFormatter (StringBuilder builder, TimeSpan span)
         {
             if (span.Days > 0) {
diff --git a/src/Core/Banshee.Services/Banshee.Sources/ErrorSource.cs b/src/Core/Banshee.Services/Banshee.Sources/ErrorSource.cs
index 082db5a..3f1ab9a 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/ErrorSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/ErrorSource.cs
@@ -40,10 +40,10 @@ namespace Banshee.Sources
     {
         private List<Message> messages = new List<Message> ();
         private Selection selection = new Selection ();
-        
+
         public event EventHandler Cleared;
         public event EventHandler Reloaded;
-        
+
         public ErrorSource (string name) : base (name, name, 0)
         {
             Properties.SetStringList ("Icon.Name", "dialog-error", "gtk-dialog-error");
@@ -57,7 +57,7 @@ namespace Banshee.Sources
             Parent.RemoveChildSource (this);
             return true;
         }
-        
+
         private void OnReloaded ()
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
@@ -67,7 +67,7 @@ namespace Banshee.Sources
                 }
             });
         }
-        
+
         private void OnCleared ()
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
@@ -77,46 +77,46 @@ namespace Banshee.Sources
                 }
             });
         }
-        
+
         private ColumnDescription [] columns = new ColumnDescription [] {
             new ColumnDescription ("Title", Catalog.GetString ("Error"), .35),
             new ColumnDescription ("Details", Catalog.GetString ("Details"), .65)
         };
-        
+
         public ColumnDescription [] ColumnDescriptions {
             get { return columns; }
         }
-        
+
         public override void Activate ()
         {
             Reload ();
         }
-        
+
         public void AddMessage (string title, string details)
         {
            AddMessage (new Message (title, details));
         }
-        
+
         public void AddMessage (Message message)
         {
             lock (this) {
                 messages.Add (message);
             }
-            
+
             OnUpdated ();
             OnReloaded ();
         }
-        
+
         public void Clear ()
         {
             lock (this) {
                 messages.Clear ();
             }
-            
+
             OnUpdated ();
             OnCleared ();
         }
-        
+
         public void Reload ()
         {
             OnReloaded ();
@@ -127,7 +127,7 @@ namespace Banshee.Sources
         }
 
         public bool CanReorder { get { return false; } }
-        
+
         public virtual bool CanUnmap {
             get { return true; }
         }
@@ -135,13 +135,13 @@ namespace Banshee.Sources
         public bool ConfirmBeforeUnmap {
             get { return false; }
         }
-        
+
         public object this[int index] {
             get {
                 if (index >= 0 && index < messages.Count) {
                     return messages[index];
-                } 
-                
+                }
+
                 return null;
             }
         }
@@ -149,22 +149,22 @@ namespace Banshee.Sources
         public Selection Selection {
             get { return selection; }
         }
-        
+
         public class Message
         {
             private string title;
             private string details;
-            
+
             public Message (string title, string details)
             {
                 this.title = title;
                 this.details = details;
             }
-            
+
             public string Title {
                 get { return title; }
             }
-            
+
             public string Details {
                 get { return details; }
             }
diff --git a/src/Core/Banshee.Services/Banshee.Sources/IImportable.cs b/src/Core/Banshee.Services/Banshee.Sources/IImportable.cs
index aaacffa..92231f0 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/IImportable.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/IImportable.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Collections.Generic;
 
diff --git a/src/Core/Banshee.Services/Banshee.Sources/ISource.cs b/src/Core/Banshee.Services/Banshee.Sources/ISource.cs
index 77d0c4f..590c514 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/ISource.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/ISource.cs
@@ -40,14 +40,14 @@ namespace Banshee.Sources
         void Activate();
         void Deactivate();
         void Rename(string name);
-        
+
         string Name { get; }
         string GenericName { get; }
         int Order { get; }
         int Count { get; }
-        
+
         string [] Children { get; }
-        
+
         // DBus Hack
         string TrackModelPath { get; }
 
diff --git a/src/Core/Banshee.Services/Banshee.Sources/ISourceManager.cs b/src/Core/Banshee.Services/Banshee.Sources/ISourceManager.cs
index 2fde1c7..9b97854 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/ISourceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/ISourceManager.cs
@@ -38,7 +38,7 @@ namespace Banshee.Sources
     [Interface("org.bansheeproject.Banshee.SourceManager")]
     public interface ISourceManager : IDBusExportable
     {
-        //event SourceEventHandler SourceUpdated; 
+        //event SourceEventHandler SourceUpdated;
         ISource ActiveSource { get; set; }
         ISource DefaultSource { get; }
         string [] Sources { get; }
diff --git a/src/Core/Banshee.Services/Banshee.Sources/MessageAction.cs b/src/Core/Banshee.Services/Banshee.Sources/MessageAction.cs
index caeb048..cb060dc 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/MessageAction.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/MessageAction.cs
@@ -34,21 +34,21 @@ namespace Banshee.Sources
     {
         private bool is_stock;
         private string label;
-        
+
         public event EventHandler Activated;
-        
+
         public MessageAction (string label) : this (label, false, null)
         {
         }
-        
+
         public MessageAction (string label, EventHandler handler) : this (label, false, handler)
         {
         }
-        
+
         public MessageAction (string label, bool isStock) : this (label, isStock, null)
         {
         }
-        
+
         public MessageAction (string label, bool isStock, EventHandler handler)
         {
             this.label = label;
@@ -57,12 +57,12 @@ namespace Banshee.Sources
                 this.Activated += handler;
             }
         }
-        
+
         public void Activate ()
         {
             OnActivated ();
         }
-        
+
         protected virtual void OnActivated ()
         {
             EventHandler handler = Activated;
@@ -70,12 +70,12 @@ namespace Banshee.Sources
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public bool IsStock {
             get { return is_stock; }
             set { is_stock = value; }
         }
-        
+
         public string Label {
             get { return label; }
             set { label = value; }
diff --git a/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs b/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
index 13e96d7..bdab989 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs
@@ -79,7 +79,7 @@ namespace Banshee.Sources
     public abstract class PrimarySource : DatabaseSource, IDisposable
     {
         #region Functions that let us override some behavior of our DatabaseTrackInfos
-        
+
         private TrackEqualHandler track_equal_handler;
         public TrackEqualHandler TrackEqualHandler {
             get { return track_equal_handler; }
@@ -99,7 +99,7 @@ namespace Banshee.Sources
         }
 
         #endregion
-    
+
         protected ErrorSource error_source;
         protected bool error_source_visible = false;
 
@@ -116,7 +116,7 @@ namespace Banshee.Sources
             DELETE FROM CoreArtists WHERE ArtistID NOT IN (SELECT ArtistID FROM CoreTracks);
             DELETE FROM CoreAlbums WHERE AlbumID NOT IN (SELECT AlbumID FROM CoreTracks)
         ");
-        
+
         protected HyenaSqliteCommand purge_tracks_command = new HyenaSqliteCommand (@"
             DELETE FROM CoreTracks WHERE PrimarySourceId = ?
         ");
@@ -132,18 +132,18 @@ namespace Banshee.Sources
                 if (dbid > 0) {
                     return dbid;
                 }
-                
+
                 dbid = ServiceManager.DbConnection.Query<int> ("SELECT PrimarySourceID FROM CorePrimarySources WHERE StringID = ?", UniqueId);
                 if (dbid == 0) {
                     dbid = ServiceManager.DbConnection.Execute ("INSERT INTO CorePrimarySources (StringID) VALUES (?)", UniqueId);
                 } else {
                     SavedCount = ServiceManager.DbConnection.Query<int> ("SELECT CachedCount FROM CorePrimarySources WHERE PrimarySourceID = ?", dbid);
                 }
-                
+
                 if (dbid == 0) {
                     throw new ApplicationException ("dbid could not be resolved, this should never happen");
                 }
-                
+
                 return dbid;
             }
         }
@@ -175,17 +175,17 @@ namespace Banshee.Sources
             get { return is_local; }
             protected set { is_local = value; }
         }
-        
+
         private static SourceSortType[] sort_types = new SourceSortType[] {
             SortNameAscending,
             SortSizeAscending,
             SortSizeDescending
         };
-        
+
         public override SourceSortType[] ChildSortTypes {
             get { return sort_types; }
         }
-        
+
         public override SourceSortType DefaultChildSort {
             get { return SortNameAscending; }
         }
@@ -206,7 +206,7 @@ namespace Banshee.Sources
             get { return null; }
             protected set { base_dir_with_sep = null; }
         }
-        
+
         private string base_dir_with_sep;
         public string BaseDirectoryWithSeparator {
             get { return base_dir_with_sep ?? (base_dir_with_sep = BaseDirectory + System.IO.Path.DirectorySeparatorChar); }
@@ -264,7 +264,7 @@ namespace Banshee.Sources
             DatabaseTrackModel.AddCondition (String.Format ("CoreTracks.PrimarySourceID = {0}", DbId));
 
             primary_sources[DbId] = this;
-            
+
             // Load our playlists and smart playlists
             foreach (PlaylistSource pl in PlaylistSource.LoadAll (this)) {
                 AddChildSource (pl);
@@ -422,7 +422,7 @@ namespace Banshee.Sources
         {
             OnTracksDeleted ();
         }
-        
+
         protected virtual void PurgeTracks ()
         {
             ServiceManager.DbConnection.Execute (purge_tracks_command, DbId);
@@ -455,7 +455,7 @@ namespace Banshee.Sources
 
             if (source.Count < 1)
                 return;
-            
+
             ThreadAssist.SpawnFromMain (delegate {
                 CachedList<DatabaseTrackInfo> list = CachedList<DatabaseTrackInfo>.CreateFromModel (source.DatabaseTrackModel);
                 DeleteTrackList (list);
@@ -467,7 +467,7 @@ namespace Banshee.Sources
             if (model == null || model.Count < 1) {
                 return;
             }
-            
+
             ThreadAssist.SpawnFromMain (delegate {
                 CachedList<DatabaseTrackInfo> list = CachedList<DatabaseTrackInfo>.CreateFromModelSelection (model);
                 DeleteTrackList (list);
@@ -512,7 +512,7 @@ namespace Banshee.Sources
                 delete_track_job.Finish ();
                 delete_track_job = null;
             }
-            
+
             if (skip_deletion != null) {
                 list.Remove (skip_deletion);
                 skip_deletion.Clear ();
@@ -523,7 +523,7 @@ namespace Banshee.Sources
             if (list.Count > 0) {
                 ServiceManager.DbConnection.Execute (remove_list_command, DateTime.Now, list.CacheId, list.CacheId);
             }
-            
+
             ThreadAssist.ProxyToMain (delegate {
                 OnTracksDeleted ();
                 OnUserNotifyUpdated ();
@@ -559,13 +559,13 @@ namespace Banshee.Sources
             }
             return true;
         }
-        
+
         public override bool AddAllTracks (Source source)
         {
             if (!AcceptsInputFromSource (source) || source.Count == 0) {
                 return false;
             }
-            
+
             DatabaseTrackListModel model = (source as ITrackModelSource).TrackModel as DatabaseTrackListModel;
             CachedList<DatabaseTrackInfo> cached_list = CachedList<DatabaseTrackInfo>.CreateFromModel (model);
             if (ThreadAssist.InMainThread) {
@@ -611,7 +611,7 @@ namespace Banshee.Sources
                     IncrementAddedTracks ();
                     break;
                 }
-                
+
                 if (track == null) {
                     IncrementAddedTracks ();
                     continue;
@@ -675,7 +675,7 @@ namespace Banshee.Sources
                 lock (this) {
                     if (add_track_job == null) {
                         add_track_job = new BatchUserJob (String.Format (Catalog.GetString (
-                            "Adding {0} of {1} to {2}"), "{0}", "{1}", Name), 
+                            "Adding {0} of {1} to {2}"), "{0}", "{1}", Name),
                             Properties.GetStringList ("Icon.Name"));
                         add_track_job.SetResources (Resource.Cpu, Resource.Database, Resource.Disk);
                         add_track_job.PriorityHints = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
diff --git a/src/Core/Banshee.Services/Banshee.Sources/Source.cs b/src/Core/Banshee.Services/Banshee.Sources/Source.cs
index d92b8cc..efccba7 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/Source.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/Source.cs
@@ -105,21 +105,21 @@ namespace Banshee.Sources
 
             properties.PropertyChanged += OnPropertyChanged;
             read_only_children = new ReadOnlyCollection<Source> (child_sources);
-            
+
             if (ApplicationContext.Debugging && ApplicationContext.CommandLine.Contains ("test-source-messages")) {
                 TestMessages ();
             }
 
             LoadSortSchema ();
         }
-        
+
         protected void OnSetupComplete ()
         {
             /*ITrackModelSource tm_source = this as ITrackModelSource;
             if (tm_source != null) {
                 tm_source.TrackModel.Parent = this;
                 ServiceManager.DBusServiceManager.RegisterObject (tm_source.TrackModel);
-                
+
                 // TODO if/when browsable models can be added/removed on the fly, this would need to change to reflect that
                 foreach (IListModel model in tm_source.FilterModels) {
                     Banshee.Collection.ExportableModel exportable = model as Banshee.Collection.ExportableModel;
@@ -145,19 +145,19 @@ namespace Banshee.Sources
                 }
             }
         }
-        
+
         protected void PauseSorting ()
         {
             sort_children = false;
         }
-        
+
         protected void ResumeSorting ()
         {
             sort_children = true;
         }
 
 #region Public Methods
-        
+
         public virtual void Activate ()
         {
         }
@@ -170,7 +170,7 @@ namespace Banshee.Sources
         {
             properties.SetString ("Name", newName);
         }
-        
+
         public virtual bool AcceptsInputFromSource (Source source)
         {
             return false;
@@ -180,28 +180,28 @@ namespace Banshee.Sources
         {
             return AcceptsInputFromSource (source);
         }
-        
+
         public virtual void MergeSourceInput (Source source, SourceMergeType mergeType)
         {
             Log.ErrorFormat ("MergeSourceInput not implemented by {0}", this);
         }
-        
+
         public virtual SourceMergeType SupportedMergeTypes {
             get { return SourceMergeType.None; }
         }
-        
+
         public virtual void SetParentSource (Source parent)
         {
             this.parent = parent;
         }
-        
+
         public virtual bool ContainsChildSource (Source child)
         {
             lock (Children) {
                 return child_sources.Contains (child);
             }
         }
-        
+
         public virtual void AddChildSource (Source child)
         {
             lock (Children) {
@@ -219,19 +219,19 @@ namespace Banshee.Sources
                 if (child.Children.Count > 0) {
                     child.ClearChildSources ();
                 }
-                
+
                 child_sources.Remove (child);
-                
+
                 if (ServiceManager.SourceManager.ActiveSource == child) {
                     if (CanActivate) {
                         ServiceManager.SourceManager.SetActiveSource (this);
                     }
                 }
-                
+
                 OnChildSourceRemoved (child);
             }
         }
-        
+
         public virtual void ClearChildSources ()
         {
             lock (Children) {
@@ -264,7 +264,7 @@ namespace Banshee.Sources
                 }
                 sort_children = false;
             }
-            
+
             if (child_sort != null && child_sort.SortType != SortType.None) {
                 lock (Children) {
                     child_sort.Sort (child_sources, SeparateChildrenByType);
@@ -277,7 +277,7 @@ namespace Banshee.Sources
             }
             sort_children = true;
         }
-        
+
         private void LoadSortSchema ()
         {
             if (ChildSortTypes.Length == 0) {
@@ -288,7 +288,7 @@ namespace Banshee.Sources
                 Hyena.Log.WarningFormat ("Trying to LoadSortSchema, but source's id not set! {0}", UniqueId);
                 return;
             }
-            
+
             child_sort_schema = CreateSchema<string> ("child_sort_id", DefaultChildSort.Id, "", "");
             string child_sort_id = child_sort_schema.Get ();
             foreach (SourceSortType sort_type in ChildSortTypes) {
@@ -306,20 +306,20 @@ namespace Banshee.Sources
         {
             return propagate ? GetInheritedProperty<T> (name) : Properties.Get<T> (name);
         }
-        
+
         public T GetInheritedProperty<T> (string name)
         {
             return Properties.Contains (name)
                 ? Properties.Get<T> (name)
-                : Parent != null 
+                : Parent != null
                     ? Parent.GetInheritedProperty<T> (name)
                     : default (T);
         }
-        
+
 #endregion
-        
+
 #region Protected Methods
-        
+
         public virtual void SetStatus (string message, bool error)
         {
             SetStatus (message, !error, !error, error ? "dialog-error" : null);
@@ -332,9 +332,9 @@ namespace Banshee.Sources
                     status_message = new SourceMessage (this);
                     PushMessage (status_message);
                 }
-            
+
                 string status_name = String.Format ("<i>{0}</i>", GLib.Markup.EscapeText (Name));
-                
+
                 status_message.FreezeNotify ();
                 status_message.Text = String.Format (GLib.Markup.EscapeText (message), status_name);
                 status_message.CanClose = can_close;
@@ -343,7 +343,7 @@ namespace Banshee.Sources
                 status_message.IsHidden = false;
                 status_message.ClearActions ();
             }
-                
+
             status_message.ThawNotify ();
         }
 
@@ -364,10 +364,10 @@ namespace Banshee.Sources
                 messages.Insert (0, message);
                 message.Updated += HandleMessageUpdated;
             }
-            
+
             OnMessageNotify ();
         }
-        
+
         protected virtual SourceMessage PopMessage ()
         {
             try {
@@ -378,14 +378,14 @@ namespace Banshee.Sources
                         messages.RemoveAt (0);
                         return message;
                     }
-                    
+
                     return null;
                 }
             } finally {
                 OnMessageNotify ();
             }
         }
-        
+
         protected virtual void ClearMessages ()
         {
             lock (this) {
@@ -400,12 +400,12 @@ namespace Banshee.Sources
                 status_message = null;
             }
         }
-        
+
         private void TestMessages ()
         {
             int count = 0;
             SourceMessage message_3 = null;
-            
+
             Application.RunTimeout (5000, delegate {
                 if (count++ > 5) {
                     if (count == 7) {
@@ -416,7 +416,7 @@ namespace Banshee.Sources
                 } else if (count > 10) {
                     return false;
                 }
-                
+
                 SourceMessage message = new SourceMessage (this);
                 message.FreezeNotify ();
                 message.Text = String.Format ("Testing message {0}", count);
@@ -427,18 +427,18 @@ namespace Banshee.Sources
                         message.AddAction (new MessageAction (String.Format ("Button {0}", i)));
                     }
                 }
-                    
+
                 message.ThawNotify ();
                 PushMessage (message);
-                
+
                 if (count == 3) {
                     message_3 = message;
                 }
-                
+
                 return true;
             });
         }
-        
+
         protected virtual void RemoveMessage (SourceMessage message)
         {
             lock (this) {
@@ -446,14 +446,14 @@ namespace Banshee.Sources
                     message.Updated -= HandleMessageUpdated;
                     OnMessageNotify ();
                 }
-            }   
+            }
         }
 
         private void HandleMessageUpdated (object o, EventArgs args)
         {
             OnMessageNotify ();
         }
-        
+
         protected virtual void OnMessageNotify ()
         {
             EventHandler handler = MessageNotify;
@@ -461,7 +461,7 @@ namespace Banshee.Sources
                 handler (this, EventArgs.Empty);
             }
         }
-    
+
         protected virtual void OnChildSourceAdded (Source source)
         {
             SortChildSources ();
@@ -475,7 +475,7 @@ namespace Banshee.Sources
                 }
             });
         }
-        
+
         protected virtual void OnChildSourceRemoved (Source source)
         {
             source.Updated -= OnChildSourceUpdated;
@@ -488,7 +488,7 @@ namespace Banshee.Sources
                 }
             });
         }
-        
+
         protected virtual void OnUpdated ()
         {
             EventHandler handler = Updated;
@@ -496,7 +496,7 @@ namespace Banshee.Sources
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnChildSourceUpdated (object o, EventArgs args)
         {
             SortChildSources ();
@@ -516,24 +516,24 @@ namespace Banshee.Sources
                 }
             }
         }
-        
+
 #endregion
-        
+
 #region Private Methods
-        
+
         private void OnPropertyChanged (object o, PropertyChangeEventArgs args)
         {
             OnUpdated ();
         }
-        
+
 #endregion
-        
+
 #region Public Properties
-        
+
         public ReadOnlyCollection<Source> Children {
             get { return read_only_children; }
         }
-        
+
         string [] ISource.Children {
             get { return null; }
         }
@@ -545,7 +545,7 @@ namespace Banshee.Sources
         public virtual string TypeName {
             get { return GetType ().Name; }
         }
-        
+
         private string unique_id;
         public string UniqueId {
             get {
@@ -555,7 +555,7 @@ namespace Banshee.Sources
                 return unique_id ?? (unique_id = String.Format ("{0}-{1}", this.GetType ().Name, TypeUniqueId));
             }
         }
-        
+
         private string type_unique_id;
         protected string TypeUniqueId {
             get { return type_unique_id; }
@@ -569,11 +569,11 @@ namespace Banshee.Sources
         public virtual bool HasProperties {
             get { return false; }
         }
-        
+
         public virtual bool HasViewableTrackProperties {
             get { return false; }
         }
-        
+
         public virtual bool HasEditableTrackProperties {
             get { return false; }
         }
@@ -587,12 +587,12 @@ namespace Banshee.Sources
             get { return properties.Get<string> ("GenericName"); }
             set { properties.SetString ("GenericName", value); }
         }
-        
+
         public int Order {
             get { return properties.GetInteger ("Order"); }
             set { properties.SetInteger ("Order", value); }
         }
-        
+
         public SourceMessage CurrentMessage {
             get { lock (this) { return messages.Count > 0 ? messages[0] : null; } }
         }
@@ -600,38 +600,38 @@ namespace Banshee.Sources
         public virtual bool ImplementsCustomSearch {
             get { return false; }
         }
-        
+
         public virtual bool CanSearch {
             get { return false; }
         }
-                
+
         public virtual string FilterQuery {
             get { return properties.Get<string> ("FilterQuery"); }
             set { properties.SetString ("FilterQuery", value); }
         }
-        
+
         public TrackFilterType FilterType {
             get { return (TrackFilterType)properties.GetInteger ("FilterType"); }
             set { properties.SetInteger ("FilterType", (int)value); }
         }
-        
+
         public virtual bool Expanded {
             get { return properties.GetBoolean ("Expanded"); }
             set { properties.SetBoolean ("Expanded", value); }
         }
-        
+
         public virtual bool? AutoExpand {
             get { return true; }
         }
-        
+
         public virtual PropertyStore Properties {
             get { return properties; }
         }
-        
+
         public virtual bool CanActivate {
             get { return true; }
         }
-        
+
         public virtual int Count {
             get { return 0; }
         }
@@ -652,35 +652,35 @@ namespace Banshee.Sources
         }
 
         public virtual int FilteredCount { get { return Count; } }
-                
+
         public virtual string TrackModelPath {
             get { return null; }
         }
-        
+
         public static readonly SourceSortType SortNameAscending = new SourceSortType (
             "NameAsc",
             Catalog.GetString ("Name"),
             SortType.Ascending, null); // null comparer b/c we already fall back to sorting by name
-        
+
         public static readonly SourceSortType SortSizeAscending = new SourceSortType (
             "SizeAsc",
             Catalog.GetString ("Size Ascending"),
             SortType.Ascending, new SizeComparer ());
-        
+
         public static readonly SourceSortType SortSizeDescending = new SourceSortType (
             "SizeDesc",
             Catalog.GetString ("Size Descending"),
             SortType.Descending, new SizeComparer ());
-        
+
         private static SourceSortType[] sort_types = new SourceSortType[] {};
         public virtual SourceSortType[] ChildSortTypes {
             get { return sort_types; }
         }
-        
+
         public SourceSortType ActiveChildSort {
             get { return child_sort; }
         }
-        
+
         public virtual SourceSortType DefaultChildSort {
             get { return null; }
         }
@@ -692,38 +692,38 @@ namespace Banshee.Sources
                 SortChildSources ();
             }
         }
-        
+
 #endregion
 
-#region Status Message Stuff        
-        
+#region Status Message Stuff
+
         private static DurationStatusFormatters duration_status_formatters = new DurationStatusFormatters ();
         public static DurationStatusFormatters DurationStatusFormatters {
             get { return duration_status_formatters; }
         }
-        
+
         protected virtual int StatusFormatsCount {
             get { return duration_status_formatters.Count; }
         }
-        
+
         public virtual int CurrentStatusFormat {
             get { return ConfigurationClient.Get<int> (String.Format ("sources.{0}", ParentConfigurationId), "status_format", 0); }
             set { ConfigurationClient.Set<int> (String.Format ("sources.{0}", ParentConfigurationId), "status_format", value); }
         }
-        
+
         public SchemaEntry<T> CreateSchema<T> (string name)
         {
             return CreateSchema<T> (name, default(T), null, null);
         }
-        
+
         public SchemaEntry<T> CreateSchema<T> (string name, T defaultValue, string shortDescription, string longDescription)
         {
-            return new SchemaEntry<T> (String.Format ("sources.{0}", ParentConfigurationId), name, defaultValue, shortDescription, longDescription); 
+            return new SchemaEntry<T> (String.Format ("sources.{0}", ParentConfigurationId), name, defaultValue, shortDescription, longDescription);
         }
-        
+
         public SchemaEntry<T> CreateSchema<T> (string ns, string name, T defaultValue, string shortDescription, string longDescription)
         {
-            return new SchemaEntry<T> (String.Format ("sources.{0}.{1}", ParentConfigurationId, ns), name, defaultValue, shortDescription, longDescription); 
+            return new SchemaEntry<T> (String.Format ("sources.{0}.{1}", ParentConfigurationId, ns), name, defaultValue, shortDescription, longDescription);
         }
 
         public virtual string PreferencesPageId {
@@ -743,7 +743,7 @@ namespace Banshee.Sources
             if (new_status_format >= StatusFormatsCount) {
                 new_status_format = 0;
             }
-            
+
             CurrentStatusFormat = new_status_format;
         }
 
@@ -753,13 +753,13 @@ namespace Banshee.Sources
             StringBuilder builder = new StringBuilder ();
 
             int count = FilteredCount;
-            
+
             if (count == 0) {
                 return String.Empty;
             }
-            
+
             builder.AppendFormat (Catalog.GetPluralString ("{0} item", "{0} items", count), count);
-            
+
             if (this is IDurationAggregator && StatusFormatsCount > 0) {
                 var duration = ((IDurationAggregator)this).Duration;
                 if (duration > TimeSpan.Zero) {
@@ -775,21 +775,21 @@ namespace Banshee.Sources
                     builder.AppendFormat (new FileSizeQueryValue (bytes).ToUserQuery ());
                 }
             }
-            
+
             return builder.ToString ();
         }
-        
+
 #endregion
 
         public override string ToString ()
         {
             return Name;
         }
-        
+
         /*string IService.ServiceName {
             get { return String.Format ("{0}{1}", DBusServiceManager.MakeDBusSafeString (Name), "Source"); }
         }*/
-        
+
         // FIXME: Replace ISource with IDBusExportable when it's enabled again
         ISource ISource.Parent {
             get {
diff --git a/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs b/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
index 0d2d20b..d89ea3c 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
@@ -38,27 +38,27 @@ namespace Banshee.Sources
 {
     public delegate void SourceEventHandler(SourceEventArgs args);
     public delegate void SourceAddedHandler(SourceAddedArgs args);
-    
+
     public class SourceEventArgs : EventArgs
     {
         public Source Source;
     }
-    
+
     public class SourceAddedArgs : SourceEventArgs
     {
         public int Position;
     }
-    
+
     public class SourceManager : /*ISourceManager,*/ IInitializeService, IRequiredService, IDBusExportable, IDisposable
     {
         private List<Source> sources = new List<Source>();
         private Dictionary<string, Source> extension_sources = new Dictionary<string, Source> ();
-        
+
         private Source active_source;
         private Source default_source;
         private MusicLibrarySource music_library;
         private VideoLibrarySource video_library;
-        
+
         public event SourceEventHandler SourceUpdated;
         public event SourceAddedHandler SourceAdded;
         public event SourceEventHandler SourceRemoved;
@@ -78,7 +78,7 @@ namespace Banshee.Sources
                 AddinManager.AddExtensionNodeHandler ("/Banshee/SourceManager/Source", OnExtensionChanged);
             }
         }
-        
+
         public void Dispose ()
         {
             lock (this) {
@@ -100,17 +100,17 @@ namespace Banshee.Sources
                 while (sources.Count > 0) {
                     RemoveSource (sources[0], false);
                 }
-                
+
                 sources.Clear ();
                 extension_sources.Clear ();
             }
         }
-        
-        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args) 
+
+        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args)
         {
             lock (this) {
                 TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;
-                
+
                 if (args.Change == ExtensionChange.Add && !extension_sources.ContainsKey (node.Id)) {
                     Source source = (Source)node.CreateInstance ();
                     extension_sources.Add (node.Id, source);
@@ -133,17 +133,17 @@ namespace Banshee.Sources
         {
             AddSource(source, false);
         }
-        
+
         public void AddSource(Source source, bool isDefault)
         {
             Banshee.Base.ThreadAssist.AssertInMainThread ();
             if(source == null || ContainsSource (source)) {
                 return;
             }
-            
+
             int position = FindSourceInsertPosition(source);
             sources.Insert(position, source);
-            
+
             if(isDefault) {
                 default_source = source;
             }
@@ -151,7 +151,7 @@ namespace Banshee.Sources
             source.Updated += OnSourceUpdated;
             source.ChildSourceAdded += OnChildSourceAdded;
             source.ChildSourceRemoved += OnChildSourceRemoved;
-            
+
             SourceAddedHandler handler = SourceAdded;
             if(handler != null) {
                 SourceAddedArgs args = new SourceAddedArgs();
@@ -165,22 +165,22 @@ namespace Banshee.Sources
             } else if (source is VideoLibrarySource) {
                 video_library = source as VideoLibrarySource;
             }
-            
+
             IDBusExportable exportable = source as IDBusExportable;
             if (exportable != null) {
                 ServiceManager.DBusServiceManager.RegisterObject (exportable);
             }
-            
+
             List<Source> children = new List<Source> (source.Children);
             foreach(Source child_source in children) {
                 AddSource (child_source, false);
             }
-                
+
             if(isDefault && ActiveSource == null) {
                 SetActiveSource(source);
             }
         }
-        
+
         public void RemoveSource (Source source)
         {
             RemoveSource (source, false);
@@ -195,7 +195,7 @@ namespace Banshee.Sources
             if(source == default_source) {
                 default_source = null;
             }
-            
+
             source.Updated -= OnSourceUpdated;
             source.ChildSourceAdded -= OnChildSourceAdded;
             source.ChildSourceRemoved -= OnChildSourceRemoved;
@@ -205,7 +205,7 @@ namespace Banshee.Sources
             foreach(Source child_source in source.Children) {
                 RemoveSource (child_source, recursivelyDispose);
             }
-            
+
             IDBusExportable exportable = source as IDBusExportable;
             if (exportable != null) {
                 ServiceManager.DBusServiceManager.UnregisterObject (exportable);
@@ -231,27 +231,27 @@ namespace Banshee.Sources
                 }
             });
         }
-        
+
         public void RemoveSource(Type type)
         {
             Queue<Source> remove_queue = new Queue<Source>();
-            
+
             foreach(Source source in Sources) {
                 if(source.GetType() == type) {
                     remove_queue.Enqueue(source);
                 }
             }
-            
+
             while(remove_queue.Count > 0) {
                 RemoveSource(remove_queue.Dequeue());
             }
         }
-        
+
         public bool ContainsSource(Source source)
         {
             return sources.Contains(source);
         }
-        
+
         private void OnSourceUpdated(object o, EventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
@@ -268,29 +268,29 @@ namespace Banshee.Sources
         {
             AddSource (args.Source);
         }
-        
+
         private void OnChildSourceRemoved(SourceEventArgs args)
         {
             RemoveSource (args.Source);
         }
-        
+
         private int FindSourceInsertPosition(Source source)
         {
             for(int i = sources.Count - 1; i >= 0; i--) {
                 if((sources[i] as Source).Order == source.Order) {
                     return i;
-                } 
+                }
             }
-        
+
             for(int i = 0; i < sources.Count; i++) {
                 if((sources[i] as Source).Order >= source.Order) {
                     return i;
                 }
             }
-            
-            return sources.Count;    
+
+            return sources.Count;
         }
-        
+
         public Source DefaultSource {
             get { return default_source; }
             set { default_source = value; }
@@ -307,46 +307,46 @@ namespace Banshee.Sources
         public Source ActiveSource {
             get { return active_source; }
         }
-        
+
         /*ISource ISourceManager.DefaultSource {
             get { return DefaultSource; }
         }
-        
+
         ISource ISourceManager.ActiveSource {
             get { return ActiveSource; }
             set { value.Activate (); }
         }*/
-        
+
         public void SetActiveSource(Source source)
         {
             SetActiveSource(source, true);
         }
-        
+
         public void SetActiveSource(Source source, bool notify)
         {
             Banshee.Base.ThreadAssist.AssertInMainThread ();
             if(source == null || !source.CanActivate || active_source == source) {
                 return;
             }
-            
+
             if(active_source != null) {
                 active_source.Deactivate();
             }
-            
+
             active_source = source;
-            
+
             if(!notify) {
                 source.Activate();
                 return;
             }
-            
+
             SourceEventHandler handler = ActiveSourceChanged;
             if(handler != null) {
                 SourceEventArgs args = new SourceEventArgs();
                 args.Source = active_source;
                 handler(args);
             }
-            
+
             source.Activate();
         }
 
@@ -359,19 +359,19 @@ namespace Banshee.Sources
                 }
             }
         }
-     
+
         public ICollection<Source> Sources {
             get { return sources; }
         }
-        
+
         /*string [] ISourceManager.Sources {
             get { return DBusServiceManager.MakeObjectPathArray<Source>(sources); }
         }*/
-        
+
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
-        
+
         string Banshee.ServiceStack.IService.ServiceName {
             get { return "SourceManager"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Sources/SourceMessage.cs b/src/Core/Banshee.Services/Banshee.Sources/SourceMessage.cs
index caefc16..551e83c 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/SourceMessage.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/SourceMessage.cs
@@ -35,23 +35,23 @@ namespace Banshee.Sources
     {
         private bool updated_when_frozen;
         private int freeze_count;
-        
+
         private List<MessageAction> actions;
-        
+
         private Source source;
         private bool is_spinning;
         private bool is_hidden;
         private bool can_close;
         private string text;
         private string [] icon_names;
-        
+
         public event EventHandler Updated;
-        
+
         public SourceMessage (Source source)
         {
             this.source = source;
         }
-        
+
         public void AddAction (MessageAction action)
         {
             lock (this) {
@@ -62,7 +62,7 @@ namespace Banshee.Sources
                 OnUpdated ();
             }
         }
-        
+
         public void ClearActions ()
         {
             lock (this) {
@@ -72,51 +72,51 @@ namespace Banshee.Sources
                 OnUpdated ();
             }
         }
-        
+
         public void SetIconName (params string [] name)
         {
             icon_names = name;
         }
-        
+
         public string [] IconNames {
             get { return icon_names; }
         }
-        
+
         public void FreezeNotify ()
         {
             lock (this) {
                 freeze_count++;
             }
         }
-        
+
         public void ThawNotify ()
         {
             lock (this) {
                 if (freeze_count > 0) {
                     freeze_count--;
                 }
-                
+
                 if (freeze_count == 0 && updated_when_frozen) {
                     OnUpdated ();
                 }
             }
         }
-        
+
         protected virtual void OnUpdated ()
         {
             if (freeze_count != 0) {
                 updated_when_frozen = true;
                 return;
             }
-            
+
             updated_when_frozen = false;
-            
+
             EventHandler handler = Updated;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public bool IsSpinning {
             get { return is_spinning; }
             set { lock (this) { is_spinning = value; OnUpdated (); } }
@@ -131,17 +131,17 @@ namespace Banshee.Sources
             get { return can_close; }
             set { lock (this) { can_close = value; OnUpdated (); } }
         }
-        
+
         public Source Source {
             get { return source; }
             set { lock (this) { source = value; OnUpdated (); } }
         }
-        
+
         public string Text {
             get { return text; }
-            set { lock (this) { text = value; OnUpdated (); } }  
+            set { lock (this) { text = value; OnUpdated (); } }
         }
-        
+
         public IEnumerable<MessageAction> Actions {
             get { return actions; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Sources/SourceSortType.cs b/src/Core/Banshee.Services/Banshee.Sources/SourceSortType.cs
index 0dc1a38..c690a54 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/SourceSortType.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/SourceSortType.cs
@@ -69,19 +69,19 @@ namespace Banshee.Sources
             this.comparer.SeparateTypes = separateTypes;
             sources.Sort (comparer);
         }
-        
+
         public string Id {
             get { return id; }
         }
-        
+
         public string Label {
             get { return label; }
         }
-        
+
         public SortType SortType {
             get { return sort_type; }
         }
-        
+
         private class SourceComparer : IComparer<Source>
         {
             private IComparer name_comparer = new CaseInsensitiveComparer ();
diff --git a/src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs b/src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs
index 64b3ac7..89ef998 100644
--- a/src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Streaming/RadioTrackInfo.cs
@@ -40,12 +40,12 @@ using Banshee.ServiceStack;
 using Banshee.MediaEngine;
 using Banshee.PlaybackController;
 using Banshee.Playlists.Formats;
- 
+
 namespace Banshee.Streaming
-{   
+{
     public class RadioTrackInfo : TrackInfo
     {
-    
+
 #region Static Helper Methods
 
         public static RadioTrackInfo OpenPlay (string uri)
@@ -57,7 +57,7 @@ namespace Banshee.Streaming
                 return null;
             }
         }
-        
+
         public static RadioTrackInfo OpenPlay (SafeUri uri)
         {
             RadioTrackInfo track = Open (uri);
@@ -66,12 +66,12 @@ namespace Banshee.Streaming
             }
             return track;
         }
-    
+
         public static RadioTrackInfo Open (string uri)
         {
             return Open (new SafeUri (uri));
         }
-    
+
         public static RadioTrackInfo Open (SafeUri uri)
         {
             try {
@@ -79,23 +79,23 @@ namespace Banshee.Streaming
                 radio_track.ParsingPlaylistEvent += delegate {
                     ThreadAssist.ProxyToMain (delegate {
                         if (radio_track.PlaybackError != StreamPlaybackError.None) {
-                            Log.Error (Catalog.GetString ("Error opening stream"), 
+                            Log.Error (Catalog.GetString ("Error opening stream"),
                                 Catalog.GetString ("Could not open stream or playlist"), true);
                             radio_track = null;
                         }
                     });
                 };
-                
+
                 return radio_track;
             } catch {
-                Log.Error (Catalog.GetString ("Error opening stream"), 
+                Log.Error (Catalog.GetString ("Error opening stream"),
                     Catalog.GetString("Problem parsing playlist"), true);
                 return null;
             }
         }
 
 #endregion
-        
+
         private Track track;
         private SafeUri single_location;
         private List<SafeUri> stream_uris = new List<SafeUri>();
@@ -103,33 +103,33 @@ namespace Banshee.Streaming
         private bool loaded = false;
         private bool parsing_playlist = false;
         private bool trying_to_play;
-        
+
         private TrackInfo parent_track;
         public TrackInfo ParentTrack {
             get { return parent_track; }
             set { parent_track = value; }
         }
-        
+
         public event EventHandler ParsingPlaylistEvent;
-        
+
         protected RadioTrackInfo()
         {
             IsLive = true;
         }
-        
+
         public RadioTrackInfo(Track track) : this()
         {
             TrackTitle = track.Title;
             ArtistName = track.Creator;
-            
+
             this.track = track;
         }
-        
+
         public RadioTrackInfo(SafeUri uri) : this()
         {
             this.single_location = uri;
         }
-        
+
         public RadioTrackInfo (TrackInfo parentTrack) : this (parentTrack.Uri)
         {
             ArtistName = parentTrack.ArtistName;
@@ -205,10 +205,10 @@ namespace Banshee.Streaming
                 TrackTitle = track.Title;
                 ArtistName = track.Creator;
             }
-            
+
             AlbumTitle = null;
             Duration = TimeSpan.Zero;
-            
+
             lock(stream_uris) {
                 if(stream_uris.Count > 0) {
                     Uri = stream_uris[stream_index];
@@ -228,7 +228,7 @@ namespace Banshee.Streaming
 
             trying_to_play = false;
         }
-        
+
         public bool PlayNextStream()
         {
             if(stream_index < stream_uris.Count - 1) {
@@ -261,7 +261,7 @@ namespace Banshee.Streaming
                 } else {
                     LoadStreamUri(single_location.AbsoluteUri);
                 }
-                
+
                 loaded = true;
             }
 
@@ -283,7 +283,7 @@ namespace Banshee.Streaming
             }
             return false;
         }
-        
+
         private void LoadStreamUri(string uri)
         {
             try {
@@ -311,19 +311,19 @@ namespace Banshee.Streaming
                 SavePlaybackError (StreamPlaybackError.Unknown);
             }
         }
-        
+
         private void OnParsingPlaylistStarted()
         {
             parsing_playlist = true;
             OnParsingPlaylistEvent();
         }
-        
+
         private void OnParsingPlaylistFinished()
         {
             parsing_playlist = false;
             OnParsingPlaylistEvent();
         }
-        
+
         private void OnParsingPlaylistEvent()
         {
             EventHandler handler = ParsingPlaylistEvent;
@@ -335,7 +335,7 @@ namespace Banshee.Streaming
         public Track XspfTrack {
             get { return track; }
         }
-        
+
         public bool ParsingPlaylist {
             get { return parsing_playlist; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Web/BaseHttpServer.cs b/src/Core/Banshee.Services/Banshee.Web/BaseHttpServer.cs
index 110e028..ee90c6b 100644
--- a/src/Core/Banshee.Services/Banshee.Web/BaseHttpServer.cs
+++ b/src/Core/Banshee.Services/Banshee.Web/BaseHttpServer.cs
@@ -75,7 +75,7 @@ namespace Banshee.Web
                 if (running) {
                     throw new InvalidOperationException ("Cannot set EndPoint while running.");
                 }
-                end_point = value; 
+                end_point = value;
             }
         }
 
@@ -98,13 +98,13 @@ namespace Banshee.Web
         {
             Start (10);
         }
-        
-        public virtual void Start (int backlog) 
+
+        public virtual void Start (int backlog)
         {
             if (backlog < 0) {
                 throw new ArgumentOutOfRangeException ("backlog");
             }
-            
+
             if (running) {
                 return;
             }
@@ -117,10 +117,10 @@ namespace Banshee.Web
             thread.Start ();
         }
 
-        public virtual void Stop () 
+        public virtual void Stop ()
         {
             running = false;
-            
+
             if (server != null) {
                 server.Close ();
                 server = null;
@@ -130,7 +130,7 @@ namespace Banshee.Web
                 client.Close ();
             }
         }
-        
+
         private void ServerLoop ()
         {
             server = new Socket (this.EndPoint.AddressFamily, SocketType.Stream, ProtocolType.IP);
@@ -144,7 +144,7 @@ namespace Banshee.Web
                     if (!running) {
                         break;
                     }
-                    
+
                     Socket client = server.Accept ();
                     clients.Add (client);
                     ThreadPool.QueueUserWorkItem (HandleConnection, client);
@@ -153,8 +153,8 @@ namespace Banshee.Web
                 }
             }
         }
-        
-        private void HandleConnection (object o) 
+
+        private void HandleConnection (object o)
         {
             Socket client = (Socket) o;
 
@@ -185,25 +185,25 @@ namespace Banshee.Web
 
             return offset;
         }
-        
-        protected virtual bool HandleRequest (Socket client) 
+
+        protected virtual bool HandleRequest (Socket client)
         {
             if (client == null || !client.Connected) {
                 return false;
             }
-            
+
             bool keep_connection = true;
-            
+
             using (StreamReader reader = new StreamReader (new NetworkStream (client, false))) {
                 string request_line = reader.ReadLine ();
-                
+
                 if (request_line == null) {
                     return false;
                 }
 
                 List <string> request_headers = new List <string> ();
                 string line = null;
-                
+
                 do {
                     line = reader.ReadLine ();
                     if (line.ToLower () == "connection: close") {
@@ -213,7 +213,7 @@ namespace Banshee.Web
                 } while (line != String.Empty && line != null);
 
                 string [] split_request_line = request_line.Split ();
-                
+
                 if (split_request_line.Length < 3) {
                     WriteResponse (client, HttpStatusCode.BadRequest, "Bad Request");
                     return keep_connection;
@@ -233,13 +233,13 @@ namespace Banshee.Web
         }
 
         protected abstract void HandleValidRequest(Socket client, string [] split_request, string [] request_headers);
-            
-        protected void WriteResponse (Socket client, HttpStatusCode code, string body) 
+
+        protected void WriteResponse (Socket client, HttpStatusCode code, string body)
         {
             WriteResponse (client, code, Encoding.UTF8.GetBytes (body));
         }
-        
-        protected virtual void WriteResponse (Socket client, HttpStatusCode code, byte [] body) 
+
+        protected virtual void WriteResponse (Socket client, HttpStatusCode code, byte [] body)
         {
             if (client == null || !client.Connected) {
                 return;
@@ -247,19 +247,19 @@ namespace Banshee.Web
             else if (body == null) {
                 throw new ArgumentNullException ("body");
             }
-            
+
             StringBuilder headers = new StringBuilder ();
             headers.AppendFormat ("HTTP/1.1 {0} {1}\r\n", (int) code, code.ToString ());
             headers.AppendFormat ("Content-Length: {0}\r\n", body.Length);
             headers.Append ("Content-Type: text/html\r\n");
             headers.Append ("Connection: close\r\n");
             headers.Append ("\r\n");
-            
+
             using (BinaryWriter writer = new BinaryWriter (new NetworkStream (client, false))) {
                 writer.Write (Encoding.UTF8.GetBytes (headers.ToString ()));
                 writer.Write (body);
             }
-            
+
             client.Close ();
         }
 
@@ -267,7 +267,7 @@ namespace Banshee.Web
         {
             WriteResponseStream (client, response, length, filename, 0);
         }
-        
+
         protected virtual void WriteResponseStream (Socket client, Stream response, long length, string filename, long offset)
         {
             if (client == null || !client.Connected) {
@@ -296,26 +296,26 @@ namespace Banshee.Web
                 if (length > 0) {
                     headers.AppendFormat ("Content-Length: {0}\r\n", length);
                 }
-                
+
                 if (filename != null) {
                     headers.AppendFormat ("Content-Disposition: attachment; filename=\"{0}\"\r\n",
                         filename.Replace ("\"", "\\\""));
                 }
-                
+
                 headers.Append ("Connection: close\r\n");
                 headers.Append ("\r\n");
-                
+
                 writer.Write (Encoding.UTF8.GetBytes (headers.ToString ()));
-                    
+
                 using (BinaryReader reader = new BinaryReader (response)) {
                     while (true) {
                         byte [] buffer = reader.ReadBytes (ChunkLength);
                         if (buffer == null) {
                             break;
                         }
-                        
+
                         writer.Write(buffer);
-                        
+
                         if (buffer.Length < ChunkLength) {
                             break;
                         }
diff --git a/src/Core/Banshee.Services/Banshee.Web/Browser.cs b/src/Core/Banshee.Services/Banshee.Web/Browser.cs
index e9c5630..f067af0 100644
--- a/src/Core/Banshee.Services/Banshee.Web/Browser.cs
+++ b/src/Core/Banshee.Services/Banshee.Web/Browser.cs
@@ -40,13 +40,13 @@ namespace Banshee.Web
     public class Browser
     {
         public delegate bool OpenUrlHandler (string uri);
-        
+
         private static OpenUrlHandler open_handler = null;
         public static OpenUrlHandler OpenHandler {
             get { return open_handler; }
             set { open_handler = value; }
         }
-    
+
         public static bool Open (string url)
         {
             try {
@@ -59,13 +59,13 @@ namespace Banshee.Web
                 }
             } catch(Exception e) {
                 Log.Warning (Catalog.GetString ("Could not launch URL"),
-                    String.Format (Catalog.GetString ("{0} could not be opened: {1}\n\n " + 
+                    String.Format (Catalog.GetString ("{0} could not be opened: {1}\n\n " +
                         "Check your 'Preferred Applications' settings."), url, e.Message), true);
                 return false;
             }
         }
 
-        public static readonly string UserAgent = String.Format ("Banshee {0} (http://banshee-project.org/)", 
+        public static readonly string UserAgent = String.Format ("Banshee {0} (http://banshee-project.org/)",
             Application.Version);
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Web/HttpRequest.cs b/src/Core/Banshee.Services/Banshee.Web/HttpRequest.cs
index 54f8041..d96ba49 100644
--- a/src/Core/Banshee.Services/Banshee.Web/HttpRequest.cs
+++ b/src/Core/Banshee.Services/Banshee.Web/HttpRequest.cs
@@ -1,4 +1,4 @@
-// 
+//
 // HttpRequest.cs
 //
 // Author:
@@ -38,18 +38,18 @@ using Banshee.ServiceStack;
 using Banshee.Networking;
 
 namespace Banshee.Web
-{   
+{
     public class HttpRequest : IDisposable
     {
         private HttpWebRequest request;
         private HttpWebResponse response;
         private List<string> ignore_mimetypes;
-        
+
         public HttpRequest ()            { }
         public HttpRequest (string uri)  { CreateRequest (uri); }
         public HttpRequest (SafeUri uri) { CreateRequest (uri); }
         public HttpRequest (Uri uri)     { CreateRequest (uri); }
-        
+
         public void Dispose ()
         {
             lock (this) {
@@ -57,26 +57,26 @@ namespace Banshee.Web
                     response.Close ();
                     response = null;
                 }
-                
+
                 request = null;
             }
         }
-        
+
         public void CreateRequest (string uri)
         {
             CreateRequest (new Uri (uri));
         }
-        
+
         public void CreateRequest (SafeUri uri)
         {
             CreateRequest (new Uri (uri.AbsoluteUri));
         }
-        
+
         public virtual void CreateRequest (Uri uri)
         {
             lock (this) {
                 Dispose ();
-                
+
                 request = (HttpWebRequest)WebRequest.Create (uri.AbsoluteUri);
                 request.UserAgent = Browser.UserAgent;
                 request.Timeout = (int)Timeout.TotalMilliseconds;
@@ -84,25 +84,25 @@ namespace Banshee.Web
                 request.AllowAutoRedirect = true;
             }
         }
-        
+
         public virtual void GetResponse ()
         {
             lock (this) {
                 if (response != null) {
                     return;
                 }
-                
+
                 if (request == null) {
                     throw new InvalidOperationException ("CreateRequest must be called first");
                 } else if (!InternetConnected) {
                     throw new NetworkUnavailableException ();
                 }
-                
+
                 response = (HttpWebResponse)request.GetResponse ();
                 if (ignore_mimetypes == null) {
                     return;
                 }
-                
+
                 string [] content_types = response.Headers.GetValues ("Content-Type");
                 if (content_types != null && content_types.Length > 0) {
                     foreach (string content_type in content_types) {
@@ -114,7 +114,7 @@ namespace Banshee.Web
                 }
             }
         }
-        
+
         public void DumpResponseStream ()
         {
             using (Stream stream = GetResponseStream ()) {
@@ -123,34 +123,34 @@ namespace Banshee.Web
                 reader.Dispose ();
             }
         }
-        
+
         public void SaveResponseStream (SafeUri path)
         {
             SaveResponseStream (path, true);
         }
-        
+
         public void SaveResponseStream (SafeUri path, bool closeResponse)
         {
             SaveResponseStream (Banshee.IO.File.OpenWrite (path, true), closeResponse);
         }
-        
+
         public virtual void SaveResponseStream (Stream toStream, bool closeResponse)
         {
             if (response == null) {
                 throw new InvalidOperationException ("No response");
             }
-        
+
             Stream from_stream = response.GetResponseStream ();
             if (from_stream == null) {
                 if (response != null && closeResponse) {
                     response.Close ();
                 }
-                
+
                 throw new InvalidDataException ("Response has no content stream");
             }
-            
+
             Banshee.IO.StreamAssist.Save (from_stream, toStream);
-            
+
             from_stream.Close ();
             if (closeResponse) {
                 response.Close ();
@@ -160,7 +160,7 @@ namespace Banshee.Web
         public HttpWebRequest Request {
             get { return request; }
         }
-        
+
         public HttpWebResponse Response {
             get { return response; }
         }
@@ -187,25 +187,25 @@ namespace Banshee.Web
                 return response_body;
             }
         }
-        
+
         private static TimeSpan default_timeout = TimeSpan.FromSeconds (20);
         protected virtual TimeSpan Timeout {
             get { return default_timeout; }
         }
-        
+
 #region Mimetypes
-        
+
         public void AddIgnoreMimeType (string mimetype)
         {
             lock (this) {
                 if (ignore_mimetypes == null) {
                     ignore_mimetypes = new List<string> ();
                 }
-                
+
                 ignore_mimetypes.Add (mimetype);
             }
         }
-        
+
         public void RemoveIgnoreMimeType (string mimetype)
         {
              lock (this) {
@@ -214,7 +214,7 @@ namespace Banshee.Web
                 }
             }
         }
-        
+
         public void ClearIgnoreMimeTypes ()
         {
             lock (this) {
@@ -223,14 +223,14 @@ namespace Banshee.Web
                 }
             }
         }
-        
+
         public string [] IgnoreMimeTypes {
             get { lock (this) { return ignore_mimetypes == null ? new string[0] : ignore_mimetypes.ToArray (); } }
             set { lock (this) { ignore_mimetypes = new List<string> (value); } }
         }
-        
+
 #endregion
-        
+
         protected bool InternetConnected {
             get { return ServiceManager.Get<Network> ().Connected; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinDetailsDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinDetailsDialog.cs
index a839d91..fc8c1f2 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinDetailsDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinDetailsDialog.cs
@@ -44,52 +44,52 @@ namespace Banshee.Addins.Gui
         public AddinDetailsDialog (Addin addin, Window parent) : base (String.Empty, parent)
         {
             SetDefaultSize (400, -1);
-            
+
             AddinHeader info = SetupService.GetAddinHeader (addin);
-            
+
             HBox box = new HBox ();
             box.BorderWidth = 10;
             box.Spacing = 10;
             VBox.PackStart (box, false, false, 0);
-            
+
             Image image = new Image ();
             image.IconName = "package-x-generic";
             image.IconSize = (int)IconSize.Dialog;
             image.Yalign = 0.0f;
-            
+
             box.PackStart (image, false, false, 0);
-            
+
             StringBuilder builder = new StringBuilder ();
-            
+
             builder.AppendFormat ("<b><big>{0}</big></b>\n\n", GLib.Markup.EscapeText (addin.Name));
             builder.AppendFormat (GLib.Markup.EscapeText (addin.Description.Description)).Append ("\n\n");
-            
+
             builder.Append ("<small>");
-            
-            builder.AppendFormat ("<b>{0}</b> {1}\n\n", Catalog.GetString ("Version:"), 
+
+            builder.AppendFormat ("<b>{0}</b> {1}\n\n", Catalog.GetString ("Version:"),
                 GLib.Markup.EscapeText (addin.Description.Version));
-            
-            builder.AppendFormat ("<b>{0}</b> {1}\n\n", Catalog.GetString ("Authors:"), 
+
+            builder.AppendFormat ("<b>{0}</b> {1}\n\n", Catalog.GetString ("Authors:"),
                 GLib.Markup.EscapeText (addin.Description.Author));
-            
-            builder.AppendFormat ("<b>{0}</b> {1}\n\n", Catalog.GetString ("Copyright/License:"), 
+
+            builder.AppendFormat ("<b>{0}</b> {1}\n\n", Catalog.GetString ("Copyright/License:"),
                 GLib.Markup.EscapeText (addin.Description.Copyright));
-            
+
             if (info.Dependencies.Count > 0) {
                 builder.AppendFormat ("<b>{0}</b>\n", Catalog.GetString ("Extension Dependencies:"));
                 foreach (AddinDependency dep in info.Dependencies) {
                     builder.Append (GLib.Markup.EscapeText (dep.Name)).Append ('\n');
                 }
             }
-            
+
             builder.Append ("</small>");
-            
+
             WrapLabel label = new WrapLabel ();
             label.Markup = builder.ToString ();
             box.PackStart (label, true, true, 0);
-            
+
             VBox.ShowAll ();
-        
+
             AddDefaultCloseButton ();
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinTile.cs b/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinTile.cs
index 07db555..2f50f7b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinTile.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinTile.cs
@@ -34,104 +34,104 @@ using Mono.Addins;
 using Hyena.Widgets;
 
 namespace Banshee.Addins.Gui
-{    
+{
     public class AddinTile : Table
     {
         private Addin addin;
         private Button activate_button;
         private Button details_button;
         private Box button_box;
-        
+
         private Label title;
         private WrapLabel description;
         private WrapLabel authors;
-        
+
         private bool last;
         public bool Last {
             get { return last; }
             set { last = value; }
         }
-        
+
         public event EventHandler ActiveChanged;
-        
+
         public AddinTile (Addin addin) : base (3, 3, false)
         {
             this.addin = addin;
             BuildTile ();
         }
-        
+
         private void BuildTile ()
         {
             BorderWidth = 5;
             RowSpacing = 1;
             ColumnSpacing = 5;
-            
+
             Image image = new Image ();
             image.IconName = "package-x-generic";
             image.IconSize = (int)IconSize.Dnd;
             image.Yalign = 0.0f;
             image.Show ();
             Attach (image, 0, 1, 0, 3, AttachOptions.Shrink, AttachOptions.Fill | AttachOptions.Expand, 0, 0);
-            
+
             title = new Label ();
             SetLabelStyle (title);
             title.Show ();
             title.Xalign = 0.0f;
             title.Markup = String.Format ("<b>{0}</b>", GLib.Markup.EscapeText (addin.Name));
-            
-            Attach (title, 1, 3, 0, 1, 
-                AttachOptions.Expand | AttachOptions.Fill, 
+
+            Attach (title, 1, 3, 0, 1,
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-            
+
             description = new WrapLabel ();
             SetLabelStyle (description);
             description.Show ();
             description.Text = addin.Description.Description;
             description.Wrap = false;
-            
+
             Attach (description, 1, 3, 1, 2,
-                AttachOptions.Expand | AttachOptions.Fill, 
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-                
+
             authors = new WrapLabel ();
             SetLabelStyle (authors);
             authors.Markup = String.Format (
-                "<small><b>{0}</b> <i>{1}</i></small>", 
+                "<small><b>{0}</b> <i>{1}</i></small>",
                 Catalog.GetString ("Authors:"),
                 GLib.Markup.EscapeText (addin.Description.Author)
             );
-            
+
             Attach (authors, 1, 2, 2, 3,
-                AttachOptions.Expand | AttachOptions.Fill, 
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill,  0, 4);
-            
+
             button_box = new VBox ();
             HBox box = new HBox ();
             box.Spacing = 3;
-            
+
             button_box.PackEnd (box, false, false, 0);
-            
+
             Pango.FontDescription font = PangoContext.FontDescription.Copy ();
             font.Size = (int)(font.Size * Pango.Scale.Small);
-            
+
             Label label = new Label ("Details");
             label.ModifyFont (font);
             details_button = new Button ();
             details_button.Add (label);
             details_button.Clicked += OnDetailsClicked;
             box.PackStart (details_button, false, false, 0);
-            
+
             label = new Label ();
             label.ModifyFont (font);
             activate_button = new Button ();
             activate_button.Add (label);
             activate_button.Clicked += OnActivateClicked;
             box.PackStart (activate_button, false, false, 0);
-            
+
             Attach (button_box, 2, 3, 2, 3, AttachOptions.Shrink, AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-                
+
             Show ();
-            
+
             UpdateState ();
         }
 
@@ -164,51 +164,51 @@ namespace Banshee.Addins.Gui
             GdkWindow = Parent.GdkWindow;
             base.OnRealized ();
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (State == StateType.Selected) {
-                Gtk.Style.PaintFlatBox (Style, evnt.Window, State, ShadowType.None, evnt.Area, 
-                    this, "cell_odd", Allocation.X, Allocation.Y, 
+                Gtk.Style.PaintFlatBox (Style, evnt.Window, State, ShadowType.None, evnt.Area,
+                    this, "cell_odd", Allocation.X, Allocation.Y,
                     Allocation.Width, Allocation.Height - (last ? 0 : 1));
             }
-            
-            if (!last) {            
-                Gtk.Style.PaintHline (Style, evnt.Window, StateType.Normal, evnt.Area, this, null, 
+
+            if (!last) {
+                Gtk.Style.PaintHline (Style, evnt.Window, StateType.Normal, evnt.Area, this, null,
                     Allocation.X, Allocation.Right, Allocation.Bottom - 1);
             }
-            
+
             return base.OnExposeEvent (evnt);
         }
-        
+
         private void OnActivateClicked (object o, EventArgs args)
         {
             addin.Enabled = !addin.Enabled;
             ActiveChanged (this, EventArgs.Empty);
         }
-        
+
         private void OnDetailsClicked (object o, EventArgs args)
         {
             AddinDetailsDialog dialog = new AddinDetailsDialog (addin, Toplevel as Window);
             dialog.Run ();
             dialog.Destroy ();
         }
-        
+
         public void UpdateState ()
         {
             bool enabled = addin.Enabled;
             bool sensitive = enabled || (!enabled && State == StateType.Selected);
-            
+
             title.Sensitive = sensitive;
             description.Sensitive = sensitive;
             description.Wrap = State == StateType.Selected;
             authors.Visible = State == StateType.Selected;
-            
-            ((Label)activate_button.Child).Text = enabled 
-                ? Catalog.GetString ("Disable") 
+
+            ((Label)activate_button.Child).Text = enabled
+                ? Catalog.GetString ("Disable")
                 : Catalog.GetString ("Enable");
         }
-        
+
         public void Select (bool select)
         {
             State = select ? StateType.Selected : StateType.Normal;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinView.cs b/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinView.cs
index d2ba6b0..7fb361a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinView.cs
@@ -38,49 +38,49 @@ namespace Banshee.Addins.Gui
     {
         private List<AddinTile> tiles = new List<AddinTile> ();
         private VBox box = new VBox ();
-        
+
         private int selected_index = -1;
-    
+
         public AddinView ()
         {
             CanFocus = true;
             VisibleWindow = false;
-            
+
             box.Show ();
             Add (box);
-            
+
             LoadAddins ();
         }
-        
+
         private void LoadAddins ()
         {
             foreach (Addin addin in AddinManager.Registry.GetAddins ()) {
-                if (addin.Name != addin.Id && addin.Description != null && 
+                if (addin.Name != addin.Id && addin.Description != null &&
                     addin.Description.Category != null && !addin.Description.Category.StartsWith ("required:") &&
                     (!addin.Description.Category.Contains ("Debug") || Banshee.Base.ApplicationContext.Debugging)) {
                     AppendAddin (addin);
                 }
             }
-            
+
             if (tiles.Count > 0) {
                 tiles[tiles.Count - 1].Last = true;
             }
         }
-        
+
         private bool changing_styles = false;
-        
+
         protected override void OnStyleSet (Style previous_style)
         {
             if (changing_styles) {
                 return;
             }
-            
+
             changing_styles = true;
             base.OnStyleSet (previous_style);
             Parent.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
             changing_styles = false;
         }
-        
+
         private void AppendAddin (Addin addin)
         {
             AddinTile tile = new AddinTile (addin);
@@ -88,35 +88,35 @@ namespace Banshee.Addins.Gui
             tile.SizeAllocated += OnAddinSizeAllocated;
             tile.Show ();
             tiles.Add (tile);
-            
+
             box.PackStart (tile, false, false, 0);
         }
-        
+
         private void OnAddinActiveChanged (object o, EventArgs args)
         {
             foreach (AddinTile tile in tiles) {
                 tile.UpdateState ();
             }
         }
-        
+
         private void OnAddinSizeAllocated (object o, SizeAllocatedArgs args)
         {
             ScrolledWindow scroll;
-            
+
             if (Parent == null || (scroll = Parent.Parent as ScrolledWindow) == null) {
                 return;
             }
-            
+
             AddinTile tile = (AddinTile)o;
-            
+
             if (tiles.IndexOf (tile) != selected_index) {
                 return;
             }
-            
+
             Gdk.Rectangle ta = ((AddinTile)o).Allocation;
-            Gdk.Rectangle va = new Gdk.Rectangle (0, (int)scroll.Vadjustment.Value, 
+            Gdk.Rectangle va = new Gdk.Rectangle (0, (int)scroll.Vadjustment.Value,
                 Allocation.Width, Parent.Allocation.Height);
-            
+
             if (!va.Contains (ta)) {
                 double delta = 0.0;
                 if (ta.Bottom > va.Bottom) {
@@ -128,29 +128,29 @@ namespace Banshee.Addins.Gui
                 QueueDraw();
             }
         }
-        
+
         protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
         {
             HasFocus = true;
-            
+
             ClearSelection ();
-            
+
             for (int i = 0; i < tiles.Count; i++) {
                 if (tiles[i].Allocation.Contains ((int)evnt.X, (int)evnt.Y)) {
                     Select (i);
                     break;
                 }
             }
-            
+
             QueueDraw ();
-            
+
             return base.OnButtonPressEvent (evnt);
         }
-        
+
         protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
         {
             int index = selected_index;
-        
+
             switch (evnt.Key) {
                  case Gdk.Key.Up:
                  case Gdk.Key.uparrow:
@@ -167,16 +167,16 @@ namespace Banshee.Addins.Gui
                      }
                      break;
             }
-            
+
             if (index != selected_index) {
                 ClearSelection ();
                 Select (index);
                 return true;
             }
-        
+
             return base.OnKeyPressEvent (evnt);
         }
-        
+
         private void Select (int index)
         {
             if (index >= 0 && index < tiles.Count) {
@@ -185,20 +185,20 @@ namespace Banshee.Addins.Gui
             } else {
                 ClearSelection ();
             }
-            
+
             if (Parent != null && Parent.IsRealized) {
                 Parent.GdkWindow.InvalidateRect (Parent.Allocation, true);
             }
-            
+
             QueueResize ();
         }
-        
+
         private void ClearSelection ()
         {
             if (selected_index >= 0 && selected_index < tiles.Count) {
                 tiles[selected_index].Select (false);
             }
-            
+
             selected_index = -1;
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
index f9d67a8..be530e2 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
@@ -45,12 +45,12 @@ namespace Banshee.Collection.Gui
             ColumnCellAlbum renderer = new ColumnCellAlbum ();
             column_controller.Add (new Column ("Album", renderer, 1.0));
             ColumnController = column_controller;
-            
+
             RowHeightProvider = renderer.ComputeRowHeight;
 
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.TrackInfoUpdated);
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             // TODO: a) Figure out if the track that changed is actually in view
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs
index 692be7a..ce33003 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs
@@ -47,13 +47,13 @@ namespace Banshee.Collection.Gui
     public class ArtworkManager : IService
     {
         private Dictionary<int, SurfaceCache> scale_caches  = new Dictionary<int, SurfaceCache> ();
-            
+
         private class SurfaceCache : LruCache<string, Cairo.ImageSurface>
         {
             public SurfaceCache (int max_items) : base (max_items)
             {
             }
-        
+
             protected override void ExpireItem (Cairo.ImageSurface item)
             {
                 if (item != null) {
@@ -61,7 +61,7 @@ namespace Banshee.Collection.Gui
                 }
             }
         }
-    
+
         public ArtworkManager ()
         {
             try {
@@ -70,93 +70,93 @@ namespace Banshee.Collection.Gui
                 Log.Error ("Could not migrate old album artwork to new location.", e.Message, true);
             }
         }
-        
+
         private void MigrateLegacyAlbumArt ()
         {
             if (Directory.Exists (CoverArtSpec.RootPath)) {
                 return;
             }
-            
+
             // FIXME: Replace with Directory.Move for release
-            
+
             Directory.CreateDirectory (CoverArtSpec.RootPath);
-            
+
             string legacy_artwork_path = Path.Combine (Paths.LegacyApplicationData, "covers");
             int artwork_count = 0;
-            
+
             if (Directory.Exists (legacy_artwork_path)) {
                 foreach (string path in Directory.GetFiles (legacy_artwork_path)) {
                     string dest_path = Path.Combine (CoverArtSpec.RootPath, Path.GetFileName (path));
-                        
+
                     File.Copy (path, dest_path);
                     artwork_count++;
                 }
             }
-            
+
             Log.Debug (String.Format ("Migrated {0} album art images.", artwork_count));
         }
-        
+
         public Cairo.ImageSurface LookupSurface (string id)
         {
             return LookupScaleSurface (id, 0);
         }
-        
+
         public Cairo.ImageSurface LookupScaleSurface (string id, int size)
         {
             return LookupScaleSurface (id, size, false);
         }
-        
+
         public Cairo.ImageSurface LookupScaleSurface (string id, int size, bool useCache)
         {
             SurfaceCache cache = null;
             Cairo.ImageSurface surface = null;
-            
+
             if (id == null) {
                 return null;
             }
-            
+
             if (useCache && scale_caches.TryGetValue (size, out cache) && cache.TryGetValue (id, out surface)) {
                 return surface;
             }
-        
+
             Pixbuf pixbuf = LookupScalePixbuf (id, size);
             if (pixbuf == null || pixbuf.Handle == IntPtr.Zero) {
                 return null;
             }
-            
+
             try {
                 surface = PixbufImageSurface.Create (pixbuf);
                 if (surface == null) {
                     return null;
                 }
-                
+
                 if (!useCache) {
                     return surface;
                 }
-                
+
                 if (cache == null) {
                     int bytes = 4 * size * size;
                     int max = (1 << 20) / bytes;
-                    
+
                     Log.DebugFormat ("Creating new surface cache for {0} KB (max) images, capped at 1 MB ({1} items)",
                         bytes, max);
-                        
+
                     cache = new SurfaceCache (max);
                     scale_caches.Add (size, cache);
                 }
-                
+
                 cache.Add (id, surface);
                 return surface;
             } finally {
                 DisposePixbuf (pixbuf);
             }
         }
-        
+
         public Pixbuf LookupPixbuf (string id)
         {
             return LookupScalePixbuf (id, 0);
         }
-        
+
         public Pixbuf LookupScalePixbuf (string id, int size)
         {
             if (id == null || (size != 0 && size < 10)) {
@@ -187,7 +187,7 @@ namespace Banshee.Collection.Gui
                             Hyena.Log.DebugFormat ("Ignoring cover art {0} because less than 50x50", unconverted_path);
                             return null;
                         }
-                        
+
                         pixbuf.Save (orig_path, "jpeg");
                         orig_exists = true;
                     } catch {
@@ -196,7 +196,7 @@ namespace Banshee.Collection.Gui
                     }
                 }
             }
-            
+
             if (orig_exists && size >= 10) {
                 try {
                     Pixbuf pixbuf = new Pixbuf (orig_path);
@@ -207,18 +207,18 @@ namespace Banshee.Collection.Gui
                     return scaled_pixbuf;
                 } catch {}
             }
-            
+
             return null;
         }
-        
+
         private static int dispose_count = 0;
         public static void DisposePixbuf (Pixbuf pixbuf)
         {
             if (pixbuf != null && pixbuf.Handle != IntPtr.Zero) {
                 pixbuf.Dispose ();
                 pixbuf = null;
-                
-                // There is an issue with disposing Pixbufs where we need to explicitly 
+
+                // There is an issue with disposing Pixbufs where we need to explicitly
                 // call the GC otherwise it doesn't get done in a timely way.  But if we
                 // do it every time, it slows things down a lot; so only do it every 100th.
                 if (++dispose_count % 100 == 0) {
@@ -227,7 +227,7 @@ namespace Banshee.Collection.Gui
                 }
             }
         }
-        
+
         string IService.ServiceName {
             get { return "ArtworkManager"; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs
index cf4ba18..dcd0a40 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs
@@ -37,68 +37,68 @@ namespace Banshee.Collection.Gui
     {
         private static Color cover_border_light_color = new Color (1.0, 1.0, 1.0, 0.5);
         private static Color cover_border_dark_color = new Color (0.0, 0.0, 0.0, 0.65);
-        
+
         public static void RenderThumbnail (Cairo.Context cr, ImageSurface image, bool dispose,
             double x, double y, double width, double height, bool drawBorder, double radius)
         {
-            RenderThumbnail (cr, image, dispose, x, y, width, height, 
+            RenderThumbnail (cr, image, dispose, x, y, width, height,
                 drawBorder, radius, false, cover_border_light_color);
         }
-        
+
         public static void RenderThumbnail (Cairo.Context cr, ImageSurface image, bool dispose,
-            double x, double y, double width, double height, bool drawBorder, double radius, 
+            double x, double y, double width, double height, bool drawBorder, double radius,
             bool fill, Color fillColor)
         {
-            RenderThumbnail (cr, image, dispose, x, y, width, height, drawBorder, radius, 
+            RenderThumbnail (cr, image, dispose, x, y, width, height, drawBorder, radius,
                 fill, fillColor, CairoCorners.All);
         }
-        
+
         public static void RenderThumbnail (Cairo.Context cr, ImageSurface image, bool dispose,
-            double x, double y, double width, double height, bool drawBorder, double radius, 
+            double x, double y, double width, double height, bool drawBorder, double radius,
             bool fill, Color fillColor, CairoCorners corners)
         {
             if (image == null || image.Handle == IntPtr.Zero) {
                 return;
             }
-            
+
             double p_x = x;
             double p_y = y;
             p_x += image.Width < width ? (width - image.Width) / 2 : 0;
             p_y += image.Height < height ? (height - image.Height) / 2 : 0;
-            
+
             cr.Antialias = Cairo.Antialias.Default;
-            
+
             if (fill) {
                 cr.Rectangle (x, y, width, height);
                 cr.Color = fillColor;
                 cr.Fill();
             }
-            
+
             CairoExtensions.RoundedRectangle (cr, p_x, p_y, image.Width, image.Height, radius, corners);
             cr.SetSource (image, p_x, p_y);
             cr.Fill ();
-            
+
             if (!drawBorder) {
                 if (dispose) {
                     ((IDisposable)image).Dispose ();
                 }
-                
+
                 return;
             }
-            
+
             cr.LineWidth = 1.0;
             if (radius < 1) {
                 cr.Antialias = Antialias.None;
-                
+
                 CairoExtensions.RoundedRectangle (cr, x + 1.5, y + 1.5, width - 3, height - 3, radius, corners);
                 cr.Color = cover_border_light_color;
                 cr.Stroke ();
             }
-            
+
             CairoExtensions.RoundedRectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1, radius, corners);
             cr.Color = cover_border_dark_color;
             cr.Stroke ();
-            
+
             if (dispose) {
                 ((IDisposable)image).Dispose ();
             }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BaseTrackListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BaseTrackListView.cs
index fb52f7e..5f6f6c6 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BaseTrackListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/BaseTrackListView.cs
@@ -51,13 +51,13 @@ namespace Banshee.Collection.Gui
             RulesHint = true;
             RowOpaquePropertyName = "Enabled";
             RowBoldPropertyName = "IsPlaying";
-            
+
             ServiceManager.PlayerEngine.ConnectEvent (
                 OnPlayerEvent, PlayerEvent.StartOfStream | PlayerEvent.StateChange);
-            
+
             ForceDragSourceSet = true;
             IsEverReorderable = true;
-            
+
             RowActivated += delegate (object o, RowActivatedArgs<TrackInfo> args) {
                 ITrackModelSource source = ServiceManager.SourceManager.ActiveSource as ITrackModelSource;
                 if (source != null && source.TrackModel == Model) {
@@ -75,7 +75,7 @@ namespace Banshee.Collection.Gui
         protected override TargetEntry [] DragDropSourceEntries {
             get { return source_targets; }
         }
-        
+
         protected override bool OnKeyPressEvent (Gdk.EventKey press)
         {
             // Have o act the same as enter - activate the selection
@@ -155,7 +155,7 @@ namespace Banshee.Collection.Gui
             base.OnDragSourceSet ();
             Drag.SourceSetIconName (this, "audio-x-generic");
         }
-        
+
         protected override bool OnDragDrop (Gdk.DragContext context, int x, int y, uint time_)
         {
             y = TranslateToListY (y);
@@ -167,17 +167,17 @@ namespace Banshee.Collection.Gui
                     if (row != GetRowAtY (y + RowHeight / 2)) {
                         row += 1;
                     }
-                    
+
                     if (playlist.TrackModel.Selection.Contains (row)) {
                         // can't drop within the selection
                         return false;
                     }
-                    
+
                     playlist.ReorderSelectedTracks (row);
                     return true;
                 }
             }
-            
+
             return false;
         }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs
index 97c61e5..8371884 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs
@@ -44,10 +44,10 @@ namespace Banshee.Collection.Gui
     {
         private static int image_spacing = 4;
         private static int image_size = 48;
-        
-        private static ImageSurface default_cover_image 
+
+        private static ImageSurface default_cover_image
             = PixbufImageSurface.Create (IconThemeUtils.LoadIcon (image_size, "media-optical", "browser-album-cover"));
-        
+
         private ArtworkManager artwork_manager;
 
         public ColumnCellAlbum () : base (null, true)
@@ -77,45 +77,45 @@ namespace Banshee.Collection.Gui
             if (BoundObject == null) {
                 return;
             }
-            
+
             if (!(BoundObject is AlbumInfo)) {
                 throw new InvalidCastException ("ColumnCellAlbum can only bind to AlbumInfo objects");
             }
-            
+
             AlbumInfo album = (AlbumInfo)BoundObject;
-            
-            bool is_default = false;          
-            ImageSurface image = artwork_manager == null ? null 
+
+            bool is_default = false;
+            ImageSurface image = artwork_manager == null ? null
                 : artwork_manager.LookupScaleSurface (album.ArtworkId, image_size, true);
-            
+
             if (image == null) {
                 image = default_cover_image;
                 is_default = true;
             }
-            
+
             // int image_render_size = is_default ? image.Height : (int)cellHeight - 8;
             int image_render_size = image_size;
             int x = image_spacing;
             int y = ((int)cellHeight - image_render_size) / 2;
-            
-            ArtworkRenderer.RenderThumbnail (context.Context, image, false, x, y, 
+
+            ArtworkRenderer.RenderThumbnail (context.Context, image, false, x, y,
                 image_render_size, image_render_size, !is_default, context.Theme.Context.Radius);
-                
+
             int fl_width = 0, fl_height = 0, sl_width = 0, sl_height = 0;
             Cairo.Color text_color = context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state);
             text_color.A = 0.75;
-            
+
             Pango.Layout layout = context.Layout;
             layout.Width = (int)((cellWidth - cellHeight - x - 10) * Pango.Scale.PangoScale);
             layout.Ellipsize = Pango.EllipsizeMode.End;
             layout.FontDescription.Weight = Pango.Weight.Bold;
-            
+
             // Compute the layout sizes for both lines for centering on the cell
             int old_size = layout.FontDescription.Size;
-            
+
             layout.SetText (album.DisplayTitle);
             layout.GetPixelSize (out fl_width, out fl_height);
-            
+
             if (!String.IsNullOrEmpty (album.ArtistName)) {
                 layout.FontDescription.Weight = Pango.Weight.Normal;
                 layout.FontDescription.Size = (int)(old_size * Pango.Scale.Small);
@@ -123,54 +123,54 @@ namespace Banshee.Collection.Gui
                 layout.SetText (album.ArtistName);
                 layout.GetPixelSize (out sl_width, out sl_height);
             }
-            
+
             // Calculate the layout positioning
             x = ((int)cellHeight - x) + 10;
             y = (int)((cellHeight - (fl_height + sl_height)) / 2);
-            
+
             // Render the second line first since we have that state already
             if (!String.IsNullOrEmpty (album.ArtistName)) {
                 context.Context.MoveTo (x, y + fl_height);
                 context.Context.Color = text_color;
                 PangoCairoHelper.ShowLayout (context.Context, layout);
             }
-            
+
             // Render the first line, resetting the state
             layout.SetText (album.DisplayTitle);
             layout.FontDescription.Weight = Pango.Weight.Bold;
             layout.FontDescription.Size = old_size;
             layout.FontDescription.Style = Pango.Style.Normal;
-            
+
             layout.SetText (album.DisplayTitle);
-            
+
             context.Context.MoveTo (x, y);
             text_color.A = 1;
             context.Context.Color = text_color;
             PangoCairoHelper.ShowLayout (context.Context, layout);
         }
-        
+
         public int ComputeRowHeight (Widget widget)
         {
             int height;
             int text_w, text_h;
-            
+
             Pango.Layout layout = new Pango.Layout (widget.PangoContext);
             layout.FontDescription = widget.PangoContext.FontDescription.Copy ();
-            
+
             layout.FontDescription.Weight = Pango.Weight.Bold;
             layout.SetText ("W");
             layout.GetPixelSize (out text_w, out text_h);
             height = text_h;
-            
+
             layout.FontDescription.Weight = Pango.Weight.Normal;
             layout.FontDescription.Size = (int)(layout.FontDescription.Size * Pango.Scale.Small);
             layout.FontDescription.Style = Pango.Style.Italic;
             layout.SetText ("W");
             layout.GetPixelSize (out text_w, out text_h);
             height += text_h;
-            
+
             layout.Dispose ();
-            
+
             return (height < image_size ? image_size : height) + 6;
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellCreativeCommons.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellCreativeCommons.cs
index 19bf494..77eebb8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellCreativeCommons.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellCreativeCommons.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellCreativeCommons.cs
 //
 // Author:
@@ -66,14 +66,14 @@ namespace Banshee.Collection.Gui
 
                 Cairo.Rectangle pixbuf_area = new Cairo.Rectangle (draw_x,
                     (cellHeight - render_pixbuf.Height) / 2, render_pixbuf.Width, render_pixbuf.Height);
-                
+
                 if (!context.Opaque) {
                     context.Context.Save ();
                 }
-                
+
                 Gdk.CairoHelper.SetSourcePixbuf (context.Context, render_pixbuf, pixbuf_area.X, pixbuf_area.Y);
                 context.Context.Rectangle (pixbuf_area);
-                
+
                 if (!context.Opaque) {
                     context.Context.Clip ();
                     context.Context.PaintWithAlpha (0.5);
@@ -99,7 +99,7 @@ namespace Banshee.Collection.Gui
             if (pixbufs == null) {
                 pixbufs = new Gdk.Pixbuf[attributes.Length];
             }
-            
+
             for (int i = 0; i < attributes.Length - 1; i++) {
                 pixbufs[i] = IconThemeUtils.LoadIcon (ICON_SIZE, String.Format ("creative-commons-{0}", attributes[i]));
             }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDateTime.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDateTime.cs
index 953574c..bd0795d 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDateTime.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDateTime.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellDateTime.cs
 //
 // Author:
@@ -32,7 +32,7 @@ using Hyena.Data.Gui;
 
 namespace Banshee.Collection.Gui
 {
-    public enum DateTimeFormat 
+    public enum DateTimeFormat
     {
         Long,
         ShortDate,
@@ -40,19 +40,19 @@ namespace Banshee.Collection.Gui
         ShortTime,
         LongTime
     }
-        
+
     public class ColumnCellDateTime : ColumnCellText
     {
         public ColumnCellDateTime (string property, bool expand) : base (property, expand)
         {
         }
-        
+
         private DateTimeFormat format = DateTimeFormat.Long;
         public DateTimeFormat Format {
             get { return format; }
             set { format = value; }
         }
-        
+
         protected override string GetText (object obj)
         {
             if (obj == null) {
@@ -60,7 +60,7 @@ namespace Banshee.Collection.Gui
             }
 
             DateTime dt = (DateTime) obj;
-            
+
             if (dt == DateTime.MinValue) {
                 return String.Empty;
             }
@@ -72,7 +72,7 @@ namespace Banshee.Collection.Gui
             case DateTimeFormat.ShortTime:    return dt.ToShortTimeString ();
             case DateTimeFormat.LongTime:     return dt.ToLongTimeString ();
             }
-            
+
             return String.Empty;
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDiscAndCount.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDiscAndCount.cs
index f639e90..9de5f6f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDiscAndCount.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDiscAndCount.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellDiscAndCount.cs
 //
 // Author:
@@ -45,7 +45,7 @@ namespace Banshee.Collection.Gui
             MaxString = String.Format (format, 55, 55);
             RestrictSize = true;
         }
-        
+
         protected override string GetText (object obj)
         {
             Banshee.Collection.TrackInfo track = BoundObjectParent as Banshee.Collection.TrackInfo;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs
index a7905cb..420b030 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellDuration.cs
 //
 // Author:
@@ -39,22 +39,22 @@ namespace Banshee.Collection.Gui
             Alignment = Pango.Alignment.Right;
             SetMinMaxStrings (TimeSpan.FromHours (5.73), TimeSpan.FromDays (7.34));
         }
-        
+
         protected override string GetText (object obj)
         {
             if (!(obj is TimeSpan)) {
                 return base.GetText (obj);
             }
-            
+
             // Fancy rounding commented out since it's not consistent with what is
             // done in libbanshee.  See http://bugzilla.gnome.org/show_bug.cgi?id=520648
             //int seconds = (int)Math.Round(((TimeSpan)obj).TotalSeconds);
             int seconds = (int) ((TimeSpan)obj).TotalSeconds;
-            
+
             if (seconds == 0) {
                 return String.Empty;
             }
-                
+
             return Banshee.Sources.DurationStatusFormatters.ConfusingPreciseFormatter (TimeSpan.FromSeconds (seconds));
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs
index ef1d444..6924003 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellFileSize.cs
 //
 // Author:
@@ -40,7 +40,7 @@ namespace Banshee.Collection.Gui
             Alignment = Pango.Alignment.Right;
             SetMinMaxStrings ((long)1023, (long)(1024 * 1024 * 575.5));
         }
-        
+
         protected override string GetText (object obj)
         {
             if (obj == null) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellLocation.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellLocation.cs
index 82563c8..0733d70 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellLocation.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellLocation.cs
@@ -38,7 +38,7 @@ namespace Banshee.Collection.Gui
         public ColumnCellLocation (string property, bool expand) : base (property, expand)
         {
         }
-        
+
         protected override string GetText (object obj)
         {
             SafeUri uri = obj as SafeUri;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPositiveInt.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPositiveInt.cs
index f9fc15c..fbcd126 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPositiveInt.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPositiveInt.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellPositiveInt.cs
 //
 // Author:
@@ -42,7 +42,7 @@ namespace Banshee.Collection.Gui
             Alignment = Pango.Alignment.Right;
             CultureFormatted = true;
         }
-        
+
         protected override string GetText (object obj)
         {
             if (obj == null) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellQueryText.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellQueryText.cs
index d550f63..8cd1cb8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellQueryText.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellQueryText.cs
@@ -39,7 +39,7 @@ namespace Banshee.Collection.Gui
         {
             this.blank = blank;
         }
-        
+
         protected override string GetText (object obj)
         {
             string text = base.GetText (obj);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs
index eff23d1..ecc012e 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellStatusIndicator.cs
@@ -109,28 +109,28 @@ namespace Banshee.Collection.Gui
         protected string [] StatusNames {
             get { return status_names; }
         }
-        
+
         private int pixbuf_size = 16;
         protected virtual int PixbufSize {
             get { return pixbuf_size; }
             set { pixbuf_size = value; }
         }
-        
+
         private int pixbuf_spacing = 4;
         protected virtual int PixbufSpacing {
             get { return pixbuf_spacing; }
             set { pixbuf_spacing = value; }
         }
-        
+
         private Gdk.Pixbuf [] pixbufs;
         protected Gdk.Pixbuf [] Pixbufs {
             get { return pixbufs; }
         }
-        
+
         public ColumnCellStatusIndicator (string property) : this (property, true)
         {
         }
-        
+
         public ColumnCellStatusIndicator (string property, bool expand) : base (property, expand)
         {
             LoadPixbufs ();
@@ -166,7 +166,7 @@ namespace Banshee.Collection.Gui
         protected virtual int PixbufCount {
             get { return 4; }
         }
-        
+
         protected virtual int GetIconIndex (TrackInfo track)
         {
             int icon_index = -1;
@@ -185,7 +185,7 @@ namespace Banshee.Collection.Gui
 
             return icon_index;
         }
-        
+
         protected virtual void LoadPixbufs ()
         {
             if (pixbufs != null && pixbufs.Length > 0) {
@@ -196,7 +196,7 @@ namespace Banshee.Collection.Gui
                     }
                 }
             }
-            
+
             if (pixbufs == null) {
                 pixbufs = new Gdk.Pixbuf[PixbufCount];
             }
@@ -217,7 +217,7 @@ namespace Banshee.Collection.Gui
             status_names[(int)Icon.Error]     = Catalog.GetString ("Error");
             status_names[(int)Icon.Protected] = Catalog.GetString ("Protected");
         }
-        
+
         public override void NotifyThemeChange ()
         {
             LoadPixbufs ();
@@ -229,27 +229,27 @@ namespace Banshee.Collection.Gui
             if (track == null) {
                 return;
             }
-            
+
             int icon_index = GetIconIndex (track);
-            
+
             if (icon_index < 0 || pixbufs == null || pixbufs[icon_index] == null) {
                 return;
             }
-            
+
             context.Context.Translate (0, 0.5);
-            
+
             Gdk.Pixbuf render_pixbuf = pixbufs[icon_index];
-            
-            Cairo.Rectangle pixbuf_area = new Cairo.Rectangle ((cellWidth - render_pixbuf.Width) / 2, 
+
+            Cairo.Rectangle pixbuf_area = new Cairo.Rectangle ((cellWidth - render_pixbuf.Width) / 2,
                 (cellHeight - render_pixbuf.Height) / 2, render_pixbuf.Width, render_pixbuf.Height);
-            
+
             if (!context.Opaque) {
                 context.Context.Save ();
             }
-            
+
             Gdk.CairoHelper.SetSourcePixbuf (context.Context, render_pixbuf, pixbuf_area.X, pixbuf_area.Y);
             context.Context.Rectangle (pixbuf_area);
-            
+
             if (!context.Opaque) {
                 context.Context.Clip ();
                 context.Context.PaintWithAlpha (0.5);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs
index 31783cf..4aebd48 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrack.cs
@@ -43,7 +43,7 @@ namespace Banshee.Collection.Gui
         public ColumnCellTrack () : base (null, true)
         {
         }
-        
+
         public int ComputeRowHeight (Widget widget)
         {
             int lw, lh;
@@ -53,37 +53,37 @@ namespace Banshee.Collection.Gui
             layout.Dispose ();
             return lh + 8;
         }
-        
+
         public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
         {
             if (BoundObject == null) {
                 return;
             }
-            
+
             if (!(BoundObject is TrackInfo)) {
                 throw new InvalidCastException ("ColumnCellAlbum can only bind to AlbumInfo objects");
             }
-            
+
             TrackInfo track = (TrackInfo)BoundObject;
 
             context.Layout.Width = (int)((cellWidth - 8) * Pango.Scale.PangoScale);
             context.Layout.Ellipsize = Pango.EllipsizeMode.End;
             //context.Layout.FontDescription = context.Widget.PangoContext.FontDescription.Copy ();
             context.Layout.FontDescription.Weight = font_weight;
-            context.Layout.SetMarkup (String.Format ("<b>{0}</b>\n<small><i>{1}</i></small>", 
-                GLib.Markup.EscapeText (track.DisplayTrackTitle), 
+            context.Layout.SetMarkup (String.Format ("<b>{0}</b>\n<small><i>{1}</i></small>",
+                GLib.Markup.EscapeText (track.DisplayTrackTitle),
                 GLib.Markup.EscapeText (track.DisplayArtistName)));
 
             int text_width;
             int text_height;
             context.Layout.GetPixelSize (out text_width, out text_height);
-            
+
             context.Context.MoveTo (4, ((int)cellHeight - text_height) / 2);
             Cairo.Color color = context.Theme.Colors.GetWidgetColor (
                 context.TextAsForeground ? GtkColorClass.Foreground : GtkColorClass.Text, state);
             color.A = (!context.Opaque) ? 0.3 : 1.0;
             context.Context.Color = color;
-            
+
             PangoCairoHelper.ShowLayout (context.Context, context.Layout);
         }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackAndCount.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackAndCount.cs
index 822bd97..d8371e9 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackAndCount.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackAndCount.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellTrackAndCount.cs
 //
 // Author:
@@ -45,7 +45,7 @@ namespace Banshee.Collection.Gui
             MaxString = String.Format (format, 555, 555);
             RestrictSize = true;
         }
-        
+
         protected override string GetText (object obj)
         {
             Banshee.Collection.TrackInfo track = BoundObjectParent as Banshee.Collection.TrackInfo;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackNumber.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackNumber.cs
index 892f1bd..80aa492 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackNumber.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellTrackNumber.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ColumnCellTrackNumber.cs
 //
 // Author:
@@ -37,9 +37,9 @@ namespace Banshee.Collection.Gui
         public ColumnCellTrackNumber (string property, bool expand) : base (property, expand)
         {
             SetMinMaxStrings (99, 999);
-            Alignment = Pango.Alignment.Right;    
+            Alignment = Pango.Alignment.Right;
         }
-        
+
         protected override string GetText (object obj)
         {
             if (obj == null || (int) obj == 0) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs
index b6ad97a..b83ea9d 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs
@@ -49,8 +49,8 @@ namespace Banshee.Collection.Gui
         public DefaultColumnController () : this (true)
         {
         }
-        
-        public DefaultColumnController (bool loadDefault) : base (String.Format ("{0}.{1}", 
+
+        public DefaultColumnController (bool loadDefault) : base (String.Format ("{0}.{1}",
             Application.ActiveClient.ClientId, "track_view_columns"))
         {
             CreateDefaultColumns ();
@@ -61,7 +61,7 @@ namespace Banshee.Collection.Gui
                 Load ();
             }
         }
-        
+
         public void AddDefaultColumns ()
         {
             AddRange (
@@ -104,7 +104,7 @@ namespace Banshee.Collection.Gui
             // Visible-by-default column
             track_column        = Create (BansheeQuery.TrackNumberField, 0.10, true, new ColumnCellTrackNumber (null, true));
             track_column.Title = String.Empty; // don't show any text in the header for this column, so it can be smaller
-            
+
             title_column        = CreateText (BansheeQuery.TitleField, 0.25, true);
             artist_column       = CreateText (BansheeQuery.ArtistField, 0.225, true);
             album_column        = CreateText (BansheeQuery.AlbumField, 0.225, true);
@@ -123,7 +123,7 @@ namespace Banshee.Collection.Gui
             track_combined_column.Id = "track_and_count";
             track_combined_column.Title = Catalog.GetString ("Track #");
             track_combined_column.LongTitle = Catalog.GetString ("Track & Count");
-            
+
             disc_combined_column = Create (BansheeQuery.DiscNumberField, 0.10, false, new ColumnCellDiscAndCount (null, true));
             disc_combined_column.Property = null;
             disc_combined_column.Title = Catalog.GetString ("Disc #");
@@ -132,7 +132,7 @@ namespace Banshee.Collection.Gui
             ColumnCellPositiveInt br_cell = new ColumnCellPositiveInt (null, true, 3, 3);
             br_cell.TextFormat  = Catalog.GetString ("{0} kbps");
             bitrate_column      = Create (BansheeQuery.BitRateField, 0.10, false, br_cell);
-            
+
             rating_column       = Create (BansheeQuery.RatingField, 0.15, false, new ColumnCellRating (null, true));
             score_column        = Create (BansheeQuery.ScoreField, 0.15, false, new ColumnCellPositiveInt (null, true, 2, 5));
             composer_column     = CreateText (BansheeQuery.ComposerField, 0.25);
@@ -146,7 +146,7 @@ namespace Banshee.Collection.Gui
             ColumnCellText uri_cell = new ColumnCellLocation (BansheeQuery.UriField.PropertyName, true);
             uri_cell.EllipsizeMode = Pango.EllipsizeMode.Start;
             uri_column          = Create (BansheeQuery.UriField, 0.15, false, uri_cell);
-            
+
             mime_type_column    = CreateText (BansheeQuery.MimeTypeField, 0.15);
             license_uri_column  = Create (BansheeQuery.LicenseUriField, 0.15, false, new ColumnCellCreativeCommons (null, true));
 
@@ -178,19 +178,19 @@ namespace Banshee.Collection.Gui
 
             return col;
         }
-        
+
 #region Column Properties
 
         private Column indicator_column;
         public Column IndicatorColumn {
             get { return indicator_column; }
         }
-        
+
         private SortableColumn track_column;
         public SortableColumn TrackColumn {
             get { return track_column; }
         }
-        
+
         private SortableColumn title_column;
         public SortableColumn TitleColumn {
             get { return title_column; }
@@ -200,22 +200,22 @@ namespace Banshee.Collection.Gui
         public SortableColumn ArtistColumn {
             get { return artist_column; }
         }
-        
+
         private SortableColumn album_column;
         public SortableColumn AlbumColumn {
             get { return album_column; }
         }
-        
+
         private SortableColumn duration_column;
         public SortableColumn DurationColumn {
             get { return duration_column; }
         }
-        
+
         private SortableColumn genre_column;
         public SortableColumn GenreColumn {
             get { return genre_column; }
         }
-        
+
         private SortableColumn year_column;
         public SortableColumn YearColumn {
             get { return year_column; }
@@ -225,37 +225,37 @@ namespace Banshee.Collection.Gui
         public SortableColumn FileSizeColumn {
             get { return file_size_column; }
         }
-        
+
         private SortableColumn composer_column;
         public SortableColumn ComposerColumn {
             get { return composer_column; }
         }
-        
+
         private SortableColumn comment_column;
         public SortableColumn CommentColumn {
             get { return comment_column; }
         }
-        
+
         private SortableColumn play_count_column;
         public SortableColumn PlayCountColumn {
             get { return play_count_column; }
         }
-        
+
         private SortableColumn skip_count_column;
         public SortableColumn SkipCountColumn {
             get { return skip_count_column; }
         }
-        
+
         private SortableColumn disc_combined_column;
         public SortableColumn DiscNumberAndCountColumn {
             get { return disc_combined_column; }
         }
-        
+
         private SortableColumn rating_column;
         public SortableColumn RatingColumn {
             get { return rating_column; }
         }
-        
+
         private SortableColumn score_column;
         public SortableColumn ScoreColumn {
             get { return score_column; }
@@ -265,17 +265,17 @@ namespace Banshee.Collection.Gui
         public SortableColumn LastPlayedColumn {
             get { return last_played_column; }
         }
-        
+
         private SortableColumn last_skipped_column;
         public SortableColumn LastSkippedColumn {
             get { return last_skipped_column; }
         }
-        
+
         private SortableColumn date_added_column;
         public SortableColumn DateAddedColumn {
             get { return date_added_column; }
         }
-        
+
         private SortableColumn uri_column;
         public SortableColumn UriColumn {
             get { return uri_column; }
@@ -285,17 +285,17 @@ namespace Banshee.Collection.Gui
         public SortableColumn AlbumArtistColumn {
             get { return album_artist_column; }
         }
-        
+
         private SortableColumn track_combined_column;
         public SortableColumn TrackNumberAndCountColumn {
             get { return track_combined_column; }
         }
-        
+
         private SortableColumn bpm_column;
         public SortableColumn BpmColumn {
             get { return bpm_column; }
         }
-        
+
         private SortableColumn bitrate_column;
         public SortableColumn BitRateColumn {
             get { return bitrate_column; }
@@ -310,7 +310,7 @@ namespace Banshee.Collection.Gui
         public SortableColumn GroupingColumn {
             get { return grouping_column; }
         }
-        
+
         private SortableColumn mime_type_column;
         public SortableColumn MimeTypeColumn {
             get { return mime_type_column; }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/PersistentColumnController.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/PersistentColumnController.cs
index 96386f9..2f7641e 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/PersistentColumnController.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/PersistentColumnController.cs
@@ -42,7 +42,7 @@ namespace Banshee.Collection.Gui
         private bool loaded = false;
         private bool pending_changes;
         private uint timer_id = 0;
-        
+
         private string source_id, unique_source_id;
         private Source source;
         public Source Source {
@@ -51,14 +51,14 @@ namespace Banshee.Collection.Gui
                 if (source == value) {
                     return;
                 }
-                
+
                 if (source != null) {
                     Save ();
                 }
-                
+
                 source = value;
                 source_id = unique_source_id = null;
-                
+
                 if (source != null) {
                     // If we have a parent, use their UniqueId so all children of a parent persist the same columns
                     source_id = source.ParentConfigurationId;
@@ -67,42 +67,42 @@ namespace Banshee.Collection.Gui
                 }
             }
         }
-        
+
         public PersistentColumnController (string rootNamespace) : base ()
         {
             if (String.IsNullOrEmpty (rootNamespace)) {
                 throw new ArgumentException ("Argument must not be null or empty", "rootNamespace");
             }
-            
+
             root_namespace = rootNamespace;
         }
-        
+
         public void Load ()
         {
             lock (this) {
                 if (source == null) {
                     return;
                 }
-                
+
                 loaded = false;
-                
+
                 foreach (Column column in this) {
                     if (column.Id != null) {
-                        string @namespace = MakeNamespace (column.Id); 
+                        string @namespace = MakeNamespace (column.Id);
                         column.Visible = ConfigurationClient.Get<bool> (@namespace, "visible", column.Visible);
                         column.Width = ConfigurationClient.Get<double> (@namespace, "width", column.Width);
                     }
                 }
-                
+
                 // Create a copy so we can read the original index
                 List<Column> columns = new List<Column> (Columns);
-            
+
                 Columns.Sort (delegate (Column a, Column b) {
                     int a_order = a.Id == null ? -1 : ConfigurationClient.Get<int> (
                         MakeNamespace (a.Id), "order", columns.IndexOf (a));
                     int b_order = b.Id == null ? -1 : ConfigurationClient.Get<int> (
                         MakeNamespace (b.Id), "order", columns.IndexOf (b));
-                    
+
                     return a_order.CompareTo (b_order);
                 });
 
@@ -129,14 +129,14 @@ namespace Banshee.Collection.Gui
 
                 loaded = true;
             }
-            
+
             OnUpdated ();
         }
 
         public override ISortableColumn SortColumn {
             set { base.SortColumn = value; Save (); }
         }
-        
+
         public void Save ()
         {
             if (timer_id == 0) {
@@ -145,7 +145,7 @@ namespace Banshee.Collection.Gui
                 pending_changes = true;
             }
         }
-        
+
         private bool OnTimeout ()
         {
             if (pending_changes) {
@@ -157,14 +157,14 @@ namespace Banshee.Collection.Gui
                 return false;
             }
         }
-        
+
         private void SaveCore ()
         {
             lock (this) {
                 if (source == null) {
                     return;
                 }
-            
+
                 for (int i = 0; i < Count; i++) {
                     if (Columns[i].Id != null) {
                         Save (Columns[i], i);
@@ -178,7 +178,7 @@ namespace Banshee.Collection.Gui
                 }
             }
         }
-        
+
         private void Save (Column column, int index)
         {
             string @namespace = MakeNamespace (column.Id);
@@ -186,21 +186,21 @@ namespace Banshee.Collection.Gui
             ConfigurationClient.Set<bool> (@namespace, "visible", column.Visible);
             ConfigurationClient.Set<double> (@namespace, "width", column.Width);
         }
-        
+
         protected override void OnWidthsChanged ()
         {
             if (loaded) {
                 Save ();
             }
-            
+
             base.OnWidthsChanged ();
         }
-        
+
         private string MakeNamespace (string name)
         {
             return String.Format ("{0}.{1}.{2}", root_namespace, source_id, name);
         }
-        
+
         public override bool EnableColumnMenu {
             get { return true; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TerseTrackListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TerseTrackListView.cs
index b5ab22e..bd24875 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TerseTrackListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TerseTrackListView.cs
@@ -40,16 +40,16 @@ namespace Banshee.Collection.Gui
     public class TerseTrackListView : BaseTrackListView
     {
         private ColumnController column_controller;
-        
+
         public TerseTrackListView () : base ()
         {
             column_controller = new ColumnController ();
 
             ColumnCellTrack renderer = new ColumnCellTrack ();
             column_controller.Add (new Column ("Track", renderer, 1.0));
-            
+
             ColumnController = column_controller;
-            
+
             RowHeightProvider = renderer.ComputeRowHeight;
             HeaderVisible = false;
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackFilterListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackFilterListView.cs
index 259188d..4e7629b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackFilterListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackFilterListView.cs
@@ -41,14 +41,14 @@ namespace Banshee.Collection.Gui
     public class TrackFilterListView<T> : ListView<T>
     {
         protected ColumnController column_controller;
-        
+
         public TrackFilterListView () : base ()
         {
             column_controller = new ColumnController ();
 
             ForceDragSourceSet = true;
             HeaderVisible = false;
-            
+
             RowActivated += OnRowActivated;
         }
 
@@ -78,7 +78,7 @@ namespace Banshee.Collection.Gui
             ServiceManager.Get<InterfaceActionService> ().TrackActions.SuppressSelectActions ();
             return base.OnFocusInEvent(evnt);
         }
-        
+
         protected override bool OnFocusOutEvent(Gdk.EventFocus evnt)
         {
             ServiceManager.Get<InterfaceActionService> ().TrackActions.UnsuppressSelectActions ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
index e0d8e9c..e1ebe21 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
@@ -46,20 +46,20 @@ namespace Banshee.Collection.Gui
     public class TrackListView : BaseTrackListView
     {
         private ColumnController default_column_controller;
-        
+
         public TrackListView () : base ()
         {
             default_column_controller = new DefaultColumnController ();
         }
-        
+
         public override void SetModel (IListModel<TrackInfo> value, double vpos)
         {
             //Console.WriteLine ("TrackListView.SetModel for {0} with vpos {1}", value, vpos);
-            
+
             if (value != null) {
                 Source source = ServiceManager.SourceManager.ActiveSource;
                 ColumnController controller = null;
-                
+
                 // Get the controller from this source, or its parent(s) if it doesn't have one
                 while (source != null && controller == null) {
                     controller = source.Properties.Get<ColumnController> ("TrackView.ColumnController");
@@ -73,18 +73,18 @@ namespace Banshee.Collection.Gui
                     }
                     source = source.Parent;
                 }
-                
+
                 controller = controller ?? default_column_controller;
-                
+
                 PersistentColumnController persistent_controller = controller as PersistentColumnController;
                 if (persistent_controller != null) {
                     //Hyena.Log.InformationFormat ("Setting controller source to {0}", ServiceManager.SourceManager.ActiveSource.Name);
                     persistent_controller.Source = ServiceManager.SourceManager.ActiveSource;
                 }
-                
+
                 ColumnController = controller;
             }
-            
+
             base.SetModel (value, vpos);
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs
index 51853ab..a3998c7 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs
@@ -42,21 +42,21 @@ namespace Banshee.Collection.Gui
         public XmlColumnController (string xml) : base (false)
         {
             XmlTextReader reader = new XmlTextReader (new StringReader (xml));
-            
+
             while (reader.Read ()) {
                 if (reader.NodeType == XmlNodeType.Element && reader.Name == "column-controller") {
                     ReadColumnController (reader, reader.Depth);
                 }
             }
-            
+
             Load ();
         }
-        
+
         private void ReadColumnController (XmlTextReader reader, int depth)
         {
             string sort_column = null;
             bool sort_asc = true;
-            
+
             while (reader.Read ()) {
                 if (reader.NodeType == XmlNodeType.Element) {
                     switch (reader.Name) {
@@ -87,7 +87,7 @@ namespace Banshee.Collection.Gui
                     break;
                 }
             }
-            
+
             if (sort_column != null) {
                 foreach (Column col in Columns) {
                     if (col.Id == sort_column) {
@@ -102,11 +102,11 @@ namespace Banshee.Collection.Gui
                 }
             }
         }
-        
+
         private void ReadColumn (XmlTextReader reader, int depth)
         {
             string modify_default = null;
-            
+
             string title = null;
             string long_title = null;
             string sort_key = null;
@@ -114,25 +114,25 @@ namespace Banshee.Collection.Gui
             int max_width = -1;
             int min_width = -1;
             bool visible = true;
-            
+
             string renderer_type = null;
             string renderer_property = null;
             bool renderer_expand = true;
-            
+
             while (reader.MoveToNextAttribute ()) {
                 if (reader.Name == "modify-default") {
                     modify_default = reader.Value;
                     break;
                 }
             }
-                
+
             while (reader.Read ()) {
                 if (reader.NodeType == XmlNodeType.EndElement && reader.Depth == depth) {
                     break;
                 } else if (reader.NodeType != XmlNodeType.Element) {
                     continue;
                 }
-                
+
                 switch (reader.Name) {
                     case "title": title = reader.ReadString (); break;
                     case "long-title": long_title = reader.ReadString (); break;
@@ -152,10 +152,10 @@ namespace Banshee.Collection.Gui
                         break;
                 }
             }
-            
+
             if (modify_default != null) {
                 Column column = GetDefaultColumn (modify_default);
-                    
+
                 if (title != null) {
                     column.Title = title;
                 }
@@ -163,27 +163,27 @@ namespace Banshee.Collection.Gui
                 if (long_title != null) {
                     column.LongTitle = long_title;
                 }
-                
+
                 if (renderer_type != null) {
                     ColumnCell renderer = GetCellRenderer (renderer_type, renderer_property, renderer_expand);
                     column.RemoveCell (0);
                     column.PackStart (renderer);
                 }
-                
+
                 if (renderer_property != null) {
                     column.GetCell (0).Property = renderer_property;
                 }
-                
+
                 if (column.Visible != visible) {
                     column.Visible = visible;
                 }
-                
+
                 if (column is SortableColumn && sort_key != null) {
                     ((SortableColumn)column).SortKey = sort_key;
                 }
             } else {
                 ColumnCell renderer = GetCellRenderer (renderer_type, renderer_property, renderer_expand);
-                
+
                 Column column = sort_key == null
                     ? new Column (title, renderer, width, visible)
                     : new SortableColumn (title, renderer, width, sort_key, visible);
@@ -195,35 +195,35 @@ namespace Banshee.Collection.Gui
                 if (min_width != -1) {
                     column.MinWidth = min_width;
                 }
-                
+
                 Add (column);
             }
         }
-        
+
         private ColumnCell GetCellRenderer (string typeName, string property, bool expand)
         {
             Type type = null;
-                
+
             foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ()) {
                 type = asm.GetType (typeName, false, true);
                 if (type != null) {
                     break;
                 }
             }
-            
+
             if (type == null) {
                 throw new TypeLoadException (typeName);
             }
-            
+
             return (ColumnCell)Activator.CreateInstance (type, property, expand);
         }
-        
+
         private bool ParseBoolean (string value)
         {
             value = value.ToLower ();
             return value == "true";
         }
-        
+
         private Column GetDefaultColumn (string propertyName)
         {
             PropertyInfo property = GetType ().GetProperty (propertyName);
diff --git a/src/Core/Banshee.ThickClient/Banshee.ContextPane/BaseContextPage.cs b/src/Core/Banshee.ThickClient/Banshee.ContextPane/BaseContextPage.cs
index 20cf12a..f13d25d 100644
--- a/src/Core/Banshee.ThickClient/Banshee.ContextPane/BaseContextPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.ContextPane/BaseContextPage.cs
@@ -67,7 +67,7 @@ namespace Banshee.ContextPane
 
         public abstract Widget Widget { get; }
         public abstract void SetTrack (TrackInfo track);
-        
+
         public virtual void Dispose () {}
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPageManager.cs b/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPageManager.cs
index 6c13736..8f33b75 100644
--- a/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPageManager.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPageManager.cs
@@ -45,10 +45,10 @@ namespace Banshee.ContextPane
             Mono.Addins.AddinManager.AddExtensionNodeHandler ("/Banshee/ThickClient/ContextPane", OnExtensionChanged);
         }
 
-        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args) 
+        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args)
         {
             TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;
-            
+
             if (args.Change == ExtensionChange.Add) {
                 var page = (BaseContextPage) node.CreateInstance ();
                 pane.AddPage (page);
diff --git a/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPane.cs b/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPane.cs
index d4a62d1..2a92568 100644
--- a/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPane.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.ContextPane/ContextPane.cs
@@ -73,7 +73,7 @@ namespace Banshee.ContextPane
         public bool Large {
             get { return large; }
         }
-        
+
         public ContextPane ()
         {
             HeightRequest = 200;
@@ -117,11 +117,11 @@ namespace Banshee.ContextPane
             var max = new Button (new Image (IconThemeUtils.LoadIcon ("context-pane-maximize", 7)));
             max.Clicked += (o, a) => { large = !large; expand_handler (large); };
             TooltipSetter.Set (tooltip_host, max, Catalog.GetString ("Make the context pane larger or smaller"));
-            
+
             var close = new Button (new Image (IconThemeUtils.LoadIcon ("context-pane-close", 7)));
             close.Clicked += (o, a) => ShowAction.Activate ();
             TooltipSetter.Set (tooltip_host, close, Catalog.GetString ("Hide context pane"));
-            
+
             max.Relief = close.Relief = ReliefStyle.None;
             hbox.PackStart (max, false, false, 0);
             hbox.PackStart (close, false, false, 0);
@@ -153,7 +153,7 @@ namespace Banshee.ContextPane
 
             PackStart (notebook, true, true, 0);
             notebook.Show ();
-            
+
         }
 
         private void OnPlayerEvent (PlayerEventArgs args)
@@ -215,7 +215,7 @@ namespace Banshee.ContextPane
                 large = false;
                 Hide ();
             }
-            
+
             vbox.Visible = true;//enabled && npages > 1;
         }
 
@@ -252,7 +252,7 @@ namespace Banshee.ContextPane
                 frame.DragDataReceived += delegate(object o, DragDataReceivedArgs args) {
                 };
             }*/
-            
+
             page.Widget.Show ();
             notebook.AppendPage (frame, null);
             pane_pages[page] = frame;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerBandScale.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerBandScale.cs
index 880ac93..248a85f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerBandScale.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerBandScale.cs
@@ -37,13 +37,13 @@ namespace Banshee.Equalizer.Gui
         private Scale scale;
         private Label label;
         private object tooltip_host;
-        
+
         public event EventHandler ValueChanged;
-    
+
         public EqualizerBandScale (uint band, int median, int min, int max, string labelText)
         {
             this.band = band;
-            
+
             label = new Label ();
             label.Markup = String.Format ("<small>{0}</small>", GLib.Markup.EscapeText (labelText));
             label.Xalign = 0.0f;
@@ -55,38 +55,38 @@ namespace Banshee.Equalizer.Gui
             scale.DrawValue = false;
             scale.Inverted = true;
             scale.ValueChanged += OnValueChanged;
-            
+
             scale.Show ();
             label.Show ();
-            
+
             PackStart (scale, false, false, 0);
             PackStart (label, false, false, 0);
-            
+
             tooltip_host = Hyena.Gui.TooltipSetter.CreateHost ();
         }
-        
+
         private void OnValueChanged (object o, EventArgs args)
         {
             EventHandler handler = ValueChanged;
             if(handler != null) {
                 handler(this, new EventArgs ());
             }
-            
+
             Hyena.Gui.TooltipSetter.Set (tooltip_host, scale, ((int)Math.Round (scale.Value / 10.0)).ToString ());
         }
-        
+
         public int Value {
             get { return (int)Math.Round (scale.Value); }
             set { scale.Value = (double) value; }
         }
-        
+
         public bool LabelVisible {
             get { return label.Visible; }
             set { label.Visible = value; }
         }
-        
+
         public uint Band {
             get { return band; }
         }
-    }   
+    }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerLevelsBox.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerLevelsBox.cs
index 2ef235b..acd1a23 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerLevelsBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerLevelsBox.cs
@@ -40,7 +40,7 @@ namespace Banshee.Equalizer.Gui
             for (int i = 0; i < levels.Length && i < 3; i++) {
                 Label label = CreateLabel (levels[i]);
                 switch (i) {
-                    case 0: 
+                    case 0:
                         label.Yalign = 0.05f;
                          break;
                     case 1:
@@ -51,11 +51,11 @@ namespace Banshee.Equalizer.Gui
                         label.Yalign = 0.95f;
                         break;
                 }
-                
+
                 PackStart (label, true, true, 0);
             }
         }
-        
+
         private Label CreateLabel (string value)
         {
             Label label = new Label ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs
index 417c141..5b19f8e 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerPresetComboBox.cs
@@ -36,40 +36,40 @@ namespace Banshee.Equalizer.Gui
         private EqualizerManager manager;
         private ListStore store;
         private EqualizerSetting active_eq;
-        
+
         public EqualizerPresetComboBox () : this (EqualizerManager.Instance)
         {
         }
-        
+
         public EqualizerPresetComboBox (EqualizerManager manager) : base ()
         {
             if (manager == null) {
                 throw new ArgumentNullException ("provide an EqualizerManager or use default constructor");
             }
-            
+
             this.manager = manager;
             BuildWidget ();
         }
-        
+
         private void BuildWidget ()
         {
             store = new ListStore (typeof (string), typeof (EqualizerSetting));
             Model = store;
             TextColumn = 0;
-            
+
             foreach (EqualizerSetting eq in manager) {
                 AddEqualizerSetting(eq);
             }
-            
+
             manager.EqualizerAdded += delegate (object o, EqualizerSettingEventArgs args) {
                 AddEqualizerSetting (args.EqualizerSetting);
             };
-            
+
             manager.EqualizerRemoved += delegate (object o, EqualizerSettingEventArgs args) {
                 RemoveEqualizerSetting (args.EqualizerSetting);
             };
         }
-        
+
         protected override void OnChanged ()
         {
             EqualizerSetting eq = ActiveEqualizer;
@@ -81,24 +81,24 @@ namespace Banshee.Equalizer.Gui
             } else if (eq == null) {
                 eq = active_eq;
             }
-            
+
             if (Entry == null) {
                 return;
             }
 
             eq.Name = Entry.Text;
-            
+
             TreeIter iter;
             if (GetIterForEqualizerSetting (eq, out iter)) {
                 store.SetValue (iter, 0, eq.Name);
             }
-            
+
             if (eq != ActiveEqualizer) {
                 ActiveEqualizer = eq;
                 base.OnChanged ();
             }
         }
-        
+
         public bool ActivatePreferredEqualizer (string name)
         {
             if (name == null || name == "") {
@@ -110,35 +110,35 @@ namespace Banshee.Equalizer.Gui
                         return true;
                     }
                 }
-                
+
                 return false;
             }
         }
-        
+
         public bool ActivateFirstEqualizer ()
         {
             TreeIter iter;
-        
+
             if (store.IterNthChild (out iter, 0)) {
                 ActiveEqualizer = GetEqualizerSettingForIter (iter);
                 return true;
             }
-            
+
             return false;
         }
-        
+
         private void AddEqualizerSetting (EqualizerSetting eq)
         {
             store.AppendValues (eq.Name, eq);
         }
-        
+
         private void RemoveEqualizerSetting (EqualizerSetting eq)
         {
             TreeIter iter;
             if (GetIterForEqualizerSetting (eq, out iter)) {
                 store.Remove (ref iter);
             }
-            
+
             if (!ActivateFirstEqualizer ()) {
                 active_eq = null;
                 if (Entry != null) {
@@ -146,12 +146,12 @@ namespace Banshee.Equalizer.Gui
                 }
             }
         }
-        
+
         private EqualizerSetting GetEqualizerSettingForIter (TreeIter iter)
         {
             return store.GetValue (iter, 1) as EqualizerSetting;
         }
-        
+
         private bool GetIterForEqualizerSetting (EqualizerSetting eq, out TreeIter iter)
         {
             for (int i = 0, n = store.IterNChildren (); i < n; i++) {
@@ -159,20 +159,20 @@ namespace Banshee.Equalizer.Gui
                     return true;
                 }
             }
-            
+
             iter = TreeIter.Zero;
             return false;
         }
-        
+
         public EqualizerSetting ActiveEqualizer {
             get {
                 TreeIter iter;
                 return GetActiveIter (out iter) ? GetEqualizerSettingForIter (iter) : null;
             }
-            
+
             set {
                 active_eq = value;
-                
+
                 TreeIter iter;
                 if (GetIterForEqualizerSetting (value, out iter)) {
                     SetActiveIter (iter);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs
index 6bbe058..0177b3f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerView.cs
@@ -47,48 +47,48 @@ namespace Banshee.Equalizer.Gui
         private EqualizerBandScale amplifier_scale;
         private EqualizerSetting active_eq;
         private int [] range = new int[3];
-        
+
         public event EqualizerChangedEventHandler EqualizerChanged;
         public event AmplifierChangedEventHandler AmplifierChanged;
-        
+
         public EqualizerView () : base ()
         {
             BuildWidget ();
         }
-        
+
         private void BuildWidget ()
         {
             Spacing = 10;
-        
+
             int [] br = ((IEqualizer)ServiceManager.PlayerEngine.ActiveEngine).BandRange;
             int mid = (br[0] + br[1]) / 2;
-            
+
             range[0] = br[0];
             range[1] = mid;
             range[2] = br[1];
-            
+
             amplifier_scale = new EqualizerBandScale (0, range[1] * 10, range[0] * 10, range[2] * 10, "Preamp");
             amplifier_scale.ValueChanged += OnAmplifierValueChanged;
             amplifier_scale.Show ();
-            PackStart (amplifier_scale, false, false, 0);            
-            
+            PackStart (amplifier_scale, false, false, 0);
+
             EqualizerLevelsBox eq_levels = new EqualizerLevelsBox (
                 FormatDecibelString (range[2]),
                 FormatDecibelString (range[1]),
                 FormatDecibelString (range[0])
             );
-            
+
             eq_levels.Show ();
             PackStart (eq_levels, false, false, 0);
-            
+
             band_box = new HBox ();
             band_box.Homogeneous = true;
             band_box.Show ();
             PackStart (band_box, true, true, 0);
-            
+
             BuildBands ();
         }
-        
+
         private string FormatDecibelString (int db)
         {
             if (db > 0) {
@@ -97,30 +97,30 @@ namespace Banshee.Equalizer.Gui
                 return String.Format ("{0} dB", db);
             }
         }
-        
+
         private void BuildBands ()
         {
             foreach (Widget widget in band_box.Children) {
                 band_box.Remove (widget);
             }
-            
+
             if (frequencies == null || frequencies.Length <= 0) {
                 frequencies = new uint[0];
                 band_scales = new EqualizerBandScale[0];
                 return;
             }
-            
+
             band_scales = new EqualizerBandScale[10];
-            
+
             for (uint i = 0; i < 10; i++) {
-                string label = frequencies[i] < 1000 ? 
+                string label = frequencies[i] < 1000 ?
                     String.Format ("{0} Hz", frequencies[i]) :
                     String.Format ("{0} kHz", (int)Math.Round (frequencies[i] / 1000.0));
-                
+
                 band_scales[i] = new EqualizerBandScale (i, range[1] * 10, range[0] * 10, range[2] * 10, label);
                 band_scales[i].ValueChanged += OnEqualizerValueChanged;
                 band_scales[i].Show ();
-                
+
                 band_box.PackStart (band_scales[i], true, true, 0);
             }
         }
@@ -128,11 +128,11 @@ namespace Banshee.Equalizer.Gui
         private void OnEqualizerValueChanged (object o, EventArgs args)
         {
             EqualizerBandScale scale = o as EqualizerBandScale;
-            
+
             if (active_eq != null) {
                 active_eq.SetGain (scale.Band, (double)scale.Value / 10);
             }
-            
+
             if (EqualizerChanged != null) {
                 EqualizerChanged (this, new EqualizerChangedEventArgs (scale.Band, scale.Value));
             }
@@ -144,37 +144,37 @@ namespace Banshee.Equalizer.Gui
             if (active_eq != null) {
                 active_eq.AmplifierLevel = (double) (scale.Value / 10.0);
             }
-            
+
             if (AmplifierChanged != null) {
                 AmplifierChanged (this, new AmplifierChangedEventArgs (scale.Value));
             }
-        }    
-            
+        }
+
         public uint [] Frequencies {
             get { return (uint [])frequencies.Clone (); }
-            set { 
+            set {
                 frequencies = (uint [])value.Clone ();
                 BuildBands ();
             }
         }
-        
+
         public int [] Preset {
             get {
                 int [] result = new int[band_scales.Length];
                 for (int i = 0; i < band_scales.Length; i++) {
                     result[i] = (int) band_scales[i].Value;
                 }
-                
+
                 return result;
             }
-            
+
             set {
                 for (int i = 0; i < value.Length; i++) {
-                    band_scales[i].Value = value[i];                   
+                    band_scales[i].Value = value[i];
                 }
             }
         }
-        
+
         public void SetBand(uint band, double value)
         {
             band_scales[band].Value = (int) (value * 10);
@@ -184,19 +184,19 @@ namespace Banshee.Equalizer.Gui
             get { return (double) amplifier_scale.Value / 10; }
             set { amplifier_scale.Value = (int) (value * 10); }
         }
-        
+
         public EqualizerSetting EqualizerSetting {
             get { return active_eq; }
-            set { 
-                active_eq = value; 
-                
+            set {
+                active_eq = value;
+
                 if (active_eq == null) {
                     AmplifierLevel = 0;
                     return;
                 }
-                
+
                 AmplifierLevel = active_eq.AmplifierLevel;
-                
+
                 for (int i = 0; i < active_eq.BandCount; i++) {
                     uint x = (uint) i;
                     SetBand (x, active_eq[x]);
@@ -207,7 +207,7 @@ namespace Banshee.Equalizer.Gui
 
     public delegate void EqualizerChangedEventHandler (object o, EqualizerChangedEventArgs args);
     public delegate void AmplifierChangedEventHandler (object o, AmplifierChangedEventArgs args);
-    
+
     public sealed class EqualizerChangedEventArgs : EventArgs
     {
         private uint band;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs
index 5db5503..07caa71 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Equalizer.Gui/EqualizerWindow.cs
@@ -43,84 +43,84 @@ namespace Banshee.Equalizer.Gui
         private EqualizerPresetComboBox eq_preset_combo;
         private CheckButton eq_enabled_checkbox;
         private HBox header_box;
-        
+
         private static EqualizerWindow instance;
         public static EqualizerWindow Instance {
             get { return instance; }
         }
-        
+
         public EqualizerWindow (Window parent) : base (Catalog.GetString ("Equalizer"))
         {
             if (instance == null) {
                 instance = this;
             }
-            
+
             TransientFor = parent;
             WindowPosition = WindowPosition.CenterOnParent;
             TypeHint = Gdk.WindowTypeHint.Dialog;
             SkipPagerHint = true;
             SkipTaskbarHint = true;
             AppPaintable = true;
-            
+
             SetDefaultSize (-1, 180);
-            
+
             VBox box = new VBox ();
             header_box = new HBox ();
             header_box.BorderWidth = 4;
             header_box.Spacing = 2;
-            
+
             box.PackStart (header_box, false, false, 0);
             box.PackStart (new HSeparator (), false, false, 0);
-        
+
             eq_view = new EqualizerView ();
             eq_view.BorderWidth = 10;
             eq_view.SetSizeRequest (-1, 110);
             eq_view.Frequencies = ((IEqualizer)ServiceManager.PlayerEngine.ActiveEngine).EqualizerFrequencies;
             eq_view.Show ();
-            
+
             eq_enabled_checkbox = new CheckButton (Catalog.GetString ("Enabled"));
-            
+
             eq_preset_combo = new EqualizerPresetComboBox ();
             eq_preset_combo.Changed += OnPresetChanged;
             eq_preset_combo.Show ();
-            
+
             Button new_preset_button = new Button (new Image (Stock.Add, IconSize.Button));
             new_preset_button.Relief = ReliefStyle.None;
             new_preset_button.Clicked += OnNewPreset;
-            
+
             Button delete_preset_button = new Button (new Image (Stock.Remove, IconSize.Button));
             delete_preset_button.Relief = ReliefStyle.None;
             delete_preset_button.Clicked += OnDeletePreset;
-            
+
             VBox combo_box = new VBox ();
             combo_box.PackStart (eq_preset_combo, true, false, 0);
-            
+
             header_box.PackStart (combo_box, false, false, 0);
             header_box.PackStart (new_preset_button, false, false, 0);
             header_box.PackStart (delete_preset_button, false, false, 0);
             header_box.PackEnd (eq_enabled_checkbox, false, false, 0);
-            
+
             box.PackStart (eq_view, true, true, 0);
-            
+
             eq_enabled_checkbox.Active = EqualizerSetting.EnabledSchema.Get ();
             eq_preset_combo.ActivatePreferredEqualizer (EqualizerSetting.PresetSchema.Get ());
-            
+
             if (eq_enabled_checkbox.Active) {
                 // enable equalizer if was enabled last session
                 EqualizerManager.Instance.Enable (eq_preset_combo.ActiveEqualizer);
             }
-            
+
             if (eq_preset_combo.ActiveEqualizer == null) {
                 // user has no presets, so create one
                 OnNewPreset (null, null);
-                
+
                 // enable our new preset (it has no effect though, since all bands are 0db)
                 eq_enabled_checkbox.Active = true;
                 OnEnableDisable (null, null);
             }
-            
+
             eq_enabled_checkbox.Clicked += OnEnableDisable;
-            
+
             Gdk.Geometry limits = new Gdk.Geometry ();
             limits.MinWidth = -1;
             limits.MaxWidth = -1;
@@ -152,7 +152,7 @@ namespace Banshee.Equalizer.Gui
             GdkWindow.DrawRectangle (Style.BackgroundGC (StateType.Active), true, header_box.Allocation);
             return base.OnExposeEvent (evnt);
         }
-         
+
         private void OnNewPreset (object o, EventArgs args)
         {
             EqualizerSetting eq = new EqualizerSetting (Catalog.GetString ("New Preset"));
@@ -160,12 +160,12 @@ namespace Banshee.Equalizer.Gui
             eq_preset_combo.ActiveEqualizer = eq;
             eq_preset_combo.Entry.SelectRegion (0, eq_preset_combo.Entry.Text.Length);
         }
-        
+
         private void OnDeletePreset (object o, EventArgs args)
         {
             EqualizerManager.Instance.Remove (eq_preset_combo.ActiveEqualizer);
         }
-        
+
         private void OnPresetChanged (object o, EventArgs args)
         {
             if (eq_preset_combo.ActiveEqualizer != eq_view.EqualizerSetting) {
@@ -173,7 +173,7 @@ namespace Banshee.Equalizer.Gui
                 OnEnableDisable (null, null);
             }
         }
-        
+
         private void OnEnableDisable (object o, EventArgs args)
         {
             if (eq_enabled_checkbox.Active) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/AboutDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/AboutDialog.cs
index 330f986..e86daef 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/AboutDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/AboutDialog.cs
@@ -27,7 +27,7 @@
 //
 
 #pragma warning disable 0618
- 
+
 using System;
 using System.Text;
 using System.Collections.Generic;
@@ -50,27 +50,27 @@ namespace Banshee.Gui.Dialogs
         public AboutDialog() : base()
         {
             // build authors page
-            List<string> authors = new List<string> ();            
+            List<string> authors = new List<string> ();
             authors.Add (Catalog.GetString ("Primary Development"));
             authors.Add (String.Empty);
-            
+
             foreach (ProductAuthor author in ProductInformation.Authors) {
                 authors.Add (String.Format("    {0} ({1})", author.Name, author.Role));
             }
-            
+
             authors.Add (String.Empty);
             authors.Add (Catalog.GetString("Contributors"));
             authors.Add (String.Empty);
-            
+
             foreach (string author in ProductInformation.Contributors) {
                 authors.Add (String.Format("    {0}", author));
             }
-            
+
             authors.Add (String.Empty);
-            
+
             // build translators page
             StringBuilder translation_credits = new StringBuilder ();
-            
+
             foreach (ProductTranslation translation in ProductInformation.Translations) {
                 translation_credits.Append (String.Format ("{0}\n", translation.LanguageName));
                 foreach (string person in translation.Translators) {
@@ -78,35 +78,35 @@ namespace Banshee.Gui.Dialogs
                 }
                 translation_credits.Append ("\n");
             }
-            
+
             SetUrlHook (delegate (Gtk.AboutDialog dialog, string link) {
                 Banshee.Web.Browser.Open (link);
             });
-            
+
             // TODO: We should really use ProgramName in the future rather
             // than plain Name, since it's been depreciated. We can't do that
-            // yet though since it breaks stuff for other people. 
+            // yet though since it breaks stuff for other people.
             Name = "Banshee";
             Logo = Gdk.Pixbuf.LoadFromResource (ApplicationContext.Debugging ? /*"jcastro.png"*/ "banshee-logo.png" : "banshee-logo.png");
-            Version = Banshee.ServiceStack.Application.DisplayVersion == Banshee.ServiceStack.Application.Version 
+            Version = Banshee.ServiceStack.Application.DisplayVersion == Banshee.ServiceStack.Application.Version
                 ? Banshee.ServiceStack.Application.DisplayVersion
-                : String.Format ("{0} ({1})", 
-                    Banshee.ServiceStack.Application.DisplayVersion, 
+                : String.Format ("{0} ({1})",
+                    Banshee.ServiceStack.Application.DisplayVersion,
                     Banshee.ServiceStack.Application.Version);
             Comments = Catalog.GetString ("Extraordinary Multimedia Management and Playback");
             Copyright = String.Format (Catalog.GetString (
-                "Copyright \u00a9 2005\u2013{0} Novell, Inc.\n" + 
+                "Copyright \u00a9 2005\u2013{0} Novell, Inc.\n" +
                 "Copyright \u00a9 2005\u2013{0} Others\n" +
                 "Copyright \u00a9 2005 Aaron Bockover"
             ), "2009");
-            
+
             Website = "http://banshee-project.org/";;
             WebsiteLabel = Catalog.GetString ("Banshee Website");
 
             Authors = authors.ToArray ();
             Artists = ProductInformation.Artists;
             TranslatorCredits = translation_credits.ToString ();
-            
+
             License = ProductInformation.License;
             WrapLicense = true;
             Response += OnResponse;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/BansheeDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/BansheeDialog.cs
index cea924e..e6e28bc 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/BansheeDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/BansheeDialog.cs
@@ -40,18 +40,18 @@ namespace Banshee.Gui.Dialogs
         protected AccelGroup AccelGroup {
             get { return accel_group; }
         }
-        
+
         public BansheeDialog (string title) : this (title, null)
         {
         }
-        
+
         public BansheeDialog (string title, Window parent) : base ()
         {
             Title = title;
             BorderWidth = 5;
             Visible = false;
             HasSeparator = false;
-            
+
             if (parent == null) {
                 GtkElementsService service = ServiceManager.Get<GtkElementsService> ();
                 if (service != null) {
@@ -60,24 +60,24 @@ namespace Banshee.Gui.Dialogs
             } else {
                 TransientFor = parent;
             }
-            
+
             WindowPosition = WindowPosition.CenterOnParent;
             DestroyWithParent = true;
-            
+
             accel_group = new AccelGroup ();
             AddAccelGroup (accel_group);
         }
-        
+
         public Button AddDefaultCloseButton ()
         {
             return AddStockButton (Stock.Close, ResponseType.Close);
         }
-        
+
         public new Button AddButton (string message, ResponseType response)
         {
             return AddButton (message, response, false);
         }
-        
+
         public Button AddStockButton (string stock, ResponseType response)
         {
             return AddStockButton (stock, response, false);
@@ -92,7 +92,7 @@ namespace Banshee.Gui.Dialogs
         {
             return AddButton (stock, response, isDefault, true);
         }
-        
+
         public new Button AddButton (string message, ResponseType response, bool isDefault, bool isStock)
         {
             Button button = new Button (message);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ConfirmShutdownDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ConfirmShutdownDialog.cs
index dc593bc..013a600 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ConfirmShutdownDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ConfirmShutdownDialog.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using Gtk;
 using Mono.Unix;
@@ -50,11 +50,11 @@ namespace Banshee.Gui.Dialogs
             Message = Catalog.GetString(
                 "Closing Banshee now will cancel any currently running tasks. They cannot " +
                 "be resumed automatically the next time Banshee is run.");
-                
+
             IconNameStock = Stock.DialogQuestion;
-            
+
             Dialog.DefaultResponse = ResponseType.Cancel;
-            
+
             AddButton(Catalog.GetString("Quit anyway"), ResponseType.Ok, false);
             AddButton(Catalog.GetString("Continue running"), ResponseType.Cancel, true);
 
@@ -62,11 +62,11 @@ namespace Banshee.Gui.Dialogs
             foreach (Job job in scheduler.Jobs) {
                 AddJob (job);
             }
-            
+
             scheduler.JobAdded += AddJob;
             scheduler.JobRemoved += RemoveJob;
         }
-        
+
         public void AddString(string message)
         {
             (ListView.Model as ListStore).AppendValues(message, null);
@@ -93,13 +93,13 @@ namespace Banshee.Gui.Dialogs
             if (ListView == null || ListView.Model == null) {
                 return;
             }
-            
+
             for(int i = 0, n = ListView.Model.IterNChildren(); i < n; i++) {
                 TreeIter iter;
                 if(!ListView.Model.IterNthChild(out iter, i)) {
                     break;
                 }
-                    
+
                 if(ListView.Model.GetValue(iter, 1) == job) {
                     Banshee.Base.ThreadAssist.ProxyToMain(delegate {
                         (ListView.Model as ListStore).Remove(ref iter);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/DefaultApplicationHelperDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/DefaultApplicationHelperDialog.cs
index 0d6385b..637af9b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/DefaultApplicationHelperDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/DefaultApplicationHelperDialog.cs
@@ -63,7 +63,7 @@ namespace Banshee.Gui.Dialogs
                 }
             }
         }
-        
+
         private CheckButton remember;
         private DefaultApplicationHelperDialog () : base (null, DialogFlags.DestroyWithParent, MessageType.Question, ButtonsType.None,
                                                          Catalog.GetString ("Make Banshee the default media player?"),
@@ -79,9 +79,9 @@ namespace Banshee.Gui.Dialogs
             align.TopPadding = 6;
             align.Child = remember;
             align.Show ();
-            
+
             LabelVBox.PackEnd (align, false, false, 0);
-            
+
             AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.No, false);
             AddCustomButton (Catalog.GetString ("Make Banshee the Default"), Gtk.ResponseType.Yes, true).HasFocus = true;
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ErrorListDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ErrorListDialog.cs
index 353a8a5..b00dad0 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ErrorListDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ErrorListDialog.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Collections;
 using Mono.Unix;
@@ -41,32 +41,32 @@ namespace Banshee.Gui.Dialogs
         [Widget] private TreeView list_view;
         [Widget] private Image icon_image;
         [Widget] private Expander details_expander;
-        
+
         private ListStore simple_model;
         private AccelGroup accel_group;
-        
+
         public ErrorListDialog() : base("ErrorListDialog")
         {
             accel_group = new AccelGroup();
             Dialog.AddAccelGroup(accel_group);
-		    
+		
             list_view.SetSizeRequest(-1, 120);
             details_expander.Activated += delegate {
                 ConfigureGeometry();
             };
-            
+
             Dialog.Realized += delegate {
                 ConfigureGeometry();
             };
         }
-        
+
         private void ConfigureGeometry()
         {
             Gdk.Geometry limits = new Gdk.Geometry();
-            
+
             limits.MinWidth = Dialog.SizeRequest().Width;
             limits.MaxWidth = Gdk.Screen.Default.Width;
-            
+
             if(details_expander.Expanded) {
                 limits.MinHeight = Dialog.SizeRequest().Height + list_view.SizeRequest().Height;
                 limits.MaxHeight = Gdk.Screen.Default.Height;
@@ -74,8 +74,8 @@ namespace Banshee.Gui.Dialogs
                 limits.MinHeight = -1;
                 limits.MaxHeight = -1;
             }
-            
-            Dialog.SetGeometryHints(Dialog, limits, 
+
+            Dialog.SetGeometryHints(Dialog, limits,
                 Gdk.WindowHints.MaxSize | Gdk.WindowHints.MinSize);
         }
 
@@ -83,7 +83,7 @@ namespace Banshee.Gui.Dialogs
         {
             AddButton(message, response, false);
         }
-        
+
         public void AddStockButton(string stock, ResponseType response)
         {
             AddStockButton(stock, response, false);
@@ -98,7 +98,7 @@ namespace Banshee.Gui.Dialogs
         {
             AddButton(stock, response, isDefault, true);
         }
-        
+
         public void AddButton(string message, ResponseType response, bool isDefault, bool isStock)
         {
             Button button = new Button(message);
@@ -110,32 +110,32 @@ namespace Banshee.Gui.Dialogs
 
             if(isDefault) {
                 Dialog.DefaultResponse = response;
-                button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return, 
+                button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return,
                     0, AccelFlags.Visible);
             }
         }
-        
+
         public string Header {
-            set { 
+            set {
                 Dialog.Title = value;
-                header_label.Markup = String.Format("<b><big>{0}</big></b>", 
+                header_label.Markup = String.Format("<b><big>{0}</big></b>",
                     GLib.Markup.EscapeText(value));
             }
         }
-        
+
         public void AppendString(string item)
         {
             if(list_view.Model == null) {
                 CreateSimpleModel();
             }
-            
+
             if(list_view.Model != simple_model) {
                 throw new ApplicationException("A custom model is in use");
             }
-            
+
             simple_model.AppendValues(item);
         }
-        
+
         private void CreateSimpleModel()
         {
             simple_model = new ListStore(typeof(string));
@@ -143,19 +143,19 @@ namespace Banshee.Gui.Dialogs
             list_view.AppendColumn("Error", new CellRendererText(), "text", 0);
             list_view.HeadersVisible = false;
         }
-        
+
         public string Message {
             set { message_label.Text = value; }
         }
-        
+
         public string IconName {
             set { icon_image.SetFromIconName(value, IconSize.Dialog); }
         }
-        
+
         public string IconNameStock {
             set { icon_image.SetFromStock(value, IconSize.Dialog); }
         }
-        
+
         public TreeView ListView {
             get { return list_view; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/FileChooserDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/FileChooserDialog.cs
index 415b674..d82efc8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/FileChooserDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/FileChooserDialog.cs
@@ -1,4 +1,4 @@
-// 
+//
 // FileChooserDialog.cs
 //
 // Author:
@@ -60,26 +60,26 @@ namespace Banshee.Gui.Dialogs
         }
 
         public FileChooserDialog (string title, FileChooserAction action) : this (title, null, action)
-        {            
+        {
         }
-        
-        public FileChooserDialog (string title, Window parent, FileChooserAction action) : 
+
+        public FileChooserDialog (string title, Window parent, FileChooserAction action) :
             base (title, parent, action)
         {
             LocalOnly = Banshee.IO.Provider.LocalOnly;
             SetCurrentFolderUri (LastFileChooserUri.Get (Environment.GetFolderPath (Environment.SpecialFolder.Personal)));
             WindowPosition = WindowPosition.Center;
         }
-        
+
         protected override void OnResponse (ResponseType response)
         {
             base.OnResponse (response);
-            
+
             if (CurrentFolderUri != null) {
                 LastFileChooserUri.Set (CurrentFolderUri);
             }
         }
-        
+
         public static readonly SchemaEntry<string> LastFileChooserUri = new SchemaEntry<string> (
             "player_window", "last_file_chooser_uri",
             String.Empty,
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeDialog.cs
index fc37c0c..1ffb414 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeDialog.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using Gtk;
 
@@ -40,12 +40,12 @@ namespace Banshee.Gui.Dialogs
         public GladeDialog(string name, Glade.XML resource) : base(name, resource)
         {
         }
-    
+
         public virtual ResponseType Run()
         {
             return (ResponseType)Dialog.Run();
         }
-        
+
         public Dialog Dialog {
             get { return (Dialog)Window; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeWindow.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeWindow.cs
index 11543b2..1afbe80 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeWindow.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/GladeWindow.cs
@@ -25,36 +25,36 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using Gtk;
 using Glade;
 
 namespace Banshee.Gui.Dialogs
 {
-    public abstract class GladeWindow 
+    public abstract class GladeWindow
     {
         private string window_name;
         private Glade.XML glade;
         private Window window;
-        
+
         protected GladeWindow()
         {
         }
 
         public GladeWindow(string name) : this(name, new Glade.XML(
-            System.Reflection.Assembly.GetExecutingAssembly(), "banshee-dialogs.glade", name, 
+            System.Reflection.Assembly.GetExecutingAssembly(), "banshee-dialogs.glade", name,
             Banshee.ServiceStack.Application.InternalName))
         {
         }
 
         public GladeWindow(string name, Glade.XML glade)
         {
-            window_name = name;        
-            this.glade = glade; 
+            window_name = name;
+            this.glade = glade;
             this.glade.Autoconnect(this);
         }
-        
+
         public virtual void Destroy()
         {
             Window.Destroy();
@@ -67,13 +67,13 @@ namespace Banshee.Gui.Dialogs
         public string Name {
             get { return window_name; }
         }
-        
+
         public Window Window {
             get {
                 if(window == null) {
                     window = (Window)glade.GetWidget(window_name);
                 }
-                
+
                 return window;
             }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs
index 5d0fabf..2134476 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ImageFileChooserDialog.cs
 //
 // Author:
@@ -35,41 +35,41 @@ namespace Banshee.Gui.Dialogs
     public class ImageFileChooserDialog : Banshee.Gui.Dialogs.FileChooserDialog
     {
         private Image preview = new Image ();
-    
+
         public ImageFileChooserDialog () : base (Catalog.GetString("Select album cover image"), FileChooserAction.Open)
         {
             AddButton (Stock.Cancel, ResponseType.Cancel);
             AddButton (Stock.Open, ResponseType.Ok);
-            
+
             DefaultResponse = ResponseType.Ok;
-            
+
             FileFilter filter = new FileFilter ();
             filter.Name = Catalog.GetString ("All image files");
             filter.AddMimeType ("image/jpeg");
             filter.AddMimeType ("image/png");
             AddFilter (filter);
             Filter = filter;
-            
+
             filter = new FileFilter ();
             filter.Name = Catalog.GetString ("JPEG image files");
             filter.AddMimeType ("image/jpeg");
             AddFilter (filter);
-            
+
             filter = new FileFilter ();
             filter.Name = Catalog.GetString ("PNG image files");
             filter.AddMimeType ("image/png");
             AddFilter (filter);
-            
+
             PreviewWidget = preview;
         }
-        
+
         protected override void OnUpdatePreview()
         {
             try {
                 if (String.IsNullOrEmpty (PreviewFilename)) {
                     throw new ApplicationException ();
                 }
-                
+
                 Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (PreviewFilename);
                 preview.Pixbuf = pixbuf.ScaleSimple (100, 100, Gdk.InterpType.Bilinear);
                 preview.Show ();
@@ -77,5 +77,5 @@ namespace Banshee.Gui.Dialogs
                 preview.Hide ();
             }
         }
-    }        
+    }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/OpenLocationDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/OpenLocationDialog.cs
index 541ce61..b7cdba9 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/OpenLocationDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/OpenLocationDialog.cs
@@ -1,4 +1,4 @@
-// 
+//
 // OpenLocationDialog.cs
 //
 // Author:
@@ -42,56 +42,56 @@ namespace Banshee.Gui.Dialogs
         [Widget] private HBox location_box;
         private ComboBoxEntry address_entry;
         private Button browse_button;
-        
+
         private List<string> history = new List<string>();
-    
+
         public OpenLocationDialog() : base("OpenLocationDialog")
         {
             address_entry = ComboBoxEntry.NewText();
             address_entry.Show();
             address_entry.Entry.Activated += OnEntryActivated;
-            
+
             browse_button = new Button(Catalog.GetString("Browse..."));
             browse_button.Clicked += OnBrowseClicked;
             browse_button.Show();
-            
+
             location_box.PackStart(address_entry, true, true, 0);
             location_box.PackStart(browse_button, false, false, 0);
-            
+
             Dialog.Response += OnResponse;
             LoadHistory();
-            
+
             address_entry.Entry.HasFocus = true;
         }
-        
+
         private void OnEntryActivated(object o, EventArgs args)
         {
             Dialog.Respond(ResponseType.Ok);
         }
-        
+
         private void OnResponse(object o, ResponseArgs args)
         {
             if(args.ResponseId != ResponseType.Ok) {
                 return;
             }
-            
+
             List<string> filtered_history = new List<string>();
-            
+
             history.Insert(0, Address);
             foreach(string uri in history) {
                 if(!filtered_history.Contains(uri)) {
                     filtered_history.Add(uri);
                 }
             }
-            
+
             string [] trimmed_history = new string[Math.Min(15, filtered_history.Count)];
             for(int i = 0; i < trimmed_history.Length; i++) {
                 trimmed_history[i] = filtered_history[i] as string;
             }
-            
+
             OpenLocationHistorySchema.Set(trimmed_history);
         }
-        
+
         private void OnBrowseClicked(object o, EventArgs args)
         {
             FileChooserDialog chooser = new FileChooserDialog(
@@ -99,37 +99,37 @@ namespace Banshee.Gui.Dialogs
                 null,
                 FileChooserAction.Open
             );
-            
+
             chooser.SetCurrentFolder(Environment.GetFolderPath(Environment.SpecialFolder.Personal));
             chooser.AddButton(Stock.Cancel, ResponseType.Cancel);
             chooser.AddButton(Stock.Open, ResponseType.Ok);
             chooser.DefaultResponse = ResponseType.Ok;
             chooser.LocalOnly = false;
-            
+
             if(chooser.Run() == (int)ResponseType.Ok) {
                 address_entry.Entry.Text = chooser.Uri;
             }
-            
+
             chooser.Destroy();
         }
-        
+
         private void LoadHistory()
         {
             string [] history_array = OpenLocationHistorySchema.Get();
             if(history_array == null || history_array.Length == 0) {
                 return;
             }
-            
+
             foreach(string uri in history_array) {
                 history.Add(uri);
                 address_entry.AppendText(uri);
             }
         }
-        
+
         public string Address {
             get { return address_entry.Entry.Text; }
         }
-        
+
         public static readonly SchemaEntry<string []> OpenLocationHistorySchema = new SchemaEntry<string []>(
             "player_window", "open_location_history",
             new string [] { String.Empty },
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/SeekDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/SeekDialog.cs
index ef01290..f644174 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/SeekDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/SeekDialog.cs
@@ -42,15 +42,15 @@ namespace Banshee.Gui.Dialogs
     {
         [Widget] private VBox seek_box;
         private ConnectedSeekSlider seek_slider;
-        
+
         public SeekDialog () : base ("SeekDialog")
         {
             seek_slider = new ConnectedSeekSlider ();
             seek_slider.StreamPositionLabel.FormatString = "<big>{0}</big>";
-            
+
             seek_box.PackStart (seek_slider, false, false, 0);
             seek_box.ShowAll ();
-            
+
             Dialog.SetSizeRequest (300, -1);
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropList.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropList.cs
index 4619ea2..5525d8f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropList.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropList.cs
@@ -33,8 +33,8 @@ using System.Collections.Generic;
 using System.Runtime.InteropServices;
 using Gtk;
 
-namespace Banshee.Gui.DragDrop 
-{   
+namespace Banshee.Gui.DragDrop
+{
     public class DragDropList<T> : List<T>
     {
         public DragDropList() : base()
@@ -45,7 +45,7 @@ namespace Banshee.Gui.DragDrop
         {
             Add(o);
         }
-        
+
         public DragDropList(T o, Gtk.SelectionData selectionData, Gdk.Atom target) : base()
         {
             Add(o);
@@ -57,13 +57,13 @@ namespace Banshee.Gui.DragDrop
             byte [] data = this;
             selectionData.Set(target, 8, data, data.Length);
         }
-        
+
         public static implicit operator byte [](DragDropList<T> transferrable)
         {
             IntPtr handle = (IntPtr)GCHandle.Alloc(transferrable);
             return System.Text.Encoding.ASCII.GetBytes(Convert.ToString(handle));
         }
-        
+
         public static implicit operator DragDropList<T>(byte [] transferrable)
         {
             try {
@@ -77,7 +77,7 @@ namespace Banshee.Gui.DragDrop
                 return null;
             }
         }
-        
+
         public static implicit operator DragDropList<T>(Gtk.SelectionData transferrable)
         {
             return transferrable.Data;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropTarget.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropTarget.cs
index cd4fa36..7e7bf17 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropTarget.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropTarget.cs
@@ -35,14 +35,14 @@ namespace Banshee.Gui.DragDrop
         Source,
         UriList
     };
-        
+
     public static class DragDropTarget
     {
-        public static readonly TargetEntry Source = 
-            new TargetEntry ("application/x-banshee-source", TargetFlags.App, 
+        public static readonly TargetEntry Source =
+            new TargetEntry ("application/x-banshee-source", TargetFlags.App,
                 (uint)DragDropTargetType.Source);
 
-        public static readonly TargetEntry UriList = 
+        public static readonly TargetEntry UriList =
             new TargetEntry ("text/uri-list", 0, (uint)DragDropTargetType.UriList);
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropUtilities.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropUtilities.cs
index f334259..ca353db 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropUtilities.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.DragDrop/DragDropUtilities.cs
@@ -59,11 +59,11 @@ namespace Banshee.Gui.DragDrop
         {
             return data == null ? new string [0] : data.Split (newline, StringSplitOptions.RemoveEmptyEntries);
         }
-        
+
         public static TreePath [] SelectionDataToTreePaths(Gtk.SelectionData data)
         {
             string rawData = String.Empty;
-            
+
             try {
                 rawData = SelectionDataToString(data);
                 return SelectionDataToTreePaths(rawData);
@@ -71,12 +71,12 @@ namespace Banshee.Gui.DragDrop
                 return null;
             }
         }
-        
+
         public static TreePath [] SelectionDataToTreePaths(string data)
         {
             ArrayList pathList = new ArrayList();
             string [] strPaths = SplitSelectionData(data);
-            
+
             foreach(string strPath in strPaths) {
                 try {
                     string finalStrPath = strPath.Trim();
@@ -85,22 +85,22 @@ namespace Banshee.Gui.DragDrop
                     }
                 } catch(Exception) { }
             }
-        
+
             return pathList.ToArray(typeof(TreePath)) as TreePath [];
         }
-        
+
         public static byte [] TreeViewSelectionPathsToBytes(TreeView view)
         {
             if(view.Selection.CountSelectedRows() <= 0) {
                 return null;
             }
-            
+
             string selData = null;
 
             foreach(TreePath p in view.Selection.GetSelectedRows()) {
                 selData += p.ToString() + "\r\n";
             }
-            
+
             return System.Text.Encoding.ASCII.GetBytes(selData);
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/AlbumArtistEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/AlbumArtistEntry.cs
index 899c515..f96ccb7 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/AlbumArtistEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/AlbumArtistEntry.cs
@@ -43,13 +43,13 @@ namespace Banshee.Gui.TrackEditor
         private object tooltip_host = Hyena.Gui.TooltipSetter.CreateHost ();
         private Button track_artist_sync_button;
         private PageNavigationEntry track_artist_entry;
-        
-        public AlbumArtistEntry (Button trackArtistSyncButton, PageNavigationEntry titleEntry, 
+
+        public AlbumArtistEntry (Button trackArtistSyncButton, PageNavigationEntry titleEntry,
             PageNavigationEntry trackArtistEntry) : base ()
         {
             track_artist_sync_button = trackArtistSyncButton;
             track_artist_entry = trackArtistEntry;
-        
+
             enable_compilation.Label = Catalog.GetString ("Com_pilation Album Artist:");
             enable_compilation.UseUnderline = true;
 
@@ -82,7 +82,7 @@ namespace Banshee.Gui.TrackEditor
         public string Text {
             get { return entry.Text; }
             set { entry.Text = value ?? String.Empty; }
-        }   
+        }
 
         private void OnChanged (object o, EventArgs args)
         {
@@ -102,7 +102,7 @@ namespace Banshee.Gui.TrackEditor
                 track_artist_sync_button.Sensitive = !IsCompilation;
                 track_artist_sync_button.Visible = !IsCompilation;
             }
-            
+
             if (track_artist_entry.ForwardButton != null) {
                 track_artist_entry.ForwardButton.Visible = IsCompilation;
             }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/BasicTrackDetailsPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/BasicTrackDetailsPage.cs
index 4026596..d3fd95b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/BasicTrackDetailsPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/BasicTrackDetailsPage.cs
@@ -73,14 +73,14 @@ namespace Banshee.Gui.TrackEditor
             );
 
             PageNavigationEntry track_artist_entry = new PageNavigationEntry (Dialog, "CoreArtists", "Name");
-            FieldPage.FieldSlot track_artist_slot = AddField (left, track_artist_entry, 
+            FieldPage.FieldSlot track_artist_slot = AddField (left, track_artist_entry,
                 Catalog.GetString ("Set all track artists to this value"),
                 delegate { return Catalog.GetString ("Track _Artist:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((PageNavigationEntry)widget).Text = track.ArtistName; },
                 delegate (EditorTrackInfo track, Widget widget) { track.ArtistName = ((PageNavigationEntry)widget).Text; }
             );
 
-            AlbumArtistEntry album_artist_entry = new AlbumArtistEntry (track_artist_slot.SyncButton, 
+            AlbumArtistEntry album_artist_entry = new AlbumArtistEntry (track_artist_slot.SyncButton,
                 title_entry, track_artist_entry);
             AddField (left, null, album_artist_entry,
                 Catalog.GetString ("Set all compilation album artists to these values"), null,
@@ -102,14 +102,14 @@ namespace Banshee.Gui.TrackEditor
                 }
             };
 
-            AddField (left, new TextEntry ("CoreAlbums", "Title"), 
+            AddField (left, new TextEntry ("CoreAlbums", "Title"),
                 Catalog.GetString ("Set all album titles to this value"),
                 delegate { return Catalog.GetString ("Albu_m Title:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((TextEntry)widget).Text = track.AlbumTitle; },
                 delegate (EditorTrackInfo track, Widget widget) { track.AlbumTitle = ((TextEntry)widget).Text; }
             );
 
-            AddField (left, new GenreEntry (), 
+            AddField (left, new GenreEntry (),
                 Catalog.GetString ("Set all genres to this value"),
                 delegate { return Catalog.GetString ("_Genre:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((GenreEntry)widget).Value = track.Genre; },
@@ -119,14 +119,14 @@ namespace Banshee.Gui.TrackEditor
             // Right
 
             /* Translators: "of" is the word beteen a track/disc number and the total count. */
-            AddField (right, new RangeEntry (Catalog.GetString ("of"), !MultipleTracks 
+            AddField (right, new RangeEntry (Catalog.GetString ("of"), !MultipleTracks
                 ? null as RangeEntry.RangeOrderClosure
                 : delegate (RangeEntry entry) {
                     for (int i = 0, n = Dialog.TrackCount; i < n; i++) {
                         EditorTrackInfo track = Dialog.LoadTrack (i);
 
                         if (Dialog.CurrentTrackIndex == i) {
-                            // In this case the writeClosure is invoked, 
+                            // In this case the writeClosure is invoked,
                             // which will take care of updating the TrackInfo
                             entry.From.Value = i + 1;
                             entry.To.Value = n;
@@ -135,7 +135,7 @@ namespace Banshee.Gui.TrackEditor
                             track.TrackCount = n;
                         }
                     }
-                }, Catalog.GetString ("Automatically set track number and count")), 
+                }, Catalog.GetString ("Automatically set track number and count")),
                 null,
                 delegate { return Catalog.GetString ("Track _Number:"); },
                 delegate (EditorTrackInfo track, Widget widget) {
@@ -151,7 +151,7 @@ namespace Banshee.Gui.TrackEditor
                 FieldOptions.NoSync
             );
 
-            AddField (right, new RangeEntry (Catalog.GetString ("of")), 
+            AddField (right, new RangeEntry (Catalog.GetString ("of")),
                 // Catalog.GetString ("Automatically set disc number and count"),
                 Catalog.GetString ("Set all disc numbers and counts to these values"),
                 delegate { return Catalog.GetString ("_Disc Number:"); },
@@ -169,8 +169,8 @@ namespace Banshee.Gui.TrackEditor
             );
 
             Label year_label = EditorUtilities.CreateLabel (null);
-            album_artist_entry.LabelWidget.SizeAllocated += delegate { 
-                year_label.HeightRequest = album_artist_entry.LabelWidget.Allocation.Height; 
+            album_artist_entry.LabelWidget.SizeAllocated += delegate {
+                year_label.HeightRequest = album_artist_entry.LabelWidget.Allocation.Height;
             };
             SpinButtonEntry year_entry = new SpinButtonEntry (0, 3000, 1);
             year_entry.Numeric = true;
@@ -182,7 +182,7 @@ namespace Banshee.Gui.TrackEditor
                 FieldOptions.Shrink
             );
 
-            AddField (right, new RatingEntry (), 
+            AddField (right, new RatingEntry (),
                 Catalog.GetString ("Set all ratings to this value"),
                 delegate { return Catalog.GetString ("_Rating:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((RatingEntry)widget).Value = track.Rating; },
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorEditableUndoAdapter.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorEditableUndoAdapter.cs
index 0b47fe5..60934d8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorEditableUndoAdapter.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorEditableUndoAdapter.cs
@@ -36,7 +36,7 @@ namespace Banshee.Gui.TrackEditor
 {
     public class EditorEditableUndoAdapter<T> where T : Widget, Editable
     {
-        private Dictionary<EditorTrackInfo, EditableUndoAdapter<T>> undo_adapters 
+        private Dictionary<EditorTrackInfo, EditableUndoAdapter<T>> undo_adapters
             = new Dictionary<EditorTrackInfo, EditableUndoAdapter<T>> ();
         private EditableUndoAdapter<T> current_adapter;
 
@@ -47,18 +47,18 @@ namespace Banshee.Gui.TrackEditor
                 current_adapter = null;
             }
         }
-        
+
         public void ConnectUndo (T entry, EditorTrackInfo track)
         {
             DisconnectUndo ();
-        
+
             if (undo_adapters.ContainsKey (track)) {
                 current_adapter = undo_adapters[track];
             } else {
                 current_adapter = new EditableUndoAdapter<T> (entry);
                 undo_adapters.Add (track, current_adapter);
             }
-            
+
             current_adapter.Connect ();
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorMode.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorMode.cs
index 89ce95c..ab4d8fb 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorMode.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorMode.cs
@@ -30,7 +30,7 @@ using System;
 
 namespace Banshee.Gui.TrackEditor
 {
-    public enum EditorMode 
+    public enum EditorMode
     {
         Edit,
         View
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorTrackInfo.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorTrackInfo.cs
index 3ce7b90..5667056 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorTrackInfo.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorTrackInfo.cs
@@ -42,17 +42,17 @@ namespace Banshee.Gui.TrackEditor
     {
         private TagLib.File taglib_file;
         private bool taglib_file_exists = true;
-        
+
         public EditorTrackInfo (TrackInfo sourceTrack)
         {
             source_track = sourceTrack;
             TrackInfo.ExportableMerge (source_track, this);
         }
-        
+
         public void GenerateDiff ()
         {
             diff_count = 0;
-            
+
             foreach (KeyValuePair<string, PropertyInfo> iter in GetExportableProperties (typeof (TrackInfo))) {
                 try {
                     PropertyInfo property = iter.Value;
@@ -70,29 +70,29 @@ namespace Banshee.Gui.TrackEditor
                 }
             }
         }
-        
+
         private int diff_count;
         public int DiffCount {
             get { return diff_count; }
         }
-        
+
         private int editor_index;
         public int EditorIndex {
             get { return editor_index; }
             set { editor_index = value; }
         }
-        
+
         private int editor_count;
         public int EditorCount {
             get { return editor_count; }
             set { editor_count = value; }
         }
-        
+
         private TrackInfo source_track;
         public TrackInfo SourceTrack {
             get { return source_track; }
         }
-        
+
         public TagLib.File TaglibFile {
             get {
                 if (taglib_file != null) {
@@ -100,7 +100,7 @@ namespace Banshee.Gui.TrackEditor
                 } else if (!taglib_file_exists) {
                     return null;
                 }
-                    
+
                 try {
                     taglib_file = StreamTagger.ProcessUri (Uri);
                     if (taglib_file != null) {
@@ -111,7 +111,7 @@ namespace Banshee.Gui.TrackEditor
                         Hyena.Log.Exception ("Cannot load TagLib file", e);
                     }
                 }
-                
+
                 taglib_file_exists = false;
                 return null;
             }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorUtilities.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorUtilities.cs
index 5bee8f0..6e0a4c4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorUtilities.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/EditorUtilities.cs
@@ -35,14 +35,14 @@ namespace Banshee.Gui.TrackEditor
     public static class EditorUtilities
     {
         public const int RowSpacing = 5;
-                
+
         public static Label CreateLabel (string text)
         {
             Label label = new Label (text);
             label.Xalign = 0.0f;
             return label;
         }
-    
+
         public static VBox CreateVBox ()
         {
             VBox box = new VBox ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ExtraTrackDetailsPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ExtraTrackDetailsPage.cs
index d43530e..8047cdf 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ExtraTrackDetailsPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ExtraTrackDetailsPage.cs
@@ -35,15 +35,15 @@ using Banshee.Collection;
 namespace Banshee.Gui.TrackEditor
 {
     public class ExtraTrackDetailsPage : FieldPage, ITrackEditorPage
-    {        
+    {
         public int Order {
             get { return 20; }
         }
-                                    
+
         public string Title {
             get { return Catalog.GetString ("Extra"); }
         }
-        
+
         protected override void AddFields ()
         {
             AddField (this, new TextEntry ("CoreTracks", "Composer"),
@@ -52,19 +52,19 @@ namespace Banshee.Gui.TrackEditor
                 delegate (EditorTrackInfo track, Widget widget) { ((TextEntry)widget).Text = track.Composer; },
                 delegate (EditorTrackInfo track, Widget widget) {  track.Composer = ((TextEntry)widget).Text; }
             );
-            
+
             AddField (this, new TextEntry ("CoreTracks", "Conductor"),
                 Catalog.GetString ("Set all conductors to this value"),
                 delegate { return Catalog.GetString ("Con_ductor:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((TextEntry)widget).Text = track.Conductor; },
                 delegate (EditorTrackInfo track, Widget widget) { track.Conductor = ((TextEntry)widget).Text; }
             );
-            
+
             HBox box = new HBox ();
             box.Spacing = 12;
             box.Show ();
             PackStart (box, false, false, 0);
-            
+
             AddField (box, new TextEntry ("CoreTracks", "Grouping"),
                 Catalog.GetString ("Set all groupings to this value"),
                 delegate { return Catalog.GetString ("_Grouping:"); },
@@ -76,7 +76,7 @@ namespace Banshee.Gui.TrackEditor
             bpm_entry.Digits = 0;
             bpm_entry.MaxLength = 3;
             bpm_entry.Numeric = true;
-            AddField (box, bpm_entry, 
+            AddField (box, bpm_entry,
                 Catalog.GetString ("Set all beats per minute to this value"),
                 delegate { return Catalog.GetString ("Bea_ts Per Minute:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((SpinButtonEntry)widget).Value = track.Bpm; },
@@ -88,7 +88,7 @@ namespace Banshee.Gui.TrackEditor
             copyright_box.Spacing = 12;
             copyright_box.Show ();
             PackStart (copyright_box, true, true, 0);
-            
+
             AddField (copyright_box, new TextEntry ("CoreTracks", "Copyright"),
                 Catalog.GetString ("Set all copyrights to this value"),
                 delegate { return Catalog.GetString ("Copyrig_ht:"); },
@@ -106,7 +106,7 @@ namespace Banshee.Gui.TrackEditor
             TextViewEntry comment_entry = new TextViewEntry ();
             comment_entry.HscrollbarPolicy = PolicyType.Automatic;
             comment_entry.TextView.WrapMode = WrapMode.WordChar;
-            AddField (this, comment_entry, 
+            AddField (this, comment_entry,
                 Catalog.GetString ("Set all comments to this value"),
                 delegate { return Catalog.GetString ("Co_mment:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((TextViewEntry)widget).Text = track.Comment; },
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/FieldPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/FieldPage.cs
index 355ddc8..6143f88 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/FieldPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/FieldPage.cs
@@ -45,12 +45,12 @@ namespace Banshee.Gui.TrackEditor
         protected TrackEditorDialog Dialog {
             get { return dialog; }
         }
-        
+
         private EditorTrackInfo current_track;
         protected EditorTrackInfo CurrentTrack {
             get { return current_track; }
         }
-        
+
         public struct FieldSlot
         {
             public Widget Parent;
@@ -62,71 +62,71 @@ namespace Banshee.Gui.TrackEditor
             public FieldValueClosure ReadClosure;
             public FieldValueClosure WriteClosure;
         }
-        
+
         private object tooltip_host;
 
         private List<FieldSlot> field_slots = new List<FieldSlot> ();
         public IEnumerable<FieldSlot> FieldSlots {
             get { return field_slots; }
         }
-        
+
         public FieldPage ()
         {
             Spacing = EditorUtilities.RowSpacing;
             tooltip_host = TooltipSetter.CreateHost ();
         }
-        
+
         public void Initialize (TrackEditorDialog dialog)
         {
             this.dialog = dialog;
             AddFields ();
         }
-        
+
         protected virtual void AddFields ()
         {
         }
-        
+
         public virtual bool MultipleTracks {
             get { return dialog.TrackCount > 1; }
         }
-        
+
         public virtual Widget Widget {
             get { return this; }
         }
-        
+
         public Gtk.Widget TabWidget {
             get { return null; }
         }
-        
-        public virtual PageType PageType { 
+
+        public virtual PageType PageType {
             get { return PageType.Edit; }
         }
-    
-        public FieldSlot AddField (Box parent, Widget field, string syncTooltip, FieldLabelClosure labelClosure, 
+
+        public FieldSlot AddField (Box parent, Widget field, string syncTooltip, FieldLabelClosure labelClosure,
             FieldValueClosure readClosure, FieldValueClosure writeClosure)
         {
             return AddField (parent, EditorUtilities.CreateLabel (String.Empty), field, syncTooltip,
                 labelClosure, readClosure, writeClosure, FieldOptions.None);
         }
-        
-        public FieldSlot AddField (Box parent, Widget field, string syncTooltip, FieldLabelClosure labelClosure, 
+
+        public FieldSlot AddField (Box parent, Widget field, string syncTooltip, FieldLabelClosure labelClosure,
             FieldValueClosure readClosure, FieldValueClosure writeClosure, FieldOptions options)
         {
             return AddField (parent, EditorUtilities.CreateLabel (String.Empty), field, syncTooltip,
                 labelClosure, readClosure, writeClosure, options);
         }
-        
-        public FieldSlot AddField (Box parent, Widget label, Widget field, string syncTooltip, 
+
+        public FieldSlot AddField (Box parent, Widget label, Widget field, string syncTooltip,
             FieldLabelClosure labelClosure, FieldValueClosure readClosure, FieldValueClosure writeClosure)
         {
             return AddField (parent, label, field, syncTooltip, labelClosure, readClosure, writeClosure, FieldOptions.None);
         }
-        
-        public FieldSlot AddField (Box parent, Widget label, Widget field, string syncTooltip, FieldLabelClosure labelClosure, 
+
+        public FieldSlot AddField (Box parent, Widget label, Widget field, string syncTooltip, FieldLabelClosure labelClosure,
             FieldValueClosure readClosure, FieldValueClosure writeClosure, FieldOptions options)
         {
             FieldSlot slot = new FieldSlot ();
-            
+
             slot.Parent = parent;
             slot.Label = label;
             slot.Field = field;
@@ -144,14 +144,14 @@ namespace Banshee.Gui.TrackEditor
                     });
                 };
             }
-            
+
             Table table = new Table (1, 1, false);
             table.ColumnSpacing = 1;
-            
-            table.Attach (field, 0, 1, 1, 2, 
-                AttachOptions.Expand | AttachOptions.Fill, 
+
+            table.Attach (field, 0, 1, 1, 2,
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Fill, 0, 0);
-                
+
             IEditorField editor_field = field as IEditorField;
             if (editor_field != null) {
                 editor_field.Changed += delegate {
@@ -160,10 +160,10 @@ namespace Banshee.Gui.TrackEditor
                     }
                 };
             }
-            
+
             if (slot.SyncButton != null) {
-                table.Attach (slot.SyncButton, 1, 2, 1, 2, 
-                    AttachOptions.Fill, 
+                table.Attach (slot.SyncButton, 1, 2, 1, 2,
+                    AttachOptions.Fill,
                     AttachOptions.Fill, 0, 0);
             }
 
@@ -172,12 +172,12 @@ namespace Banshee.Gui.TrackEditor
                     ((Label)label).MnemonicWidget = field;
                 }
                 table.Attach (label, 0, table.NColumns, 0, 1,
-                    AttachOptions.Fill | AttachOptions.Expand, 
+                    AttachOptions.Fill | AttachOptions.Expand,
                     AttachOptions.Fill, 0, 0);
             }
-                
+
             table.ShowAll ();
-            
+
             if ((options & FieldOptions.Shrink) == 0) {
                 slot.Container = table;
                 parent.PackStart (table, false, false, 0);
@@ -188,7 +188,7 @@ namespace Banshee.Gui.TrackEditor
                 shrink.PackStart (table, false, false, 0);
                 parent.PackStart (shrink, false, false, 0);
             }
-            
+
             field_slots.Add (slot);
             return slot;
         }
@@ -197,19 +197,19 @@ namespace Banshee.Gui.TrackEditor
         {
             field_slots.Remove (slot);
         }
-        
+
         public virtual void LoadTrack (EditorTrackInfo track)
         {
             current_track = null;
-            
+
             foreach (FieldSlot slot in field_slots) {
                 UpdateLabel (track, slot);
                 slot.ReadClosure (track, slot.Field);
             }
-            
+
             current_track = track;
         }
-        
+
         private void UpdateLabel (EditorTrackInfo track, FieldSlot slot)
         {
             Label label = slot.Label as Label;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/GenreEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/GenreEntry.cs
index 13e27bd..1dbfb91 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/GenreEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/GenreEntry.cs
@@ -40,7 +40,7 @@ namespace Banshee.Gui.TrackEditor
     {
         private ListStore genre_model;
         private EditorEditableUndoAdapter<Entry> undo_adapter = new EditorEditableUndoAdapter<Entry> ();
-        
+
         public GenreEntry ()
         {
             genre_model = new ListStore (typeof (string));
@@ -55,7 +55,7 @@ namespace Banshee.Gui.TrackEditor
             //c.InlineSelection = true; // requires 2.12
             c.PopupSingleMatch = false;
             Entry.Completion = c;
-        
+
             foreach (string genre in ServiceManager.DbConnection.QueryEnumerable<string> (
                 "SELECT DISTINCT Genre FROM CoreTracks ORDER BY Genre")) {
                 if (!String.IsNullOrEmpty (genre)) {
@@ -63,17 +63,17 @@ namespace Banshee.Gui.TrackEditor
                 }
             }
         }
-        
+
         public void DisconnectUndo ()
         {
             undo_adapter.DisconnectUndo ();
         }
-        
+
         public void ConnectUndo (EditorTrackInfo track)
         {
             undo_adapter.ConnectUndo (Entry, track);
         }
-        
+
         public string Value {
             get { return Entry.Text; }
             set { Entry.Text = value ?? String.Empty; }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/HelpPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/HelpPage.cs
index 4602323..56d8497 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/HelpPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/HelpPage.cs
@@ -36,47 +36,47 @@ namespace Banshee.Gui.TrackEditor
     {
         private Box tab_widget;
         private TrackEditorDialog dialog;
-               
+
         public HelpPage () : base (0.5f, 0.5f, 0.0f, 0.0f)
         {
             Image help = new Image ();
             help.Pixbuf = Gdk.Pixbuf.LoadFromResource ("jcastro.png");
             help.Show ();
             Add (help);
-            
+
             tab_widget = new HBox ();
             tab_widget.Spacing = 2;
             tab_widget.PackStart (new Image (Stock.Help, IconSize.Menu), false, false, 0);
             tab_widget.PackStart (new Label (Title), true, true, 0);
             tab_widget.ShowAll ();
         }
-        
+
         public void Initialize (TrackEditorDialog dialog)
         {
             this.dialog = dialog;
         }
-        
+
         public void LoadTrack (EditorTrackInfo track)
         {
             dialog.Notebook.SetTabLabelPacking (this, false, false, PackType.End);
         }
-        
+
         public int Order {
             get { return 10000; }
         }
-        
+
         public string Title {
             get { return Catalog.GetString ("Help"); }
         }
-        
+
         public Widget TabWidget {
             get { return tab_widget; }
         }
-        
-        public PageType PageType { 
+
+        public PageType PageType {
             get { return PageType.Edit; }
         }
-        
+
         public Gtk.Widget Widget {
             get { return this; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ITrackEditorPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ITrackEditorPage.cs
index 475972e..957f7e1 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ITrackEditorPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/ITrackEditorPage.cs
@@ -33,10 +33,10 @@ using Banshee.Collection;
 namespace Banshee.Gui.TrackEditor
 {
     public interface ITrackEditorPage
-    {       
+    {
         void Initialize (TrackEditorDialog dialog);
         void LoadTrack (EditorTrackInfo track);
-        
+
         int Order { get; }
         string Title { get; }
         PageType PageType { get; }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LicenseEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LicenseEntry.cs
index 33eaea3..3efae68 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LicenseEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LicenseEntry.cs
@@ -41,7 +41,7 @@ namespace Banshee.Gui.TrackEditor
     {
         private ListStore license_model;
         private EditorEditableUndoAdapter<Entry> undo_adapter = new EditorEditableUndoAdapter<Entry> ();
-        
+
         public LicenseEntry ()
         {
             license_model = new ListStore (typeof (string));
@@ -64,17 +64,17 @@ namespace Banshee.Gui.TrackEditor
                 }
             }
         }
-        
+
         public void DisconnectUndo ()
         {
             undo_adapter.DisconnectUndo ();
         }
-        
+
         public void ConnectUndo (EditorTrackInfo track)
         {
             undo_adapter.ConnectUndo (Entry, track);
         }
-        
+
         public string Value {
             get { return Entry.Text; }
             set { Entry.Text = value ?? String.Empty; }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LyricsPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LyricsPage.cs
index a912024..133149a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LyricsPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/LyricsPage.cs
@@ -35,23 +35,23 @@ using Banshee.Collection;
 namespace Banshee.Gui.TrackEditor
 {
     public class LyricsPage : FieldPage, ITrackEditorPage
-    {    
+    {
         private TextViewEntry lyrics_entry;
-            
+
         public int Order {
             get { return 30; }
         }
-                                    
+
         public string Title {
             get { return Catalog.GetString ("Lyrics"); }
         }
-        
+
         public override void LoadTrack (EditorTrackInfo track)
         {
             BorderWidth = 2;
             lyrics_entry.Text = "Not supported";
         }
-        
+
         protected override void AddFields ()
         {
             PackStart (lyrics_entry = new TextViewEntry (), true, true, 0);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/PageNavigationEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/PageNavigationEntry.cs
index 9edeb98..a0d5100 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/PageNavigationEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/PageNavigationEntry.cs
@@ -35,18 +35,18 @@ namespace Banshee.Gui.TrackEditor
     public class PageNavigationEntry : HBox, IEditorField, ICanUndo
     {
         public event EventHandler Changed;
-        
+
         private TextEntry entry;
         private TrackEditorDialog dialog;
         private Button forward_button;
         public Button ForwardButton {
             get { return forward_button; }
         }
-        
+
         public PageNavigationEntry (TrackEditorDialog dialog) : this (dialog, null, null)
         {
         }
-        
+
         public PageNavigationEntry (TrackEditorDialog dialog, string completionTable, string completionColumn)
         {
             this.dialog = dialog;
@@ -54,20 +54,20 @@ namespace Banshee.Gui.TrackEditor
             entry.Changed += OnChanged;
             entry.Activated += EditNextTitle;
             entry.KeyPressEvent += delegate (object o, KeyPressEventArgs args) {
-                if ((args.Event.Key == Gdk.Key.Return || args.Event.Key == Gdk.Key.KP_Enter) && 
+                if ((args.Event.Key == Gdk.Key.Return || args.Event.Key == Gdk.Key.KP_Enter) &&
                     (args.Event.State & Gdk.ModifierType.ControlMask) != 0 && dialog.CanGoBackward) {
                     dialog.NavigateBackward ();
                     entry.GrabFocus ();
                 }
             };
             entry.Show ();
-            
+
             Spacing = 1;
             PackStart (entry, true, true, 0);
-            
+
             if (dialog.TrackCount > 1) {
-                dialog.Navigated += delegate { 
-                    forward_button.Sensitive = dialog.CanGoForward; 
+                dialog.Navigated += delegate {
+                    forward_button.Sensitive = dialog.CanGoForward;
                 };
                 forward_button = EditorUtilities.CreateSmallStockButton (Stock.GoForward);
                 object tooltip_host = Hyena.Gui.TooltipSetter.CreateHost ();
@@ -86,17 +86,17 @@ namespace Banshee.Gui.TrackEditor
                 entry.GrabFocus ();
             }
         }
-        
+
         public void ConnectUndo (EditorTrackInfo track)
         {
             entry.ConnectUndo (track);
         }
-        
+
         public void DisconnectUndo ()
         {
             entry.DisconnectUndo ();
         }
-                
+
         private void OnChanged (object o, EventArgs args)
         {
             EventHandler handler = Changed;
@@ -108,11 +108,11 @@ namespace Banshee.Gui.TrackEditor
         protected override bool OnMnemonicActivated (bool group_cycling) {
             return entry.MnemonicActivate(group_cycling);
         }
-    
+
         public TextEntry Entry {
             get { return entry; }
         }
-        
+
         public string Text {
             get { return entry.Text; }
             set { entry.Text = value; }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/RangeEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/RangeEntry.cs
index 8541235..b7a348a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/RangeEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/RangeEntry.cs
@@ -35,27 +35,27 @@ namespace Banshee.Gui.TrackEditor
     public class RangeEntry : HBox, IEditorField
     {
         public delegate void RangeOrderClosure (RangeEntry entry);
-        
+
         public event EventHandler Changed;
-    
+
         private SpinButton from_entry;
         public SpinButton From {
             get { return from_entry; }
         }
-        
+
         private SpinButton to_entry;
         public SpinButton To {
             get { return to_entry; }
         }
-    
+
         public RangeEntry (string rangeLabel) : this (rangeLabel, null, null)
         {
         }
-    
+
         public RangeEntry (string rangeLabel, RangeOrderClosure orderClosure, string orderTooltip)
         {
             AutoOrderButton auto_order_button;
-        
+
             PackStart (from_entry = new SpinButton (0, 999, 1), true, true, 0);
             PackStart (new Label (rangeLabel), false, false, 6);
             PackStart (to_entry = new SpinButton (0, 999, 1), true, true, 0);
@@ -66,23 +66,23 @@ namespace Banshee.Gui.TrackEditor
                     TooltipSetter.Set (TooltipSetter.CreateHost (), auto_order_button, orderTooltip);
                 }
             }
-            
+
             ShowAll ();
-            
+
             from_entry.WidthChars = 2;
             to_entry.WidthChars = 2;
-            
+
             from_entry.ValueChanged += OnChanged;
             to_entry.ValueChanged += OnChanged;
         }
-        
+
         protected override bool OnMnemonicActivated (bool group_cycling) {
             return from_entry.MnemonicActivate(group_cycling);
         }
 
         private class AutoOrderButton : Button
         {
-            public AutoOrderButton () 
+            public AutoOrderButton ()
             {
                 Image image = new Image (Gtk.Stock.SortAscending, IconSize.Menu);
                 Add (image);
@@ -90,7 +90,7 @@ namespace Banshee.Gui.TrackEditor
                 image.Show ();
             }
         }
-        
+
         private void OnChanged (object o, EventArgs args)
         {
             EventHandler handler = Changed;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SortingPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SortingPage.cs
index b8adeb6..243e3d8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SortingPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SortingPage.cs
@@ -33,15 +33,15 @@ using Banshee.Collection;
 namespace Banshee.Gui.TrackEditor
 {
     public class SortingPage : FieldPage, ITrackEditorPage
-    {        
+    {
         public int Order {
             get { return 30; }
         }
-                                    
+
         public string Title {
             get { return Catalog.GetString ("Sorting"); }
         }
-        
+
         protected override void AddFields ()
         {
             AddField (this, new TextEntry (),
@@ -51,21 +51,21 @@ namespace Banshee.Gui.TrackEditor
                 delegate (EditorTrackInfo track, Widget widget) {  track.TrackTitleSort = ((TextEntry)widget).Text; },
                 FieldOptions.NoSync
             );
-            
+
             AddField (this, new TextEntry (),
                 Catalog.GetString ("Set all sort track artists to this value"),
                 delegate { return Catalog.GetString ("Sort Track Artist:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((TextEntry)widget).Text = track.ArtistNameSort; },
                 delegate (EditorTrackInfo track, Widget widget) {  track.ArtistNameSort = ((TextEntry)widget).Text; }
             );
-            
+
             AddField (this, new TextEntry (),
                 Catalog.GetString ("Set all sort album artists to this value"),
                 delegate { return Catalog.GetString ("Sort Album Artist:"); },
                 delegate (EditorTrackInfo track, Widget widget) { ((TextEntry)widget).Text = track.AlbumArtistSort; },
                 delegate (EditorTrackInfo track, Widget widget) {  track.AlbumArtistSort = ((TextEntry)widget).Text; }
             );
-            
+
             AddField (this, new TextEntry (),
                 Catalog.GetString ("Set all sort album titles to this value"),
                 delegate { return Catalog.GetString ("Sort Album Title:"); },
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SpinButtonEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SpinButtonEntry.cs
index 192a4d2..d3916bb 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SpinButtonEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/SpinButtonEntry.cs
@@ -37,7 +37,7 @@ namespace Banshee.Gui.TrackEditor
             add { ValueChanged += value; }
             remove { ValueChanged -= value; }
         }
-        
+
         public SpinButtonEntry (double min, double max, double step) : base (min, max, step)
         {
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/StatisticsPage.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/StatisticsPage.cs
index f315a5c..f5f0e47 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/StatisticsPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/StatisticsPage.cs
@@ -55,26 +55,26 @@ namespace Banshee.Gui.TrackEditor
         private CellRendererText value_renderer;
         private ListStore model;
         private TreeView view;
-        
+
         public StatisticsPage ()
         {
             ShadowType = ShadowType.In;
             VscrollbarPolicy = PolicyType.Automatic;
             HscrollbarPolicy = PolicyType.Never;
             BorderWidth = 2;
-            
+
             view = new FixedTreeView (model);
             view.HeadersVisible = false;
             view.RowSeparatorFunc = new TreeViewRowSeparatorFunc (RowSeparatorFunc);
             view.HasTooltip = true;
             view.QueryTooltip += HandleQueryTooltip;
-            
+
             name_renderer = new CellRendererText ();
             name_renderer.Alignment = Pango.Alignment.Right;
             name_renderer.Weight = (int)Pango.Weight.Bold;
             name_renderer.Xalign = 1.0f;
             name_renderer.Scale = Pango.Scale.Small;
-            
+
             value_renderer = new CellRendererText ();
             value_renderer.Ellipsize = Pango.EllipsizeMode.End;
             value_renderer.Editable = true;
@@ -85,17 +85,17 @@ namespace Banshee.Gui.TrackEditor
                     entry.IsEditable = false;
                 }
             };
-            
+
             view.AppendColumn (Catalog.GetString ("Name"), name_renderer, "text", 0);
             view.AppendColumn (Catalog.GetString ("Value"), value_renderer, "text", 1);
-            
+
             Add (view);
             ShowAll ();
         }
 
         public CellRendererText NameRenderer { get { return name_renderer; } }
         public CellRendererText ValueRenderer { get { return value_renderer; } }
-        
+
         private bool RowSeparatorFunc (TreeModel model, TreeIter iter)
         {
             return (bool)model.GetValue (iter, 2);
@@ -136,7 +136,7 @@ namespace Banshee.Gui.TrackEditor
                 args.Tooltip.Dispose ();
             }
         }
-        
+
         protected override void OnStyleSet (Style previous_style)
         {
             base.OnStyleSet (previous_style);
@@ -146,14 +146,14 @@ namespace Banshee.Gui.TrackEditor
         public void Initialize (TrackEditorDialog dialog)
         {
         }
-        
+
         public void LoadTrack (EditorTrackInfo track)
         {
             model = null;
             CreateModel ();
-            
+
             TagLib.File file = track.TaglibFile;
-            
+
             if (track.Uri.IsLocalPath) {
                 string path = track.Uri.AbsolutePath;
                 AddItem (Catalog.GetString ("File Name:"), System.IO.Path.GetFileName (path));
@@ -167,53 +167,53 @@ namespace Banshee.Gui.TrackEditor
                 AddItem (Catalog.GetString ("URI:"), track.Uri.AbsoluteUri);
                 AddFileSizeItem (track.FileSize);
             }
-            
+
             AddSeparator ();
-            
+
             if (file != null) {
                 System.Text.StringBuilder builder = new System.Text.StringBuilder ();
                 Banshee.Sources.DurationStatusFormatters.ConfusingPreciseFormatter (builder, file.Properties.Duration);
-                AddItem (Catalog.GetString ("Duration:"), String.Format ("{0} ({1}ms)", 
+                AddItem (Catalog.GetString ("Duration:"), String.Format ("{0} ({1}ms)",
                     builder, file.Properties.Duration.TotalMilliseconds));
-                
-                AddItem (Catalog.GetString ("Audio Bitrate:"), String.Format ("{0} KB/sec", 
+
+                AddItem (Catalog.GetString ("Audio Bitrate:"), String.Format ("{0} KB/sec",
                     file.Properties.AudioBitrate));
-                AddItem (Catalog.GetString ("Audio Sample Rate:"), String.Format ("{0} Hz", 
-                    file.Properties.AudioSampleRate)); 
+                AddItem (Catalog.GetString ("Audio Sample Rate:"), String.Format ("{0} Hz",
+                    file.Properties.AudioSampleRate));
                 AddItem (Catalog.GetString ("Audio Channels:"), file.Properties.AudioChannels);
-                
+
                 if ((file.Properties.MediaTypes & TagLib.MediaTypes.Video) != 0) {
-                    AddItem (Catalog.GetString ("Video Dimensions:"), String.Format ("{0}x{1}", 
+                    AddItem (Catalog.GetString ("Video Dimensions:"), String.Format ("{0}x{1}",
                         file.Properties.VideoWidth, file.Properties.VideoHeight));
                 }
-                
+
                 foreach (TagLib.ICodec codec in file.Properties.Codecs) {
                     if (codec != null) {
                         /* Translators: {0} is the description of the codec */
-                        AddItem (String.Format (Catalog.GetString ("{0} Codec:"), 
+                        AddItem (String.Format (Catalog.GetString ("{0} Codec:"),
                             codec.MediaTypes.ToString ()), codec.Description);
                     }
                 }
-                
+
                 AddItem (Catalog.GetString ("Container Formats:"), file.TagTypes.ToString ());
                 AddSeparator ();
             }
-            
-            AddItem (Catalog.GetString ("Imported On:"), track.DateAdded > DateTime.MinValue 
+
+            AddItem (Catalog.GetString ("Imported On:"), track.DateAdded > DateTime.MinValue
                 ? track.DateAdded.ToString () : Catalog.GetString ("Unknown"));
-            AddItem (Catalog.GetString ("Last Played:"), track.LastPlayed > DateTime.MinValue 
+            AddItem (Catalog.GetString ("Last Played:"), track.LastPlayed > DateTime.MinValue
                 ? track.LastPlayed.ToString () : Catalog.GetString ("Unknown"));
-            AddItem (Catalog.GetString ("Last Skipped:"), track.LastSkipped > DateTime.MinValue 
+            AddItem (Catalog.GetString ("Last Skipped:"), track.LastSkipped > DateTime.MinValue
                 ? track.LastSkipped.ToString () : Catalog.GetString ("Unknown"));
             AddItem (Catalog.GetString ("Play Count:"), track.PlayCount);
             AddItem (Catalog.GetString ("Skip Count:"), track.SkipCount);
             AddItem (Catalog.GetString ("Score:"), track.Score);
         }
-        
+
         private void AddFileSizeItem (long bytes)
         {
             Hyena.Query.FileSizeQueryValue value = new Hyena.Query.FileSizeQueryValue (bytes);
-            AddItem (Catalog.GetString ("File Size:"), String.Format ("{0} ({1} {2})", 
+            AddItem (Catalog.GetString ("File Size:"), String.Format ("{0} ({1} {2})",
                 value.ToUserQuery (), bytes, Catalog.GetString ("bytes")));
         }
 
@@ -224,7 +224,7 @@ namespace Banshee.Gui.TrackEditor
                 view.Model = model;
             }
         }
-        
+
         public void AddItem (string name, object value)
         {
             CreateModel ();
@@ -238,23 +238,23 @@ namespace Banshee.Gui.TrackEditor
             CreateModel ();
             model.AppendValues (String.Empty, String.Empty, true);
         }
-        
+
         public int Order {
             get { return 40; }
         }
-        
+
         public string Title {
             get { return Catalog.GetString ("Properties"); }
         }
-        
-        public PageType PageType { 
+
+        public PageType PageType {
             get { return PageType.View; }
         }
-        
-        public Gtk.Widget TabWidget { 
+
+        public Gtk.Widget TabWidget {
             get { return null; }
         }
-        
+
         public Gtk.Widget Widget {
             get { return this; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextEntry.cs
index 81f3768..ce60f28 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextEntry.cs
@@ -46,7 +46,7 @@ namespace Banshee.Gui.TrackEditor
             if (completionTable == null || completionColumn == null) {
                 return;
             }
-        
+
             ListStore completion_model = new ListStore (typeof (string));
             foreach (string val in ServiceManager.DbConnection.QueryEnumerable<string> (String.Format (
                 "SELECT DISTINCT {1} FROM {0} ORDER BY {1}", completionTable, completionColumn))) {
@@ -63,17 +63,17 @@ namespace Banshee.Gui.TrackEditor
             //Completion.InlineSelection = true; // requires 2.12
             Completion.PopupSingleMatch = false;
         }
-        
+
         public void DisconnectUndo ()
         {
             undo_adapter.DisconnectUndo ();
         }
-        
+
         public void ConnectUndo (EditorTrackInfo track)
         {
             undo_adapter.ConnectUndo (this, track);
         }
-        
+
         public new string Text {
             get { return base.Text; }
             set { base.Text = value ?? String.Empty; }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextViewEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextViewEntry.cs
index eb79899..4ec2f86 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextViewEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TextViewEntry.cs
@@ -34,17 +34,17 @@ using Hyena.Widgets;
 namespace Banshee.Gui.TrackEditor
 {
     public class TextViewEntry : Gtk.ScrolledWindow, IEditorField, ICanUndo
-    {    
-        private EditorEditableUndoAdapter<TextViewEditable> undo_adapter 
+    {
+        private EditorEditableUndoAdapter<TextViewEditable> undo_adapter
             = new EditorEditableUndoAdapter<TextViewEditable> ();
-        
+
         public event EventHandler Changed;
-        
+
         private TextViewEditable entry;
         public TextView TextView {
             get { return entry; }
         }
-        
+
         public string Text {
             get { return entry.Buffer.Text; }
             set { entry.Buffer.Text = value ?? String.Empty; }
@@ -55,15 +55,15 @@ namespace Banshee.Gui.TrackEditor
             VscrollbarPolicy = PolicyType.Automatic;
             HscrollbarPolicy = PolicyType.Never;
             ShadowType = ShadowType.In;
-            
+
             Add (entry = new TextViewEditable ());
             entry.AcceptsTab = false;
             entry.Show ();
             entry.Buffer.Changed += OnChanged;
-            
+
             entry.SizeRequested += OnTextViewSizeRequested;
         }
-        
+
         private void OnTextViewSizeRequested (object o, SizeRequestedArgs args)
         {
             Pango.FontMetrics metrics = PangoContext.GetMetrics (entry.Style.FontDescription, PangoContext.Language);
@@ -71,17 +71,17 @@ namespace Banshee.Gui.TrackEditor
             metrics.Dispose ();
             HeightRequest = (line_height + 2) * 2;
         }
-        
+
         public void DisconnectUndo ()
         {
             undo_adapter.DisconnectUndo ();
         }
-        
+
         public void ConnectUndo (EditorTrackInfo track)
         {
             undo_adapter.ConnectUndo (entry, track);
         }
-                
+
         protected override bool OnMnemonicActivated (bool group_cycling) {
             return entry.MnemonicActivate(group_cycling);
         }
@@ -95,4 +95,3 @@ namespace Banshee.Gui.TrackEditor
         }
     }
 }
-            
\ No newline at end of file
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
index 41cae3e..d322d4f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.TrackEditor/TrackEditorDialog.cs
@@ -52,9 +52,9 @@ namespace Banshee.Gui.TrackEditor
     public class TrackEditorDialog : BansheeDialog
     {
         public delegate void EditorTrackOperationClosure (EditorTrackInfo track);
-    
+
         private VBox main_vbox;
-    
+
         private Frame header_image_frame;
         private Image header_image;
         private Label header_title_label;
@@ -62,33 +62,33 @@ namespace Banshee.Gui.TrackEditor
         private Label header_album_label;
         private Label edit_notif_label;
         private object tooltip_host;
-        
+
         private DateTime dialog_launch_datetime = DateTime.Now;
-        
+
         private Notebook notebook;
         public Notebook Notebook {
             get { return notebook; }
         }
-    
+
         private Button nav_backward_button;
         private Button nav_forward_button;
         private PulsingButton sync_all_button;
-        
+
         private EditorMode mode;
-        
+
         private List<ITrackEditorPage> pages = new List<ITrackEditorPage> ();
-        
+
         public event EventHandler Navigated;
-        
+
         private TrackEditorDialog (TrackListModel model, EditorMode mode) : base (
             mode == EditorMode.Edit ? Catalog.GetString ("Track Editor") : Catalog.GetString ("Track Properties"))
         {
             this.mode = mode;
-            
+
             LoadTrackModel (model);
-        
+
             BorderWidth = 6;
-            
+
             if (mode == EditorMode.Edit) {
                 WidthRequest = 525;
                 AddStockButton (Stock.Cancel, ResponseType.Cancel);
@@ -97,26 +97,26 @@ namespace Banshee.Gui.TrackEditor
                 AddStockButton (Stock.Close, ResponseType.Close, true);
                 SetSizeRequest (400, 500);
             }
-            
+
             tooltip_host = TooltipSetter.CreateHost ();
-            
+
             AddNavigationButtons ();
-            
+
             main_vbox = new VBox ();
             main_vbox.Spacing = 10;
             main_vbox.BorderWidth = 6;
             main_vbox.Show ();
             VBox.PackStart (main_vbox, true, true, 0);
-            
+
             BuildHeader ();
             BuildNotebook ();
             BuildFooter ();
 
             LoadModifiers ();
-            
+
             LoadTrackToEditor ();
         }
-        
+
 #region UI Building
 
         private void AddNavigationButtons ()
@@ -124,48 +124,48 @@ namespace Banshee.Gui.TrackEditor
             if (TrackCount <= 1) {
                 return;
             }
-            
+
             nav_backward_button = new Button (Stock.GoBack);
             nav_backward_button.UseStock = true;
             nav_backward_button.Clicked += delegate { NavigateBackward (); };
             nav_backward_button.Show ();
             TooltipSetter.Set (tooltip_host, nav_backward_button, Catalog.GetString ("Show the previous track"));
-            
+
             nav_forward_button = new Button (Stock.GoForward);
             nav_forward_button.UseStock = true;
             nav_forward_button.Clicked += delegate { NavigateForward (); };
             nav_forward_button.Show ();
             TooltipSetter.Set (tooltip_host, nav_forward_button, Catalog.GetString ("Show the next track"));
-            
+
             ActionArea.PackStart (nav_backward_button, false, false, 0);
             ActionArea.PackStart (nav_forward_button, false, false, 0);
             ActionArea.SetChildSecondary (nav_backward_button, true);
             ActionArea.SetChildSecondary (nav_forward_button, true);
         }
-        
+
         private void BuildHeader ()
         {
             Table header = new Table (3, 3, false);
             header.ColumnSpacing = 5;
-            
+
             header_image_frame = new Frame ();
-            
+
             header_image = new Image ();
             header_image.IconName = "media-optical";
             header_image.PixelSize = 64;
             header_image_frame.Add (header_image);
-            
+
             header.Attach (header_image_frame, 0, 1, 0, 3,
                 AttachOptions.Fill, AttachOptions.Expand, 0, 0);
-            
+
             AddHeaderRow (header, 0, Catalog.GetString ("Title:"), out header_title_label);
             AddHeaderRow (header, 1, Catalog.GetString ("Artist:"), out header_artist_label);
             AddHeaderRow (header, 2, Catalog.GetString ("Album:"), out header_album_label);
-          
+
             header.ShowAll ();
             main_vbox.PackStart (header, false, false, 0);
         }
-        
+
         private void AddHeaderRow (Table header, uint row, string title, out Label label)
         {
             Label title_label = new Label ();
@@ -173,19 +173,19 @@ namespace Banshee.Gui.TrackEditor
             title_label.Xalign = 0.0f;
             header.Attach (title_label, 1, 2, row, row + 1,
                 AttachOptions.Fill, AttachOptions.Expand, 0, 0);
-            
+
             label = new Label ();
             label.Xalign = 0.0f;
             label.Ellipsize = Pango.EllipsizeMode.End;
-            header.Attach (label, 2, 3, row, row + 1, 
+            header.Attach (label, 2, 3, row, row + 1,
                 AttachOptions.Fill | AttachOptions.Expand, AttachOptions.Expand, 0, 0);
         }
-        
+
         private void BuildNotebook ()
         {
             notebook = new Notebook ();
             notebook.Show ();
-            
+
             foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/Gui/TrackEditor/NotebookPage")) {
                 try {
                     ITrackEditorPage page = (ITrackEditorPage)node.CreateInstance ();
@@ -199,7 +199,7 @@ namespace Banshee.Gui.TrackEditor
                     Hyena.Log.Exception ("Failed to initialize NotebookPage extension node. Ensure it implements ITrackEditorPage.", e);
                 }
             }
-            
+
             pages.Sort (delegate (ITrackEditorPage a, ITrackEditorPage b) { return a.Order.CompareTo (b.Order); });
             foreach (ITrackEditorPage page in pages) {
                 Container container = page.Widget as Container;
@@ -211,19 +211,19 @@ namespace Banshee.Gui.TrackEditor
                 container.BorderWidth = 12;
                 notebook.AppendPage (container, page.TabWidget == null ? new Label (page.Title) : page.TabWidget);
             }
-            
+
             main_vbox.PackStart (notebook, true, true, 0);
         }
-        
+
         private void BuildFooter ()
         {
             if (mode == EditorMode.View) {
                 return;
             }
-        
+
             HBox button_box = new HBox ();
             button_box.Spacing = 6;
-                       
+
             if (TrackCount > 1) {
                 sync_all_button = new PulsingButton ();
                 sync_all_button.FocusInEvent += delegate {
@@ -231,22 +231,22 @@ namespace Banshee.Gui.TrackEditor
                         button.StartPulsing ();
                     });
                 };
-                
+
                 sync_all_button.FocusOutEvent += delegate {
                     if (sync_all_button.State == StateType.Prelight) {
                         return;
                     }
-                    
+
                     ForeachWidget<SyncButton> (delegate (SyncButton button) {
                         button.StopPulsing ();
                     });
                 };
-                
+
                 sync_all_button.StateChanged += delegate {
                     if (sync_all_button.HasFocus) {
                         return;
                     }
-                
+
                     ForeachWidget<SyncButton> (delegate (SyncButton button) {
                         if (sync_all_button.State == StateType.Prelight) {
                             button.StartPulsing ();
@@ -255,11 +255,11 @@ namespace Banshee.Gui.TrackEditor
                         }
                     });
                 };
-                
+
                 sync_all_button.Clicked += delegate {
                     InvokeFieldSync ();
                 };
-                
+
                 Alignment alignment = new Alignment (0.5f, 0.5f, 0.0f, 0.0f);
                 HBox box = new HBox ();
                 box.Spacing = 2;
@@ -267,21 +267,21 @@ namespace Banshee.Gui.TrackEditor
                 box.PackStart (new Label (Catalog.GetString ("Sync all field _values")), false, false, 0);
                 alignment.Add (box);
                 sync_all_button.Add (alignment);
-                
+
                 TooltipSetter.Set (tooltip_host, sync_all_button, Catalog.GetString (
                     "Apply the values of all common fields set for this track to all of the tracks selected in this editor"));
-                    
+
                 button_box.PackStart (sync_all_button, false, false, 0);
-                
+
                 foreach (Widget child in ActionArea.Children) {
                     child.SizeAllocated += OnActionAreaChildSizeAllocated;
                 }
-                
+
                 edit_notif_label = new Label ();
                 edit_notif_label.Xalign = 1.0f;
                 button_box.PackEnd (edit_notif_label, false, false, 0);
             }
-            
+
             main_vbox.PackStart (button_box, false, false, 0);
             button_box.ShowAll ();
         }
@@ -297,12 +297,12 @@ namespace Banshee.Gui.TrackEditor
                 }
             }
         }
-        
+
         public void ForeachWidget<T> (WidgetAction<T> action) where T : class
         {
             for (int i = 0; i < notebook.NPages; i++) {
                 GtkUtilities.ForeachWidget (notebook.GetNthPage (i) as Container, action);
-            }     
+            }
         }
 
         private void InvokeFieldSync ()
@@ -313,29 +313,29 @@ namespace Banshee.Gui.TrackEditor
                 }
             });
         }
-        
+
         private int action_area_children_allocated = 0;
-        
+
         private void OnActionAreaChildSizeAllocated (object o, SizeAllocatedArgs args)
         {
             Widget [] children = ActionArea.Children;
             if (++action_area_children_allocated != children.Length) {
                 return;
             }
-            
+
             sync_all_button.WidthRequest = Math.Max (sync_all_button.Allocation.Width,
                 (children[1].Allocation.X + children[1].Allocation.Width) - children[0].Allocation.X - 1);
         }
-        
+
 #endregion
-        
+
 #region Track Model/Changes API
-        
+
         private CachedList<DatabaseTrackInfo> db_selection;
         private List<TrackInfo> memory_selection;
         private Dictionary<TrackInfo, EditorTrackInfo> edit_map = new Dictionary<TrackInfo, EditorTrackInfo> ();
         private int current_track_index;
-        
+
         protected void LoadTrackModel (TrackListModel model)
         {
             DatabaseTrackListModel db_model = model as DatabaseTrackListModel;
@@ -348,7 +348,7 @@ namespace Banshee.Gui.TrackEditor
                 }
             }
         }
-        
+
         public void LoadTrackToEditor ()
         {
             TrackInfo current_track = null;
@@ -356,17 +356,17 @@ namespace Banshee.Gui.TrackEditor
             if (editor_track == null) {
                 return;
             }
-            
+
             // Update the Header
             header_title_label.Text = current_track.DisplayTrackTitle;
             header_artist_label.Text = current_track.DisplayArtistName;
             header_album_label.Text = current_track.DisplayAlbumTitle;
-            
+
             if (edit_notif_label != null) {
-                edit_notif_label.Markup = String.Format (Catalog.GetString ("<i>Editing {0} of {1} items</i>"), 
+                edit_notif_label.Markup = String.Format (Catalog.GetString ("<i>Editing {0} of {1} items</i>"),
                     CurrentTrackIndex + 1, TrackCount);
             }
-            
+
             ArtworkManager artwork = ServiceManager.Get<ArtworkManager> ();
             Gdk.Pixbuf cover_art = artwork.LookupScalePixbuf (current_track.ArtworkId, 64);
             header_image.Pixbuf = cover_art;
@@ -377,21 +377,21 @@ namespace Banshee.Gui.TrackEditor
             } else {
                 header_image_frame.ShadowType = ShadowType.In;
             }
-            
+
             // Disconnect all the undo adapters
             ForeachWidget<ICanUndo> (delegate (ICanUndo undoable) {
                 undoable.DisconnectUndo ();
             });
-            
+
             foreach (ITrackEditorPage page in pages) {
                 page.LoadTrack (editor_track);
             }
-            
+
             // Connect all the undo adapters
             ForeachWidget<ICanUndo> (delegate (ICanUndo undoable) {
                 undoable.ConnectUndo (editor_track);
             });
-            
+
             // Update Navigation
             if (TrackCount > 0 && nav_backward_button != null && nav_forward_button != null) {
                 nav_backward_button.Sensitive = CanGoBackward;
@@ -418,55 +418,55 @@ namespace Banshee.Gui.TrackEditor
                 if (i == current_track_index) {
                     continue;
                 }
-                
+
                 EditorTrackInfo track = LoadTrack (i);
                 if (track != null) {
                     closure (track);
                 }
             }
         }
-        
+
         public EditorTrackInfo LoadTrack (int index)
         {
             return LoadTrack (index, true);
         }
-        
+
         public EditorTrackInfo LoadTrack (int index, bool alwaysLoad)
         {
             TrackInfo source_track;
             return LoadTrack (index, alwaysLoad, out source_track);
         }
-        
+
         private EditorTrackInfo LoadTrack (int index, out TrackInfo sourceTrack)
         {
             return LoadTrack (index, true, out sourceTrack);
         }
-        
+
         private EditorTrackInfo LoadTrack (int index, bool alwaysLoad, out TrackInfo sourceTrack)
         {
             sourceTrack = GetTrack (index);
             EditorTrackInfo editor_track = null;
-            
+
             if (sourceTrack == null) {
                 // Something bad happened here
                 return null;
             }
-            
+
             if (!edit_map.TryGetValue (sourceTrack, out editor_track) && alwaysLoad) {
                 editor_track = new EditorTrackInfo (sourceTrack);
                 editor_track.EditorIndex = index;
                 editor_track.EditorCount = TrackCount;
                 edit_map.Add (sourceTrack, editor_track);
             }
-            
+
             return editor_track;
         }
-        
+
         private TrackInfo GetTrack (int index)
         {
             return db_selection != null ? db_selection[index] : memory_selection[index];
         }
-        
+
         protected virtual void OnNavigated ()
         {
             EventHandler handler = Navigated;
@@ -474,7 +474,7 @@ namespace Banshee.Gui.TrackEditor
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void NavigateForward ()
         {
             if (current_track_index < TrackCount - 1) {
@@ -483,7 +483,7 @@ namespace Banshee.Gui.TrackEditor
                 OnNavigated ();
             }
         }
-        
+
         public void NavigateBackward ()
         {
             if (current_track_index > 0) {
@@ -492,19 +492,19 @@ namespace Banshee.Gui.TrackEditor
                 OnNavigated ();
             }
         }
-        
+
         public int TrackCount {
             get { return db_selection != null ? db_selection.Count : memory_selection.Count; }
         }
-        
+
         public int CurrentTrackIndex {
             get { return current_track_index; }
         }
-        
+
         public bool CanGoBackward {
             get { return current_track_index > 0; }
         }
-        
+
         public bool CanGoForward {
             get { return current_track_index >= 0 && current_track_index < TrackCount - 1; }
         }
@@ -516,7 +516,7 @@ namespace Banshee.Gui.TrackEditor
         public void Save ()
         {
             List<int> primary_sources = new List<int> ();
-            
+
             // TODO: wrap in db transaction
             try {
                 DatabaseTrackInfo.NotifySaved = false;
@@ -527,9 +527,9 @@ namespace Banshee.Gui.TrackEditor
                     if (track == null || track.SourceTrack == null) {
                         continue;
                     }
-                    
+
                     SaveTrack (track);
-                    
+
                     if (track.SourceTrack is DatabaseTrackInfo) {
                         // If the source track is from the database, save its parent for notification later
                         int id = (track.SourceTrack as DatabaseTrackInfo).PrimarySourceId;
@@ -550,18 +550,18 @@ namespace Banshee.Gui.TrackEditor
                 DatabaseTrackInfo.NotifySaved = true;
             }
         }
-        
+
         private void SaveTrack (EditorTrackInfo track)
         {
             TrackInfo.ExportableMerge (track, track.SourceTrack);
             track.SourceTrack.Save ();
-                
+
             if (track.SourceTrack.TrackEqual (ServiceManager.PlayerEngine.CurrentTrack)) {
                 TrackInfo.ExportableMerge (track, ServiceManager.PlayerEngine.CurrentTrack);
                 ServiceManager.PlayerEngine.TrackInfoUpdated ();
             }
         }
-        
+
 #endregion
 
 #region Static Helpers
@@ -570,12 +570,12 @@ namespace Banshee.Gui.TrackEditor
         {
             Run (model, EditorMode.Edit);
         }
-        
+
         public static void RunView (TrackListModel model)
         {
             Run (model, EditorMode.View);
         }
-        
+
         public static void Run (TrackListModel model, EditorMode mode)
         {
             TrackEditorDialog track_editor = new TrackEditorDialog (model, mode);
@@ -593,23 +593,23 @@ namespace Banshee.Gui.TrackEditor
                             }
                         }
                     }
-                    
+
                     if (changed_count == 0) {
                         track_editor.Destroy ();
                         return;
                     }
-                
+
                     HigMessageDialog message_dialog = new HigMessageDialog (
-                        track_editor, DialogFlags.Modal, MessageType.Warning, ButtonsType.None, 
-                        
+                        track_editor, DialogFlags.Modal, MessageType.Warning, ButtonsType.None,
+
                         String.Format (Catalog.GetPluralString (
                             "Save the changes made to the open track?",
                             "Save the changes made to {0} of {1} open tracks?",
                             track_editor.TrackCount), changed_count, track_editor.TrackCount),
-                            
+
                         String.Empty
                     );
-                    
+
                     UpdateCancelMessage (track_editor, message_dialog);
                     uint timeout = 0;
                     timeout = GLib.Timeout.Add (1000, delegate {
@@ -619,11 +619,11 @@ namespace Banshee.Gui.TrackEditor
                         }
                         return result;
                     });
-                    
+
                     message_dialog.AddButton (Catalog.GetString ("Close _without Saving"), ResponseType.Close, false);
                     message_dialog.AddButton (Stock.Cancel, ResponseType.Cancel, false);
                     message_dialog.AddButton (Stock.Save, ResponseType.Ok, true);
-                    
+
                     try {
                         switch ((ResponseType)message_dialog.Run ()) {
                             case ResponseType.Ok:
@@ -642,29 +642,29 @@ namespace Banshee.Gui.TrackEditor
                         message_dialog.Destroy ();
                     }
                 }
-                
+
                 track_editor.Destroy ();
             };
-            
+
             track_editor.Run ();
         }
-        
+
         private static bool UpdateCancelMessage (TrackEditorDialog trackEditor, HigMessageDialog messageDialog)
         {
             if (messageDialog == null) {
                 return false;
             }
-            
+
             messageDialog.MessageLabel.Text = String.Format (Catalog.GetString (
                 "If you don't save, changes from the last {0} will be permanently lost."),
                 Banshee.Sources.DurationStatusFormatters.ApproximateVerboseFormatter (
                     DateTime.Now - trackEditor.dialog_launch_datetime
                 )
             );
-            
+
             return messageDialog.IsMapped;
         }
-    
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ArtworkPopup.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ArtworkPopup.cs
index 5db1e20..69dadf6 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ArtworkPopup.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ArtworkPopup.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ArtworkPopup.cs
 //
 // Author:
@@ -36,38 +36,38 @@ namespace Banshee.Gui.Widgets
     {
         private Gtk.Image image;
         private Label label;
-        
+
         public ArtworkPopup() : base(Gtk.WindowType.Popup)
         {
             VBox vbox = new VBox();
             Add(vbox);
-            
+
             Decorated = false;
             BorderWidth = 6;
-            
+
             SetPosition(WindowPosition.CenterAlways);
-           
+
             image = new Gtk.Image();
             label = new Label(String.Empty);
             label.CanFocus = false;
             label.Wrap = true;
-            
+
             label.ModifyBg(StateType.Normal, new Color(0, 0, 0));
             label.ModifyFg(StateType.Normal, new Color(160, 160, 160));
             ModifyBg(StateType.Normal, new Color(0, 0, 0));
             ModifyFg(StateType.Normal, new Color(160, 160, 160));
-            
+
             vbox.PackStart(image, true, true, 0);
             vbox.PackStart(label, false, false, 0);
-            
+
             vbox.Spacing = 6;
             vbox.ShowAll();
         }
-        
+
         public Pixbuf Image {
             set {
                 int width = value.Width, height = value.Height;
-                
+
                 if(height >= Screen.Height * 0.75) {
                     width = (int)(width * ((Screen.Height * 0.75) / height));
                     height = (int)(Screen.Height * 0.75);
@@ -83,22 +83,22 @@ namespace Banshee.Gui.Widgets
                 } else {
                     image.Pixbuf = value;
                 }
-                
+
                 image.SetSizeRequest(image.Pixbuf.Width, image.Pixbuf.Height);
                 label.SetSizeRequest(-1, -1);
-                    
+
                 int text_w, text_h;
                 label.Layout.GetPixelSize(out text_w, out text_h);
                 if(image.Pixbuf.Width < text_w) {
                     label.SetSizeRequest(image.Pixbuf.Width, -1);
-                } 
-                
+                }
+
                 Resize(1, 1);
             }
-            
+
             get { return image.Pixbuf; }
         }
-        
+
         public string Label {
             set {
                 try {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs
index 2d6333b..a0566f2 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ClassicTrackInfoDisplay.cs
@@ -40,34 +40,34 @@ namespace Banshee.Gui.Widgets
     public class ClassicTrackInfoDisplay : TrackInfoDisplay
     {
         private Gdk.Window event_window;
-        
+
         private ArtworkPopup popup;
         private uint popup_timeout_id;
         private bool in_popup;
         private bool in_thumbnail_region;
         private Pango.Layout first_line_layout;
         private Pango.Layout second_line_layout;
-        
+
         public ClassicTrackInfoDisplay () : base ()
         {
         }
-        
+
         protected ClassicTrackInfoDisplay (IntPtr native) : base (native)
         {
         }
-        
+
         public override void Dispose ()
         {
             base.Dispose ();
             HidePopup ();
         }
-        
+
 #region Widget Window Management
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
-            
+
             WindowAttr attributes = new WindowAttr ();
             attributes.WindowType = Gdk.WindowType.Child;
             attributes.X = Allocation.X;
@@ -80,25 +80,25 @@ namespace Banshee.Gui.Widgets
                 EventMask.EnterNotifyMask |
                 EventMask.LeaveNotifyMask |
                 EventMask.ExposureMask);
-            
+
             WindowAttributesType attributes_mask =
                 WindowAttributesType.X | WindowAttributesType.Y | WindowAttributesType.Wmclass;
-            
+
             event_window = new Gdk.Window (GdkWindow, attributes, attributes_mask);
             event_window.UserData = Handle;
         }
-        
+
         protected override void OnUnrealized ()
         {
             WidgetFlags ^= WidgetFlags.Realized;
-            
+
             event_window.UserData = IntPtr.Zero;
             Hyena.Gui.GtkWorkarounds.WindowDestroy (event_window);
             event_window = null;
-            
+
             base.OnUnrealized ();
         }
-        
+
         protected override void OnMapped ()
         {
             event_window.Show ();
@@ -110,21 +110,21 @@ namespace Banshee.Gui.Widgets
             event_window.Hide ();
             base.OnUnmapped ();
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
-            
+
             if (IsRealized) {
                 event_window.MoveResize (allocation);
             }
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             requisition.Height = ComputeWidgetHeight ();
         }
-        
+
         private int ComputeWidgetHeight ()
         {
             int width, height;
@@ -134,14 +134,14 @@ namespace Banshee.Gui.Widgets
             layout.Dispose ();
             return 2 * height;
         }
-        
+
         protected override void OnThemeChanged ()
         {
             if (first_line_layout != null) {
                 first_line_layout.Dispose ();
                 first_line_layout = null;
             }
-            
+
             if (second_line_layout != null) {
                 second_line_layout.Dispose ();
                 second_line_layout = null;
@@ -149,15 +149,15 @@ namespace Banshee.Gui.Widgets
         }
 
 #endregion
-        
+
 #region Drawing
-        
+
         protected override void RenderTrackInfo (Context cr, TrackInfo track, bool renderTrack, bool renderArtistAlbum)
         {
             if (track == null) {
                 return;
             }
-            
+
             double offset = Allocation.Height + 10, y = 0;
             double x = Allocation.X + offset;
             double width = Allocation.Width - offset;
@@ -168,7 +168,7 @@ namespace Banshee.Gui.Widgets
                 first_line_layout = CairoExtensions.CreateLayout (this, cr);
                 first_line_layout.Ellipsize = Pango.EllipsizeMode.End;
             }
-            
+
             if (second_line_layout == null) {
                 second_line_layout = CairoExtensions.CreateLayout (this, cr);
                 second_line_layout.Ellipsize = Pango.EllipsizeMode.End;
@@ -177,22 +177,22 @@ namespace Banshee.Gui.Widgets
             // Set up the text layouts
             first_line_layout.Width = pango_width;
             second_line_layout.Width = pango_width;
-            
+
             // Compute the layout coordinates
             first_line_layout.SetMarkup (GetFirstLineText (track));
             first_line_layout.GetPixelSize (out fl_width, out fl_height);
             second_line_layout.SetMarkup (GetSecondLineText (track));
             second_line_layout.GetPixelSize (out sl_width, out sl_height);
-            
+
             if (fl_height + sl_height > Allocation.Height) {
                 SetSizeRequest (-1, fl_height + sl_height);
             }
-            
+
             y = Allocation.Y + (Allocation.Height - (fl_height + sl_height)) / 2;
-            
+
             // Render the layouts
             cr.Antialias = Cairo.Antialias.Default;
-            
+
             if (renderTrack) {
                 cr.MoveTo (x, y);
                 cr.Color = TextColor;
@@ -202,11 +202,11 @@ namespace Banshee.Gui.Widgets
             if (!renderArtistAlbum) {
                 return;
             }
-            
+
             cr.MoveTo (x, y + fl_height);
             PangoCairoHelper.ShowLayout (cr, second_line_layout);
         }
-        
+
 #endregion
 
 #region Interaction Events
@@ -216,30 +216,30 @@ namespace Banshee.Gui.Widgets
             in_thumbnail_region = evnt.X <= Allocation.Height;
             return ShowHideCoverArt ();
         }
-        
+
         protected override bool OnLeaveNotifyEvent (EventCrossing evnt)
         {
             in_thumbnail_region = false;
             return ShowHideCoverArt ();
         }
-        
+
         protected override bool OnMotionNotifyEvent (EventMotion evnt)
         {
             in_thumbnail_region = evnt.X <= Allocation.Height;
             return ShowHideCoverArt ();
         }
-        
+
         private void OnPopupEnterNotifyEvent (object o, EnterNotifyEventArgs args)
         {
             in_popup = true;
         }
-        
+
         private void OnPopupLeaveNotifyEvent (object o, LeaveNotifyEventArgs args)
         {
             in_popup = false;
             HidePopup ();
         }
-        
+
         private bool ShowHideCoverArt ()
         {
             if (!in_thumbnail_region) {
@@ -247,7 +247,7 @@ namespace Banshee.Gui.Widgets
                     GLib.Source.Remove (popup_timeout_id);
                     popup_timeout_id = 0;
                 }
-                
+
                 GLib.Timeout.Add (100, delegate {
                     if (!in_popup) {
                         HidePopup ();
@@ -259,17 +259,17 @@ namespace Banshee.Gui.Widgets
                 if (popup_timeout_id > 0) {
                     return false;
                 }
-                
+
                 popup_timeout_id = GLib.Timeout.Add (500, delegate {
                     if (in_thumbnail_region) {
                         UpdatePopup ();
                     }
-                    
+
                     popup_timeout_id = 0;
                     return false;
                 });
             }
-            
+
             return true;
         }
 
@@ -288,31 +288,31 @@ namespace Banshee.Gui.Widgets
                 HidePopup ();
                 return false;
             }
-            
+
             Gdk.Pixbuf pixbuf = ArtworkManager.LookupPixbuf (CurrentTrack.ArtworkId);
-         
+
             if (pixbuf == null) {
                 HidePopup ();
                 return false;
             }
-            
+
             if (popup == null) {
                 popup = new ArtworkPopup ();
                 popup.EnterNotifyEvent += OnPopupEnterNotifyEvent;
                 popup.LeaveNotifyEvent += OnPopupLeaveNotifyEvent;
             }
-            
-            popup.Label = String.Format ("{0} - {1}", CurrentTrack.DisplayArtistName, 
+
+            popup.Label = String.Format ("{0} - {1}", CurrentTrack.DisplayArtistName,
                 CurrentTrack.DisplayAlbumTitle);
             popup.Image = pixbuf;
-                
+
             if (in_thumbnail_region) {
                 popup.Show ();
             }
-            
+
             return true;
         }
-        
+
         private void HidePopup ()
         {
             if (popup != null) {
@@ -323,7 +323,7 @@ namespace Banshee.Gui.Widgets
                 popup = null;
             }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedMessageBar.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedMessageBar.cs
index 040c849..2ab6432 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedMessageBar.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedMessageBar.cs
@@ -42,66 +42,66 @@ namespace Banshee.Gui.Widgets
     public class ConnectedMessageBar : MessageBar
     {
         private Source source;
-        
+
         private class ActionButton : Button
         {
             private MessageAction action;
-            
+
             public ActionButton (MessageAction action) : base (action.Label)
             {
                 this.action = action;
             }
-            
+
             protected override void OnClicked ()
             {
                 action.Activate ();
             }
         }
-        
+
         public ConnectedMessageBar ()
         {
             CloseClicked += OnCloseClicked;
             ServiceManager.SourceManager.ActiveSourceChanged += OnActiveSourceChanged;
             ConnectSource (ServiceManager.SourceManager.ActiveSource);
-            
+
             LeftPadding = 15;
         }
-        
+
         private void ConnectSource (Source source)
         {
             if (source == this.source)
                 return;
 
             this.source = source;
-            
+
             if (this.source != null) {
                 this.source.MessageNotify += OnSourceMessageNotify;
                 Update ();
             }
         }
-        
+
         private void Update ()
         {
             ThreadAssist.ProxyToMain (InnerUpdate);
         }
-        
+
         private void InnerUpdate ()
         {
             if (source == null || source.CurrentMessage == null || source.CurrentMessage.IsHidden) {
                 Hide ();
                 return;
             }
-            
+
             Message = source.CurrentMessage.Text;
             Pixbuf = null;
             ShowCloseButton = source.CurrentMessage.CanClose;
             Spinning = source.CurrentMessage.IsSpinning;
-            
+
             Pixbuf = source.CurrentMessage.IconNames == null ? null :
                 IconThemeUtils.LoadIcon (22, source.CurrentMessage.IconNames);
-            
+
             ClearButtons ();
-            
+
             if (source.CurrentMessage.Actions != null) {
                 foreach (MessageAction action in source.CurrentMessage.Actions) {
                     Button button = new ActionButton (action);
@@ -109,24 +109,24 @@ namespace Banshee.Gui.Widgets
                     AddButton (button);
                 }
             }
-            
+
             Show ();
         }
-        
+
         private void OnCloseClicked (object o, EventArgs args)
         {
             source.CurrentMessage.IsHidden = true;
         }
-        
+
         private void OnActiveSourceChanged (SourceEventArgs args)
         {
             if (source != null && source != args.Source) {
                 source.MessageNotify -= OnSourceMessageNotify;
             }
-            
+
             ConnectSource (args.Source);
         }
-        
+
         private void OnSourceMessageNotify (object o, EventArgs args)
         {
             Update ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs
index 19366d2..b30fad7 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs
@@ -38,34 +38,34 @@ namespace Banshee.Gui.Widgets
     public enum SeekSliderLayout {
         Horizontal,
         Vertical
-    }   
+    }
 
     public class ConnectedSeekSlider : Alignment
     {
         private SeekSlider seek_slider;
         private StreamPositionLabel stream_position_label;
-    
+
         public ConnectedSeekSlider () : this (SeekSliderLayout.Vertical)
         {
         }
-    
+
         public ConnectedSeekSlider (SeekSliderLayout layout) : base (0.0f, 0.0f, 1.0f, 1.0f)
         {
             RightPadding = 10;
             LeftPadding = 10;
-            
+
             BuildSeekSlider (layout);
-            
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
-                PlayerEvent.Iterate | 
+
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
+                PlayerEvent.Iterate |
                 PlayerEvent.Buffering |
                 PlayerEvent.StartOfStream |
                 PlayerEvent.StateChange);
-                
+
             ServiceManager.PlayerEngine.TrackIntercept += OnTrackIntercept;
-            
+
             seek_slider.SeekRequested += OnSeekRequested;
-            
+
             // Initialize the display if we're paused since we won't get any
             // events or state change until something actually happens (BGO #536564)
             if (ServiceManager.PlayerEngine.CurrentState == PlayerState.Paused) {
@@ -84,18 +84,18 @@ namespace Banshee.Gui.Widgets
         public StreamPositionLabel StreamPositionLabel {
             get { return stream_position_label; }
         }
-        
+
         public SeekSlider SeekSlider {
             get { return seek_slider; }
         }
-        
+
         private void BuildSeekSlider (SeekSliderLayout layout)
-        {            
+        {
             seek_slider = new SeekSlider ();
             stream_position_label = new StreamPositionLabel (seek_slider);
-         
+
             Box box;
-            
+
             if (layout == SeekSliderLayout.Horizontal) {
                 box = new HBox ();
                 box.Spacing = 5;
@@ -103,24 +103,24 @@ namespace Banshee.Gui.Widgets
             } else {
                 box = new VBox ();
             }
-            
+
             seek_slider.SetSizeRequest (125, -1);
-                     
+
             box.PackStart (seek_slider, true, true, 0);
             box.PackStart (stream_position_label, false, false, 0);
-            
+
             box.ShowAll ();
-            
+
             Add (box);
         }
-        
+
         private bool transitioning = false;
         private bool OnTrackIntercept (Banshee.Collection.TrackInfo track)
         {
             transitioning = true;
             return false;
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
@@ -137,7 +137,7 @@ namespace Banshee.Gui.Widgets
                         stream_position_label.StreamState = StreamLabelState.Playing;
                         break;
                     }
-                    
+
                     stream_position_label.StreamState = StreamLabelState.Buffering;
                     stream_position_label.BufferingProgress = buffering.Progress;
                     seek_slider.Sensitive = false;
@@ -178,19 +178,19 @@ namespace Banshee.Gui.Widgets
             if (ServiceManager.PlayerEngine == null) {
                 return;
             }
-            
+
             Banshee.Collection.TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
             stream_position_label.IsLive = track == null ? false : track.IsLive;
             seek_slider.Duration = ServiceManager.PlayerEngine.Length;
-            
+
             if (stream_position_label.StreamState != StreamLabelState.Buffering) {
                 stream_position_label.StreamState = StreamLabelState.Playing;
                 seek_slider.SeekValue = ServiceManager.PlayerEngine.Position;
             }
-            
+
             seek_slider.CanSeek = ServiceManager.PlayerEngine.CanSeek;
         }
-        
+
         private void OnSeekRequested (object o, EventArgs args)
         {
             ServiceManager.PlayerEngine.Position = (uint)seek_slider.Value;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
index 166a128..c34ddf4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
@@ -36,34 +36,34 @@ namespace Banshee.Gui.Widgets
     public class ConnectedVolumeButton : Bacon.VolumeButton
     {
         private bool emit_lock = false;
-        
+
         public ConnectedVolumeButton () : base ()
         {
             Volume = PlayerEngineService.VolumeSchema.Get ();
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.Volume);
         }
-        
+
         public ConnectedVolumeButton (bool classic) : this ()
         {
             Classic = classic;
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             emit_lock = true;
             Volume = ServiceManager.PlayerEngine.Volume;
             emit_lock = false;
         }
-        
+
         protected override void OnVolumeChanged ()
         {
             if (emit_lock) {
                 return;
             }
-            
+
             ServiceManager.PlayerEngine.Volume = (ushort)Volume;
             PlayerEngineService.VolumeSchema.Set(Volume);
-            
+
             base.OnVolumeChanged ();
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs
index c665b7e..3511316 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/LargeTrackInfoDisplay.cs
@@ -46,27 +46,27 @@ namespace Banshee.Gui.Widgets
         private Pango.Layout first_line_layout;
         private Pango.Layout second_line_layout;
         private Pango.Layout third_line_layout;
-    
+
         public LargeTrackInfoDisplay ()
         {
         }
-        
+
         protected LargeTrackInfoDisplay (IntPtr native) : base (native)
         {
         }
-        
+
         protected override int MissingIconSizeRequest {
             get { return 128; }
         }
-        
+
         protected virtual int MaxArtworkSize {
             get { return 300; }
         }
-        
+
         protected virtual int Spacing {
             get { return 30; }
         }
-        
+
         protected override int ArtworkSizeRequest {
             get { return Math.Min (Math.Min (Allocation.Height, Allocation.Width), MaxArtworkSize); }
         }
@@ -80,7 +80,7 @@ namespace Banshee.Gui.Widgets
                 return new Gdk.Rectangle (x, y, width, height);
             }
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
@@ -93,24 +93,24 @@ namespace Banshee.Gui.Widgets
                 first_line_layout.Dispose ();
                 first_line_layout = null;
             }
-            
+
             if (second_line_layout != null) {
                 second_line_layout.Dispose ();
                 second_line_layout = null;
             }
-            
+
             if (third_line_layout != null) {
                 third_line_layout.Dispose ();
                 third_line_layout = null;
             }
         }
-       
+
         protected override void RenderCoverArt (Cairo.Context cr, ImageSurface image)
         {
             if (image == null) {
                 return;
             }
-            
+
             Gdk.Rectangle alloc = RenderAllocation;
             int asr = ArtworkSizeRequest;
             int reflect = (int)(image.Height * 0.2);
@@ -118,7 +118,7 @@ namespace Banshee.Gui.Widgets
             int surface_h = image.Height + reflect;
             int x = alloc.X + alloc.Width - asr;
             int y = alloc.Y;
-            
+
             Surface scene = null;
             if (!surfaces.TryGetValue (image, out scene)) {
                 scene = CreateScene (cr, image, reflect);
@@ -128,53 +128,53 @@ namespace Banshee.Gui.Widgets
             cr.Rectangle (x, y, asr, alloc.Height);
             cr.Color = BackgroundColor;
             cr.Fill ();
-            
+
             x += (asr - surface_w) / 2;
             y += surface_h > asr ? 0 : (asr - surface_h) / 2;
-            
+
             cr.SetSource (scene, x, y);
             cr.Paint ();
         }
-        
+
         private Surface CreateScene (Cairo.Context window_cr, ImageSurface image, int reflect)
         {
-            Surface surface = window_cr.Target.CreateSimilar (window_cr.Target.Content, 
+            Surface surface = window_cr.Target.CreateSimilar (window_cr.Target.Content,
                 image.Width, image.Height + reflect);
             Cairo.Context cr = new Context (surface);
-            
+
             cr.Save ();
-            
+
             cr.SetSource (image);
             cr.Paint ();
-            
+
             cr.Rectangle (0, image.Height, image.Width, reflect);
             cr.Clip ();
-            
+
             Matrix matrix = new Matrix ();
             matrix.InitScale (1, -1);
             matrix.Translate (0, -(2 * image.Height) + 1);
             cr.Transform (matrix);
-            
+
             cr.SetSource (image);
             cr.Paint ();
-            
+
             cr.Restore ();
-            
+
             Color bg_transparent = BackgroundColor;
             bg_transparent.A = 0.65;
-            
+
             LinearGradient mask = new LinearGradient (0, image.Height, 0, image.Height + reflect);
             mask.AddColorStop (0, bg_transparent);
             mask.AddColorStop (1, BackgroundColor);
-            
+
             cr.Rectangle (0, image.Height, image.Width, reflect);
             cr.Pattern = mask;
             cr.Fill ();
-            
+
             ((IDisposable)cr).Dispose ();
             return surface;
         }
-        
+
         protected override void RenderTrackInfo (Context cr, TrackInfo track, bool renderTrack, bool renderArtistAlbum)
         {
             if (track == null) {
@@ -187,7 +187,7 @@ namespace Banshee.Gui.Widgets
             int pango_width = (int)(width * Pango.Scale.PangoScale);
 
             string first_line = GetFirstLineText (track);
-            
+
             // FIXME: This is incredibly bad, but we don't want to break
             // translations right now. It needs to be replaced for 1.4!!
             string line = GetSecondLineText (track);
@@ -197,7 +197,7 @@ namespace Banshee.Gui.Widgets
                 // Check that there are at least 3 spans in the string, else this
                 // will break for tracks with missing artist or album info.
                 && StringUtil.SubstringCount (line, "<span") >= 3) {
-                
+
                 second_line = line.Substring (0, Math.Max (0, split_pos - 1)) + "</span>";
                 third_line = String.Format ("<span color=\"{0}\">{1}",
                     CairoExtensions.ColorGetHex (TextColor, false),
@@ -208,17 +208,17 @@ namespace Banshee.Gui.Widgets
                 first_line_layout = CairoExtensions.CreateLayout (this, cr);
                 first_line_layout.Ellipsize = Pango.EllipsizeMode.End;
                 first_line_layout.Alignment = Pango.Alignment.Right;
-                
+
                 int base_size = first_line_layout.FontDescription.Size;
                 first_line_layout.FontDescription.Size = (int)(base_size * Pango.Scale.XLarge);
             }
-            
+
             if (second_line_layout == null) {
                 second_line_layout = CairoExtensions.CreateLayout (this, cr);
                 second_line_layout.Ellipsize = Pango.EllipsizeMode.End;
                 second_line_layout.Alignment = Pango.Alignment.Right;
             }
-            
+
             if (third_line_layout == null) {
                 third_line_layout = CairoExtensions.CreateLayout (this, cr);
                 third_line_layout.Ellipsize = Pango.EllipsizeMode.End;
@@ -229,7 +229,7 @@ namespace Banshee.Gui.Widgets
             first_line_layout.Width = pango_width;
             second_line_layout.Width = pango_width;
             third_line_layout.Width = pango_width;
-            
+
             // Compute the layout coordinates
             first_line_layout.SetMarkup (first_line);
             first_line_layout.GetPixelSize (out fl_width, out fl_height);
@@ -245,7 +245,7 @@ namespace Banshee.Gui.Widgets
 
             // Render the layouts
             cr.Antialias = Cairo.Antialias.Default;
-            
+
             if (renderTrack) {
                 cr.MoveTo (text_alloc.X, text_alloc.Y);
                 cr.Color = TextColor;
@@ -255,14 +255,14 @@ namespace Banshee.Gui.Widgets
             if (!renderArtistAlbum) {
                 return;
             }
-            
+
             cr.MoveTo (text_alloc.X, text_alloc.Y + fl_height);
             PangoCairoHelper.ShowLayout (cr, second_line_layout);
-            
+
             cr.MoveTo (text_alloc.X, text_alloc.Y + fl_height + sl_height);
             PangoCairoHelper.ShowLayout (cr, third_line_layout);
         }
-        
+
         protected override void Invalidate ()
         {
             if (CurrentImage == null || CurrentTrack == null || IncomingImage == null || IncomingTrack == null) {
@@ -270,17 +270,17 @@ namespace Banshee.Gui.Widgets
             } else {
                 Gdk.Rectangle alloc = RenderAllocation;
                 QueueDrawArea (text_alloc.X, text_alloc.Y, text_alloc.Width, text_alloc.Height);
-                QueueDrawArea (alloc.X + text_alloc.Width + Spacing, alloc.Y, 
+                QueueDrawArea (alloc.X + text_alloc.Width + Spacing, alloc.Y,
                     alloc.Width - text_alloc.Width - Spacing, alloc.Height);
             }
         }
-        
+
         protected override void InvalidateCache ()
         {
             foreach (Surface surface in surfaces.Values) {
                 ((IDisposable)surface).Dispose ();
             }
-            
+
             surfaces.Clear ();
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/MainMenu.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/MainMenu.cs
index 578cbc1..2c71331 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/MainMenu.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/MainMenu.cs
@@ -39,15 +39,15 @@ namespace Banshee.Gui.Widgets
         public MainMenu ()
         {
             InterfaceActionService interface_service = ServiceManager.Get<InterfaceActionService> ();
-            
+
             MenuShell menu = (MenuShell)interface_service.UIManager.GetWidget ("/MainMenu");
-            
+
             ((PlaybackRepeatActions)interface_service.FindActionGroup ("PlaybackRepeat")).AttachSubmenu (
                 "/MainMenu/PlaybackMenu/RepeatMenu");
-                
+
             ((PlaybackShuffleActions)interface_service.FindActionGroup ("PlaybackShuffle")).AttachSubmenu (
                 "/MainMenu/PlaybackMenu/ShuffleMenu");
-            
+
             menu.Show ();
             PackStart (menu, true, true, 0);
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/NextButton.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/NextButton.cs
index d9aee46..2e2c11f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/NextButton.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/NextButton.cs
@@ -1,4 +1,4 @@
-// 
+//
 // NextButton.cs
 //
 // Authors:
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/PlaylistMenuItem.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/PlaylistMenuItem.cs
index 7d072ef..8d4b9f4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/PlaylistMenuItem.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/PlaylistMenuItem.cs
@@ -37,12 +37,12 @@ namespace Banshee.Gui.Widgets
     public class PlaylistMenuItem : ImageMenuItem
     {
         private PlaylistSource playlist;
-        
+
         public PlaylistMenuItem (PlaylistSource playlist) : base (playlist.Name)
         {
             this.playlist = playlist;
         }
-        
+
         public PlaylistSource Playlist {
             get { return playlist; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs
index eed0efc..3dea6a0 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs
@@ -38,27 +38,27 @@ namespace Banshee.Gui.Widgets
     public class RepeatActionButton : HBox
     {
         private PlaybackRepeatActions actions = ServiceManager.Get<InterfaceActionService> ().PlaybackActions.RepeatActions;
-        
+
         private MenuButton button;
         private HBox box = new HBox ();
         private Image image = new Image ();
         private Label label = new Label ();
-        
+
         public RepeatActionButton () : this (false)
         {
         }
-        
+
         public RepeatActionButton (bool iconOnly)
         {
             box.Spacing = 4;
             label.UseUnderline = true;
             image.IconSize = (int)IconSize.Menu;
-            
+
             box.PackStart (image, false, false, (uint)(iconOnly ? 4 : 0));
             if (!iconOnly) {
                 box.PackStart (label, true, true, 0);
             }
-            
+
             button = new MenuButton (box, actions.CreateMenu (), false);
             Add (button);
 
@@ -67,7 +67,7 @@ namespace Banshee.Gui.Widgets
 
             ShowAll ();
         }
-        
+
         private void OnActionChanged (object o, EventArgs args)
         {
             button.Sensitive = image.Sensitive = label.Sensitive = actions.Sensitive;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs
index 398b62b..ad83a4f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TaskStatusIcon.cs
@@ -1,4 +1,4 @@
-// 
+//
 // TaskStatusIcon.cs
 //
 // Author:
@@ -46,7 +46,7 @@ namespace Banshee.Gui.Widgets
     public class TaskStatusIcon : AnimatedImage
     {
         private List<Job> jobs = new List<Job> ();
-        
+
         public bool ShowOnlyBackgroundTasks { get; set; }
         public bool IntermittentVisibility { get; set; }
         public uint IntermittentVisibleTime { get; set; }
@@ -86,7 +86,7 @@ namespace Banshee.Gui.Widgets
             lock (jobs) {
                 if (jobs.Count > 0) {
                     var sb = new StringBuilder ();
-                    
+
                     sb.Append ("<b>");
                     sb.Append (GLib.Markup.EscapeText (Catalog.GetPluralString (
                         "Active Task Running", "Active Tasks Running", jobs.Count)));
@@ -114,7 +114,7 @@ namespace Banshee.Gui.Widgets
                 if (!first && task_active == value) {
                     return;
                 }
-                
+
                 first = false;
                 task_active = value;
 
@@ -145,7 +145,7 @@ namespace Banshee.Gui.Widgets
                     turn_off_id = Banshee.ServiceStack.Application.RunTimeout (IntermittentHiddenTime, TurnOff);
                 }
             }
-            
+
             turn_on_id = 0;
             return false;
         }
@@ -169,24 +169,24 @@ namespace Banshee.Gui.Widgets
         }
 
         private void AddJob (Job job)
-        {                
-            lock (jobs) {    
+        {
+            lock (jobs) {
                 if (job == null || (ShowOnlyBackgroundTasks && !job.IsBackground) || job.IsFinished) {
                     return;
                 }
-                
+
                 jobs.Add (job);
                 job.Updated += OnJobUpdated;
             }
 
             ThreadAssist.ProxyToMain (Update);
         }
-        
+
         private void OnJobAdded (Job job)
         {
             AddJob (job);
         }
-        
+
         private void RemoveJob (Job job)
         {
             lock (jobs) {
@@ -198,7 +198,7 @@ namespace Banshee.Gui.Widgets
 
             ThreadAssist.ProxyToMain (Update);
         }
-        
+
         private void OnJobRemoved (Job job)
         {
             RemoveJob (job);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
index 46e558a..41e4759 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
@@ -52,111 +52,111 @@ namespace Banshee.Gui.Widgets
         protected ArtworkManager ArtworkManager {
             get { return artwork_manager; }
         }
-        
+
         private ImageSurface current_image;
         protected ImageSurface CurrentImage {
             get { return current_image; }
         }
-        
+
         private ImageSurface incoming_image;
         protected ImageSurface IncomingImage {
             get { return incoming_image; }
         }
-        
+
         private ImageSurface missing_audio_image;
         protected ImageSurface MissingAudioImage {
-            get { return missing_audio_image ?? (missing_audio_image 
+            get { return missing_audio_image ?? (missing_audio_image
                 = PixbufImageSurface.Create (IconThemeUtils.LoadIcon (MissingIconSizeRequest, "audio-x-generic"), true)); }
         }
-        
+
         private ImageSurface missing_video_image;
         protected ImageSurface MissingVideoImage {
-            get { return missing_video_image ?? (missing_video_image 
+            get { return missing_video_image ?? (missing_video_image
                 = PixbufImageSurface.Create (IconThemeUtils.LoadIcon (MissingIconSizeRequest, "video-x-generic"), true)); }
         }
-        
+
         private Cairo.Color background_color;
         protected virtual Cairo.Color BackgroundColor {
             get { return background_color; }
         }
-        
+
         private Cairo.Color text_color;
         protected virtual Cairo.Color TextColor {
             get { return text_color; }
         }
-        
+
         private Cairo.Color text_light_color;
         protected virtual Cairo.Color TextLightColor {
             get { return text_light_color; }
         }
-        
+
         private TrackInfo current_track;
         protected TrackInfo CurrentTrack {
             get { return current_track; }
         }
-        
-        private TrackInfo incoming_track;   
+
+        private TrackInfo incoming_track;
         protected TrackInfo IncomingTrack {
             get { return incoming_track; }
         }
-        
+
         private uint idle_timeout_id = 0;
         private SingleActorStage stage = new SingleActorStage ();
 
         protected TrackInfoDisplay (IntPtr native) : base (native)
         {
         }
-        
+
         public TrackInfoDisplay ()
         {
             stage.Iteration += OnStageIteration;
-        
+
             if (ServiceManager.Contains<ArtworkManager> ()) {
                 artwork_manager = ServiceManager.Get<ArtworkManager> ();
             }
-            
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
-                PlayerEvent.StartOfStream | 
-                PlayerEvent.TrackInfoUpdated | 
+
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
+                PlayerEvent.StartOfStream |
+                PlayerEvent.TrackInfoUpdated |
                 PlayerEvent.StateChange);
-                
+
             WidgetFlags |= WidgetFlags.NoWindow;
         }
-        
+
         public override void Dispose ()
         {
             if (idle_timeout_id > 0) {
                 GLib.Source.Remove (idle_timeout_id);
             }
-            
+
             if (ServiceManager.PlayerEngine != null) {
                 ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
             }
-            
+
             stage.Iteration -= OnStageIteration;
             stage = null;
-            
+
             InvalidateCache ();
-            
+
             base.Dispose ();
         }
-        
+
         protected override void OnRealized ()
         {
             GdkWindow = Parent.GdkWindow;
             base.OnRealized ();
         }
-        
+
         protected override void OnUnrealized ()
         {
             base.OnUnrealized ();
             InvalidateCache ();
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
-            
+
             if (current_track == null) {
                 LoadCurrentTrack ();
             } else {
@@ -167,11 +167,11 @@ namespace Banshee.Gui.Widgets
         protected override void OnStyleSet (Style previous)
         {
             base.OnStyleSet (previous);
-            
+
             text_color = CairoExtensions.GdkColorToCairoColor (Style.Foreground (StateType.Normal));
             background_color = CairoExtensions.GdkColorToCairoColor (Style.Background (StateType.Normal));
             text_light_color = Hyena.Gui.Theming.GtkTheme.GetCairoTextMidColor (this);
-            
+
             if (missing_audio_image != null) {
                 ((IDisposable)missing_audio_image).Dispose ();
                 missing_audio_image = null;
@@ -181,112 +181,112 @@ namespace Banshee.Gui.Widgets
                 ((IDisposable)missing_video_image).Dispose ();
                 missing_video_image = null;
             }
-            
+
             OnThemeChanged ();
         }
-        
+
         protected virtual void OnThemeChanged ()
         {
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             bool idle = incoming_track == null && current_track == null;
             if (!Visible || !IsMapped || (idle && !CanRenderIdle)) {
                 return true;
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-            
+
             foreach (Gdk.Rectangle damage in evnt.Region.GetRectangles ()) {
                 cr.Rectangle (damage.X, damage.Y, damage.Width, damage.Height);
                 cr.Clip ();
-            
+
                 if (idle) {
                     RenderIdle (cr);
                 } else {
                     RenderAnimation (cr);
                 }
-            
+
                 cr.ResetClip ();
             }
-            
+
             CairoExtensions.DisposeContext (cr);
-            
+
             return true;
         }
 
         protected virtual bool CanRenderIdle {
             get { return false; }
         }
-        
+
         protected virtual void RenderIdle (Cairo.Context cr)
         {
         }
-        
+
         private void RenderAnimation (Cairo.Context cr)
         {
             if (stage.Actor == null) {
                 // We are not in a transition, just render
                 RenderStage (cr, current_track, current_image);
                 return;
-            } 
-            
+            }
+
             if (current_track == null) {
                 // Fade in the whole stage, nothing to fade out
                 CairoExtensions.PushGroup (cr);
                 RenderStage (cr, incoming_track, incoming_image);
                 CairoExtensions.PopGroupToSource (cr);
-                
+
                 cr.PaintWithAlpha (stage.Actor.Percent);
                 return;
             }
-            
+
             // XFade only the cover art
             RenderCoverArt (cr, incoming_image);
-            
+
             CairoExtensions.PushGroup (cr);
             RenderCoverArt (cr, current_image);
             CairoExtensions.PopGroupToSource (cr);
-            
+
             cr.PaintWithAlpha (1.0 - stage.Actor.Percent);
-            
+
             // Fade in/out the text
             bool same_artist_album = incoming_track != null ? incoming_track.ArtistAlbumEqual (current_track) : false;
             bool same_track = incoming_track != null ? incoming_track.Equals (current_track) : false;
-            
+
             if (same_artist_album) {
                 RenderTrackInfo (cr, incoming_track, same_track, true);
             }
-            
+
             if (stage.Actor.Percent <= 0.5) {
                 // Fade out old text
                 CairoExtensions.PushGroup (cr);
                 RenderTrackInfo (cr, current_track, !same_track, !same_artist_album);
                 CairoExtensions.PopGroupToSource (cr);
-               
+
                 cr.PaintWithAlpha (1.0 - (stage.Actor.Percent * 2.0));
             } else {
                 // Fade in new text
                 CairoExtensions.PushGroup (cr);
                 RenderTrackInfo (cr, incoming_track, !same_track, !same_artist_album);
                 CairoExtensions.PopGroupToSource (cr);
-                
+
                 cr.PaintWithAlpha ((stage.Actor.Percent - 0.5) * 2.0);
             }
         }
-        
+
         private void RenderStage (Cairo.Context cr, TrackInfo track, ImageSurface image)
         {
             RenderCoverArt (cr, image);
             RenderTrackInfo (cr, track, true, true);
         }
-        
+
         protected virtual void RenderCoverArt (Cairo.Context cr, ImageSurface image)
         {
-            ArtworkRenderer.RenderThumbnail (cr, image, false, Allocation.X, Allocation.Y, 
-                ArtworkSizeRequest, ArtworkSizeRequest, 
-                !IsMissingImage (image), 0, 
+            ArtworkRenderer.RenderThumbnail (cr, image, false, Allocation.X, Allocation.Y,
+                ArtworkSizeRequest, ArtworkSizeRequest,
+                !IsMissingImage (image), 0,
                 IsMissingImage (image), BackgroundColor);
         }
 
@@ -294,21 +294,21 @@ namespace Banshee.Gui.Widgets
         {
             return pb == missing_audio_image || pb == missing_video_image;
         }
-        
+
         protected virtual void InvalidateCache ()
         {
         }
-        
+
         protected abstract void RenderTrackInfo (Cairo.Context cr, TrackInfo track, bool renderTrack, bool renderArtistAlbum);
-        
+
         protected virtual int ArtworkSizeRequest {
             get { return Allocation.Height; }
         }
-        
+
         protected virtual int MissingIconSizeRequest {
             get { return 32; }
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             if (args.Event == PlayerEvent.StartOfStream) {
@@ -326,19 +326,19 @@ namespace Banshee.Gui.Widgets
                 }
             }
         }
-        
+
         private bool IdleTimeout ()
         {
-            if (ServiceManager.PlayerEngine.CurrentTrack == null || 
+            if (ServiceManager.PlayerEngine.CurrentTrack == null ||
                 ServiceManager.PlayerEngine.CurrentState == PlayerState.Idle) {
                 incoming_track = null;
                 incoming_image = null;
-                
+
                 if (stage != null && stage.Actor == null) {
                     stage.Reset ();
                 }
             }
-            
+
             idle_timeout_id = 0;
             return false;
         }
@@ -361,14 +361,14 @@ namespace Banshee.Gui.Widgets
             }
 
             incoming_track = track;
-            
+
             LoadImage (track);
 
             if (stage.Actor == null) {
                 stage.Reset ();
             }
         }
-        
+
         private void LoadImage (TrackInfo track)
         {
             ImageSurface image = artwork_manager.LookupScaleSurface (track.ArtworkId, ArtworkSizeRequest);
@@ -378,7 +378,7 @@ namespace Banshee.Gui.Widgets
             } else {
                 incoming_image = image;
             }
-            
+
             if (track == current_track) {
                 current_image = incoming_image;
             }
@@ -388,50 +388,50 @@ namespace Banshee.Gui.Widgets
         {
             incoming_image = is_video ? MissingVideoImage : MissingAudioImage;
         }
-        
+
         private double last_fps = 0.0;
-        
+
         private void OnStageIteration (object o, EventArgs args)
         {
             Invalidate ();
-            
+
             if (stage.Actor != null) {
                 last_fps = stage.Actor.FramesPerSecond;
                 return;
             }
-            
+
             InvalidateCache ();
-            
+
             if (ApplicationContext.Debugging) {
                 Log.DebugFormat ("TrackInfoDisplay RenderAnimation: {0:0.00} FPS", last_fps);
             }
-            
+
             if (current_image != null && current_image != incoming_image && !IsMissingImage (current_image)) {
                 ((IDisposable)current_image).Dispose ();
             }
-            
+
             current_image = incoming_image;
             current_track = incoming_track;
-            
+
             incoming_track = null;
-            
+
             OnArtworkChanged ();
         }
-        
+
         protected virtual void Invalidate ()
         {
             QueueDraw ();
         }
-        
+
         protected virtual void OnArtworkChanged ()
         {
         }
-        
+
         protected virtual string GetFirstLineText (TrackInfo track)
         {
             return String.Format ("<b>{0}</b>", GLib.Markup.EscapeText (track.DisplayTrackTitle));
         }
-        
+
         protected virtual string GetSecondLineText (TrackInfo track)
         {
             string markup = null;
@@ -441,7 +441,7 @@ namespace Banshee.Gui.Widgets
                 // Translators: {0} and {1} are for markup so ignore them, {2} and {3}
                 // are Podcast Name and Published Date, respectively;
                 // e.g. 'from BBtv published 7/26/2007'
-                markup = MarkupFormat (Catalog.GetString ("{0}from{1} {2} {0}published{1} {3}"), 
+                markup = MarkupFormat (Catalog.GetString ("{0}from{1} {2} {0}published{1} {3}"),
                     track.DisplayAlbumTitle, track.ReleaseDate.ToShortDateString ());
             } else if (radio_track != null && radio_track.ParentTrack != null) {
                 // This is complicated because some radio streams send tags when the song changes, and we
@@ -451,43 +451,43 @@ namespace Banshee.Gui.Widgets
                     track.ArtistName == radio_track.ParentTrack.ArtistName ? null : track.ArtistName, track.DisplayArtistName,
                     track.AlbumTitle == radio_track.ParentTrack.AlbumTitle ? null : track.AlbumTitle, track.DisplayAlbumTitle, false
                 );
-                
+
                 if (String.IsNullOrEmpty (by_from)) {
                     // simply: "Chicago Public Radio" or whatever the artist name is
                     markup = GLib.Markup.EscapeText (radio_track.ParentTrack.ArtistName ?? Catalog.GetString ("Unknown Stream"));
                 } else {
                     // Translators: {0} and {1} are markup so ignore them, {2} is the name of the radio station
                     string on = MarkupFormat (Catalog.GetString ("{0}on{1} {2}"), radio_track.ParentTrack.TrackTitle);
-                    
+
                     // Translators: {0} is the "from {album} by {artist}" type string, and {1} is the "on {radio station name}" string
                     markup = String.Format (Catalog.GetString ("{0} {1}"), by_from, on);
                 }
             } else {
                 markup = GetByFrom (track.ArtistName, track.DisplayArtistName, track.AlbumTitle, track.DisplayAlbumTitle, true);
             }
-            
-            return String.Format ("<span color=\"{0}\">{1}</span>",  
+
+            return String.Format ("<span color=\"{0}\">{1}</span>",
                 CairoExtensions.ColorGetHex (TextColor, false),
                 markup);
         }
-        
+
         private string MarkupFormat (string fmt, params string [] args)
         {
             string [] new_args = new string [args.Length + 2];
-            new_args[0] = String.Format ("<span color=\"{0}\" size=\"small\">", 
+            new_args[0] = String.Format ("<span color=\"{0}\" size=\"small\">",
                 CairoExtensions.ColorGetHex (TextLightColor, false));
             new_args[1] = "</span>";
-            
+
             for (int i = 0; i < args.Length; i++) {
                 new_args[i + 2] = GLib.Markup.EscapeText (args[i]);
             }
-            
+
             return String.Format (fmt, new_args);
         }
-        
+
         private string GetByFrom (string artist, string display_artist, string album, string display_album, bool unknown_ok)
         {
-            
+
             bool has_artist = !String.IsNullOrEmpty (artist);
             bool has_album = !String.IsNullOrEmpty (album);
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTile.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTile.cs
index 1a1eb42..d6223ad 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTile.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTile.cs
@@ -1,4 +1,4 @@
-// 
+//
 // UserJobTile.cs
 //
 // Author:
@@ -41,11 +41,11 @@ namespace Banshee.Gui.Widgets
     public class UserJobTile : Table
     {
         private Job job;
-        
+
         private string [] icon_names;
         private string title;
         private string status;
-        
+
         private Image icon;
         private Gdk.Pixbuf icon_pixbuf;
         private Label title_label;
@@ -55,66 +55,66 @@ namespace Banshee.Gui.Widgets
         private uint update_delay_id;
         private uint progress_bounce_id;
         private object tooltips;
-        
+
         Banshee.Widgets.HigMessageDialog cancel_dialog;
-        
+
         public UserJobTile (Job job) : base (3, 2, false)
         {
             this.job = job;
             this.job.Updated += OnJobUpdated;
-            
+
             BuildWidget ();
             UpdateFromJob ();
         }
-        
+
         private void BuildWidget ()
         {
             ThreadAssist.AssertInMainThread ();
             ColumnSpacing = 5;
             RowSpacing = 2;
-            
+
             icon = new Image ();
-            
+
             tooltips = TooltipSetter.CreateHost ();
             title_label = new Label ();
             title_label.Xalign = 0.0f;
             title_label.Ellipsize = Pango.EllipsizeMode.End;
-            
+
             status_label = new Label ();
             status_label.Xalign = 0.0f;
             status_label.Ellipsize = Pango.EllipsizeMode.End;
-            
+
             progress_bar = new ProgressBar ();
             progress_bar.SetSizeRequest (0, -1);
             progress_bar.Text = " ";
             progress_bar.Show ();
-            
+
             cancel_button = new Button (new Image (Stock.Stop, IconSize.Menu));
             cancel_button.Relief = ReliefStyle.None;
             cancel_button.ShowAll ();
             cancel_button.Clicked += OnCancelClicked;
-            
-            Attach (title_label, 0, 3, 0, 1, 
+
+            Attach (title_label, 0, 3, 0, 1,
                 AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-            
-            Attach (status_label, 0, 3, 1, 2, 
+
+            Attach (status_label, 0, 3, 1, 2,
                 AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-                
-            Attach (icon, 0, 1, 2, 3, 
+
+            Attach (icon, 0, 1, 2, 3,
                 AttachOptions.Shrink | AttachOptions.Fill,
                 AttachOptions.Shrink | AttachOptions.Fill, 0, 0);
-                
+
             Attach (progress_bar, 1, 2, 2, 3,
                 AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Shrink, 0, 0);
-                
+
             Attach (cancel_button, 2, 3, 2, 3,
                 AttachOptions.Shrink | AttachOptions.Fill,
                 AttachOptions.Shrink | AttachOptions.Fill, 0, 0);
         }
-        
+
         protected override void OnStyleSet (Style style)
         {
             base.OnStyleSet (style);
@@ -126,41 +126,41 @@ namespace Banshee.Gui.Widgets
             if (cancel_dialog != null) {
                 return;
             }
-            
+
             Window parent = null;
             if (ServiceManager.Contains<GtkElementsService> ()) {
                 parent = ServiceManager.Get<GtkElementsService> ().PrimaryWindow;
             }
-            
-            cancel_dialog = new Banshee.Widgets.HigMessageDialog (parent, 
+
+            cancel_dialog = new Banshee.Widgets.HigMessageDialog (parent,
                 DialogFlags.Modal, MessageType.Question, ButtonsType.None,
                 job.Title == null
                     ? Catalog.GetString ("Stop Operation")
                     : String.Format (Catalog.GetString ("Stop {0}"), job.Title),
-                job.CancelMessage == null 
-                    ? (job.Title == null 
+                job.CancelMessage == null
+                    ? (job.Title == null
                         ? Catalog.GetString ("This operation is still performing work. Would you like to stop it?")
                         : String.Format (Catalog.GetString (
                             "The '{0}' operation is still performing work. Would you like to stop it?"), job.Title))
                     : job.CancelMessage);
-                        
-            cancel_dialog.AddButton (job.Title == null 
+
+            cancel_dialog.AddButton (job.Title == null
                 ? Catalog.GetString ("Continue")
-                : String.Format (Catalog.GetString ("Continue {0}"), job.Title), 
+                : String.Format (Catalog.GetString ("Continue {0}"), job.Title),
                 ResponseType.No, true);
             cancel_dialog.AddButton (Stock.Stop, ResponseType.Yes, false);
             cancel_dialog.DefaultResponse = ResponseType.Cancel;
-                
+
             if (cancel_dialog.Run () == (int)ResponseType.Yes) {
                 if (job.CanCancel) {
                     ServiceManager.JobScheduler.Cancel (job);
                 }
             }
-        
+
             cancel_dialog.Destroy ();
             cancel_dialog = null;
         }
-        
+
         private void SetTitle (string new_title)
         {
             if (String.IsNullOrEmpty (new_title)) {
@@ -179,13 +179,13 @@ namespace Banshee.Gui.Widgets
             if (cancel_dialog != null && !job.CanCancel) {
                 cancel_dialog.Respond (Gtk.ResponseType.Cancel);
             }
-            
+
             if (job.IsCancelRequested) {
                 SetTitle (Catalog.GetString ("Stopping..."));
             } else if (title != job.Title) {
                 SetTitle (job.Title);
             }
-            
+
             if (status != job.Status) {
                 // If we've ever had the status in this job, don't hide it b/c that'll make
                 // the tile change width, possibly repeatedly and annoyingly
@@ -199,7 +199,7 @@ namespace Banshee.Gui.Widgets
                 }
                 status = job.Status;
             }
-            
+
             if (icon_names == null || icon_names.Length != job.IconNames.Length) {
                 UpdateIcons ();
             } else {
@@ -210,15 +210,15 @@ namespace Banshee.Gui.Widgets
                     }
                 }
             }
-            
+
             cancel_button.Sensitive = job.CanCancel && !job.IsCancelRequested;
-            
+
             if (job.Progress == 0 && progress_bounce_id > 0) {
                 return;
             }
-            
+
             progress_bar.Fraction = job.Progress;
-            
+
             if (job.Progress == 0.0 && progress_bounce_id == 0) {
                 progress_bounce_id = GLib.Timeout.Add (100, delegate {
                     progress_bar.Text = " ";
@@ -230,15 +230,15 @@ namespace Banshee.Gui.Widgets
                     GLib.Source.Remove (progress_bounce_id);
                     progress_bounce_id = 0;
                 }
-                
+
                 progress_bar.Text = String.Format("{0}%", (int)(job.Progress * 100.0));
             }
         }
-        
+
         private void UpdateIcons ()
         {
             icon_names = job.IconNames;
-            
+
             if (icon_pixbuf != null) {
                 icon_pixbuf.Dispose ();
                 icon_pixbuf = null;
@@ -248,7 +248,7 @@ namespace Banshee.Gui.Widgets
                 icon.Hide ();
                 return;
             }
-            
+
             icon_pixbuf = IconThemeUtils.LoadIcon (22, icon_names);
             if (icon_pixbuf != null) {
                 icon.Pixbuf = icon_pixbuf;
@@ -264,14 +264,14 @@ namespace Banshee.Gui.Widgets
                 icon.Show ();
             }
         }
-        
+
         private void OnJobUpdated (object o, EventArgs args)
         {
             if (update_delay_id == 0) {
                 GLib.Timeout.Add (100, UpdateFromJobTimeout);
             }
         }
-        
+
         private bool UpdateFromJobTimeout ()
         {
             UpdateFromJob ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTileHost.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTileHost.cs
index ffc1b05..105018e 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTileHost.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTileHost.cs
@@ -1,4 +1,4 @@
-// 
+//
 // UserJobTileHost.cs
 //
 // Author:
@@ -45,12 +45,12 @@ namespace Banshee.Gui.Widgets
         private AnimatedVBox box;
         private Dictionary<Job, UserJobTile> job_tiles = new Dictionary<Job, UserJobTile> ();
         private Dictionary<Job, DateTime> job_start_times = new Dictionary<Job, DateTime> ();
-        
+
         public UserJobTileHost () : base (0.0f, 0.0f, 1.0f, 1.0f)
         {
             Banshee.Base.ThreadAssist.AssertInMainThread ();
             LeftPadding = 4;
-            
+
             box = new AnimatedVBox ();
             box.StartPadding = 8;
             box.Spacing = 8;
@@ -74,12 +74,12 @@ namespace Banshee.Gui.Widgets
         }
 
         private void AddJob (Job job)
-        {                
-            lock (this) {    
+        {
+            lock (this) {
                 if (job == null || job.IsFinished) {
                     return;
                 }
-                
+
                 if ((job.DelayShow && job.Progress < 0.33) || !job.DelayShow) {
                     Banshee.Base.ThreadAssist.AssertInMainThread ();
                     UserJobTile tile = new UserJobTile (job);
@@ -90,7 +90,7 @@ namespace Banshee.Gui.Widgets
                 }
             }
         }
-        
+
         private void OnJobAdded (Job job)
         {
             if (job.IsBackground) {
@@ -109,7 +109,7 @@ namespace Banshee.Gui.Widgets
                 }
             });
         }
-        
+
         private void RemoveJob (Job job)
         {
             lock (this) {
@@ -122,7 +122,7 @@ namespace Banshee.Gui.Widgets
                 }
             }
         }
-        
+
         private void OnJobRemoved (Job job)
         {
             ThreadAssist.ProxyToMain (delegate {
@@ -138,7 +138,7 @@ namespace Banshee.Gui.Widgets
                             return;
                         }
                     }
-                    
+
                     RemoveJob (job);
                 }
             });
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs
index 003d1ed..20edfac 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs
@@ -54,7 +54,7 @@ namespace Banshee.Gui
             : this (ServiceManager.Get<InterfaceActionService> (), name)
         {
         }
-        
+
         public BansheeActionGroup (InterfaceActionService action_service, string name) : base (name)
         {
             this.action_service = action_service;
@@ -104,11 +104,11 @@ namespace Banshee.Gui
                 base.Add (action_entries);
             }
         }
-        
+
         public void AddImportant (params ActionEntry [] action_entries)
         {
             base.Add (action_entries);
-            
+
             foreach (ActionEntry entry in action_entries) {
                 this[entry.name].IsImportant = true;
             }
@@ -117,12 +117,12 @@ namespace Banshee.Gui
         public void AddImportant (params ToggleActionEntry [] action_entries)
         {
             base.Add (action_entries);
-            
+
             foreach (ToggleActionEntry entry in action_entries) {
                 this[entry.name].IsImportant = true;
             }
         }
-        
+
         public void Remove (string actionName)
         {
             Gtk.Action action = this[actionName];
@@ -147,7 +147,7 @@ namespace Banshee.Gui
         {
             UpdateAction (action_name, visible_and_sensitive, visible_and_sensitive);
         }
-        
+
         public void UpdateAction (string action_name, bool visible, bool sensitive)
         {
             UpdateAction (action_name, visible, sensitive, null);
@@ -180,18 +180,18 @@ namespace Banshee.Gui
                 }
             }
         }
-        
+
         public static void UpdateAction (Gtk.Action action, bool visible_and_sensitive)
         {
             UpdateAction (action, visible_and_sensitive, visible_and_sensitive);
         }
-        
+
         public static void UpdateAction (Gtk.Action action, bool visible, bool sensitive)
         {
             action.Visible = visible;
             action.Sensitive = visible && sensitive;
         }
-        
+
         protected void ShowContextMenu (string menu_name)
         {
             Gtk.Menu menu = Actions.UIManager.GetWidget (menu_name) as Menu;
@@ -208,10 +208,10 @@ namespace Banshee.Gui
                 return;
             }
 
-            menu.Show (); 
+            menu.Show ();
             menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
         }
-        
+
         public InterfaceActionService Actions {
             get { return action_service; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeDbFormatMigratorMonitor.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeDbFormatMigratorMonitor.cs
index 055e58d..418d3ec 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeDbFormatMigratorMonitor.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeDbFormatMigratorMonitor.cs
@@ -61,56 +61,56 @@ namespace Banshee.Gui
             migrator.SlowFinished -= OnMigrationSlowFinished;
             migrator = null;
         }
-        
+
         private void IterateSlow ()
         {
             while (Gtk.Application.EventsPending ()) {
                 Gtk.Application.RunIteration ();
             }
         }
-        
+
         private void OnMigrationSlowStarted (string title, string message)
         {
             lock (this) {
                 if (slow_window != null) {
                     slow_window.Destroy ();
                 }
-                
+
                 Gtk.Application.Init ();
-                
+
                 slow_window = new Gtk.Window (String.Empty);
                 slow_window.BorderWidth = 10;
                 slow_window.WindowPosition = Gtk.WindowPosition.Center;
                 slow_window.DeleteEvent += delegate (object o, Gtk.DeleteEventArgs args) {
                     args.RetVal = true;
                 };
-                
+
                 Gtk.VBox box = new Gtk.VBox ();
                 box.Spacing = 5;
-                
+
                 Gtk.Label title_label = new Gtk.Label ();
                 title_label.Xalign = 0.0f;
                 title_label.Markup = String.Format ("<b><big>{0}</big></b>",
                     GLib.Markup.EscapeText (title));
-                
+
                 Gtk.Label message_label = new Gtk.Label ();
                 message_label.Xalign = 0.0f;
                 message_label.Text = message;
                 message_label.Wrap = true;
-                
+
                 slow_progress = new Gtk.ProgressBar ();
-                
+
                 box.PackStart (title_label, false, false, 0);
                 box.PackStart (message_label, false, false, 0);
                 box.PackStart (slow_progress, false, false, 0);
-                
+
                 slow_window.Add (box);
                 slow_window.ShowAll ();
-                
+
                 IterateSlow ();
             }
         }
-        
+
         private void OnMigrationSlowPulse (object o, EventArgs args)
         {
             lock (this) {
@@ -118,7 +118,7 @@ namespace Banshee.Gui
                 IterateSlow ();
             }
         }
-        
+
         private void OnMigrationSlowFinished (object o, EventArgs args)
         {
             lock (this) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeIconFactory.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeIconFactory.cs
index 1d226ea..d80e635 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeIconFactory.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/BansheeIconFactory.cs
@@ -40,27 +40,27 @@ namespace Banshee.Gui
         public IconTheme Theme {
             get { return theme; }
         }
-    
+
         public BansheeIconFactory ()
         {
             theme = IconTheme.Default;
-        
+
             string icon_theme_path = Banshee.Base.Paths.GetInstalledDataDirectory ("icons");
             if (Directory.Exists (icon_theme_path)) {
                 Hyena.Log.DebugFormat ("Adding icon theme search path: {0}", icon_theme_path);
                 Theme.AppendSearchPath (icon_theme_path);
             }
-               
+
             AddDefault ();
         }
-        
+
         public void Add (string name)
         {
             IconSet icon_set = new IconSet ();
             IconSource source = new IconSource ();
             source.IconName = name;
             icon_set.AddSource (source);
-            
+
             Add (name, icon_set);
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/BaseClientWindow.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/BaseClientWindow.cs
index 2fb0e26..d76abee 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/BaseClientWindow.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/BaseClientWindow.cs
@@ -47,7 +47,7 @@ namespace Banshee.Gui
         protected GtkElementsService ElementsService {
             get { return elements_service; }
         }
-        
+
         private InterfaceActionService action_service;
         protected InterfaceActionService ActionService {
             get { return action_service; }
@@ -58,21 +58,21 @@ namespace Banshee.Gui
         protected BaseClientWindow (IntPtr ptr) : base (ptr)
         {
         }
-    
+
         public BaseClientWindow (string title, string configNameSpace, int defaultWidth, int defaultHeight) : base (title)
         {
             elements_service = ServiceManager.Get<GtkElementsService> ();
             action_service = ServiceManager.Get<InterfaceActionService> ();
-            
+
             ConfigureWindow ();
 
             window_controller = new PersistentWindowController (this, configNameSpace, defaultWidth, defaultHeight, WindowPersistOptions.All);
             window_controller.Restore ();
-            
+
             elements_service.PrimaryWindow = this;
-            
+
             AddAccelGroup (action_service.UIManager.AccelGroup);
-            
+
             InitializeWindow ();
 
             try {
@@ -110,7 +110,7 @@ namespace Banshee.Gui
 		}
 
         public virtual Box ViewContainer { get { return null; } }
-        
+
         public void ToggleVisibility ()
         {
             SetVisible (!(Visible && IsActive));
@@ -128,31 +128,31 @@ namespace Banshee.Gui
                 Present ();
             }
         }
-        
+
         private void InitializeWindow ()
         {
             Initialize ();
         }
-        
+
         protected abstract void Initialize ();
 
         protected virtual void ConnectEvents ()
         {
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
                 PlayerEvent.StartOfStream |
                 PlayerEvent.TrackInfoUpdated |
                 PlayerEvent.EndOfStream);
         }
 
-        private void OnPlayerEvent (PlayerEventArgs args) 
+        private void OnPlayerEvent (PlayerEventArgs args)
         {
             UpdateTitle ();
         }
-    
+
         protected virtual void ConfigureWindow ()
         {
         }
-    
+
         protected override bool OnDeleteEvent (Gdk.Event evnt)
         {
              if (ElementsService.PrimaryWindowClose != null) {
@@ -160,7 +160,7 @@ namespace Banshee.Gui
                     return true;
                 }
             }
-            
+
             Banshee.ServiceStack.Application.Shutdown ();
             return base.OnDeleteEvent (evnt);
         }
@@ -169,14 +169,14 @@ namespace Banshee.Gui
         {
             ToggleAction fullscreen_action = (ToggleAction) ServiceManager.Get<InterfaceActionService> ().ViewActions["FullScreenAction"];
             fullscreen_action.Active = (evnt.NewWindowState & Gdk.WindowState.Fullscreen) != 0;
-            
+
             if ((evnt.NewWindowState & Gdk.WindowState.Withdrawn) == 0) {
                 window_controller.Save ();
             }
-            
+
             return base.OnWindowStateEvent (evnt);
         }
-        
+
         protected virtual void OnTitleChanged ()
         {
             EventHandler handler = TitleChanged;
@@ -184,19 +184,19 @@ namespace Banshee.Gui
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void UpdateTitle ()
         {
             TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
             if (track != null) {
                 // Translators: this is the window title when a track is playing
                 //              {0} is the track title, {1} is the artist name
-                Title = String.Format (Catalog.GetString ("{0} by {1}"), 
+                Title = String.Format (Catalog.GetString ("{0} by {1}"),
                     track.DisplayTrackTitle, track.DisplayArtistName);
             } else {
                 Title = Catalog.GetString ("Banshee Media Player");
             }
-            
+
             OnTitleChanged ();
         }
 
@@ -206,8 +206,8 @@ namespace Banshee.Gui
 
             // This forces the toolbar to look like it's just a regular part
             // of the window since the stock toolbar look makes Banshee look ugly.
-            Style.ApplyDefaultBackground (toolbar.GdkWindow, true, State, 
-                args.Event.Area, toolbar.Allocation.X, toolbar.Allocation.Y, 
+            Style.ApplyDefaultBackground (toolbar.GdkWindow, true, State,
+                args.Event.Area, toolbar.Allocation.X, toolbar.Allocation.Y,
                 toolbar.Allocation.Width, toolbar.Allocation.Height);
 
             // Manually expose all the toolbar's children
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
index db10db9..2274c82 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
@@ -46,7 +46,7 @@ namespace Banshee.Gui
         {
             Add (new ActionEntry [] {
                 // Media Menu
-                new ActionEntry ("MediaMenuAction", null, 
+                new ActionEntry ("MediaMenuAction", null,
                     Catalog.GetString ("_Media"), null, null, null),
 
                 new ActionEntry ("ImportAction", Stock.Open,
@@ -63,71 +63,71 @@ namespace Banshee.Gui
                         new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.MusicLibrary);
                     }),
 
-                new ActionEntry ("OpenLocationAction", null, 
+                new ActionEntry ("OpenLocationAction", null,
                     Catalog.GetString ("Open _Location..."), "<control>L",
                     Catalog.GetString ("Open a remote location for playback"), OnOpenLocation),
-                    
+
                 new ActionEntry ("QuitAction", Stock.Quit,
                     Catalog.GetString ("_Quit"), "<control>Q",
                     Catalog.GetString ("Quit Banshee"), OnQuit),
 
                 // Edit Menu
-                new ActionEntry ("EditMenuAction", null, 
+                new ActionEntry ("EditMenuAction", null,
                     Catalog.GetString("_Edit"), null, null, null),
 
                 new ActionEntry ("PreferencesAction", Stock.Preferences,
                     Catalog.GetString ("_Preferences"), null,
                     Catalog.GetString ("Modify your personal preferences"), OnPreferences),
 
-                new ActionEntry ("ExtensionsAction", null, 
+                new ActionEntry ("ExtensionsAction", null,
                     Catalog.GetString ("Manage _Extensions"), null,
                     Catalog.GetString ("Manage extensions to add new features to Banshee"), OnExtensions),
-                
+
                 // Tools menu
                 new ActionEntry ("ToolsMenuAction", null,
                     Catalog.GetString ("_Tools"), null, null, null),
-                
+
                 // Help Menu
-                new ActionEntry ("HelpMenuAction", null, 
+                new ActionEntry ("HelpMenuAction", null,
                     Catalog.GetString ("_Help"), null, null, null),
-                
+
                 new ActionEntry ("WebMenuAction", null,
                     Catalog.GetString ("_Web Resources"), null, null, null),
-                    
+
                 new ActionEntry ("WikiGuideAction", Stock.Help,
                     Catalog.GetString ("Banshee _User Guide (Wiki)"), null,
                     Catalog.GetString ("Learn about how to use Banshee"), delegate {
                         Banshee.Web.Browser.Open ("http://banshee-project.org/support/guide/";);
                     }),
-                    
+
                 new ActionEntry ("WikiSearchHelpAction", null,
                     Catalog.GetString ("Advanced Collection Searching"), null,
                     Catalog.GetString ("Learn advanced ways to search your media collection"), delegate {
                         Banshee.Web.Browser.Open ("http://banshee-project.org/support/guide/searching/";);
                     }),
-                    
+
                 new ActionEntry ("WikiAction", null,
                     Catalog.GetString ("Banshee _Home Page"), null,
                     Catalog.GetString ("Visit the Banshee Home Page"), delegate {
                         Banshee.Web.Browser.Open ("http://banshee-project.org/";);
                     }),
-                    
+
                 new ActionEntry ("WikiDeveloperAction", null,
                     Catalog.GetString ("_Get Involved"), null,
                     Catalog.GetString ("Become a contributor to Banshee"), delegate {
                         Banshee.Web.Browser.Open ("http://banshee-project.org/contribute/";);
                     }),
-                 
+
                 new ActionEntry ("VersionInformationAction", null,
                     Catalog.GetString ("_Version Information"), null,
                     Catalog.GetString ("View detailed version and configuration information"), OnVersionInformation),
-                    
+
                 new ActionEntry("AboutAction", "gtk-about", OnAbout)
             });
-            
+
             this["ExtensionsAction"].Visible = false;
         }
-            
+
 #region Media Menu Actions
 
         private void OnImport (object o, EventArgs args)
@@ -141,14 +141,14 @@ namespace Banshee.Gui
                 src.Import ();
             }
         }
-        
+
         private void OnOpenLocation (object o, EventArgs args)
         {
             OpenLocationDialog dialog = new OpenLocationDialog ();
             ResponseType response = dialog.Run ();
             string address = dialog.Address;
             dialog.Destroy ();
-            
+
             if (response == ResponseType.Ok) {
                 RadioTrackInfo.OpenPlay (address);
             }
@@ -160,7 +160,7 @@ namespace Banshee.Gui
             var chooser = Banshee.Gui.Dialogs.FileChooserDialog.CreateForImport (Catalog.GetString("Import Playlist"), true);
             chooser.AddFilter (Hyena.Gui.GtkUtilities.GetFileFilter (Catalog.GetString ("Playlists"), PlaylistFileUtil.PlaylistExtensions));
 
-            int response = chooser.Run();            
+            int response = chooser.Run();
 
             string [] uris = null;
             if (response == (int) ResponseType.Ok) {
@@ -170,7 +170,7 @@ namespace Banshee.Gui
                 chooser.Destroy();
                 return;
             }
-            
+
             if (uris == null || uris.Length == 0) {
                 return;
             }
@@ -181,12 +181,12 @@ namespace Banshee.Gui
                 }
             }));
         }
-        
+
         private void OnQuit (object o, EventArgs args)
         {
             Banshee.ServiceStack.Application.Shutdown ();
         }
-        
+
 #endregion
 
 #region Edit Menu Actions
@@ -207,16 +207,16 @@ namespace Banshee.Gui
         }
 
 #endregion
-        
+
 #region Help Menu Actions
-        
+
         private void OnVersionInformation (object o, EventArgs args)
         {
             Hyena.Gui.Dialogs.VersionInformationDialog dialog = new Hyena.Gui.Dialogs.VersionInformationDialog ();
             dialog.Run ();
             dialog.Destroy ();
         }
-        
+
         private void OnAbout (object o, EventArgs args)
         {
             Banshee.Gui.Dialogs.AboutDialog dialog = new Banshee.Gui.Dialogs.AboutDialog ();
@@ -224,6 +224,6 @@ namespace Banshee.Gui
         }
 
 #endregion
-            
+
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
index 6953c6a..b4a2a3a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
@@ -1,4 +1,4 @@
-// 
+//
 // GtkBaseClient.cs
 //
 // Author:
@@ -44,19 +44,19 @@ namespace Banshee.Gui
     {
         private static Type client_type;
 
-        private static string user_gtkrc = Path.Combine (Paths.ApplicationData, "gtkrc"); 
-        
+        private static string user_gtkrc = Path.Combine (Paths.ApplicationData, "gtkrc");
+
         public static void Startup<T> (string [] args) where T : GtkBaseClient
         {
             Hyena.Log.InformationFormat ("Running Banshee {0}: [{1}]", Application.Version,
                 Application.BuildDisplayInfo);
-            
+
             // This could go into GtkBaseClient, but it's probably something we
             // should really only support at each client level
             if (File.Exists (user_gtkrc) && !ApplicationContext.CommandLine.Contains ("no-gtkrc")) {
                 Gtk.Rc.AddDefaultFile (user_gtkrc);
-            } 
-            
+            }
+
             // Boot the client
             Banshee.Gui.GtkBaseClient.Startup<T> ();
         }
@@ -66,22 +66,22 @@ namespace Banshee.Gui
             if (client_type != null) {
                 throw new ApplicationException ("Only a single GtkBaseClient can be initialized through Entry<T>");
             }
-            
+
             client_type = typeof (T);
             Hyena.Gui.CleanRoomStartup.Startup (Startup);
         }
-        
+
         private static void Startup ()
         {
             ((GtkBaseClient)Activator.CreateInstance (client_type)).Run ();
         }
-        
+
         private string default_icon_name;
-        
+
         protected GtkBaseClient () : this (true, Application.IconName)
         {
         }
-        
+
         protected GtkBaseClient (bool initializeDefault, string defaultIconName)
         {
             this.default_icon_name = defaultIconName;
@@ -96,7 +96,7 @@ namespace Banshee.Gui
                 GLib.Thread.Init ();
             }
             Gtk.Application.Init ();
-            
+
             foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes
                 ("/Banshee/ThickClient/GtkBaseClient/PostInitializeGtk")) {
                 try {
@@ -106,43 +106,43 @@ namespace Banshee.Gui
                 }
             }
         }
-        
+
         protected void Initialize (bool registerCommonServices)
         {
             // Set the process name so system process listings and commands are pretty
             PlatformHacks.TrySetProcessName (Application.InternalName);
-            
+
             Application.Initialize ();
-            
+
             InitializeGtk ();
-            
+
             Gtk.Window.DefaultIconName = default_icon_name;
 
             ThreadAssist.InitializeMainThread ();
-            
+
             Gdk.Global.ProgramClass = Application.InternalName;
             GLib.Global.ApplicationName = "Banshee";
 
             if (ApplicationContext.Debugging) {
                 GLib.Log.SetLogHandler ("Gtk", GLib.LogLevelFlags.Critical, GLib.Log.PrintTraceLogFunction);
             }
-            
+
             ServiceManager.ServiceStarted += OnServiceStarted;
-            
+
             // Register specific services this client will care about
             if (registerCommonServices) {
                 Banshee.Gui.CommonServices.Register ();
             }
-            
+
             OnRegisterServices ();
-            
+
             Application.ShutdownPromptHandler = OnShutdownPrompt;
             Application.TimeoutHandler = RunTimeout;
             Application.IdleHandler = RunIdle;
             Application.IdleTimeoutRemoveHandler = IdleTimeoutRemove;
-            
+
             // Start the core boot process
-            
+
             Application.PushClient (this);
             Application.Run ();
 
@@ -151,16 +151,16 @@ namespace Banshee.Gui
                     Banshee.Gui.Dialogs.DefaultApplicationHelperDialog.RunIfAppropriate ();
                 };
             }
-            
+
             Log.Notify += OnLogNotify;
         }
-        
+
         public virtual void Run ()
         {
             RunIdle (delegate { OnStarted (); return false; });
             Gtk.Application.Run ();
         }
-        
+
         protected virtual void OnRegisterServices ()
         {
         }
@@ -176,7 +176,7 @@ namespace Banshee.Gui
                 }
             }
         }
-        
+
         private void OnMigratorStarted (object o, EventArgs args)
         {
             BansheeDbFormatMigrator migrator = (BansheeDbFormatMigrator)o;
@@ -197,16 +197,16 @@ namespace Banshee.Gui
                 return false;
             });
         }
-                
+
         private void ShowLogCoreEntry (LogEntry entry)
         {
             Gtk.Window window = null;
             Gtk.MessageType mtype;
-            
+
             if (ServiceManager.Contains<GtkElementsService> ()) {
                 window = ServiceManager.Get<GtkElementsService> ().PrimaryWindow;
             }
-            
+
             switch (entry.Type) {
                 case LogEntryType.Warning:
                     mtype = Gtk.MessageType.Warning;
@@ -219,15 +219,15 @@ namespace Banshee.Gui
                     mtype = Gtk.MessageType.Error;
                     break;
             }
-              
+
             Banshee.Widgets.HigMessageDialog dialog = new Banshee.Widgets.HigMessageDialog (
                 window, Gtk.DialogFlags.Modal, mtype, Gtk.ButtonsType.Close, entry.Message, entry.Details);
-            
+
             dialog.Title = String.Empty;
             dialog.Run ();
             dialog.Destroy ();
         }
-        
+
         private bool OnShutdownPrompt ()
         {
             ConfirmShutdownDialog dialog = new ConfirmShutdownDialog ();
@@ -237,17 +237,17 @@ namespace Banshee.Gui
                 dialog.Destroy ();
             }
         }
-        
+
         protected uint RunTimeout (uint milliseconds, TimeoutHandler handler)
         {
             return GLib.Timeout.Add (milliseconds, delegate { return handler (); });
         }
-        
+
         protected uint RunIdle (IdleHandler handler)
         {
             return GLib.Idle.Add (delegate { return handler (); });
         }
-        
+
         protected bool IdleTimeoutRemove (uint id)
         {
             return GLib.Source.Remove (id);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/GtkElementsService.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/GtkElementsService.cs
index 503bc2a..5234dd2 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/GtkElementsService.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/GtkElementsService.cs
@@ -40,19 +40,19 @@ namespace Banshee.Gui
     public class GtkElementsService : IService, IPropertyStoreExpose
     {
         public delegate bool PrimaryWindowCloseHandler ();
-        
+
         private PropertyStore property_store = new PropertyStore ();
         private BansheeIconFactory icon_factory = new BansheeIconFactory ();
-        
+
         private BaseClientWindow primary_window;
         private PrimaryWindowCloseHandler primary_window_close_handler;
-        
+
         public event EventHandler ThemeChanged;
-        
+
         public GtkElementsService ()
         {
         }
-        
+
         private void OnStyleSet (object o, StyleSetArgs args)
         {
             SourceInvalidateIconPixbuf (ServiceManager.SourceManager.Sources);
@@ -63,7 +63,7 @@ namespace Banshee.Gui
 
             OnThemeChanged ();
         }
-        
+
         private void OnPrimaryWindowRealized (object o, EventArgs args)
         {
             if (primary_window != null && primary_window.GdkWindow != null) {
@@ -72,7 +72,7 @@ namespace Banshee.Gui
                 property_store.Remove ("PrimaryWindow.RawHandle");
             }
         }
-        
+
         private void SourceInvalidateIconPixbuf (ICollection<Source> sources)
         {
             foreach (Source source in sources) {
@@ -80,7 +80,7 @@ namespace Banshee.Gui
                 SourceInvalidateIconPixbuf (source.Children);
             }
         }
-        
+
         protected virtual void OnThemeChanged ()
         {
             EventHandler handler = ThemeChanged;
@@ -88,7 +88,7 @@ namespace Banshee.Gui
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public BaseClientWindow PrimaryWindow {
             get { return primary_window; }
             set {
@@ -96,12 +96,12 @@ namespace Banshee.Gui
                     primary_window.StyleSet -= OnStyleSet;
                     primary_window.Realized -= OnPrimaryWindowRealized;
                 }
-                
+
                 primary_window = value;
-                
+
                 if (primary_window != null) {
                     property_store.Set<BaseClientWindow> ("PrimaryWindow", primary_window);
-                    
+
                     primary_window.StyleSet += OnStyleSet;
                     primary_window.Realized += OnPrimaryWindowRealized;
                 } else {
@@ -110,14 +110,14 @@ namespace Banshee.Gui
                 }
             }
         }
-        
+
         private List<Window> content_windows;
         public IEnumerable<Window> ContentWindows {
             get {
                 if (PrimaryWindow != null) {
                     yield return PrimaryWindow;
                 }
-                
+
                 if (content_windows != null) {
                     foreach (var window in content_windows) {
                         yield return window;
@@ -125,16 +125,16 @@ namespace Banshee.Gui
                 }
             }
         }
-        
+
         public void RegisterContentWindow (Window window)
         {
             if (content_windows == null) {
                 content_windows = new List<Window> ();
             }
-            
+
             content_windows.Add (window);
         }
-        
+
         public void UnregisterContentWindow (Window window)
         {
             if (content_windows != null) {
@@ -144,20 +144,20 @@ namespace Banshee.Gui
                 }
             }
         }
-        
+
         public PrimaryWindowCloseHandler PrimaryWindowClose {
             get { return primary_window_close_handler; }
             set { primary_window_close_handler = value; }
         }
-        
+
         public BansheeIconFactory IconFactory {
             get { return icon_factory; }
         }
-        
+
         PropertyStore IPropertyStoreExpose.PropertyStore {
             get { return property_store; }
         }
-        
+
         string IService.ServiceName {
             get { return "GtkElementsService"; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/IconThemeUtils.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/IconThemeUtils.cs
index 4e7faa6..65f8ba7 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/IconThemeUtils.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/IconThemeUtils.cs
@@ -35,7 +35,7 @@ namespace Banshee.Gui
     public static class IconThemeUtils
     {
         private static Assembly executing_assembly = Assembly.GetExecutingAssembly ();
-    
+
         public static bool HasIcon (string name)
         {
             return IconTheme.Default.HasIcon (name);
@@ -54,7 +54,7 @@ namespace Banshee.Gui
                     return pixbuf;
                 }
             }
-            
+
             return null;
         }
 
@@ -81,7 +81,7 @@ namespace Banshee.Gui
                 }
             } catch {
             }
-            
+
             if (!fallBackOnResource) {
                 return null;
             }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs
index 71633cd..814e7fc 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs
@@ -54,10 +54,10 @@ namespace Banshee.Gui
         private PlaybackActions playback_actions;
         private TrackActions    track_actions;
         private SourceActions   source_actions;
-        
+
         private BansheeActionGroup active_source_actions;
         private uint active_source_uiid = 0;
-        
+
         public InterfaceActionService ()
         {
             ui_manager = new UIManager ();
@@ -89,29 +89,29 @@ namespace Banshee.Gui
                 if (action_groups.ContainsKey (name)) {
                     throw new ApplicationException ("Group already exists");
                 }
-                
+
                 InnerAddActionGroup (new ActionGroup (name));
             }
         }
-        
+
         public void AddActionGroup (ActionGroup group)
         {
             lock (this) {
                 if (action_groups.ContainsKey (group.Name)) {
                     throw new ApplicationException ("Group already exists");
                 }
-                            
+
                 InnerAddActionGroup (group);
             }
         }
-        
+
         public void RemoveActionGroup (string name)
         {
             lock (this) {
                 if (action_groups.ContainsKey (name)) {
                     ActionGroup group = action_groups[name];
                     ui_manager.RemoveActionGroup (group);
-                    action_groups.Remove (name);                    
+                    action_groups.Remove (name);
                 }
             }
         }
@@ -120,7 +120,7 @@ namespace Banshee.Gui
         {
             RemoveActionGroup (group.Name);
         }
-        
+
         public ActionGroup FindActionGroup (string actionGroupId)
         {
             foreach (ActionGroup group in action_groups.Values) {
@@ -128,36 +128,36 @@ namespace Banshee.Gui
                     return group;
                 }
             }
-            
+
             return null;
         }
-        
+
         public Action FindAction (string actionId)
         {
             string [] parts = actionId.Split ('.');
-            
+
             if (parts == null || parts.Length < 2) {
                 return null;
             }
-            
+
             string group_name = parts[0];
             string action_name = parts[1];
-            
+
             ActionGroup group = FindActionGroup (group_name);
             return group == null ? null : group.GetAction (action_name);
         }
-        
+
         public void PopulateToolbarPlaceholder (Toolbar toolbar, string path, Widget item)
         {
             PopulateToolbarPlaceholder (toolbar, path, item, false);
         }
-        
+
         public void PopulateToolbarPlaceholder (Toolbar toolbar, string path, Widget item, bool expand)
         {
             ToolItem placeholder = (ToolItem)UIManager.GetWidget (path);
             int position = toolbar.GetItemIndex (placeholder);
             toolbar.Remove (placeholder);
-            
+
             if (item is ToolItem) {
                 ((ToolItem)item).Expand = expand;
                 toolbar.Insert ((ToolItem)item, position);
@@ -168,7 +168,7 @@ namespace Banshee.Gui
                 toolbar.Insert (container_item, position);
             }
         }
-        
+
         private void OnActiveSourceChanged (SourceEventArgs args)
         {
             // FIXME: Can't use an anonymous delegate here because of compiler
@@ -182,12 +182,12 @@ namespace Banshee.Gui
                 ui_manager.RemoveUi (active_source_uiid);
                 active_source_uiid = 0;
             }
-                
+
             if (active_source_actions != null) {
                 RemoveActionGroup (active_source_actions.Name);
                 active_source_actions = null;
             }
-            
+
             Source active_source = ServiceManager.SourceManager.ActiveSource;
             if (active_source == null) {
                 return;
@@ -199,19 +199,19 @@ namespace Banshee.Gui
             if (active_source_actions != null) {
                 AddActionGroup (active_source_actions);
             }
-                
-            Assembly assembly = 
+
+            Assembly assembly =
                 active_source.GetProperty<Assembly> ("ActiveSourceUIResource.Assembly", propagate) ??
                 Assembly.GetAssembly (active_source.GetType ());
 
             active_source_uiid = AddUiFromFile (active_source.GetProperty<string> ("ActiveSourceUIResource", propagate), assembly);
         }
 
-        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args) 
+        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args)
         {
             try {
                 TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;
-                
+
                 if (args.Change == ExtensionChange.Add) {
                     if (!extension_actions.ContainsKey (node.Id)) {
                         ActionGroup group = (ActionGroup)node.CreateInstance (typeof (ActionGroup));
@@ -235,7 +235,7 @@ namespace Banshee.Gui
         {
             return AddUiFromFile (ui_file, Assembly.GetCallingAssembly ());
         }
-        
+
         public uint AddUiFromFile (string ui_file, Assembly assembly)
         {
             if (ui_file != null) {
@@ -245,19 +245,19 @@ namespace Banshee.Gui
             }
             return 0;
         }
-        
+
         public Action this[string actionId] {
             get { return FindAction (actionId); }
         }
-        
+
         public UIManager UIManager {
             get { return ui_manager; }
         }
-        
+
         public GlobalActions GlobalActions {
             get { return global_actions; }
         }
-        
+
         public PlaybackActions PlaybackActions {
             get { return playback_actions; }
         }
@@ -269,11 +269,11 @@ namespace Banshee.Gui
         public SourceActions SourceActions {
             get { return source_actions; }
         }
-        
+
         public ViewActions ViewActions {
             get { return view_actions; }
         }
-        
+
         string IService.ServiceName {
             get { return "InterfaceActionService"; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentPaneController.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentPaneController.cs
index 5356714..d49b30b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentPaneController.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentPaneController.cs
@@ -36,7 +36,7 @@ namespace Banshee.Gui
     public class PersistentPaneController
     {
         private static Dictionary<string, PersistentPaneController> controllers = new Dictionary<string, PersistentPaneController> ();
-        
+
         private string @namespace;
         private string key;
         private int fallback;
@@ -44,17 +44,17 @@ namespace Banshee.Gui
         private bool pending_changes;
         private Paned pane;
         private int last_position;
-        
+
         public static void Control (Paned pane, string name)
         {
-            Control (pane, String.Format ("interface.panes.{0}", name), "position", pane.Position); 
+            Control (pane, String.Format ("interface.panes.{0}", name), "position", pane.Position);
         }
-        
+
         public static void Control (Paned pane, SchemaEntry<int> entry)
         {
-            Control (pane, entry.Namespace, entry.Key, entry.DefaultValue); 
+            Control (pane, entry.Namespace, entry.Key, entry.DefaultValue);
         }
-        
+
         private static void Control (Paned pane, string @namespace, string key, int defaultValue)
         {
             string dict_key = String.Format ("{0}.{1}", @namespace, key);
@@ -64,7 +64,7 @@ namespace Banshee.Gui
                 controllers.Add (dict_key, new PersistentPaneController (pane, @namespace, key, defaultValue));
             }
         }
-        
+
         private PersistentPaneController (Paned pane, string @namespace, string key, int fallback)
         {
             this  namespace = @namespace;
@@ -72,17 +72,17 @@ namespace Banshee.Gui
             this.fallback = fallback;
             Paned = pane;
         }
-        
+
         private Paned Paned {
             set {
                 if (pane == value) {
                     return;
                 }
-                
+
                 if (pane != null) {
                     //pane.MoveHandle -= OnPaneMoved;
                 }
-                
+
                 pane = value;
                 pane.Position = ConfigurationClient.Get<int> (@namespace, key, fallback);
                 //pane.MoveHandle += OnPaneMoved;
@@ -90,12 +90,12 @@ namespace Banshee.Gui
                 pane.SizeAllocated += OnPaneMoved;
             }
         }
-        
+
         private void OnPaneMoved (object sender, EventArgs args)
         {
             Save ();
         }
-        
+
         private void Save ()
         {
             if (timer_id == 0) {
@@ -104,7 +104,7 @@ namespace Banshee.Gui
                 pending_changes = true;
             }
         }
-        
+
         private bool OnTimeout ()
         {
             if (pending_changes) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentWindowController.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentWindowController.cs
index 9499fe6..e5adf2b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentWindowController.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/PersistentWindowController.cs
@@ -39,7 +39,7 @@ namespace Banshee.Gui
         Position = 2,
         All = Size | Position
     }
-    
+
     public class PersistentWindowController
     {
         private Gtk.Window window;
@@ -110,7 +110,7 @@ namespace Banshee.Gui
             if ((options & WindowPersistOptions.Size) != 0) {
                 int width = WidthSchema.Get ();
                 int height = HeightSchema.Get ();
-                
+
                 if (width != 0 && height != 0) {
                     window.Resize (width, height);
                 }
@@ -119,7 +119,7 @@ namespace Banshee.Gui
             if ((options & WindowPersistOptions.Position) != 0) {
                 int x = XPosSchema.Get ();
                 int y = YPosSchema.Get ();
-                
+
                 if (x == 0 && y == 0) {
                     window.SetPosition (Gtk.WindowPosition.Center);
                 } else {
@@ -155,7 +155,7 @@ namespace Banshee.Gui
                 pending_changes = true;
             }
         }
-        
+
         private bool OnTimeout ()
         {
             if (pending_changes) {
@@ -175,7 +175,7 @@ namespace Banshee.Gui
                 MaximizedSchema.Set (true);
                 return;
             }
-            
+
             if (x < 0 || y < 0 || width <= 0 || height <= 0) {
                  return;
             }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs
index 2253762..4efe0d9 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs
@@ -52,11 +52,11 @@ namespace Banshee.Gui
         public PlaybackRepeatActions RepeatActions {
             get { return repeat_actions; }
         }
-        
+
         public PlaybackShuffleActions ShuffleActions {
             get { return shuffle_actions; }
         }
-        
+
         public PlaybackActions () : base ("Playback")
         {
             ImportantByDefault = false;
@@ -65,11 +65,11 @@ namespace Banshee.Gui
                 new ActionEntry ("PlayPauseAction", null,
                     Catalog.GetString ("_Play"), "space",
                     Catalog.GetString ("Play or pause the current item"), OnPlayPauseAction),
-                    
+
                 new ActionEntry ("NextAction", null,
                     Catalog.GetString ("_Next"), "N",
                     Catalog.GetString ("Play the next item"), OnNextAction),
-                    
+
                 new ActionEntry ("PreviousAction", null,
                     Catalog.GetString ("Pre_vious"), "B",
                     Catalog.GetString ("Play the previous item"), OnPreviousAction),
@@ -81,19 +81,19 @@ namespace Banshee.Gui
                 new ActionEntry ("JumpToPlayingTrackAction", null,
                     Catalog.GetString("_Jump to Playing Song"), "<control>J",
                     Catalog.GetString ("Jump to the currently playing item"), OnJumpToPlayingTrack),
-                
+
                 new ActionEntry ("RestartSongAction", null,
                     Catalog.GetString ("_Restart Song"), "R",
                     Catalog.GetString ("Restart the current item"), OnRestartSongAction)
             });
-            
+
             Add (new ToggleActionEntry [] {
                 new ToggleActionEntry ("StopWhenFinishedAction", null,
                     Catalog.GetString ("_Stop When Finished"), "<Shift>space",
-                    Catalog.GetString ("Stop playback after the current item finishes playing"), 
+                    Catalog.GetString ("Stop playback after the current item finishes playing"),
                     OnStopWhenFinishedAction, false)
             });
-            
+
             Actions.GlobalActions.Add (new ActionEntry [] {
                 new ActionEntry ("PlaybackMenuAction", null,
                     Catalog.GetString ("_Playback"), null, null, null),
@@ -102,20 +102,20 @@ namespace Banshee.Gui
             this["JumpToPlayingTrackAction"].Sensitive = false;
             this["RestartSongAction"].Sensitive = false;
             this["SeekToAction"].Sensitive = false;
-            
+
             this["PlayPauseAction"].StockId = Gtk.Stock.MediaPlay;
             this["NextAction"].StockId = Gtk.Stock.MediaNext;
             this["PreviousAction"].StockId = Gtk.Stock.MediaPrevious;
 
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
-                PlayerEvent.Error | 
-                PlayerEvent.EndOfStream | 
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
+                PlayerEvent.Error |
+                PlayerEvent.EndOfStream |
                 PlayerEvent.StateChange);
-            
+
             repeat_actions = new PlaybackRepeatActions (Actions);
             shuffle_actions = new PlaybackShuffleActions (Actions, this);
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
@@ -134,7 +134,7 @@ namespace Banshee.Gui
                     break;
             }
         }
-        
+
         private void OnPlayerStateChange (PlayerEventStateChangeArgs args)
         {
             if (play_pause_action == null) {
@@ -158,7 +158,7 @@ namespace Banshee.Gui
                     break;
             }
 
-            TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack; 
+            TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
             if (track != null) {
                 this["SeekToAction"].Sensitive = !track.IsLive;
                 this["RestartSongAction"].Sensitive = !track.IsLive;
@@ -175,7 +175,7 @@ namespace Banshee.Gui
             // Disable all actions while NotReady
             Sensitive = args.Current != PlayerState.NotReady;
         }
-        
+
         private void ShowStopAction ()
         {
             if (ServiceManager.PlayerEngine.CanPause) {
@@ -184,35 +184,35 @@ namespace Banshee.Gui
                 ShowStop ();
             }
         }
-        
+
         private void ShowPause ()
         {
             play_pause_action.Label = Catalog.GetString ("_Pause");
             play_pause_action.StockId = Gtk.Stock.MediaPause;
         }
-        
+
         private void ShowPlay ()
         {
             play_pause_action.Label = Catalog.GetString ("_Play");
             play_pause_action.StockId = Gtk.Stock.MediaPlay;
         }
-                
+
         private void ShowStop ()
         {
             play_pause_action.Label = Catalog.GetString ("Sto_p");
             play_pause_action.StockId = Gtk.Stock.MediaStop;
         }
-                
+
         private void OnPlayPauseAction (object o, EventArgs args)
         {
             ServiceManager.PlayerEngine.TogglePlaying ();
         }
-        
+
         private void OnNextAction (object o, EventArgs args)
         {
             ServiceManager.PlaybackController.Next ();
         }
-        
+
         private void OnPreviousAction (object o, EventArgs args)
         {
             const int delay = 4000; // ms
@@ -229,7 +229,7 @@ namespace Banshee.Gui
             dialog.Run ();
             dialog.Destroy ();
         }
-            
+
         private void OnRestartSongAction (object o, EventArgs args)
         {
             TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
@@ -238,7 +238,7 @@ namespace Banshee.Gui
                 ServiceManager.PlayerEngine.OpenPlay (track);
             }
         }
-        
+
         private void OnStopWhenFinishedAction (object o, EventArgs args)
         {
             ServiceManager.PlaybackController.StopWhenFinished = ((ToggleAction)o).Active;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs
index 22f4c37..0824425 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs
@@ -44,7 +44,7 @@ namespace Banshee.Gui
     {
         private RadioAction active_action;
         private RadioAction saved_action;
-        
+
         public RadioAction Active {
             get { return active_action; }
             set {
@@ -52,7 +52,7 @@ namespace Banshee.Gui
                 ServiceManager.PlaybackController.RepeatMode = (PlaybackRepeatMode)active_action.Value;
             }
         }
-        
+
         public new bool Sensitive {
             get { return base.Sensitive; }
             set {
@@ -62,11 +62,11 @@ namespace Banshee.Gui
         }
 
         public event EventHandler Changed;
-        
+
         public PlaybackRepeatActions (InterfaceActionService actionService) : base (actionService, "PlaybackRepeat")
         {
             actionService.AddActionGroup (this);
-            
+
             Add (new ActionEntry [] {
                 new ActionEntry ("RepeatMenuAction", null,
                     Catalog.GetString ("Repeat"), null,
@@ -74,16 +74,16 @@ namespace Banshee.Gui
             });
 
             Add (new RadioActionEntry [] {
-                new RadioActionEntry ("RepeatNoneAction", null, 
+                new RadioActionEntry ("RepeatNoneAction", null,
                     Catalog.GetString ("Repeat _Off"), null,
                     Catalog.GetString ("Do not repeat playlist"),
                     (int)PlaybackRepeatMode.None),
-                    
+
                 new RadioActionEntry ("RepeatAllAction", null,
                     Catalog.GetString ("Repeat _All"), null,
                     Catalog.GetString ("Play all songs before repeating playlist"),
                     (int)PlaybackRepeatMode.RepeatAll),
-                    
+
                 new RadioActionEntry ("RepeatSingleAction", null,
                     Catalog.GetString ("Repeat Singl_e"), null,
                     Catalog.GetString ("Repeat the current playing song"),
@@ -103,7 +103,7 @@ namespace Banshee.Gui
             } else {
                 Active = (RadioAction)this["RepeatNoneAction"];
             }
-            
+
             Active.Activate ();
         }
 
@@ -145,7 +145,7 @@ namespace Banshee.Gui
         {
             Active = args.Current;
         }
-        
+
         private void OnChanged ()
         {
             EventHandler handler = Changed;
@@ -153,20 +153,20 @@ namespace Banshee.Gui
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void AttachSubmenu (string menuItemPath)
         {
             MenuItem parent = Actions.UIManager.GetWidget (menuItemPath) as MenuItem;
             parent.Submenu = CreateMenu ();
         }
-        
+
         public MenuItem CreateSubmenu ()
         {
             MenuItem parent = (MenuItem)this["RepeatMenuAction"].CreateMenuItem ();
             parent.Submenu = CreateMenu ();
             return parent;
         }
-            
+
         public Menu CreateMenu ()
         {
             Menu menu = new Gtk.Menu ();
@@ -201,7 +201,7 @@ namespace Banshee.Gui
 
         private static string ActionNameToConfigId (string actionName)
         {
-            return StringUtil.CamelCaseToUnderCase (actionName.Substring (0, 
+            return StringUtil.CamelCaseToUnderCase (actionName.Substring (0,
                 actionName.Length - (actionName.EndsWith ("Action") ? 6 : 0)));
         }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackShuffleActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackShuffleActions.cs
index a823f37..a36140f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackShuffleActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackShuffleActions.cs
@@ -63,13 +63,13 @@ namespace Banshee.Gui
         }
 
         public event EventHandler Changed;
-        
+
         public PlaybackShuffleActions (InterfaceActionService actionService, PlaybackActions playbackActions)
             : base (actionService, "PlaybackShuffle")
         {
             playback_actions = playbackActions;
             Actions.AddActionGroup (this);
-            
+
             Add (new ActionEntry [] {
                 new ActionEntry ("ShuffleMenuAction", null,
                     Catalog.GetString ("Shuffle"), null,
@@ -77,21 +77,21 @@ namespace Banshee.Gui
             });
 
             Add (new RadioActionEntry [] {
-                new RadioActionEntry ("ShuffleOffAction", null, 
+                new RadioActionEntry ("ShuffleOffAction", null,
                     Catalog.GetString ("Shuffle _Off"), null,
                     Catalog.GetString ("Do not shuffle playlist"),
                     (int)PlaybackShuffleMode.Linear),
-                    
+
                 new RadioActionEntry ("ShuffleSongAction", null,
                     Catalog.GetString ("Shuffle by _Song"), null,
                     Catalog.GetString ("Play songs randomly from the playlist"),
                     (int)PlaybackShuffleMode.Song),
-                    
+
                 new RadioActionEntry ("ShuffleArtistAction", null,
                     Catalog.GetString ("Shuffle by A_rtist"), null,
                     Catalog.GetString ("Play all songs by an artist, then randomly choose another artist"),
                     (int)PlaybackShuffleMode.Artist),
-                    
+
                 new RadioActionEntry ("ShuffleAlbumAction", null,
                     Catalog.GetString ("Shuffle by A_lbum"), null,
                     Catalog.GetString ("Play all songs from an album, then randomly choose another album"),
@@ -107,7 +107,7 @@ namespace Banshee.Gui
                     Catalog.GetString ("Play songs randomly, prefer higher scored songs"),
                     (int)PlaybackShuffleMode.Score)
             }, 0, OnActionChanged);
-                
+
             this["ShuffleOffAction"].StockId = Gtk.Stock.MediaNext;
             this["ShuffleSongAction"].IconName = "media-playlist-shuffle";
             this["ShuffleArtistAction"].IconName = "media-playlist-shuffle";
@@ -124,7 +124,7 @@ namespace Banshee.Gui
             } else {
                 Active = (RadioAction)this["ShuffleOffAction"];
             }
-            
+
             Active.Activate ();
         }
 
@@ -176,20 +176,20 @@ namespace Banshee.Gui
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void AttachSubmenu (string menuItemPath)
         {
             MenuItem parent = Actions.UIManager.GetWidget (menuItemPath) as MenuItem;
             parent.Submenu = CreateMenu ();
         }
-        
+
         public MenuItem CreateSubmenu ()
         {
             MenuItem parent = (MenuItem)this["ShuffleMenuAction"].CreateMenuItem ();
             parent.Submenu = CreateMenu ();
             return parent;
         }
-            
+
         public Menu CreateMenu ()
         {
             Menu menu = new Gtk.Menu ();
@@ -227,7 +227,7 @@ namespace Banshee.Gui
 
         private static string ActionNameToConfigId (string actionName)
         {
-            return StringUtil.CamelCaseToUnderCase (actionName.Substring (0, 
+            return StringUtil.CamelCaseToUnderCase (actionName.Substring (0,
                 actionName.Length - (actionName.EndsWith ("Action") ? 6 : 0)));
         }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs
index b0b0a71..64723e4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs
@@ -81,7 +81,7 @@ namespace Banshee.Gui
                     Catalog.GetString ("New _Smart Playlist _From Search"), null,
                     Catalog.GetString ("Create a new smart playlist from the current search"), OnNewSmartPlaylistFromSearch),*/
 
-                new ActionEntry ("SourceContextMenuAction", null, 
+                new ActionEntry ("SourceContextMenuAction", null,
                     String.Empty, null, null, OnSourceContextMenu),
 
                 new ActionEntry ("ImportSourceAction", null,
@@ -97,15 +97,15 @@ namespace Banshee.Gui
 
                 new ActionEntry ("UnmapSourceAction", null,
                     Catalog.GetString ("Unmap"), "<shift>Delete", null, OnUnmapSource),
-                    
+
                 new ActionEntry ("SourcePropertiesAction", null,
                     Catalog.GetString ("Source Properties"), null, null, OnSourceProperties),
-                    
-                new ActionEntry ("SortChildrenAction", Stock.SortDescending, 
+
+                new ActionEntry ("SortChildrenAction", Stock.SortDescending,
                     Catalog.GetString ("Sort Children by"), null, null,
                     OnSortChildrenMenu),
 
-                new ActionEntry ("SourcePreferencesAction", null, Catalog.GetString ("Preferences"), null, 
+                new ActionEntry ("SourcePreferencesAction", null, Catalog.GetString ("Preferences"), null,
                     Catalog.GetString ("Edit preferences related to this source"), OnSourcePreferences),
 
             });
@@ -122,7 +122,7 @@ namespace Banshee.Gui
                     Catalog.GetString ("Refresh"), null,
                     Catalog.GetString ("Refresh this randomly sorted smart playlist"), OnRefreshSmartPlaylist)
             );
-            
+
             //ServiceManager.SourceManager.SourceUpdated += OnPlayerEngineStateChanged;
             //ServiceManager.SourceManager.SourceViewChanged += OnPlayerEngineStateChanged;
             //ServiceManager.SourceManager.SourceAdded += OnPlayerEngineStateChanged;
@@ -130,18 +130,18 @@ namespace Banshee.Gui
             ServiceManager.SourceManager.ActiveSourceChanged += HandleActiveSourceChanged;
             Actions.GlobalActions["EditMenuAction"].Activated += HandleEditMenuActivated;
         }
-            
+
 #region State Event Handlers
 
         private void HandleActiveSourceChanged (SourceEventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 UpdateActions ();
-                
+
                 if (last_source != null) {
                     last_source.Updated -= HandleActiveSourceUpdated;
                 }
-                
+
                 if (ActiveSource != null) {
                     ActiveSource.Updated += HandleActiveSourceUpdated;
                 }
@@ -152,7 +152,7 @@ namespace Banshee.Gui
         {
             UpdateActions ();
         }
-        
+
         private void HandleActiveSourceUpdated (object o, EventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
@@ -235,7 +235,7 @@ namespace Banshee.Gui
                 return;
             }
 
-            menu.Show (); 
+            menu.Show ();
             menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
             menu.SelectionDone += delegate {
                 SourceView.ResetHighlight ();
@@ -265,19 +265,19 @@ namespace Banshee.Gui
 
             string uri = null;
             PlaylistFormatDescription format = null;
-            int response = chooser.Run ();            
-            if (response == (int) ResponseType.Ok) {                    
+            int response = chooser.Run ();
+            if (response == (int) ResponseType.Ok) {
                 uri = chooser.Uri;
                 // Get the format that the user selected.
                 format = chooser.GetExportFormat ();
-            }             
-            chooser.Destroy (); 
+            }
+            chooser.Destroy ();
 
             if (uri == null) {
                 // User cancelled export.
                 return;
             }
-            
+
             try {
                 IPlaylistFormat playlist = (IPlaylistFormat)Activator.CreateInstance (format.Type);
                 SafeUri suri = new SafeUri (uri);
@@ -354,7 +354,7 @@ namespace Banshee.Gui
         {
             UpdateActions (false);
         }
-        
+
         private void UpdateActions (bool force)
         {
             Source source = ActionSource;
@@ -378,7 +378,7 @@ namespace Banshee.Gui
                 UpdateAction ("NewSmartPlaylistAction", playlists_writable, true, source);
                 /*UpdateAction ("NewSmartPlaylistFromSearchAction", (source is LibrarySource || source.Parent is LibrarySource),
                         !String.IsNullOrEmpty (source.FilterQuery), source);*/
-                    
+
                 ActionGroup browser_actions = Actions.FindActionGroup ("BrowserView");
                 if (browser_actions != null) {
                     IFilterableSource filterable_source = source as IFilterableSource;
@@ -390,7 +390,7 @@ namespace Banshee.Gui
 
                 last_source = source;
             }
-            
+
             if (source != null) {
                 UpdateAction ("SortChildrenAction", source.ChildSortTypes.Length > 0 && source.Children.Count > 1, true, source);
             }
@@ -405,11 +405,11 @@ namespace Banshee.Gui
         {
             string key = "no_confirm_unmap_" + source.GetType ().Name.ToLower ();
             bool do_not_ask = ConfigurationClient.Get<bool> ("sources", key, false);
-            
+
             if (do_not_ask) {
                 return true;
             }
-        
+
             Banshee.Widgets.HigMessageDialog dialog = new Banshee.Widgets.HigMessageDialog (
                 ServiceManager.Get<GtkElementsService> ("GtkElementsService").PrimaryWindow,
                 Gtk.DialogFlags.Modal,
@@ -418,9 +418,9 @@ namespace Banshee.Gui
                 String.Format (Catalog.GetString ("Are you sure you want to delete this {0}?"),
                     source.GenericName.ToLower ()),
                 source.Name);
-            
+
             dialog.AddButton (Gtk.Stock.Delete, Gtk.ResponseType.Ok, false);
-            
+
             Gtk.Alignment alignment = new Gtk.Alignment (0.0f, 0.0f, 0.0f, 0.0f);
             alignment.TopPadding = 10;
             Gtk.CheckButton confirm_button = new Gtk.CheckButton (String.Format (Catalog.GetString (
@@ -431,13 +431,13 @@ namespace Banshee.Gui
             alignment.Add (confirm_button);
             alignment.ShowAll ();
             dialog.LabelVBox.PackStart (alignment, false, false, 0);
-            
+
             try {
                 if (dialog.Run () == (int)Gtk.ResponseType.Ok) {
                     ConfigurationClient.Set<bool> ("sources", key, do_not_ask);
                     return true;
                 }
-                
+
                 return false;
             } finally {
                 dialog.Destroy ();
@@ -485,6 +485,6 @@ namespace Banshee.Gui
         }
 
 #endregion
-        
+
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
index ee5d596..6f0c08a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs
@@ -54,23 +54,23 @@ namespace Banshee.Gui
             "RemoveTracksAction", "RemoveTracksFromLibraryAction", "DeleteTracksFromDriveAction",
             "RateTracksAction", "SelectNoneAction"
         };
-        
+
         public event EventHandler SelectionChanged;
 
         public TrackActions () : base ("Track")
         {
             Add (new ActionEntry [] {
-                new ActionEntry("TrackContextMenuAction", null, 
+                new ActionEntry("TrackContextMenuAction", null,
                     String.Empty, null, null, OnTrackContextMenu),
 
                 new ActionEntry("SelectAllAction", null,
                     Catalog.GetString("Select _All"), "<control>A",
                     Catalog.GetString("Select all tracks"), OnSelectAll),
-                    
+
                 new ActionEntry("SelectNoneAction", null,
                     Catalog.GetString("Select _None"), "<control><shift>A",
                     Catalog.GetString("Unselect all tracks"), OnSelectNone),
-                    
+
                 new ActionEntry ("TrackEditorAction", Stock.Edit,
                     Catalog.GetString ("_Edit Track Information"), "E",
                     Catalog.GetString ("Edit information on selected tracks"), OnTrackEditor),
@@ -134,13 +134,13 @@ namespace Banshee.Gui
                 current_source.TrackModel.Selection.Changed -= HandleSelectionChanged;
                 current_source = null;
             }
-            
+
             ITrackModelSource new_source = ActiveSource as ITrackModelSource;
             if (new_source != null) {
                 new_source.TrackModel.Selection.Changed += HandleSelectionChanged;
                 current_source = new_source;
             }
-            
+
             Banshee.Base.ThreadAssist.ProxyToMain (UpdateActions);
         }
 
@@ -166,7 +166,7 @@ namespace Banshee.Gui
         {
             ResetRating ();
         }
-        
+
         private void OnSelectionChanged ()
         {
             EventHandler handler = SelectionChanged;
@@ -203,7 +203,7 @@ namespace Banshee.Gui
             Source source = ServiceManager.SourceManager.ActiveSource;
             bool in_database = source is DatabaseSource;
             PrimarySource primary_source = (source as PrimarySource) ?? (source.Parent as PrimarySource);
-            
+
             Hyena.Collections.Selection selection = (source is ITrackModelSource) ? (source as ITrackModelSource).TrackModel.Selection : null;
 
             if (selection != null) {
@@ -228,7 +228,7 @@ namespace Banshee.Gui
                     UpdateAction ("RemoveTracksAction", is_track_source && track_source.CanRemoveTracks, has_selection, source);
                     UpdateAction ("DeleteTracksFromDriveAction", is_track_source && track_source.CanDeleteTracks, has_selection, source);
                     UpdateAction ("RemoveTracksFromLibraryAction", source.Parent is LibrarySource, has_selection, null);
-                    
+
                     UpdateAction ("TrackPropertiesAction", source.HasViewableTrackProperties, has_selection, source);
                     UpdateAction ("TrackEditorAction", source.HasEditableTrackProperties, has_selection, source);
                     UpdateAction ("RateTracksAction", in_database, has_selection, null);
@@ -249,7 +249,7 @@ namespace Banshee.Gui
         {
             if (current_source != null) {
                 int rating = 0;
-    
+
                 // If there is only one track, get the preset rating
                 if (current_source.TrackModel.Selection.Count == 1) {
                     foreach (TrackInfo track in current_source.TrackModel.SelectedItems) {
@@ -261,7 +261,7 @@ namespace Banshee.Gui
         }
 
 #endregion
-            
+
 #region Action Handlers
 
         private void OnSelectAll (object o, EventArgs args)
@@ -285,15 +285,15 @@ namespace Banshee.Gui
         private bool RunSourceOverrideHandler (string sourceOverrideHandler)
         {
             Source source = current_source as Source;
-            InvokeHandler handler = source != null 
-                ? source.GetInheritedProperty<InvokeHandler> (sourceOverrideHandler) 
+            InvokeHandler handler = source != null
+                ? source.GetInheritedProperty<InvokeHandler> (sourceOverrideHandler)
                 : null;
-            
+
             if (handler != null) {
                 handler ();
                 return true;
             }
-            
+
             return false;
         }
 
@@ -303,7 +303,7 @@ namespace Banshee.Gui
                 Banshee.Gui.TrackEditor.TrackEditorDialog.RunView (current_source.TrackModel);
             }
         }
-        
+
         private void OnTrackEditor (object o, EventArgs args)
         {
             if (current_source != null && !RunSourceOverrideHandler ("TrackEditorActionHandler")) {
@@ -328,7 +328,7 @@ namespace Banshee.Gui
 
                 submenu.Append (this ["AddToNewPlaylistAction"].CreateMenuItem ());
                 bool separator_added = false;
-                
+
                 foreach (Source child in ActivePrimarySource.Children) {
                     PlaylistSource playlist = child as PlaylistSource;
                     if (playlist != null) {
@@ -336,7 +336,7 @@ namespace Banshee.Gui
                             submenu.Append (new SeparatorMenuItem ());
                             separator_added = true;
                         }
-                        
+
                         PlaylistMenuItem item = new PlaylistMenuItem (playlist);
                         item.Image = new Gtk.Image ("playlist-source", IconSize.Menu);
                         item.Activated += OnAddToExistingPlaylist;
@@ -344,7 +344,7 @@ namespace Banshee.Gui
                         submenu.Append (item);
                     }
                 }
-                
+
                 submenu.ShowAll ();
             }
         }
@@ -445,12 +445,12 @@ namespace Banshee.Gui
             if (!source.ConfirmRemoveTracks) {
                 return true;
             }
-            
+
             bool ret = false;
             string header = null;
             string message = null;
             string button_label = null;
-            
+
             if (delete) {
                 header = String.Format (
                     Catalog.GetPluralString (
@@ -470,7 +470,7 @@ namespace Banshee.Gui
                 );
                 button_label = "gtk-remove";
             }
-                
+
             HigMessageDialog md = new HigMessageDialog (
                 ServiceManager.Get<GtkElementsService> ("GtkElementsService").PrimaryWindow,
                 DialogFlags.DestroyWithParent, delete ? MessageType.Warning : MessageType.Question,
@@ -479,7 +479,7 @@ namespace Banshee.Gui
             // Delete from Disk defaults to Cancel and the others to OK/Confirm.
             md.AddButton ("gtk-cancel", ResponseType.No, delete);
             md.AddButton (button_label, ResponseType.Yes, !delete);
-            
+
             try {
                 if (md.Run () == (int) ResponseType.Yes) {
                     ret = true;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs
index e260278..b0748a8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs
@@ -41,12 +41,12 @@ namespace Banshee.Gui
     {
         public delegate void FullscreenHandler (bool fullscreen);
         private FullscreenHandler fullscreen_handler;
-        
+
         public FullscreenHandler Fullscreen {
             get { return fullscreen_handler; }
-            set { 
-                fullscreen_handler = value; 
-                
+            set {
+                fullscreen_handler = value;
+
                 GtkElementsService service = ServiceManager.Get<GtkElementsService> ();
                 Gtk.ToggleAction action = this["FullScreenAction"] as Gtk.ToggleAction;
                 if (service != null && action != null && value == null) {
@@ -54,13 +54,13 @@ namespace Banshee.Gui
                 }
             }
         }
-    
+
         public ViewActions () : base ("View")
         {
             Add (new ActionEntry [] {
                 new ActionEntry ("ViewMenuAction", null,
                     Catalog.GetString ("_View"), null, null, null),
-                    
+
                 new ActionEntry ("ShowEqualizerAction", null,
                    Catalog.GetString ("_Equalizer"), "<control>E",
                    Catalog.GetString ("View the graphical equalizer"), OnShowEqualizer)
@@ -86,18 +86,18 @@ namespace Banshee.Gui
                     Catalog.GetString ("Show Cover _Art"), null,
                     Catalog.GetString ("Toggle display of album cover art"), null, false),
             });*/
-            
+
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.StateChange);
             OnFullScreen (null, EventArgs.Empty);
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             if (((PlayerEventStateChangeArgs)args).Current == PlayerState.Ready) {
                 Actions["View.ShowEqualizerAction"].Sensitive = ServiceManager.PlayerEngine.SupportsEqualizer;
             }
         }
-                
+
         private void OnShowEqualizer (object o, EventArgs args)
         {
             if (EqualizerWindow.Instance == null) {
@@ -114,19 +114,19 @@ namespace Banshee.Gui
             if (action == null) {
                 return;
             }
-            
+
             if (Fullscreen != null) {
                 Fullscreen (action.Active);
                 return;
             }
-            
+
             GtkElementsService service = ServiceManager.Get<GtkElementsService> ();
             if (service == null || action == null) {
                 return;
             }
-            
+
             Gtk.Window window = service.PrimaryWindow;
-            
+
             if (window == null) {
                 return;
             } else if (action.Active) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
index 5764994..ffee23f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
@@ -39,7 +39,7 @@ namespace Banshee.Library.Gui
         public FileImportSource ()
         {
         }
-    
+
         public void Import()
         {
             var chooser = Banshee.Gui.Dialogs.FileChooserDialog.CreateForImport (Catalog.GetString ("Import Files to Library"), true);
@@ -47,14 +47,14 @@ namespace Banshee.Library.Gui
             chooser.AddFilter (Hyena.Gui.GtkUtilities.GetFileFilter (
                 Catalog.GetString ("Media Files"),
                 Banshee.Collection.Database.DatabaseImportManager.WhiteListFileExtensions.List));
-            
+
             if (chooser.Run () == (int)ResponseType.Ok) {
                 Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (chooser.Uris);
             }
-            
+
             chooser.Destroy ();
         }
-        
+
         public string Name {
             get { return Catalog.GetString ("Local Files"); }
         }
@@ -62,19 +62,19 @@ namespace Banshee.Library.Gui
         public string ImportLabel {
             get { return Catalog.GetString ("C_hoose Files"); }
         }
-        
+
         public string [] IconNames {
             get { return new string [] { "gtk-open" }; }
         }
-        
+
         public bool CanImport {
             get { return true; }
         }
-        
+
         public int SortOrder {
             get { return 5; }
         }
-        
+
         // Reserve strings in preparation for the forthcoming string freeze.
         public void ReservedStrings ()
         {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
index e58c785..e9f4841 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
@@ -37,18 +37,18 @@ namespace Banshee.Library.Gui
         public FolderImportSource ()
         {
         }
-    
+
         public void Import()
         {
             var chooser = Banshee.Gui.Dialogs.FileChooserDialog.CreateForImport (Catalog.GetString ("Import Folders to Library"), false);
-            
+
             if (chooser.Run () == (int)ResponseType.Ok) {
                 Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (chooser.Uris);
             }
-            
+
             chooser.Destroy ();
         }
-        
+
         public string Name {
             get { return Catalog.GetString ("Local Folders"); }
         }
@@ -56,15 +56,15 @@ namespace Banshee.Library.Gui
         public string ImportLabel {
             get { return Catalog.GetString ("C_hoose Folders"); }
         }
-        
+
         public string [] IconNames {
             get { return new string [] { "gtk-open" }; }
         }
-        
+
         public bool CanImport {
             get { return true; }
         }
-        
+
         public int SortOrder {
             get { return 0; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
index 67d68fc..a3696e4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ImportDialog.cs
 //
 // Author:
@@ -52,7 +52,7 @@ namespace Banshee.Library.Gui
         public ImportDialog () : this (false)
         {
         }
-        
+
         public ImportDialog (bool doNotShowAgainVisible) : base ("ImportDialog")
         {
             accel_group = new AccelGroup ();
@@ -60,24 +60,24 @@ namespace Banshee.Library.Gui
             if (ServiceManager.Contains ("GtkElementsService")) {
                 Dialog.TransientFor = ServiceManager.Get<GtkElementsService> ().PrimaryWindow;
             }
-            
+
             Dialog.WindowPosition = WindowPosition.CenterOnParent;
             Dialog.AddAccelGroup (accel_group);
             Dialog.DefaultResponse = ResponseType.Ok;
             import_button = (Glade["ImportButton"] as Button);
 
             DoNotShowAgainVisible = doNotShowAgainVisible;
-            
+
             PopulateSourceList ();
-            
+
             ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             ServiceManager.SourceManager.SourceRemoved += OnSourceRemoved;
             ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
-            
+
             Glade["MessageLabel"].Visible = ServiceManager.SourceManager.DefaultSource.Count == 0;
-            
+
             import_button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Return, 0, AccelFlags.Visible);
-            
+
             Dialog.StyleSet += delegate {
                 UpdateIcons ();
             };
@@ -89,57 +89,57 @@ namespace Banshee.Library.Gui
             import_button.Label = label ?? Catalog.GetString ("_Import");
             import_button.WidthRequest = Math.Max (import_button.WidthRequest, 140);
         }
-        
+
         private void PopulateSourceList ()
         {
             source_model = new ListStore (typeof (Gdk.Pixbuf), typeof (string), typeof (IImportSource));
-            
+
             source_combo_box = new ComboBox ();
             source_combo_box.Changed += delegate { UpdateImportLabel (); };
             source_combo_box.Model = source_model;
             choose_label.MnemonicWidget = source_combo_box;
-            
+
             CellRendererPixbuf pixbuf_cr = new CellRendererPixbuf ();
             CellRendererText text_cr = new CellRendererText ();
-            
+
             source_combo_box.PackStart (pixbuf_cr, false);
             source_combo_box.PackStart (text_cr, true);
             source_combo_box.SetAttributes (pixbuf_cr, "pixbuf", 0);
             source_combo_box.SetAttributes (text_cr, "text", 1);
-            
+
             TreeIter active_iter = TreeIter.Zero;
-            
+
             List<IImportSource> sources = new List<IImportSource> ();
-            
+
             // Add the standalone import sources
             foreach (IImportSource source in ServiceManager.Get<ImportSourceManager> ()) {
                 sources.Add (source);
             }
-            
+
             // Find active sources that implement IImportSource
             foreach (Source source in ServiceManager.SourceManager.Sources) {
                 if (source is IImportSource) {
                     sources.Add ((IImportSource)source);
                 }
             }
-            
+
             // Sort the sources by their SortOrder properties
             sources.Sort (import_source_comparer);
-            
+
             // And actually add them to the dialog
             foreach (IImportSource source in sources) {
                 AddSource (source);
             }
-            
-            if (!active_iter.Equals(TreeIter.Zero) || (active_iter.Equals (TreeIter.Zero) && 
+
+            if (!active_iter.Equals(TreeIter.Zero) || (active_iter.Equals (TreeIter.Zero) &&
                 source_model.GetIterFirst (out active_iter))) {
                 source_combo_box.SetActiveIter (active_iter);
-            } 
-            
+            }
+
             (Glade["ComboVBox"] as Box).PackStart (source_combo_box, false, false, 0);
             source_combo_box.ShowAll ();
         }
-        
+
         private void UpdateIcons ()
         {
             for (int i = 0, n = source_model.IterNChildren (); i < n; i++) {
@@ -150,26 +150,26 @@ namespace Banshee.Library.Gui
                     if (o != null) {
                         ((Gdk.Pixbuf)o).Dispose ();
                     }
-                    
+
                     source_model.SetValue (iter, 0, GetIcon (source));
                 }
             }
         }
-        
+
         private Gdk.Pixbuf GetIcon (IImportSource source)
         {
             return IconThemeUtils.LoadIcon (22, source.IconNames);
         }
-        
+
         private TreeIter AddSource (IImportSource source)
         {
             if (source == null) {
                 return TreeIter.Zero;
             }
-            
+
             return source_model.AppendValues (GetIcon (source), source.Name, source);
         }
-        
+
         private void OnSourceAdded (SourceAddedArgs args)
         {
             if(args.Source is IImportSource) {
@@ -178,7 +178,7 @@ namespace Banshee.Library.Gui
                 });
             }
         }
-        
+
         private void OnSourceRemoved (SourceEventArgs args)
         {
             if (args.Source is IImportSource) {
@@ -190,7 +190,7 @@ namespace Banshee.Library.Gui
                 });
             }
         }
-        
+
         private void OnSourceUpdated (SourceEventArgs args)
         {
             if (args.Source is IImportSource) {
@@ -202,11 +202,11 @@ namespace Banshee.Library.Gui
                 });
             }
         }
-        
+
         private bool FindSourceIter (out TreeIter iter, IImportSource source)
         {
             iter = TreeIter.Zero;
-            
+
             for (int i = 0, n = source_model.IterNChildren (); i < n; i++) {
                 TreeIter _iter;
                 if (source_model.IterNthChild (out _iter, i)) {
@@ -216,30 +216,30 @@ namespace Banshee.Library.Gui
                     }
                 }
             }
-            
+
             return false;
         }
-        
+
         public bool DoNotShowAgainVisible {
             get { return Glade["DoNotShowCheckBox"].Visible; }
             set { Glade["DoNotShowCheckBox"].Visible = value; }
         }
-        
+
         public bool DoNotShowAgain {
             get { return (Glade["DoNotShowCheckBox"] as CheckButton).Active; }
         }
-        
+
         public IImportSource ActiveSource {
             get {
-                TreeIter iter; 
+                TreeIter iter;
                 if (source_combo_box.GetActiveIter (out iter)) {
                     return (IImportSource)source_model.GetValue (iter, 2);
                 }
-                
+
                 return null;
             }
         }
-         
+
         private static IComparer<IImportSource> import_source_comparer = new ImportSourceComparer ();
         private class ImportSourceComparer : IComparer<IImportSource>
         {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs
index 05c1ee7..602a250 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs
@@ -37,18 +37,18 @@ namespace Banshee.Library.Gui
     public class PhotoFolderImportSource : IImportSource
     {
         private string [] photo_folders;
-        
+
         public PhotoFolderImportSource ()
         {
             string personal = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
             string desktop = Environment.GetFolderPath (Environment.SpecialFolder.Desktop);
-            
+
             photo_folders = new string [] {
                 Environment.GetFolderPath (Environment.SpecialFolder.MyPictures),
                 Paths.Combine (desktop, "Photos"), Paths.Combine (desktop, "photos"),
                 Paths.Combine (personal, "Photos"), Paths.Combine (personal, "photos")
             };
-            
+
             // Make sure we don't accidentally scan the entire home or desktop directory
             for (int i = 0; i < photo_folders.Length; i++) {
                 if (photo_folders[i] == personal || photo_folders[i] == desktop) {
@@ -56,27 +56,27 @@ namespace Banshee.Library.Gui
                 }
             }
         }
-    
+
         public void Import ()
         {
             Hyena.Log.DebugFormat ("Importing photo folder: {0}", PhotoFolder);
             Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (PhotoFolder);
         }
-        
+
         public string Name {
             get { return Catalog.GetString ("Videos From Photos Folder"); }
         }
 
         public string ImportLabel { get { return null; } }
-        
+
         public string [] IconNames {
             get { return new string [] { "gtk-open" }; }
         }
-        
+
         public bool CanImport {
             get { return PhotoFolder != null; }
         }
-        
+
         private string PhotoFolder {
             get {
                 foreach (string folder in photo_folders) {
@@ -87,7 +87,7 @@ namespace Banshee.Library.Gui
                 return null;
             }
         }
-        
+
         public int SortOrder {
             get { return 0; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBox.cs
index a16252c..1e2b821 100644
--- a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBox.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections.Generic;
 
@@ -39,17 +39,17 @@ namespace Banshee.MediaProfiles.Gui
         private MediaProfileManager manager;
         private ListStore store;
         private string [] mimetype_filter;
-        
+
         public event EventHandler Updated;
-        
+
         public ProfileComboBox(MediaProfileManager manager)
         {
             this.manager = manager;
-            
+
             BuildWidget();
             ReloadProfiles();
         }
-        
+
         private void BuildWidget()
         {
             store = new ListStore(typeof(string), typeof(Profile));
@@ -57,20 +57,20 @@ namespace Banshee.MediaProfiles.Gui
             store.RowDeleted += delegate { OnUpdated(); };
             store.RowChanged += delegate { OnUpdated(); };
             Model = store;
-            
+
             CellRendererText text_renderer = new CellRendererText();
             PackStart(text_renderer, true);
             AddAttribute(text_renderer, "text", 0);
         }
-        
+
         public void ReloadProfiles()
         {
             Profile active_profile = ActiveProfile;
             TreeIter active_iter;
             store.Clear();
-            
+
             List<Profile> mimetype_profiles = null;
-                
+
             if(mimetype_filter != null && mimetype_filter.Length > 0) {
                 mimetype_profiles = new List<Profile>();
                 foreach(string mimetype in mimetype_filter) {
@@ -80,15 +80,15 @@ namespace Banshee.MediaProfiles.Gui
                     }
                 }
             }
-            
-            if(manager.AvailableProfileCount == 0 || (mimetype_profiles != null && 
+
+            if(manager.AvailableProfileCount == 0 || (mimetype_profiles != null &&
                 mimetype_profiles.Count == 0 && mimetype_filter != null)) {
                 store.AppendValues(Catalog.GetString("No available profiles"), null);
                 Sensitive = false;
             } else {
                 Sensitive = true;
             }
-            
+
             if(mimetype_profiles != null) {
                 foreach(Profile profile in mimetype_profiles) {
                     store.AppendValues(String.Format("{0}", profile.Name), profile);
@@ -98,7 +98,7 @@ namespace Banshee.MediaProfiles.Gui
                     store.AppendValues(String.Format("{0}", profile.Name), profile);
                 }
             }
-            
+
             if(store.IterNthChild(out active_iter, 0)) {
                 SetActiveIter(active_iter);
             }
@@ -118,7 +118,7 @@ namespace Banshee.MediaProfiles.Gui
                 }
             }
         }
-        
+
         protected virtual void OnUpdated()
         {
             EventHandler handler = Updated;
@@ -126,25 +126,25 @@ namespace Banshee.MediaProfiles.Gui
                 handler(this, new EventArgs());
             }
         }
-        
+
         public string [] MimeTypeFilter {
             get { return mimetype_filter; }
-            set { 
+            set {
                 mimetype_filter = value;
                 ReloadProfiles();
             }
         }
-        
+
         public Profile ActiveProfile {
-            get { 
+            get {
                 TreeIter iter;
                 if(GetActiveIter(out iter)) {
                     return store.GetValue(iter, 1) as Profile;
                 }
-                
+
                 return null;
             }
-            
+
             set { SetActiveProfile(value); }
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs
index adb75f8..bb61ea3 100644
--- a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs
@@ -40,37 +40,37 @@ namespace Banshee.MediaProfiles.Gui
         private ProfileConfigureButton button;
         private DescriptionLabel description;
         private string configuration_id;
-        
-        public ProfileComboBoxConfigurable(MediaProfileManager manager, string configurationId) 
+
+        public ProfileComboBoxConfigurable(MediaProfileManager manager, string configurationId)
             : this(manager, configurationId, null)
         {
         }
-        
-        public ProfileComboBoxConfigurable(MediaProfileManager manager, string configurationId, Box parent) 
+
+        public ProfileComboBoxConfigurable(MediaProfileManager manager, string configurationId, Box parent)
         {
             HBox editor = new HBox();
-            
+
             configuration_id = configurationId;
             combo = new ProfileComboBox(manager);
             combo.Show();
-            
+
             button = new ProfileConfigureButton(configurationId);
             button.ComboBox = combo;
             button.Show();
-            
+
             editor.Spacing = 5;
             editor.PackStart(combo, true, true, 0);
             editor.PackStart(button, false, false, 0);
             editor.Show();
-            
+
             ProfileConfiguration config = manager.GetActiveProfileConfiguration (configurationId);
-            
+
             if (config != null) {
                 Combo.SetActiveProfile(config.Profile);
             }
-            
+
             description = new DescriptionLabel (delegate { return Combo.ActiveProfile.Description; });
-            
+
             Combo.Changed += delegate {
                 if(Combo.ActiveProfile != null) {
                     Hyena.Log.DebugFormat ("Setting active encoding profile: {0} (saved to {1})",
@@ -79,7 +79,7 @@ namespace Banshee.MediaProfiles.Gui
                     description.Update ();
                 }
             };
-            
+
             Combo.StateChanged += delegate {
                 if (Combo.State == StateType.Insensitive) {
                     ((Container)parent ?? this).Remove (description);
@@ -87,16 +87,16 @@ namespace Banshee.MediaProfiles.Gui
                     description.PackInto (parent ?? this, parent != null);
                 }
             };
-            
+
             Spacing = 5;
             PackStart (editor, true, true, 0);
             description.PackInto (parent ?? this, parent != null);
         }
-        
+
         public ProfileComboBox Combo {
             get { return combo; }
         }
-        
+
         public string ConfigurationID {
             get { return configuration_id; }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs
index be3e79c..8288102 100644
--- a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs
@@ -41,21 +41,21 @@ namespace Banshee.MediaProfiles.Gui
     {
         private PipelineVariable variable;
         private ListStore model;
-        
+
         public PipelineVariableComboBox(PipelineVariable variable, ListStore model) : base()
         {
             this.variable = variable;
             this.model = model;
         }
-        
+
         protected PipelineVariableComboBox(IntPtr ptr) : base(ptr)
         {
         }
-        
+
         public PipelineVariable Variable {
             get { return variable; }
         }
-        
+
         public ListStore Store {
             get { return model; }
         }
@@ -64,30 +64,30 @@ namespace Banshee.MediaProfiles.Gui
     public class ProfileConfigurationDialog : Gtk.Dialog
     {
         private Profile profile;
-    
+
         private Label header_label = new Label();
         private Hyena.Widgets.WrapLabel description_label = new Hyena.Widgets.WrapLabel();
         private Table normal_controls_table = new Table(1, 1, false);
         private Table advanced_controls_table = new Table(1, 1, false);
         private Expander advanced_expander = new Expander(Catalog.GetString("Advanced"));
         private TextView sexpr_results = null;
-            
+
         private Dictionary<string, Widget> variable_widgets = new Dictionary<string, Widget>();
 
         public ProfileConfigurationDialog(Profile profile) : base()
         {
             this.profile = profile;
-        
+
             HasSeparator = false;
             BorderWidth = 5;
-                    
+
             AccelGroup accel_group = new AccelGroup();
             AddAccelGroup(accel_group);
-            
+
             Button button = new Button(Stock.Close);
             button.CanDefault = true;
             button.Show();
-            
+
             if(ApplicationContext.Debugging) {
                 Button test_button = new Button("Test S-Expr");
                 test_button.Show();
@@ -97,29 +97,29 @@ namespace Banshee.MediaProfiles.Gui
                     }
                 };
                 ActionArea.PackStart(test_button, true, true, 0);
-                
+
                 sexpr_results = new TextView();
             }
-            
+
             AddActionWidget(button, ResponseType.Close);
             DefaultResponse = ResponseType.Close;
             button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return,
                 0, AccelFlags.Visible);
 
             BuildContents();
-            
+
             LoadProfile();
         }
-        
+
         private void BuildContents()
         {
             VBox box = new VBox();
             box.BorderWidth = 8;
             box.Spacing = 10;
             box.Show();
-        
+
             header_label.Xalign = 0.0f;
-            
+
             header_label.Show();
             description_label.Show();
             normal_controls_table.Show();
@@ -132,7 +132,7 @@ namespace Banshee.MediaProfiles.Gui
             box.PackStart(description_label, false, false, 0);
             box.PackStart(normal_controls_table, false, false, 5);
             box.PackStart(advanced_expander, false, false, 0);
-            
+
             if(sexpr_results != null) {
                 ScrolledWindow scroll = new Gtk.ScrolledWindow();
                 scroll.HscrollbarPolicy = PolicyType.Automatic;
@@ -142,24 +142,24 @@ namespace Banshee.MediaProfiles.Gui
                 sexpr_results.SetSizeRequest(-1, 100);
                 scroll.Add(sexpr_results);
                 scroll.ShowAll();
-                
+
                 VSeparator sep = new VSeparator();
                 sep.Show();
-                
+
                 Label label = new Label();
                 label.Markup = "<b>S-Expr Results</b>";
                 label.Xalign = 0.0f;
                 label.Show();
-               
+
                 box.PackStart(sep, false, false, 0);
                 box.PackStart(label, false, false, 0);
                 box.PackStart(scroll, false, false, 0);
             }
 
             VBox.PackStart(box, false, false, 0);
-            
+
             SetSizeRequest(350, -1);
-            
+
             Gdk.Geometry limits = new Gdk.Geometry();
             limits.MinWidth = SizeRequest().Width;
             limits.MaxWidth = Gdk.Screen.Default.Width;
@@ -171,13 +171,13 @@ namespace Banshee.MediaProfiles.Gui
         private void LoadProfile()
         {
             Title = String.Format (Catalog.GetString ("Configuring {0}"), profile.Name);
-            header_label.Markup = String.Format("<big><b>{0}</b></big>", 
+            header_label.Markup = String.Format("<big><b>{0}</b></big>",
                 GLib.Markup.EscapeText(profile.Name));
             description_label.Text = profile.Description;
 
             LoadControlTable(normal_controls_table, false);
             LoadControlTable(advanced_controls_table, true);
-            
+
             advanced_expander.Visible = advanced_controls_table.Visible;
         }
 
@@ -186,19 +186,19 @@ namespace Banshee.MediaProfiles.Gui
             while(table.Children.Length > 0) {
                 table.Remove(table.Children[0]);
             }
-        
+
             table.Resize(1, 1);
-        
+
             table.RowSpacing = 5;
             table.ColumnSpacing = 12;
-            
+
             uint y = 0;
 
             foreach(PipelineVariable variable in profile.Pipeline) {
                 if(advanced != variable.Advanced) {
                     continue;
                 }
-            
+
                 Label label = new Label();
                 label.Show();
                 label.Markup = String.Format("<b>{0}:</b>", GLib.Markup.EscapeText(variable.Name));
@@ -209,31 +209,31 @@ namespace Banshee.MediaProfiles.Gui
                     if(control == null) {
                         throw new ApplicationException("Control could not be created");
                     }
-                    
+
                     variable_widgets.Add(variable.Id, control);
-                    
+
                     if(variable.ControlType != PipelineVariableControlType.Check) {
                         variable_widgets.Add(".label." + variable.Id, label);
                     }
 
                     control.Show();
-                
+
                     table.Resize(y + 1, 2);
-                
+
                     if(variable.ControlType != PipelineVariableControlType.Check) {
                         table.Attach(label, 0, 1, y, y + 1, AttachOptions.Fill, AttachOptions.Fill, 0, 0);
                     }
-                    
-                    table.Attach(control, 1, 2, y, y + 1, 
-                        control is ComboBox ? AttachOptions.Fill : AttachOptions.Fill | AttachOptions.Expand, 
-                        AttachOptions.Fill, 0, 
+
+                    table.Attach(control, 1, 2, y, y + 1,
+                        control is ComboBox ? AttachOptions.Fill : AttachOptions.Fill | AttachOptions.Expand,
+                        AttachOptions.Fill, 0,
                         (uint)(variable.ControlType == PipelineVariableControlType.Check ? 2 : 0));
 
                     y++;
                 } catch {
                 }
             }
-            
+
             foreach(Widget widget in variable_widgets.Values) {
                 if(widget is PipelineVariableComboBox) {
                     OnComboChanged(widget, EventArgs.Empty);
@@ -259,21 +259,21 @@ namespace Banshee.MediaProfiles.Gui
                     return BuildCheck(variable);
             }
         }
-        
+
         private Widget BuildCheck(PipelineVariable variable)
         {
             CheckButton check = new CheckButton(variable.Name);
 
             check.Toggled += delegate {
                 variable.CurrentValue = Convert.ToString(check.Active ? 1 : 0);
-                
+
                 for(int i = 0; i < variable.Enables.Length; i++) {
                    if(variable_widgets.ContainsKey(variable.Enables[i])) {
                        variable_widgets[variable.Enables[i]].Visible = check.Active;
                        variable_widgets[".label." + variable.Enables[i]].Visible = check.Active;
                    }
                 }
-                
+
                 for(int i = 0; i < variable.Disables.Length; i++) {
                    if(variable_widgets.ContainsKey(variable.Disables[i])) {
                        variable_widgets[variable.Disables[i]].Visible = !check.Active;
@@ -281,8 +281,8 @@ namespace Banshee.MediaProfiles.Gui
                    }
                 }
             };
-            
-            check.Active = ((int)variable.CurrentValueNumeric.Value) != 0; 
+
+            check.Active = ((int)variable.CurrentValueNumeric.Value) != 0;
             check.Show();
             return check;
         }
@@ -292,25 +292,25 @@ namespace Banshee.MediaProfiles.Gui
             if(variable.StepValue <= 0.0) {
                 return null;
             }
-            
+
             HBox box = new HBox();
-        
+
             HScale slider = new HScale(variable.MinValue, variable.MaxValue, variable.StepValue);
             slider.DrawValue = true;
             slider.Digits = variable.StepPrecision;
-            
+
             if(variable.DefaultValueNumeric != null) {
                 slider.Value = (double)variable.DefaultValueNumeric;
             }
-            
+
             if(variable.CurrentValueNumeric != null) {
                 slider.Value = (double)variable.CurrentValueNumeric;
             }
-            
+
             slider.ChangeValue += delegate {
                 variable.CurrentValue = slider.Value.ToString();
             };
-            
+
             if(variable.MinLabel != null) {
                 Label min_label = new Label();
                 min_label.Yalign = 0.9f;
@@ -318,9 +318,9 @@ namespace Banshee.MediaProfiles.Gui
                 box.PackStart(min_label, false, false, 0);
                 box.Spacing = 5;
             }
-            
+
             box.PackStart(slider, true, true, 0);
-            
+
             if(variable.MaxLabel != null) {
                 Label max_label = new Label();
                 max_label.Yalign = 0.9f;
@@ -328,9 +328,9 @@ namespace Banshee.MediaProfiles.Gui
                 box.PackStart(max_label, false, false, 0);
                 box.Spacing = 5;
             }
-            
+
             box.ShowAll();
-            
+
             return box;
         }
 
@@ -354,8 +354,8 @@ namespace Banshee.MediaProfiles.Gui
             if(variable.PossibleValuesCount > 0) {
                 foreach(string key in variable.PossibleValuesKeys) {
                     TreeIter iter = ComboAppend(model, variable, variable.PossibleValues[key].Display, key);
-                
-                    if(variable.CurrentValue == key || (active_iter.Equals(TreeIter.Zero) && 
+
+                    if(variable.CurrentValue == key || (active_iter.Equals(TreeIter.Zero) &&
                         variable.DefaultValue == key)) {
                         active_iter = iter;
                     }
@@ -370,7 +370,7 @@ namespace Banshee.MediaProfiles.Gui
                     ComboAppend(model, variable, current.ToString(), current.ToString());
                 }
             }
-            
+
             if(active_iter.Equals(TreeIter.Zero)) {
                 for(int i = 0, n = model.IterNChildren(); i < n; i++) {
                     TreeIter iter;
@@ -383,13 +383,13 @@ namespace Banshee.MediaProfiles.Gui
                     }
                 }
             }
-            
+
             CellRendererText text_renderer = new CellRendererText();
             box.PackStart(text_renderer, true);
             box.AddAttribute(text_renderer, "text", 0);
 
             box.Model = model;
-            
+
             if(active_iter.Equals(TreeIter.Zero)) {
                 if(model.IterNthChild(out active_iter, 0)) {
                     box.SetActiveIter(active_iter);
@@ -397,25 +397,25 @@ namespace Banshee.MediaProfiles.Gui
             } else {
                 box.SetActiveIter(active_iter);
             }
-            
+
             return box;
         }
-        
+
         private void OnComboChanged(object o, EventArgs args)
         {
             if(!(o is PipelineVariableComboBox)) {
                 return;
             }
-            
+
             PipelineVariableComboBox box = o as PipelineVariableComboBox;
             PipelineVariable variable = box.Variable;
             ListStore model = box.Store;
             TreeIter selected_iter = TreeIter.Zero;
-            
+
             if(box.GetActiveIter(out selected_iter)) {
                 variable.CurrentValue = (string)model.GetValue(selected_iter, 1);
-                
-                if(variable.PossibleValuesCount > 0 && 
+
+                if(variable.PossibleValuesCount > 0 &&
                     variable.PossibleValues.ContainsKey(variable.CurrentValue)) {
                     PipelineVariable.PossibleValue possible_value = variable.PossibleValues[variable.CurrentValue];
                     if(possible_value.Disables != null) {
@@ -426,7 +426,7 @@ namespace Banshee.MediaProfiles.Gui
                             }
                         }
                     }
-                    
+
                     if(possible_value.Enables != null) {
                         for(int i = 0; i < possible_value.Enables.Length; i++) {
                             if(variable_widgets.ContainsKey(possible_value.Enables[i])) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigureButton.cs b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigureButton.cs
index 3cbe9ac..d847f6a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigureButton.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigureButton.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Gtk;
 
@@ -35,17 +35,17 @@ namespace Banshee.MediaProfiles.Gui
     {
         private ProfileComboBox combo;
         private string configuration_id;
-        
+
         public ProfileConfigureButton(string configurationId) : base(Stock.Edit)
         {
             this.configuration_id = configurationId;
         }
-        
+
         protected override void OnClicked()
         {
             Profile profile = combo.ActiveProfile;
             profile.LoadConfiguration(configuration_id);
-            
+
             if(profile != null) {
                 ProfileConfigurationDialog dialog = new ProfileConfigurationDialog(profile);
                 dialog.Run();
@@ -53,7 +53,7 @@ namespace Banshee.MediaProfiles.Gui
                 profile.SaveConfiguration();
             }
         }
-        
+
         private void OnComboUpdated(object o, EventArgs args)
         {
             if(combo != null && combo.ActiveProfile != null && combo.ActiveProfile.Pipeline != null) {
@@ -62,19 +62,19 @@ namespace Banshee.MediaProfiles.Gui
                 Sensitive = false;
             }
         }
-        
+
         public ProfileComboBox ComboBox {
             get { return combo; }
-            set { 
+            set {
                 if(combo == value) {
                     return;
                 } else if(combo != null) {
                     combo.Updated -= OnComboUpdated;
                     combo.Changed -= OnComboUpdated;
                 }
-                
+
                 combo = value;
-                
+
                 if(combo != null) {
                     combo.Updated += OnComboUpdated;
                     combo.Changed += OnComboUpdated;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Playlist.Gui/PlaylistExportDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Playlist.Gui/PlaylistExportDialog.cs
index 91b2704..fe88e58 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Playlist.Gui/PlaylistExportDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Playlist.Gui/PlaylistExportDialog.cs
@@ -12,82 +12,82 @@ namespace Banshee.Playlist.Gui
     public class PlaylistExportDialog : Banshee.Gui.Dialogs.FileChooserDialog
     {
         protected ComboBox combobox;
-        protected ListStore store;    
+        protected ListStore store;
         protected PlaylistFormatDescription playlist;
         protected string initial_name;
-                
-        public PlaylistExportDialog(string name, Window parent) : 
+
+        public PlaylistExportDialog(string name, Window parent) :
             base(Catalog.GetString("Export Playlist"), parent, FileChooserAction.Save)
         {
             initial_name = FileNamePattern.Escape (name);
-            playlist = PlaylistFileUtil.GetDefaultExportFormat();             
+            playlist = PlaylistFileUtil.GetDefaultExportFormat();
             CurrentName = System.IO.Path.ChangeExtension(initial_name, playlist.FileExtension);
             DefaultResponse = ResponseType.Ok;
-            DoOverwriteConfirmation = true;            
-            
+            DoOverwriteConfirmation = true;
+
             AddButton(Stock.Cancel, ResponseType.Cancel);
             AddButton(Catalog.GetString("Export"), ResponseType.Ok);
-            
-            InitializeExtraWidget();                   
+
+            InitializeExtraWidget();
         }
-        
-        protected void InitializeExtraWidget() 
-        {               
+
+        protected void InitializeExtraWidget()
+        {
             PlaylistFormatDescription [] formats = PlaylistFileUtil.ExportFormats;
             int default_export_index = PlaylistFileUtil.GetFormatIndex(formats, playlist);
-            
+
             // Build custom widget used to select the export format.
             store = new ListStore(typeof(string), typeof(PlaylistFormatDescription));
             foreach (PlaylistFormatDescription format in formats) {
                 store.AppendValues(format.FormatName, format);
             }
-                                    
+
             HBox hBox = new HBox(false, 2);
-            
+
             combobox = new ComboBox(store);
             CellRendererText crt = new CellRendererText();
             combobox.PackStart(crt, true);
             combobox.SetAttributes(crt, "text", 0);
             combobox.Active = default_export_index;
             combobox.Changed += OnComboBoxChange;
-            
+
             hBox.PackStart(new Label(Catalog.GetString("Select Format: ")), false, false, 0);
             hBox.PackStart(combobox, true, true, 0);
-            
+
             combobox.ShowAll();
-            hBox.ShowAll();            
-            ExtraWidget = hBox; 
+            hBox.ShowAll();
+            ExtraWidget = hBox;
         }
-        
+
         protected void OnComboBoxChange(object o, EventArgs args)
         {
             playlist = GetExportFormat();
-            
+
             if (playlist != null) {
                 // Store the export format so that we can default to it the
                 // next time the user exports.
                 PlaylistFileUtil.SetDefaultExportFormat(playlist);
-                
+
                 // If the filename has an extension, update it to the extension
                 // of the export format.
                 string file_name = null;
-                
+
                 if (Filename != null) {
                     file_name = System.IO.Path.GetFileName(Filename);
                 }
-                                
+
                 if (file_name != null) {
                     CurrentName = System.IO.Path.ChangeExtension(file_name, playlist.FileExtension);
                 } else {
                     CurrentName = System.IO.Path.ChangeExtension(initial_name, playlist.FileExtension);
                 }
-            }            
+            }
         }
-        
-        public PlaylistFormatDescription GetExportFormat() 
+
+        public PlaylistFormatDescription GetExportFormat()
         {
             PlaylistFormatDescription selected_playlist = null;
-            
+
             // Get the format that the user selected.
             if (combobox != null && store != null) {
                 TreeIter iter;
@@ -95,7 +95,7 @@ namespace Banshee.Playlist.Gui
                     selected_playlist = store.GetValue(iter, 1) as PlaylistFormatDescription;
                 }
             }
-            
+
             return selected_playlist;
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs
index 41e5d29..5edc31b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs
@@ -50,29 +50,29 @@ namespace Banshee.Preferences.Gui
         public static void Load (PreferenceService service)
         {
             Page music = ServiceManager.SourceManager.MusicLibrary.PreferencesPage;
-        
+
             foreach (LibrarySource source in ServiceManager.SourceManager.FindSources<LibrarySource> ()) {
                 new LibraryLocationButton (source);
             }
-            
+
             PreferenceBase folder_pattern = music["file-system"]["folder_pattern"];
             folder_pattern.DisplayWidget = new PatternComboBox (folder_pattern, FileNamePattern.SuggestedFolders);
-            
+
             PreferenceBase file_pattern = music["file-system"]["file_pattern"];
             file_pattern.DisplayWidget = new PatternComboBox (file_pattern, FileNamePattern.SuggestedFiles);
-            
+
             PreferenceBase pattern_display = music["file-system"].FindOrAdd (new VoidPreference ("file_folder_pattern"));
             pattern_display.DisplayWidget = new PatternDisplay (folder_pattern.DisplayWidget, file_pattern.DisplayWidget);
-            
+
             // Set up the extensions tab UI
             Banshee.Addins.Gui.AddinView view = new Banshee.Addins.Gui.AddinView ();
             view.Show ();
-            
+
             Gtk.ScrolledWindow scroll = new Gtk.ScrolledWindow ();
             scroll.HscrollbarPolicy = PolicyType.Never;
             scroll.AddWithViewport (view);
             scroll.Show ();
-            
+
             service["extensions"].DisplayWidget = scroll;
         }
 
@@ -92,9 +92,9 @@ namespace Banshee.Preferences.Gui
                 preference.DisplayWidget = this;
 
                 string dir = preference.Value ?? source.DefaultBaseDirectory;
-                
+
                 Spacing = 5;
-                
+
                 // FileChooserButton wigs out if the directory does not exist,
                 // so create it if it doesn't and store the fact that we did
                 // in case it ends up not being used, we can remove it
@@ -103,15 +103,15 @@ namespace Banshee.Preferences.Gui
                         Banshee.IO.Directory.Create (dir);
                         created_directory = dir;
                         Log.DebugFormat ("Created library directory: {0}", created_directory);
-                    } 
+                    }
                 } catch {
                 }
 
-                chooser = new FileChooserButton (Catalog.GetString ("Select library location"), 
+                chooser = new FileChooserButton (Catalog.GetString ("Select library location"),
                     FileChooserAction.SelectFolder);
                 chooser.SetCurrentFolder (dir);
                 chooser.SelectionChanged += OnChooserChanged;
-                    
+
                 HBox box = new HBox ();
                 box.Spacing = 2;
                 box.PackStart (new Image (Stock.Undo, IconSize.Button), false, false, 0);
@@ -126,15 +126,15 @@ namespace Banshee.Preferences.Gui
                 //Button open = new Button ();
                 //open.PackStart (new Image (Stock.Open, IconSize.Button), false, false, 0);
                 //open.Clicked += OnOpen;
-                
+
                 PackStart (chooser, true, true, 0);
                 PackStart (reset, false, false, 0);
                 //PackStart (open, false, false, 0);
-                
+
                 chooser.Show ();
                 reset.ShowAll ();
             }
-            
+
             private void OnReset (object o, EventArgs args)
             {
                 chooser.SetFilename (source.DefaultBaseDirectory);
@@ -144,7 +144,7 @@ namespace Banshee.Preferences.Gui
             //{
                 //open chooser.Filename
             //}
-            
+
             private void OnChooserChanged (object o, EventArgs args)
             {
                 preference.Value = chooser.Filename;
@@ -165,59 +165,59 @@ namespace Banshee.Preferences.Gui
                     } catch {
                     }
                 }
-                
+
                 base.OnUnrealized ();
             }
         }
-        
+
         private class PatternComboBox : DictionaryComboBox<string>
         {
             private Preference<string> preference;
-            
+
             public PatternComboBox (PreferenceBase pref, string [] patterns)
             {
                 preference = (Preference<string>)pref;
-                
+
                 bool already_added = false;
                 string conf_pattern = preference.Value;
-                
+
                 foreach (string pattern in patterns) {
                     if (!already_added && pattern.Equals (conf_pattern)) {
                         already_added = true;
                     }
-                    
+
                     Add (FileNamePattern.CreatePatternDescription (pattern), pattern);
                 }
-                
+
                 if (!already_added) {
                     Add (FileNamePattern.CreatePatternDescription (conf_pattern), conf_pattern);
                 }
-                
+
                 ActiveValue = conf_pattern;
             }
-            
+
             protected override void OnChanged ()
             {
                 preference.Value = ActiveValue;
                 base.OnChanged ();
             }
         }
-        
+
         private class PatternDisplay : WrapLabel
         {
             private PatternComboBox folder;
             private PatternComboBox file;
-            
+
             private SampleTrackInfo track = new SampleTrackInfo ();
-            
+
             public PatternDisplay (object a, object b)
             {
                 folder= (PatternComboBox)a;
                 file = (PatternComboBox)b;
-                
+
                 folder.Changed += OnChanged;
                 file.Changed += OnChanged;
-                
+
                 OnChanged (null, null);
             }
 
@@ -225,8 +225,8 @@ namespace Banshee.Preferences.Gui
             {
                 string display = FileNamePattern.CreateFromTrackInfo (FileNamePattern.CreateFolderFilePattern (
                     folder.ActiveValue, file.ActiveValue), track);
-            
-                Markup = String.IsNullOrEmpty (display) ? String.Empty : String.Format ("<small>{0}.ogg</small>", 
+
+                Markup = String.IsNullOrEmpty (display) ? String.Empty : String.Format ("<small>{0}.ogg</small>",
                     GLib.Markup.EscapeText (display));
             }
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DescriptionLabel.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DescriptionLabel.cs
index ce9051a..bd920f0 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DescriptionLabel.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DescriptionLabel.cs
@@ -36,7 +36,7 @@ namespace Banshee.Preferences.Gui
     {
         public delegate string DescriptionHandler ();
         private DescriptionHandler handler;
-        
+
         public DescriptionLabel (string text) : base ()
         {
             Set (text);
@@ -56,7 +56,7 @@ namespace Banshee.Preferences.Gui
                 Set (handler ());
             }
         }
-        
+
         public void PackInto (Box parent, bool expand)
         {
             parent.PackStart (this, expand, expand, 0);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
index 417450d..4331311 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
@@ -39,22 +39,22 @@ namespace Banshee.Preferences.Gui
         public Page Page {
             get { return page; }
         }
-        
+
         private Label tab_widget;
         public Widget TabWidget {
             get { return tab_widget; }
         }
-        
+
         public NotebookPage (Page page)
         {
             this.page = page;
-            
+
             BorderWidth = 5;
             Spacing = 10;
-            
+
             tab_widget = new Label (page.Name);
             tab_widget.Show ();
-            
+
             Widget page_widget = page.DisplayWidget as Widget;
             if (page_widget != null) {
                 page_widget.Show ();
@@ -88,15 +88,15 @@ namespace Banshee.Preferences.Gui
                 }
             }
         }
-        
+
         private void AddSection (Section section)
         {
             Frame frame = null;
-            
+
             if (section.Count == 0) {
                 return;
             }
-            
+
             if (section.ShowLabel) {
                 frame = new Frame ();
                 Label label = new Label ();
@@ -109,22 +109,22 @@ namespace Banshee.Preferences.Gui
                 frame.Shadow = ShadowType.None;
                 frame.Show ();
                 PackStart (frame, false, false, 0);
-            } 
-            
+            }
+
             Alignment alignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
             alignment.TopPadding = (uint)(frame == null ? 0 : 5);
             alignment.LeftPadding = section.ShowLabel ? (uint)12 : (uint)0;
             alignment.Show ();
-            
+
             if (frame != null) {
                 frame.Add (alignment);
             } else {
                 PackStart (alignment, false, false, 0);
             }
-            
+
             SectionBox box = new SectionBox (section);
             box.Show ();
-            
+
             alignment.Add (box);
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
index fb8c2c7..8d9d427 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
@@ -32,13 +32,13 @@ using Gtk;
 using Banshee.ServiceStack;
 
 namespace Banshee.Preferences.Gui
-{ 
+{
     public class PageComboBox : ComboBox
     {
         private ListStore model;
         private Notebook notebook;
         private IList<Page> pages;
-        
+
         public PageComboBox (IList<Page> pages, Notebook notebook)
         {
             this.pages = pages;
@@ -80,10 +80,10 @@ namespace Banshee.Preferences.Gui
                 }
             }
         }
-        
+
         protected override void OnChanged ()
         {
             notebook.CurrentPage = Active;
         }
-    } 
+    }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PreferenceDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PreferenceDialog.cs
index ab1374d..f3ea93d 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PreferenceDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PreferenceDialog.cs
@@ -43,24 +43,24 @@ namespace Banshee.Preferences.Gui
     public class PreferenceDialog : BansheeDialog
     {
         private PreferenceService service;
-        
+
         private Dictionary<string, NotebookPage> pages = new Dictionary<string, NotebookPage> ();
         private Notebook notebook;
-        
+
         public PreferenceDialog () : base (Catalog.GetString ("Preferences"))
         {
             service = ServiceManager.Get<PreferenceService> ();
-            
+
             if (service == null) {
-                Log.Error (Catalog.GetString ("Could not show preferences"), 
+                Log.Error (Catalog.GetString ("Could not show preferences"),
                     Catalog.GetString ("The preferences service could not be found."), true);
-                
+
                 throw new ApplicationException ();
             }
-            
+
             DefaultPreferenceWidgets.Load (service);
             service.RequestWidgetAdapters ();
-            
+
             BuildDialog ();
             LoadPages ();
         }
@@ -81,40 +81,40 @@ namespace Banshee.Preferences.Gui
                 }
             }
         }
-        
+
         private void BuildDialog ()
         {
             SetDefaultSize (-1, 400);
 
             AddDefaultCloseButton ();
-            
+
             if (service.Count > 1) {
                 notebook = new Notebook ();
                 notebook.Show ();
-            
+
                 VBox.PackStart (notebook, true, true, 0);
             }
         }
-        
+
         private void LoadPages ()
         {
             foreach (Page page in service) {
                 LoadPage (page);
             }
         }
-        
+
         private void LoadPage (Page page)
         {
             if (pages.ContainsKey (page.Id)) {
-                Log.Warning (String.Format ("Preferences notebook already contains a page with the id `{0}'", 
+                Log.Warning (String.Format ("Preferences notebook already contains a page with the id `{0}'",
                     page.Id), false);
                 return;
             }
-            
+
             NotebookPage page_ui = new NotebookPage (page);
             page_ui.Show ();
             pages.Add (page.Id, page_ui);
-            
+
             if (service.Count == 1) {
                 VBox.PackStart (page_ui, false, false, 0);
             } else {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs
index 6530c59..d104966 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs
@@ -37,70 +37,70 @@ namespace Banshee.Preferences.Gui
     public class SectionBox : Table
     {
         private object tp_host;
-    
+
         public SectionBox (Section section) : base (1, 2, false)
         {
             ColumnSpacing = 10;
             RowSpacing = 5;
-        
+
             foreach (PreferenceBase preference in section) {
                 Widget widget = WidgetFactory.GetWidget (preference);
                 if (widget == null) {
                     continue;
                 }
-                
+
                 AddWidget (preference, widget, WidgetFactory.GetMnemonicWidget (preference));
             }
         }
-        
+
         private void AddWidget (PreferenceBase preference, Widget widget, Widget mnemonic_widget)
         {
             uint start_row = NRows;
             uint start_col = 0;
-            
+
             Label label = null;
-            
+
             if (!(widget is CheckButton) && preference.ShowLabel) {
                 label = AttachLabel (preference.Name, start_row);
                 start_col++;
             }
-            
+
             widget.Show ();
-            Attach (widget, start_col, 2, start_row, start_row + 1, 
-                AttachOptions.Expand | AttachOptions.Fill, 
+            Attach (widget, start_col, 2, start_row, start_row + 1,
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-                
+
             if (label != null) {
                 label.MnemonicWidget = mnemonic_widget ?? widget;
             }
-                
+
             if (!String.IsNullOrEmpty (preference.Description)) {
                 if (tp_host == null) {
                      tp_host = TooltipSetter.CreateHost ();
                 }
-                
+
                 TooltipSetter.Set (tp_host, widget, preference.Description);
                 if (label != null) {
                     TooltipSetter.Set (tp_host, label, preference.Description);
                 }
             }
         }
-        
+
         private Label AttachLabel (string text, uint start_row)
         {
             if (String.IsNullOrEmpty (text)) {
                 return null;
             }
-        
+
             Label label = new Label (String.Format ("{0}:", text));
             label.UseUnderline = true;
             label.Xalign = 0.0f;
             label.Show ();
-            
-            Attach (label, 0, 1, start_row, start_row + 1, 
-                AttachOptions.Fill, 
+
+            Attach (label, 0, 1, start_row, start_row + 1,
+                AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-            
+
             return label;
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs
index 50529ad..1842c5f 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs
@@ -44,10 +44,10 @@ namespace Banshee.Preferences.Gui
 
             Widget widget = preference.DisplayWidget as Widget;
             //OnPreferenceChanged (preference);
-            
+
             return widget ?? GetWidget (preference, preference.GetType ().GetProperty ("Value").PropertyType);
         }
-        
+
         private static Widget GetWidget (PreferenceBase preference, Type type)
         {
             Widget pref_widget = null;
@@ -94,7 +94,7 @@ namespace Banshee.Preferences.Gui
                     });
                 };
             }
-            
+
             return widget ?? pref_widget;
         }
 
@@ -103,15 +103,15 @@ namespace Banshee.Preferences.Gui
             if (preference == null) {
                 return null;
             }
-            
+
             return preference.MnemonicWidget as Widget;
         }
-        
+
         private class PreferenceCheckButton : CheckButton
         {
             private bool sync;
             private PreferenceBase preference;
-            
+
             public PreferenceCheckButton (PreferenceBase preference)
             {
                 this.preference = preference;
@@ -120,22 +120,22 @@ namespace Banshee.Preferences.Gui
                 Active = (bool)preference.BoxedValue;
                 sync = true;
             }
-            
+
             protected override void OnToggled ()
             {
                 base.OnToggled ();
-                
+
                 if (sync) {
                     preference.BoxedValue = Active;
                 }
             }
         }
-        
+
         private class PreferenceEntry : Entry
         {
             private bool sync;
             private PreferenceBase preference;
-            
+
             public PreferenceEntry (PreferenceBase preference)
             {
                 this.preference = preference;
@@ -143,11 +143,11 @@ namespace Banshee.Preferences.Gui
                 Text = value ?? String.Empty;
                 sync = true;
             }
-            
+
             protected override void OnChanged ()
             {
                 base.OnChanged ();
-                
+
                 if (sync) {
                     preference.BoxedValue = Text;
                 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Query.Gui/PlaylistQueryValueEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Query.Gui/PlaylistQueryValueEntry.cs
index 2d7dd1f..ff9b229 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Query.Gui/PlaylistQueryValueEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Query.Gui/PlaylistQueryValueEntry.cs
@@ -72,7 +72,7 @@ namespace Banshee.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 combo.Changed -= HandleValueChanged;
                 query_value = value as PlaylistQueryValue;
                 if (!query_value.IsEmpty) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Query.Gui/RatingQueryValueEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Query.Gui/RatingQueryValueEntry.cs
index dc65b29..ce790b5 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Query.Gui/RatingQueryValueEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Query.Gui/RatingQueryValueEntry.cs
@@ -54,7 +54,7 @@ namespace Banshee.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 entry.Changed -= HandleValueChanged;
                 query_value = value as RatingQueryValue;
                 entry.Value = (int) (query_value.IsEmpty ? query_value.DefaultValue : query_value.IntValue);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Query.Gui/SmartPlaylistQueryValueEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Query.Gui/SmartPlaylistQueryValueEntry.cs
index 1d12591..86e7493 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Query.Gui/SmartPlaylistQueryValueEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Query.Gui/SmartPlaylistQueryValueEntry.cs
@@ -75,7 +75,7 @@ namespace Banshee.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 combo.Changed -= HandleValueChanged;
                 query_value = value as SmartPlaylistQueryValue;
                 if (!query_value.IsEmpty) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.SmartPlaylist.Gui/Editor.cs b/src/Core/Banshee.ThickClient/Banshee.SmartPlaylist.Gui/Editor.cs
index 84694fe..866a6c4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.SmartPlaylist.Gui/Editor.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.SmartPlaylist.Gui/Editor.cs
@@ -7,7 +7,7 @@ using Mono.Unix;
 
 using Hyena.Query;
 using Hyena.Query.Gui;
- 
+
 using Banshee.Base;
 using Banshee.Query;
 using Banshee.ServiceStack;
@@ -70,7 +70,7 @@ namespace Banshee.SmartPlaylist
                 currently_editing = playlist;
             }
         }
-    
+
         public Editor (PrimarySource primary_source) : base ("SmartPlaylistEditorDialog")
         {
             this.primary_source = primary_source;
@@ -119,7 +119,7 @@ namespace Banshee.SmartPlaylist
             }
 
             Update ();
-            
+
             name_entry.GrabFocus ();
         }
 
@@ -168,7 +168,7 @@ namespace Banshee.SmartPlaylist
                     if (c.Length > 0) {
                         if (i > 0)
                             condition += "OR";
-                        
+
                         condition += " (" + c  + ") ";
                     }
                 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CellEditEntry.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CellEditEntry.cs
index 640c113..f669f3b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CellEditEntry.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CellEditEntry.cs
@@ -35,12 +35,12 @@ namespace Banshee.Sources.Gui
     {
         public string path;
         private bool fired_edit_done = false;
-    
+
         public CellEditEntry () : base ()
         {
             MaxLength = 256;
         }
-        
+
         protected override bool OnFocusOutEvent (Gdk.EventFocus focus)
         {
             if (!fired_edit_done) {
@@ -49,7 +49,7 @@ namespace Banshee.Sources.Gui
             RemoveWidget ();
             return base.OnFocusOutEvent (focus);
         }
-        
+
         protected override void OnEditingDone ()
         {
             fired_edit_done = true;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
index 8be3609..366cbe1 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
@@ -66,17 +66,17 @@ namespace Banshee.Sources.Gui
             SetupFilterView (artist_view = new ArtistListView ());
             SetupFilterView (album_view = new AlbumListView ());
         }
-        
+
         protected override void ClearFilterSelections ()
         {
             // if (genre_view.Model != null) {
             //     genre_view.Selection.Clear ();
             // }
-            
+
             if (artist_view.Model != null) {
                 artist_view.Selection.Clear ();
             }
-            
+
             if (album_view.Model != null) {
                 album_view.Selection.Clear ();
             }
@@ -89,7 +89,7 @@ namespace Banshee.Sources.Gui
             SetModel (album);
             // SetModel (genre);
         }
-        
+
         IListView<TrackInfo> ITrackModelSourceContents.TrackView {
             get { return track_view; }
         }
@@ -107,7 +107,7 @@ namespace Banshee.Sources.Gui
                 if (!(ServiceManager.SourceManager.ActiveSource is ITrackModelSource)) {
                     return false;
                 }
-                
+
                 return ((ITrackModelSource)ServiceManager.SourceManager.ActiveSource).ShowBrowser;
             }
         }
@@ -121,11 +121,11 @@ namespace Banshee.Sources.Gui
             if (track_source == null) {
                 return false;
             }
-            
+
             this.source = source;
-            
+
             SetModel (track_view, track_source.TrackModel);
-            
+
             if (filterable_source != null && filterable_source.CurrentFilters != null) {
                 foreach (IListModel model in filterable_source.CurrentFilters) {
                     if (model is IListModel<ArtistInfo>)
@@ -138,7 +138,7 @@ namespace Banshee.Sources.Gui
                     //    Hyena.Log.DebugFormat ("CompositeTrackSourceContents got non-album/artist filter model: {0}", model);
                 }
             }
-            
+
             track_view.HeaderVisible = true;
             return true;
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs
index 0247862..8e7c30e 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs
@@ -55,17 +55,17 @@ namespace Banshee.Sources.Gui
         private string name;
         private object main_view;
         private Gtk.ScrolledWindow main_scrolled_window;
-        
+
         private List<object> filter_views = new List<object> ();
         private List<ScrolledWindow> filter_scrolled_windows = new List<ScrolledWindow> ();
-        
+
         private Dictionary<object, double> model_positions = new Dictionary<object, double> ();
-        
+
         private Paned container;
         private Widget browser_container;
         private InterfaceActionService action_service;
         private ActionGroup browser_view_actions;
-        
+
         private static string menu_xml = @"
             <ui>
               <menubar name=""MainMenu"">
@@ -86,68 +86,68 @@ namespace Banshee.Sources.Gui
         {
             this.name = name;
             InitializeViews ();
-            
+
             string position = ForcePosition == null ? BrowserPosition.Get () : ForcePosition;
             if (position == "top") {
                 LayoutTop ();
             } else {
                 LayoutLeft ();
             }
-            
+
             if (ForcePosition != null) {
                 return;
             }
-            
+
             if (ServiceManager.Contains ("InterfaceActionService")) {
                 action_service = ServiceManager.Get<InterfaceActionService> ();
-                
+
                 if (action_service.FindActionGroup ("BrowserView") == null) {
                     browser_view_actions = new ActionGroup ("BrowserView");
-                    
+
                     browser_view_actions.Add (new RadioActionEntry [] {
-                        new RadioActionEntry ("BrowserLeftAction", null, 
+                        new RadioActionEntry ("BrowserLeftAction", null,
                             Catalog.GetString ("Browser on Left"), null,
                             Catalog.GetString ("Show the artist/album browser to the left of the track list"), 0),
-                        
+
                         new RadioActionEntry ("BrowserTopAction", null,
                             Catalog.GetString ("Browser on Top"), null,
                             Catalog.GetString ("Show the artist/album browser above the track list"), 1),
                     }, position == "top" ? 1 : 0, null);
-                    
+
                     browser_view_actions.Add (new ToggleActionEntry [] {
                         new ToggleActionEntry ("BrowserVisibleAction", null,
                             Catalog.GetString ("Show Browser"), "<control>B",
-                            Catalog.GetString ("Show or hide the artist/album browser"), 
+                            Catalog.GetString ("Show or hide the artist/album browser"),
                             null, BrowserVisible.Get ())
                     });
-                    
+
                     action_service.AddActionGroup (browser_view_actions);
                     //action_merge_id = action_service.UIManager.NewMergeId ();
                     action_service.UIManager.AddUiFromString (menu_xml);
                 }
-                
+
                 (action_service.FindAction("BrowserView.BrowserLeftAction") as RadioAction).Changed += OnViewModeChanged;
                 (action_service.FindAction("BrowserView.BrowserTopAction") as RadioAction).Changed += OnViewModeChanged;
                 action_service.FindAction("BrowserView.BrowserVisibleAction").Activated += OnToggleBrowser;
             }
-            
+
             ServiceManager.SourceManager.ActiveSourceChanged += delegate {
                 Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                     browser_container.Visible = ActiveSourceCanHasBrowser ? BrowserVisible.Get () : false;
                 });
             };
-            
+
             NoShowAll = true;
         }
-        
+
         protected abstract void InitializeViews ();
-        
+
         protected void SetupMainView<T> (ListView<T> main_view)
         {
             this.main_view = main_view;
             main_scrolled_window = SetupView (main_view);
         }
-        
+
         protected void SetupFilterView<T> (ListView<T> filter_view)
         {
             ScrolledWindow window = SetupView (filter_view);
@@ -155,7 +155,7 @@ namespace Banshee.Sources.Gui
             filter_view.HeaderVisible = false;
             filter_view.SelectionProxy.Changed += OnBrowserViewSelectionChanged;
         }
-        
+
         private ScrolledWindow SetupView (Widget view)
         {
             ScrolledWindow window = null;
@@ -166,19 +166,19 @@ namespace Banshee.Sources.Gui
             } else {
                 window = new ScrolledWindow ();
             }
-            
+
             window.Add (view);
             window.HscrollbarPolicy = PolicyType.Automatic;
             window.VscrollbarPolicy = PolicyType.Automatic;
 
             return window;
         }
-        
+
         private void Reset ()
         {
-            // Unparent the views' scrolled window parents so they can be re-packed in 
+            // Unparent the views' scrolled window parents so they can be re-packed in
             // a new layout. The main container gets destroyed since it will be recreated.
-            
+
             foreach (ScrolledWindow window in filter_scrolled_windows) {
                 Paned filter_container = window.Parent as Paned;
                 if (filter_container != null) {
@@ -189,7 +189,7 @@ namespace Banshee.Sources.Gui
             if (container != null && main_scrolled_window != null) {
                 container.Remove (main_scrolled_window);
             }
-            
+
             if (container != null) {
                 Remove (container);
             }
@@ -199,7 +199,7 @@ namespace Banshee.Sources.Gui
         {
             Layout (false);
         }
-        
+
         private void LayoutTop ()
         {
             Layout (true);
@@ -209,12 +209,12 @@ namespace Banshee.Sources.Gui
         {
             //Hyena.Log.Information ("ListBrowser LayoutLeft");
             Reset ();
-            
+
             container = GetPane (!top);
             Paned filter_box = GetPane (top);
             filter_box.PositionSet = true;
             Paned current_pane = filter_box;
-            
+
             for (int i = 0; i < filter_scrolled_windows.Count; i++) {
                 ScrolledWindow window = filter_scrolled_windows[i];
                 bool last_even_filter = (i == filter_scrolled_windows.Count - 1 && filter_scrolled_windows.Count % 2 == 0);
@@ -225,7 +225,7 @@ namespace Banshee.Sources.Gui
                     PersistentPaneController.Control (current_pane, ControllerName (top, i));
                     current_pane = new_pane;
                 }
-               
+
                 if (last_even_filter) {
                     current_pane.Pack2 (window, true, false);
                     current_pane.Position = 350;
@@ -233,18 +233,18 @@ namespace Banshee.Sources.Gui
                 } else {
                     current_pane.Pack1 (window, false, false);
                 }
-                    
+
             }
-            
+
             container.Pack1 (filter_box, false, false);
             container.Pack2 (main_scrolled_window, true, false);
             browser_container = filter_box;
-            
+
             container.Position = top ? 175 : 275;
             PersistentPaneController.Control (container, ControllerName (top, -1));
             ShowPack ();
         }
-        
+
         private string ControllerName (bool top, int filter)
         {
             if (filter == -1)
@@ -252,7 +252,7 @@ namespace Banshee.Sources.Gui
             else
                 return String.Format ("{0}.browser.{1}.{2}", name, top ? "top" : "left", filter);
         }
-        
+
         private Paned GetPane (bool hpane)
         {
             if (hpane)
@@ -260,7 +260,7 @@ namespace Banshee.Sources.Gui
             else
                 return new VPaned ();
         }
-        
+
         private void ShowPack ()
         {
             PackStart (container, true, true, 0);
@@ -269,7 +269,7 @@ namespace Banshee.Sources.Gui
             NoShowAll = true;
             browser_container.Visible = ForcePosition != null || BrowserVisible.Get ();
         }
-        
+
         private void OnViewModeChanged (object o, ChangedArgs args)
         {
             //Hyena.Log.InformationFormat ("ListBrowser mode toggled, val = {0}", args.Current.Value);
@@ -281,21 +281,21 @@ namespace Banshee.Sources.Gui
                 BrowserPosition.Set ("top");
             }
         }
-                
+
         private void OnToggleBrowser (object o, EventArgs args)
         {
             ToggleAction action = (ToggleAction)o;
-            
+
             browser_container.Visible = action.Active && ActiveSourceCanHasBrowser;
             BrowserVisible.Set (action.Active);
-            
+
             if (!browser_container.Visible) {
                 ClearFilterSelections ();
             }
         }
-        
+
         protected abstract void ClearFilterSelections ();
-        
+
         protected virtual void OnBrowserViewSelectionChanged (object o, EventArgs args)
         {
             // If the All item is now selected, scroll to the top
@@ -320,7 +320,7 @@ namespace Banshee.Sources.Gui
                 Hyena.Log.DebugFormat ("Unable to find view for model {0}", model);
             }
         }
-        
+
         protected void SetModel<T> (ListView<T> view, IListModel<T> model)
         {
             if (view.Model != null) {
@@ -331,26 +331,26 @@ namespace Banshee.Sources.Gui
                 view.SetModel (null);
                 return;
             }
-            
+
             if (!model_positions.ContainsKey (model)) {
                 model_positions[model] = 0.0;
             }
-            
+
             view.SetModel (model, model_positions[model]);
         }
-        
+
         private ListView<T> FindListView<T> ()
         {
             if (main_view is ListView<T>)
                 return (ListView<T>) main_view;
-        
+
             foreach (object view in filter_views)
                 if (view is ListView<T>)
                     return (ListView<T>) view;
 
             return null;
         }
-        
+
         protected virtual string ForcePosition {
             get { return null; }
         }
@@ -374,14 +374,14 @@ namespace Banshee.Sources.Gui
         }
 
 #endregion
-        
+
         public static readonly SchemaEntry<bool> BrowserVisible = new SchemaEntry<bool> (
             "browser", "visible",
             true,
             "Artist/Album Browser Visibility",
             "Whether or not to show the Artist/Album browser"
         );
-        
+
         public static readonly SchemaEntry<string> BrowserPosition = new SchemaEntry<string> (
             "browser", "position",
             "left",
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ISourceContents.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ISourceContents.cs
index c93b8c4..907d96c 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ISourceContents.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ISourceContents.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ISourceContents.cs
 //
 // Author:
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ITrackModelSourceContents.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ITrackModelSourceContents.cs
index c940990..2e5b0d7 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ITrackModelSourceContents.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ITrackModelSourceContents.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ITrackModelSourceContents.cs
 //
 // Author:
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs
index af29971..2e9b945 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs
@@ -33,32 +33,32 @@ using Banshee.ServiceStack;
 using Banshee.Sources;
 
 namespace Banshee.Sources.Gui
-{ 
+{
     public class SourceComboBox : ComboBox
     {
         private SourceModel store;
-        
+
         public SourceComboBox ()
         {
             SourceRowRenderer renderer = new SourceRowRenderer ();
             renderer.ParentWidget = this;
             PackStart (renderer, true);
             SetCellDataFunc (renderer, new CellLayoutDataFunc (SourceRowRenderer.CellDataHandler));
-            
+
             store = new SourceModel ();
             Model = store;
-            
-            ServiceManager.SourceManager.ActiveSourceChanged += delegate { 
+
+            ServiceManager.SourceManager.ActiveSourceChanged += delegate {
                 Banshee.Base.ThreadAssist.ProxyToMain (UpdateActiveSource);
             };
-            
+
             ServiceManager.SourceManager.SourceUpdated += delegate {
-                Banshee.Base.ThreadAssist.ProxyToMain (QueueDraw);                    
+                Banshee.Base.ThreadAssist.ProxyToMain (QueueDraw);
             };
-            
+
             store.Refresh ();
         }
-        
+
         public void UpdateActiveSource ()
         {
             lock (this) {
@@ -73,7 +73,7 @@ namespace Banshee.Sources.Gui
         {
             lock (this) {
                 TreeIter iter;
-                
+
                 if (GetActiveIter (out iter)) {
                     Source new_source = store.GetValue(iter, 0) as Source;
                     if (new_source != null && ServiceManager.SourceManager.ActiveSource != new_source) {
@@ -85,5 +85,5 @@ namespace Banshee.Sources.Gui
                 }
             }
         }
-    } 
+    }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceIconResolver.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceIconResolver.cs
index 9da66c5..0484692 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceIconResolver.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceIconResolver.cs
@@ -39,36 +39,36 @@ namespace Banshee.Sources.Gui
         {
             return ResolveIcon (source, 22, null);
         }
-        
+
         public static Gdk.Pixbuf ResolveIcon (Source source, string @namespace)
         {
             return ResolveIcon (source, 22, @namespace);
         }
-    
+
         public static Gdk.Pixbuf ResolveIcon (Source source, int size)
         {
             return ResolveIcon (source, size, null);
         }
-        
+
         public static Gdk.Pixbuf ResolveIcon (Source source, int size, string @namespace)
         {
-            string name_property = @namespace == null 
-                ? "Icon.Name" 
+            string name_property = @namespace == null
+                ? "Icon.Name"
                 : String.Format ("{0}.Icon.Name", @namespace);
-                
-            string pixbuf_property = @namespace == null 
+
+            string pixbuf_property = @namespace == null
                 ? String.Format ("Icon.Pixbuf_{0}", size)
                 : String.Format ("{0}.Icon.Pixbuf_{1}", @namespace, size);
-        
+
             Gdk.Pixbuf icon = source.Properties.Get<Gdk.Pixbuf> (pixbuf_property);
-            
+
             if (icon != null) {
                 return icon;
             }
-            
+
             Type icon_type = source.Properties.GetType (name_property);
             Assembly asm = source.Properties.Get<Assembly> ("ResourceAssembly");
-            
+
             if (icon_type == typeof (string)) {
                 icon = IconThemeUtils.LoadIcon (asm, size, source.Properties.Get<string> (name_property));
             } else if (icon_type == typeof (string [])) {
@@ -78,19 +78,19 @@ namespace Banshee.Sources.Gui
             if (icon == null) {
                 icon = Banshee.Gui.IconThemeUtils.LoadIcon (size, "image-missing");
             }
-                
+
             if (icon != null) {
                 source.Properties.Set<Gdk.Pixbuf> (pixbuf_property, icon);
             }
-            
+
             return icon;
         }
-        
+
         public static void InvalidatePixbufs (Source source)
         {
             InvalidatePixbufs (source, null);
         }
-        
+
         public static void InvalidatePixbufs (Source source, string @namespace)
         {
             string property = @namespace == null ? "Icon.Pixbuf" : String.Format ("{0}.Icon.Pixbuf", @namespace);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceModel.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceModel.cs
index 71e5d6c..c61865b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceModel.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceModel.cs
@@ -34,9 +34,9 @@ using Banshee.Sources;
 using Banshee.ServiceStack;
 
 namespace Banshee.Sources.Gui
-{   
+{
     public delegate void SourceRowEventHandler (object o, SourceRowEventArgs args);
-    
+
     public sealed class SourceRowEventArgs : EventArgs
     {
         public SourceRowEventArgs (Source source, TreeIter iter, TreeIter parentIter)
@@ -45,17 +45,17 @@ namespace Banshee.Sources.Gui
             this.iter = iter;
             this.parent_iter = parentIter;
         }
-        
+
         private Source source;
         public Source Source {
             get { return source; }
         }
-        
+
         private TreeIter iter;
         public TreeIter Iter {
             get { return iter; }
         }
-        
+
         private TreeIter parent_iter;
         public TreeIter ParentIter {
             get { return parent_iter; }
@@ -68,37 +68,37 @@ namespace Banshee.Sources.Gui
 
         public event SourceRowEventHandler SourceRowInserted;
         public event SourceRowEventHandler SourceRowRemoved;
-        
+
         public SourceModel () : base (typeof (Source), typeof (int), typeof (bool))
         {
             SetSortColumnId (1, SortType.Ascending);
-            ChangeSortColumn ();   
-            
+            ChangeSortColumn ();
+
             ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             ServiceManager.SourceManager.SourceRemoved += OnSourceRemoved;
         }
-        
+
         public override void Dispose ()
         {
             ServiceManager.SourceManager.SourceAdded -= OnSourceAdded;
             ServiceManager.SourceManager.SourceRemoved -= OnSourceRemoved;
             base.Dispose ();
         }
-        
+
         private void OnSourceAdded (SourceAddedArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 AddSource (args.Source);
             });
         }
-        
+
         private void OnSourceRemoved (SourceEventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 RemoveSource (args.Source);
             });
         }
-        
+
         protected virtual void OnSourceRowInserted (Source source, TreeIter iter, TreeIter parentIter)
         {
             SourceRowEventHandler handler = SourceRowInserted;
@@ -106,7 +106,7 @@ namespace Banshee.Sources.Gui
                 handler (this, new SourceRowEventArgs (source, iter, parentIter));
             }
         }
-        
+
         protected virtual void OnSourceRowRemoved (Source source, TreeIter iter)
         {
             SourceRowEventHandler handler = SourceRowRemoved;
@@ -121,7 +121,7 @@ namespace Banshee.Sources.Gui
         {
             return GetValue (iter, 0) as Source;
         }
-        
+
         public Source GetSource (TreePath path)
         {
             if (path == null)
@@ -131,7 +131,7 @@ namespace Banshee.Sources.Gui
             if (GetIter (out iter, path)) {
                 return GetSource (iter);
             }
-        
+
             return null;
         }
 
@@ -140,30 +140,30 @@ namespace Banshee.Sources.Gui
             foreach (TreeIter iter in FindInModel (0, source)) {
                 return iter;
             }
-            
+
             return TreeIter.Zero;
         }
-        
+
         public IEnumerable<TreeIter> FindInModel (int column, object match)
         {
             TreeIter iter = TreeIter.Zero;
             GetIterFirst (out iter);
             return FindInModel (column, match, iter);
         }
-        
+
         public IEnumerable<TreeIter> FindInModel (int column, object match, TreeIter iter)
         {
             if (!IterIsValid (iter)) {
                 yield break;
             }
-            
+
             do {
                 object result = GetValue (iter, column);
                 Type result_type = result != null ? result.GetType () : null;
                 if (result_type != null && ((result_type.IsValueType && result.Equals (match)) || result == match)) {
                     yield return iter;
                 }
-                
+
                 if (IterHasChild (iter)) {
                     TreeIter citer = TreeIter.Zero;
                     IterChildren (out citer, iter);
@@ -175,29 +175,29 @@ namespace Banshee.Sources.Gui
                 }
             } while (IterNext (ref iter));
         }
-        
+
         /*private void AddRowSeparator (int order)
         {
             TreeIter iter = InsertNode (order);
-            
+
             SetValue (iter, 0, null);
             SetValue (iter, 1, order);
             SetValue (iter, 2, true);
         }
-        
+
         private void ClearRowSeparators ()
         {
             Queue<TreeIter> to_remove = new Queue<TreeIter> ();
             foreach (TreeIter iter in FindInModel (2, true)) {
                 to_remove.Enqueue (iter);
             }
-            
+
             while (to_remove.Count > 0) {
                 TreeIter iter = to_remove.Dequeue ();
                 Remove (ref iter);
             }
         }*/
-        
+
 #endregion
 
 
@@ -215,18 +215,18 @@ namespace Banshee.Sources.Gui
                 if (!FindSource (source).Equals (TreeIter.Zero)) {
                     return;
                 }
-                
+
                 // Don't add a child source before its parent
                 if (parent.Equals (TreeIter.Zero) && source.Parent != null) {
                     return;
                 }
-                
+
                 int position = source.Order;
-                
+
                 TreeIter iter = parent.Equals (TreeIter.Zero)
-                    ? InsertNode (position) 
+                    ? InsertNode (position)
                     : InsertNode (parent, position);
-                
+
                 SetValue (iter, 0, source);
                 SetValue (iter, 1, source.Order);
                 SetValue (iter, 2, false);
@@ -236,14 +236,14 @@ namespace Banshee.Sources.Gui
                         AddSource (child, iter);
                     }
                 }
-                
-                source.ChildSourceAdded += OnSourceChildSourceAdded; 
+
+                source.ChildSourceAdded += OnSourceChildSourceAdded;
                 source.ChildSourceRemoved += OnSourceChildSourceRemoved;
-                
+
                 OnSourceRowInserted (source, iter, parent);
             }
         }
-        
+
         public void RemoveSource (Source source)
         {
             lock (sync) {
@@ -251,14 +251,14 @@ namespace Banshee.Sources.Gui
                 if (!iter.Equals (TreeIter.Zero)) {
                     Remove (ref iter);
                 }
-                
+
                 source.ChildSourceAdded -= OnSourceChildSourceAdded;
                 source.ChildSourceRemoved -= OnSourceChildSourceRemoved;
-              
+
                 OnSourceRowRemoved (source, iter);
             }
         }
-        
+
         public void Refresh ()
         {
             Clear ();
@@ -266,21 +266,21 @@ namespace Banshee.Sources.Gui
                 AddSource (source);
             }
         }
-        
+
         private void OnSourceChildSourceAdded (SourceEventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 AddSource (args.Source, FindSource (args.Source.Parent));
             });
         }
-        
+
         private void OnSourceChildSourceRemoved (SourceEventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 RemoveSource (args.Source);
             });
         }
-        
+
 #endregion
 
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
index 1736eab..35fc0b8 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
@@ -45,42 +45,42 @@ namespace Banshee.Sources.Gui
         {
             SourceRowRenderer renderer = cell as SourceRowRenderer;
             Source source = model.GetValue (iter, 0) as Source;
-            
+
             if (renderer == null) {
                 return;
             }
-            
+
             renderer.Source = source;
             renderer.Path = model.GetPath (iter);
-            
+
             if (source == null) {
                 return;
             }
-            
+
             renderer.Text = source.Name;
             renderer.Sensitive = source.CanActivate;
         }
-        
+
         private Source source;
         public Source Source {
             get { return source; }
             set { source = value; }
         }
-        
+
         private SourceView view;
-        
+
         private Widget parent_widget;
         public Widget ParentWidget {
             get { return parent_widget; }
             set { parent_widget = value; }
         }
-        
+
         private TreePath path;
         public TreePath Path {
             get { return path; }
             set { path = value; }
         }
-        
+
         private int padding;
         public int Padding {
             get { return padding; }
@@ -96,7 +96,7 @@ namespace Banshee.Sources.Gui
         public SourceRowRenderer ()
         {
         }
-        
+
         private StateType RendererStateToWidgetState (Widget widget, CellRendererState flags)
         {
             if (!Sensitive) {
@@ -112,45 +112,45 @@ namespace Banshee.Sources.Gui
                 return StateType.Normal;
             }
         }
-        
+
         public override void GetSize (Widget widget, ref Gdk.Rectangle cell_area,
             out int x_offset, out int y_offset, out int width, out int height)
-        {        
+        {
             int text_x, text_y, text_w, text_h;
-   
+
             base.GetSize (widget, ref cell_area, out text_x, out text_y, out text_w, out text_h);
-                
+
             x_offset = 0;
             y_offset = 0;
-            
+
             if (!(widget is TreeView)) {
                 width = 200;
             } else {
                 width = 0;
             }
-            
+
             height = (int)Math.Max (RowHeight, text_h) + Padding;
         }
-        
-        protected override void Render (Gdk.Drawable drawable, Widget widget, Gdk.Rectangle background_area, 
+
+        protected override void Render (Gdk.Drawable drawable, Widget widget, Gdk.Rectangle background_area,
             Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags)
         {
             if (source == null) {
                 return;
             }
-            
+
             view = widget as SourceView;
-            bool path_selected = view != null && view.Selection.PathIsSelected (path);            
+            bool path_selected = view != null && view.Selection.PathIsSelected (path);
             StateType state = RendererStateToWidgetState (widget, flags);
-            
+
             RenderSelection (drawable, background_area, path_selected, state);
-            
+
             int title_layout_width = 0, title_layout_height = 0;
             int count_layout_width = 0, count_layout_height = 0;
             int max_title_layout_width;
-            
+
             bool hide_counts = source.Count <= 0;
-            
+
             Pixbuf icon = SourceIconResolver.ResolveIcon (source, RowHeight);
 
             if (state == StateType.Insensitive) {
@@ -164,20 +164,20 @@ namespace Banshee.Sources.Gui
                 icon = widget.Style.RenderIcon (icon_source, widget.Direction, state,
                     (IconSize)(-1), widget, "SourceRowRenderer");
             }
-            
+
             FontDescription fd = widget.PangoContext.FontDescription.Copy ();
-            fd.Weight = (ISource)ServiceManager.PlaybackController.NextSource == (ISource)source 
-                ? Pango.Weight.Bold 
+            fd.Weight = (ISource)ServiceManager.PlaybackController.NextSource == (ISource)source
+                ? Pango.Weight.Bold
                 : Pango.Weight.Normal;
 
             if (view != null && source == view.NewPlaylistSource) {
                 fd.Style = Pango.Style.Italic;
                 hide_counts = true;
             }
-            
+
             Pango.Layout title_layout = new Pango.Layout (widget.PangoContext);
             Pango.Layout count_layout = null;
-            
+
             if (!hide_counts) {
                 count_layout = new Pango.Layout (widget.PangoContext);
                 count_layout.FontDescription = fd;
@@ -186,7 +186,7 @@ namespace Banshee.Sources.Gui
             }
 
             max_title_layout_width = cell_area.Width - (icon == null ? 0 : icon.Width) - count_layout_width - 10;
-            
+
             if (!hide_counts && max_title_layout_width < 0) {
                 hide_counts = true;
             }
@@ -196,63 +196,63 @@ namespace Banshee.Sources.Gui
             title_layout.Ellipsize = EllipsizeMode.End;
             title_layout.SetText (source.Name);
             title_layout.GetPixelSize (out title_layout_width, out title_layout_height);
-            
+
             Gdk.GC main_gc = widget.Style.TextGC (state);
-            
-            drawable.DrawLayout (main_gc, 
-                cell_area.X + (icon == null ? 0 : icon.Width) + 6, 
+
+            drawable.DrawLayout (main_gc,
+                cell_area.X + (icon == null ? 0 : icon.Width) + 6,
                 Middle (cell_area, title_layout_height),
                 title_layout);
-            
+
             if (icon != null) {
-                drawable.DrawPixbuf (main_gc, icon, 0, 0, 
+                drawable.DrawPixbuf (main_gc, icon, 0, 0,
                     cell_area.X, Middle (cell_area, icon.Height),
                     icon.Width, icon.Height, RgbDither.None, 0, 0);
             }
-            
+
             if (hide_counts) {
                 return;
             }
-                
+
             Gdk.GC mod_gc = widget.Style.TextGC (state);
             if (state == StateType.Normal || (view != null && state == StateType.Prelight)) {
                 Gdk.Color fgcolor = widget.Style.Base (state);
                 Gdk.Color bgcolor = widget.Style.Text (state);
-                
+
                 mod_gc = new Gdk.GC (drawable);
                 mod_gc.Copy (widget.Style.TextGC (state));
                 mod_gc.RgbFgColor = Hyena.Gui.GtkUtilities.ColorBlend (fgcolor, bgcolor);
                 mod_gc.RgbBgColor = fgcolor;
-            } 
-            
+            }
+
             drawable.DrawLayout (mod_gc,
                 cell_area.X + cell_area.Width - count_layout_width - 2,
                 Middle (cell_area, count_layout_height),
                 count_layout);
         }
-        
-        private void RenderSelection (Gdk.Drawable drawable, Gdk.Rectangle background_area, 
+
+        private void RenderSelection (Gdk.Drawable drawable, Gdk.Rectangle background_area,
             bool path_selected, StateType state)
         {
             if (view == null) {
                 return;
             }
-            
+
             if (path_selected && view.Cr != null) {
                 Gdk.Rectangle rect = background_area;
                 rect.X -= 2;
                 rect.Width += 4;
-                
+
                 // clear the standard GTK selection and focus
                 drawable.DrawRectangle (view.Style.BaseGC (StateType.Normal), true, rect);
-                
+
                 // draw the hot cairo selection
-                if (!view.EditingRow) { 
-                    view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1, 
+                if (!view.EditingRow) {
+                    view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1,
                         background_area.Width - 2, background_area.Height - 2);
                 }
             } else if (path != null && path.Equals (view.HighlightedPath) && view.Cr != null) {
-                view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1, 
+                view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1,
                     background_area.Width - 2, background_area.Height - 2, false);
             } else if (view.NotifyStage.ActorCount > 0 && view.Cr != null) {
                 TreeIter iter;
@@ -260,19 +260,19 @@ namespace Banshee.Sources.Gui
                     Actor<TreeIter> actor = view.NotifyStage[iter];
                     Cairo.Color color = view.Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Active);
                     color.A = Math.Sin (actor.Percent * Math.PI);
-                        
-                    view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1, 
+
+                    view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1,
                         background_area.Width - 2, background_area.Height - 2, true, true, color);
                 }
             }
         }
-        
+
         private int Middle (Gdk.Rectangle area, int height)
         {
             return area.Y + (int)Math.Round ((double)(area.Height - height) / 2.0) + 1;
         }
-        
-        public override CellEditable StartEditing (Gdk.Event evnt, Widget widget, string path, 
+
+        public override CellEditable StartEditing (Gdk.Event evnt, Widget widget, string path,
             Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags)
         {
             CellEditEntry text = new CellEditEntry ();
@@ -280,19 +280,19 @@ namespace Banshee.Sources.Gui
             text.Text = source.Name;
             text.path = path;
             text.Show ();
-            
+
             view.EditingRow = true;
-            
+
             return text;
         }
-        
+
         private void OnEditDone (object o, EventArgs args)
         {
             CellEditEntry edit = (CellEditEntry)o;
             if (view == null) {
                 return;
             }
-            
+
             view.EditingRow = false;
             view.UpdateRow (new TreePath (edit.path), edit.Text);
         }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
index 2d0c4fd..a245b42 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
@@ -54,9 +54,9 @@ namespace Banshee.Sources.Gui
         private SourceRowRenderer renderer;
         private Theme theme;
         private Cairo.Context cr;
-        
+
         private Stage<TreeIter> notify_stage = new Stage<TreeIter> (2000);
-        
+
         private TreeViewColumn focus_column;
         private TreePath highlight_path;
         private SourceModel store;
@@ -67,22 +67,22 @@ namespace Banshee.Sources.Gui
         public SourceView ()
         {
             BuildColumns ();
-            
+
             store = new SourceModel ();
             store.SourceRowInserted += OnSourceRowInserted;
             store.SourceRowRemoved += OnSourceRowRemoved;
             store.RowChanged += OnRowChanged;
             Model = store;
-            
+
             ConfigureDragAndDrop ();
             store.Refresh ();
             ConnectEvents ();
-            
+
             RowSeparatorFunc = RowSeparatorHandler;
         }
-        
-#region Setup Methods        
-        
+
+#region Setup Methods
+
         private void BuildColumns ()
         {
             // Hidden expander column
@@ -90,7 +90,7 @@ namespace Banshee.Sources.Gui
             col.Visible = false;
             AppendColumn (col);
             ExpanderColumn = col;
-        
+
             focus_column = new TreeViewColumn ();
             renderer = new SourceRowRenderer ();
             renderer.RowHeight = RowHeight.Get ();
@@ -98,16 +98,16 @@ namespace Banshee.Sources.Gui
             focus_column.PackStart (renderer, true);
             focus_column.SetCellDataFunc (renderer, new CellLayoutDataFunc (SourceRowRenderer.CellDataHandler));
             AppendColumn (focus_column);
-            
+
             HeadersVisible = false;
         }
-        
+
         private void ConnectEvents ()
         {
             ServiceManager.SourceManager.ActiveSourceChanged += delegate (SourceEventArgs args) {
                 Banshee.Base.ThreadAssist.ProxyToMain (ResetSelection);
             };
-            
+
             ServiceManager.SourceManager.SourceUpdated += delegate (SourceEventArgs args) {
                 Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                     lock (args.Source) {
@@ -119,31 +119,31 @@ namespace Banshee.Sources.Gui
                     }
                 });
             };
-            
+
             ServiceManager.PlaybackController.NextSourceChanged += delegate {
                 Banshee.Base.ThreadAssist.ProxyToMain (QueueDraw);
             };
-            
+
             notify_stage.ActorStep += delegate (Actor<TreeIter> actor) {
                 Banshee.Base.ThreadAssist.AssertInMainThread ();
                 if (!store.IterIsValid (actor.Target)) {
                     return false;
                 }
-                
+
                 Gdk.Rectangle rect = GetBackgroundArea (store.GetPath (actor.Target), focus_column);
                 QueueDrawArea (rect.X, rect.Y, rect.Width, rect.Height);
                 return true;
             };
         }
-        
+
 #endregion
 
 #region Gtk.Widget Overrides
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
-            
+
             theme = new GtkTheme (this);
             // theme.RefreshColors ();
         }
@@ -152,11 +152,11 @@ namespace Banshee.Sources.Gui
         {
             TreePath path;
             TreeViewColumn column;
-                       
+
             if (press.Button == 1) {
                 ResetHighlight ();
             }
-            
+
             // If there is not a row at the click position let the base handler take care of the press
             if (!GetPathAtPos ((int)press.X, (int)press.Y, out path, out column)) {
                 return base.OnButtonPressEvent (press);
@@ -179,7 +179,7 @@ namespace Banshee.Sources.Gui
                 return ret;
             }
 
-            // For Sources that can't be activated, when they're clicked just 
+            // For Sources that can't be activated, when they're clicked just
             // expand or collapse them and return.
             if (press.Button == 1 && !source.CanActivate) {
                 if (!source.Expanded) {
@@ -195,25 +195,25 @@ namespace Banshee.Sources.Gui
                 OnPopupMenu ();
                 return true;
             }
-            
+
             if (!source.CanActivate) {
                 return false;
             }
-            
+
 
             if (press.Button == 1) {
                 if (ServiceManager.SourceManager.ActiveSource != source) {
                     ServiceManager.SourceManager.SetActiveSource (source);
                 }
             }
-            
+
             if ((press.State & Gdk.ModifierType.ControlMask) != 0) {
                 if (press.Type == Gdk.EventType.TwoButtonPress && press.Button == 1) {
                     ActivateRow (path, null);
                 }
                 return true;
             }
-            
+
             return base.OnButtonPressEvent (press);
         }
 
@@ -222,12 +222,12 @@ namespace Banshee.Sources.Gui
             ServiceManager.Get<InterfaceActionService> ().SourceActions["SourceContextMenuAction"].Activate ();
             return true;
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (need_resort) {
                 need_resort = false;
-                
+
                 // Resort the tree store. This is performed in an event handler
                 // known not to conflict with gtk_tree_view_bin_expose() to prevent
                 // errors about corrupting the TreeView's internal state.
@@ -239,7 +239,7 @@ namespace Banshee.Sources.Gui
                 }
                 QueueDraw ();
             }
-            
+
             try {
                 cr = Gdk.CairoHelper.Create (evnt.Window);
                 return base.OnExposeEvent (evnt);
@@ -253,54 +253,54 @@ namespace Banshee.Sources.Gui
 #endregion
 
 #region Gtk.TreeView Overrides
-        
+
         protected override void OnRowExpanded (TreeIter iter, TreePath path)
         {
             base.OnRowExpanded (iter, path);
             store.GetSource (iter).Expanded = true;
         }
-        
+
         protected override void OnRowCollapsed (TreeIter iter, TreePath path)
         {
             base.OnRowCollapsed (iter, path);
             store.GetSource (iter).Expanded = false;
         }
-        
+
         protected override void OnCursorChanged ()
         {
             if (current_timeout < 0) {
                 current_timeout = (int)GLib.Timeout.Add (200, OnCursorChangedTimeout);
             }
         }
-        
+
         private bool OnCursorChangedTimeout ()
         {
             TreeIter iter;
             TreeModel model;
-            
+
             current_timeout = -1;
-            
+
             if (!Selection.GetSelected (out model, out iter)) {
                 return false;
             }
-            
+
             Source new_source = store.GetValue (iter, 0) as Source;
             if (ServiceManager.SourceManager.ActiveSource == new_source) {
                 return false;
             }
-            
+
             ServiceManager.SourceManager.SetActiveSource (new_source);
-            
+
             QueueDraw ();
 
             return false;
         }
-        
+
         private bool RowSeparatorHandler (TreeModel model, TreeIter iter)
         {
             return (bool)store.GetValue (iter, 2);
         }
-        
+
 #endregion
 
 #region Add/Remove Sources / SourceManager interaction
@@ -308,7 +308,7 @@ namespace Banshee.Sources.Gui
         private void OnSourceRowInserted (object o, SourceRowEventArgs args)
         {
             args.Source.UserNotifyUpdated += OnSourceUserNotifyUpdated;
-            
+
             if (args.Source.Parent != null && args.Source.Parent.AutoExpand == true) {
                 Expand (args.ParentIter);
             }
@@ -319,13 +319,13 @@ namespace Banshee.Sources.Gui
 
             UpdateView ();
         }
-        
+
         private void OnSourceRowRemoved (object o, SourceRowEventArgs args)
         {
             args.Source.UserNotifyUpdated -= OnSourceUserNotifyUpdated;
             UpdateView ();
         }
-        
+
         private void OnRowChanged (object o, RowChangedArgs args)
         {
             QueueDraw ();
@@ -336,7 +336,7 @@ namespace Banshee.Sources.Gui
             TreePath path = store.GetPath (iter);
             ExpandRow (path, true);
         }
-        
+
         private void OnSourceUserNotifyUpdated (object o, EventArgs args)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
@@ -344,11 +344,11 @@ namespace Banshee.Sources.Gui
                 if (iter.Equals (TreeIter.Zero)) {
                     return;
                 }
-                
+
                 notify_stage.AddOrReset (iter);
             });
         }
-        
+
 #endregion
 
 #region List/View Utility Methods
@@ -360,115 +360,115 @@ namespace Banshee.Sources.Gui
                 if (!store.IterNthChild (out iter, i)) {
                     continue;
                 }
-                
+
                 if (store.IterNChildren (iter) > 0) {
                     ExpanderColumn = Columns[1];
                     return true;
                 }
             }
-        
+
             ExpanderColumn = Columns[0];
             return false;
         }
-        
+
         internal void UpdateRow (TreePath path, string text)
         {
             TreeIter iter;
-            
+
             if (!store.GetIter (out iter, path)) {
                 return;
             }
-            
+
             Source source = store.GetValue (iter, 0) as Source;
             source.Rename (text);
         }
-        
+
         public void BeginRenameSource (Source source)
         {
             TreeIter iter = store.FindSource (source);
             if (iter.Equals (TreeIter.Zero)) {
                 return;
             }
-            
+
             renderer.Editable = true;
             SetCursor (store.GetPath (iter), focus_column, true);
             renderer.Editable = false;
         }
-        
+
         private void ResetSelection ()
         {
             TreeIter iter = store.FindSource (ServiceManager.SourceManager.ActiveSource);
-            
+
             if (!iter.Equals (TreeIter.Zero)){
                 Selection.SelectIter (iter);
             }
         }
-        
+
         public void HighlightPath (TreePath path)
         {
             highlight_path = path;
             QueueDraw ();
         }
-        
+
         public void ResetHighlight ()
-        {   
+        {
             highlight_path = null;
             QueueDraw ();
         }
-        
+
 #endregion
 
 #region Public Properties
-                
+
         public Source HighlightedSource {
             get {
                 TreeIter iter;
-                
+
                 if (highlight_path == null || !store.GetIter (out iter, highlight_path)) {
                     return null;
                 }
-                    
+
                 return store.GetValue (iter, 0) as Source;
             }
         }
 
         public bool EditingRow {
             get { return editing_row; }
-            set { 
+            set {
                 editing_row = value;
-                QueueDraw (); 
+                QueueDraw ();
             }
         }
-        
+
 #endregion
 
 #region Internal Properties
-      
+
         internal TreePath HighlightedPath {
             get { return highlight_path; }
         }
-        
+
         internal Cairo.Context Cr {
             get { return cr; }
         }
-        
+
         internal Theme Theme {
             get { return theme; }
         }
-        
+
         internal Stage<TreeIter> NotifyStage {
             get { return notify_stage; }
         }
-        
+
         internal Source NewPlaylistSource {
             get {
                 return new_playlist_source ??
-                    (new_playlist_source = new PlaylistSource (Catalog.GetString ("New Playlist"), 
+                    (new_playlist_source = new PlaylistSource (Catalog.GetString ("New Playlist"),
                         ServiceManager.SourceManager.MusicLibrary));
             }
         }
 
-#endregion        
+#endregion
 
 #region Property Schemas
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView_DragAndDrop.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView_DragAndDrop.cs
index b6181f9..5911592 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView_DragAndDrop.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView_DragAndDrop.cs
@@ -49,34 +49,34 @@ namespace Banshee.Sources.Gui
         private static TargetEntry [] dnd_source_entries = new TargetEntry [] {
             Banshee.Gui.DragDrop.DragDropTarget.Source
         };
-            
+
         private static TargetEntry [] dnd_dest_entries = new TargetEntry [] {
             Banshee.Gui.DragDrop.DragDropTarget.Source,
             Hyena.Data.Gui.ListViewDragDropTarget.ModelSelection,
             Banshee.Gui.DragDrop.DragDropTarget.UriList
         };
-        
+
         private Source new_playlist_source = null;
         private TreeIter new_playlist_iter = TreeIter.Zero;
         private bool new_playlist_visible = false;
-        
+
         private Source final_drag_source = null;
         private uint final_drag_start_time = 0;
-        
+
         private void ConfigureDragAndDrop ()
         {
             EnableModelDragSource (Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
                 dnd_source_entries, DragAction.Copy | DragAction.Move);
-        
+
             EnableModelDragDest (dnd_dest_entries, DragAction.Copy | DragAction.Copy);
         }
-        
+
         protected override bool OnDragMotion (Gdk.DragContext context, int x, int y, uint time)
         {
             TreePath path;
             TreeViewDropPosition pos;
             Source active_source = ServiceManager.SourceManager.ActiveSource;
-            
+
             if (active_source.SupportedMergeTypes == SourceMergeType.None) {
                 Gdk.Drag.Status (context, 0, time);
                 return false;
@@ -84,7 +84,7 @@ namespace Banshee.Sources.Gui
                 Gdk.Drag.Status (context, 0, time);
                 return false;
             }
-            
+
             Source drop_source = store.GetSource (path);
             Source parent_source = (drop_source as LibrarySource) ?? (drop_source.Parent as LibrarySource);
 
@@ -105,7 +105,7 @@ namespace Banshee.Sources.Gui
 
             bool move = (active_source is LibrarySource) && (drop_source is LibrarySource);
             Gdk.Drag.Status (context, move ? Gdk.DragAction.Move : Gdk.DragAction.Copy, time);
-            
+
             return true;
         }
 
@@ -119,7 +119,7 @@ namespace Banshee.Sources.Gui
                 else
                     HideNewPlaylistRow ();
             }
-            
+
             if (parent == null || active == null) {
                 return;
             }
@@ -132,7 +132,7 @@ namespace Banshee.Sources.Gui
 
             TreeIter parent_iter = store.FindSource (parent);
             new_playlist_iter = store.AppendNode (parent_iter);
-            
+
             store.SetValue (new_playlist_iter, 0, NewPlaylistSource);
             store.SetValue (new_playlist_iter, 1, 999);
             new_playlist_visible = true;
@@ -151,7 +151,7 @@ namespace Banshee.Sources.Gui
             if (!new_playlist_visible) {
                 return;
             }
-            
+
             if (!parent_was_expanded) {
                 TreeIter iter = store.FindSource (new_playlist_parent);
                 TreePath path = store.GetPath (iter);
@@ -160,10 +160,10 @@ namespace Banshee.Sources.Gui
 
             store.Remove (ref new_playlist_iter);
             new_playlist_visible = false;
-            
+
             UpdateView ();
         }
-        
+
         protected override void OnDragLeave (Gdk.DragContext context, uint time)
         {
             TreePath path;
@@ -173,7 +173,7 @@ namespace Banshee.Sources.Gui
             if (path == null && !TreeIter.Zero.Equals (new_playlist_iter)) {
                 path = store.GetPath (new_playlist_iter);
             }
-            
+
             if (path != null) {
                 final_drag_source = store.GetSource (path);
             }
@@ -182,7 +182,7 @@ namespace Banshee.Sources.Gui
             HideNewPlaylistRow ();
             SetDragDestRow (null, TreeViewDropPosition.Before);
         }
-        
+
         protected override void OnDragBegin (Gdk.DragContext context)
         {
             if (ServiceManager.SourceManager.ActiveSource.SupportedMergeTypes != SourceMergeType.None) {
@@ -204,17 +204,17 @@ namespace Banshee.Sources.Gui
                     Gtk.Drag.Finish (context, false, false, time);
                     return;
                 }
-                
-                Source drop_source = final_drag_source;    
-                
+
+                Source drop_source = final_drag_source;
+
                 if (final_drag_source == NewPlaylistSource) {
-                    PlaylistSource playlist = new PlaylistSource (Catalog.GetString ("New Playlist"), 
+                    PlaylistSource playlist = new PlaylistSource (Catalog.GetString ("New Playlist"),
                         (new_playlist_parent as PrimarySource));
                     playlist.Save ();
                     playlist.PrimarySource.AddChildSource (playlist);
                     drop_source = playlist;
                 }
-                
+
                 if (data.Target.Name == Banshee.Gui.DragDrop.DragDropTarget.Source.Target) {
                     DragDropList<Source> sources = data;
                     if (sources.Count > 0) {
@@ -239,25 +239,25 @@ namespace Banshee.Sources.Gui
                 } else {
                     Hyena.Log.DebugFormat ("SourceView got unknown drag target type: {0}", data.Target.Name);
                 }
-                
+
                 Gtk.Drag.Finish (context, true, false, time);
             } finally {
                 HideNewPlaylistRow ();
             }
         }
-        
+
         protected override void OnDragDataGet (Gdk.DragContext context, SelectionData selectionData,
             uint info, uint time)
         {
             switch ((DragDropTargetType)info) {
                 case DragDropTargetType.Source:
-                    new DragDropList<Source> (ServiceManager.SourceManager.ActiveSource, 
+                    new DragDropList<Source> (ServiceManager.SourceManager.ActiveSource,
                         selectionData, context.Targets[0]);
                     break;
                 default:
                     return;
             }
-            
+
             base.OnDragDataGet (context, selectionData, info, time);
         }
     }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/CustomActionProxy.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/CustomActionProxy.cs
index 7338e4e..d28a505 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/CustomActionProxy.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/CustomActionProxy.cs
@@ -1,4 +1,4 @@
-// 
+//
 // CustomActionProxy.cs
 //
 // Author:
@@ -126,7 +126,7 @@ namespace Banshee.Widgets
         {
             return null;
         }
-        
+
         protected virtual ToolItem GetNewToolItem () {
             return null;
         }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/DateButton.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/DateButton.cs
index 7e0844a..fceb774 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/DateButton.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/DateButton.cs
@@ -6,27 +6,27 @@
  *  Written by Aaron Bockover (aaron aaronbock net)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using GLib;
 using Gtk;
@@ -67,7 +67,7 @@ namespace Banshee.Widgets
 			
 			cal = new Calendar();
 			cal.DisplayOptions = CalendarDisplayOptions.ShowHeading
-				| CalendarDisplayOptions.ShowDayNames 
+				| CalendarDisplayOptions.ShowDayNames
 				| CalendarDisplayOptions.ShowWeekNumbers;
 				
 			cal.KeyPressEvent += OnCalendarKeyPressed;
@@ -91,13 +91,13 @@ namespace Banshee.Widgets
 				
 			Grab.Add(popup);
 
-			Gdk.GrabStatus grabbed = Gdk.Pointer.Grab(popup.GdkWindow, true, 
-				Gdk.EventMask.ButtonPressMask 
-				| Gdk.EventMask.ButtonReleaseMask 
+			Gdk.GrabStatus grabbed = Gdk.Pointer.Grab(popup.GdkWindow, true,
+				Gdk.EventMask.ButtonPressMask
+				| Gdk.EventMask.ButtonReleaseMask
 				| Gdk.EventMask.PointerMotionMask, null, null, CURRENT_TIME);
 
 			if(grabbed == Gdk.GrabStatus.Success) {
-				grabbed = Gdk.Keyboard.Grab(popup.GdkWindow, 
+				grabbed = Gdk.Keyboard.Grab(popup.GdkWindow,
 					true, CURRENT_TIME);
 
 				if(grabbed != Gdk.GrabStatus.Success) {
@@ -156,7 +156,7 @@ namespace Banshee.Widgets
 			HideCalendar(true);
 		}
 		
-		private void OnCalendarButtonPressed(object o, 
+		private void OnCalendarButtonPressed(object o,
 			ButtonPressEventArgs args)
 		{
 			args.RetVal = true;
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/DictionaryComboBox.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/DictionaryComboBox.cs
index a250830..59d00e3 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/DictionaryComboBox.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/DictionaryComboBox.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -34,37 +34,37 @@ namespace Banshee.Widgets
     public class DictionaryComboBox<T> : ComboBox
     {
         private ListStore store;
-        
+
         public DictionaryComboBox()
         {
             store = new ListStore(typeof(string), typeof(T));
             Model = store;
-                        
+
             CellRendererText text_renderer = new CellRendererText();
             PackStart(text_renderer, true);
             AddAttribute(text_renderer, "text", 0);
         }
-        
+
         public TreeIter Add(string key, T value)
         {
             return store.AppendValues(key, value);
         }
-        
+
         public new void Clear ()
         {
             store.Clear ();
         }
-        
+
         public T ActiveValue {
-            get { 
+            get {
                 TreeIter iter;
                 if(GetActiveIter(out iter)) {
                     return (T)store.GetValue(iter, 1);
                 }
-                
+
                 return default(T);
             }
-            
+
             set {
                 if(value == null) {
                     SetActiveIter(TreeIter.Zero);
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs
index b53fde4..3bf57d7 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/DiscUsageDisplay.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -47,7 +47,7 @@ namespace Banshee.Widgets
         private RadialGradient fg_gradient_full;
         private RadialGradient fg_gradient;
         private RadialGradient bound_gradient;
-        
+
         private Color fill_color_a;
         private Color fill_color_b;
         private Color fill_color_c;
@@ -55,8 +55,8 @@ namespace Banshee.Widgets
         private Color inner_stroke_color;
         private Color text_color;
         private Color text_bg_color;
-        
-        private static readonly double a1 = 3 * Math.PI / 2;        
+
+        private static readonly double a1 = 3 * Math.PI / 2;
         private double x, y, radius, a2, base_line_width;
 
         private long capacity;
@@ -66,7 +66,7 @@ namespace Banshee.Widgets
         {
             AppPaintable = true;
         }
-        
+
         protected override void OnStyleSet(Gtk.Style style)
         {
             fill_color_a = CairoExtensions.GdkColorToCairoColor(Style.Background(StateType.Selected));
@@ -77,67 +77,67 @@ namespace Banshee.Widgets
             text_color = CairoExtensions.GdkColorToCairoColor(Style.Foreground(StateType.Normal), 0.8);
             text_bg_color = CairoExtensions.GdkColorToCairoColor(Style.Background(StateType.Normal), 0.6);
         }
-        
+
         protected override void OnSizeAllocated(Gdk.Rectangle rect)
         {
             x = rect.Width / 2.0;
             y = rect.Height / 2.0;
             radius = Math.Min(rect.Width / 2, rect.Height / 2) - 5;
             base_line_width = Math.Sqrt(radius) * 0.2;
-            
+
             bg_gradient = new RadialGradient(x, y, 0, x, y, radius);
             bg_gradient.AddColorStop(0, disc_color_a);
             bg_gradient.AddColorStop(1, disc_color_b);
-            
+
             fg_gradient = new RadialGradient(x, y, 0, x, y, radius * 2);
             fg_gradient.AddColorStop(0, fill_color_a);
             fg_gradient.AddColorStop(1, fill_color_b);
-                        
+
             fg_gradient_full = new RadialGradient(x, y, 0, x, y, radius);
             fg_gradient_full.AddColorStop(0, disc_color_b);
             fg_gradient_full.AddColorStop(1, red_color);
-            
+
             bound_gradient = new RadialGradient(x, y, 0, x, y, radius * 2);
             bound_gradient.AddColorStop(0, bound_color_a);
             bound_gradient.AddColorStop(1, bound_color_b);
-        
+
             base.OnSizeAllocated(rect);
         }
-        
+
         protected override bool OnExposeEvent(Gdk.EventExpose evnt)
         {
             if(!IsRealized) {
                 return false;
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create(GdkWindow);
-            
+
             foreach(Gdk.Rectangle rect in evnt.Region.GetRectangles()) {
                 cr.Rectangle(rect.X, rect.Y, rect.Width, rect.Height);
                 cr.Clip();
                 Draw(cr);
             }
-            
+
             ((IDisposable)cr).Dispose();
             return false;
         }
-        
+
         private void Draw(Cairo.Context cr)
         {
             cr.Antialias = Antialias.Subpixel;
             cr.LineWidth = base_line_width / 1.5;
-            
+
             cr.Arc(x, y, radius, 0, 2 * Math.PI);
             cr.Pattern = bg_gradient;
             cr.Fill();
-             
+
             /*cr.LineTo(x, y);
             cr.Arc(x, y, radius, a1 + 2 * Math.PI * 0.92, a1);
             cr.LineTo(x, y);
             cr.Pattern = bound_gradient;
             cr.Fill();
             cr.Stroke();*/
-            
+
             if(Capacity > 0) {
                 if(Fraction < 1.0) {
                     cr.LineTo(x, y);
@@ -146,93 +146,93 @@ namespace Banshee.Widgets
                 } else {
                     cr.Arc(x, y, radius, 0, 2 * Math.PI);
                 }
-                
+
                 cr.Pattern = Fraction >= 1.0 ? fg_gradient_full : fg_gradient;
                 cr.FillPreserve();
-                          
+
                 cr.Color = stroke_color;
                 cr.Stroke();
             }
-            
+
             cr.Arc(x, y, radius / 2.75, 0, 2 * Math.PI);
             cr.Color = fill_color_c;
             cr.FillPreserve();
             cr.Color = new Cairo.Color(1, 1, 1, 0.75);
             cr.FillPreserve();
-            
+
             cr.LineWidth = base_line_width / 1.5;
-            
+
             cr.Color = stroke_color;
             cr.Stroke();
-            
+
             cr.Arc(x, y, radius / 5.5, 0, 2 * Math.PI);
             cr.Color = fill_color_c;
             cr.FillPreserve();
-            
+
             cr.LineWidth = base_line_width / 2;
-            
+
             cr.Color = inner_stroke_color;
             cr.Stroke();
-            
+
             cr.Arc(x, y, radius, 0, 2 * Math.PI);
             cr.Stroke();
-            
+
             if(Capacity <= 0) {
                 // this sucks balls
                 cr.Rectangle(0, 0, Allocation.Width, Allocation.Height);
                 cr.Color = text_bg_color;
                 cr.FillPreserve();
-            
+
                 cr.SelectFontFace("Sans", FontSlant.Normal, FontWeight.Bold);
                 cr.Color = text_color;
                 cr.SetFontSize(Allocation.Width * 0.2);
                 DrawText(cr, Mono.Unix.Catalog.GetString("Insert\nDisc"), 3);
             }
         }
-        
+
         private void DrawText(Cairo.Context cr, string text, double lineSpacing)
         {
             string [] lines = text.Split('\n');
             double [] cuml_heights = new double[lines.Length];
             double y_start = 0.0;
-            
+
             for(int i = 0; i < lines.Length; i++) {
                 TextExtents extents = cr.TextExtents(lines[i]);
                 double height = extents.Height + (i > 0 ? lineSpacing : 0);
                 cuml_heights[i] = i > 0 ? cuml_heights[i - 1] + height : height;
             }
-            
+
             y_start = (Allocation.Height / 2) - (cuml_heights[cuml_heights.Length - 1] / 2);
-            
+
             for(int i = 0; i < lines.Length; i++) {
                 TextExtents extents = cr.TextExtents(lines[i]);
-            
+
                 double x = (Allocation.Width / 2) - (extents.Width / 2);
                 double y = y_start + cuml_heights[i];
-        
+
                 cr.MoveTo(x, y);
                 cr.ShowText(lines[i]);
-            }   
+            }
         }
 
         private void CalculateA2()
         {
             a2 = a1 + 2 * Math.PI * Fraction;
         }
-        
+
         private double Fraction {
             get { return (double)Usage / (double)Capacity; }
         }
-        
+
         public long Capacity {
             get { return capacity; }
-            set { 
+            set {
                 capacity = value;
                 CalculateA2();
                 QueueDraw();
             }
         }
-        
+
         public long Usage {
             get { return usage; }
             set {
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/GenericToolItem.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/GenericToolItem.cs
index 8a92a02..052c2d5 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/GenericToolItem.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/GenericToolItem.cs
@@ -34,13 +34,13 @@ namespace Banshee.Widgets
     public class GenericToolItem<T> : ToolItem where T : Widget
     {
         private T widget;
-        
+
         public GenericToolItem (T widget)
         {
             this.widget = widget;
             Add (widget);
         }
-        
+
         public T Widget {
             get { return widget; }
         }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/HigMessageDialog.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/HigMessageDialog.cs
index 37de818..c945774 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/HigMessageDialog.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/HigMessageDialog.cs
@@ -3,33 +3,33 @@
  *  HigMessageDialog.cs
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Banshee.Widgets
 {
     public class HigMessageDialog : Gtk.Dialog
-    {    
+    {
         private Gtk.Image image;
         private Gtk.VBox label_vbox;
         private Gtk.Label message_label;
@@ -76,7 +76,7 @@ namespace Banshee.Widgets
             image.Yalign = 0.1f;
             image.Show ();
             hbox.PackStart (image, false, false, 0);
-            
+
             label_vbox = new Gtk.VBox (false, 0);
             label_vbox.Show ();
             hbox.PackStart (label_vbox, true, true, 0);
@@ -103,7 +103,7 @@ namespace Banshee.Widgets
             label.SetAlignment (0.0f, 0.5f);
             label.Show ();
             label_vbox.PackStart (label, false, false, 0);
-            
+
             switch (buttons) {
             case Gtk.ButtonsType.None:
                 break;
@@ -157,7 +157,7 @@ namespace Banshee.Widgets
             AddButton (button, response, isDefault);
             return button;
         }
-        
+
         public void AddButton (string stock_id, Gtk.ResponseType response, bool isDefault)
         {
             Gtk.Button button = new Gtk.Button (stock_id);
@@ -190,7 +190,7 @@ namespace Banshee.Widgets
                  return (Gtk.ResponseType)hmd.Run();
              } finally {
                  hmd.Destroy();
-             }    
+             }
         }
 
         //Run and destroy a standard confirmation dialog
@@ -206,23 +206,23 @@ namespace Banshee.Widgets
                  return (Gtk.ResponseType)hmd.Run();
              } finally {
                  hmd.Destroy();
-             }    
+             }
          }
-         
+
          public Gdk.Pixbuf Image {
             set {
                 image.Pixbuf = value;
             }
-             
+
             get {
                 return image.Pixbuf;
             }
         }
-        
+
         public Gtk.Label MessageLabel {
             get { return message_label; }
         }
-        
+
         public Gtk.VBox LabelVBox {
             get { return label_vbox; }
         }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/HoverImageButton.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/HoverImageButton.cs
index 763c53b..998a9a1 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/HoverImageButton.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/HoverImageButton.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <abockover novell com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -61,7 +61,7 @@ namespace Banshee.Widgets
             Add(image);
         }
 
-        public HoverImageButton(IconSize size, string icon_name) : 
+        public HoverImageButton(IconSize size, string icon_name) :
             this(size, new string [] { icon_name })
         {
         }
@@ -79,7 +79,7 @@ namespace Banshee.Widgets
                 handler(this, EventArgs.Empty);
             }
         }
-        
+
         private bool changing_style = false;
         protected override void OnStyleSet(Style previous_style)
         {
@@ -130,7 +130,7 @@ namespace Banshee.Widgets
             HasFocus = true;
             is_pressed = true;
             QueueDraw();
-            
+
             return base.OnButtonPressEvent(evnt);
         }
 
@@ -150,12 +150,12 @@ namespace Banshee.Widgets
         protected override bool OnExposeEvent(Gdk.EventExpose evnt)
         {
             base.OnExposeEvent(evnt);
-            
+
             PropagateExpose(Child, evnt);
-            
+
             if(HasFocus && draw_focus) {
                 Style.PaintFocus(Style, GdkWindow, StateType.Normal, evnt.Area, this, "button",
-                    0, 0, Allocation.Width, Allocation.Height); 
+                    0, 0, Allocation.Width, Allocation.Height);
             }
 
             return true;
@@ -163,7 +163,7 @@ namespace Banshee.Widgets
 
         private void UpdateImage()
         {
-            image.Pixbuf = is_hovering || is_pressed || HasFocus 
+            image.Pixbuf = is_hovering || is_pressed || HasFocus
                 ? active_pixbuf : normal_pixbuf;
         }
 
@@ -199,43 +199,43 @@ namespace Banshee.Widgets
         {
             return (byte)Math.Max(0, Math.Min(255, val));
         }
-        
+
         private unsafe Gdk.Pixbuf ColorShiftPixbuf(Gdk.Pixbuf src, byte shift)
         {
             Gdk.Pixbuf dest = new Gdk.Pixbuf(src.Colorspace, src.HasAlpha, src.BitsPerSample, src.Width, src.Height);
-            
+
             byte *src_pixels_orig = (byte *)src.Pixels;
             byte *dest_pixels_orig = (byte *)dest.Pixels;
-            
+
             for(int i = 0; i < src.Height; i++) {
                 byte *src_pixels = src_pixels_orig + i * src.Rowstride;
                 byte *dest_pixels = dest_pixels_orig + i * dest.Rowstride;
-                
+
                 for(int j = 0; j < src.Width; j++) {
                     *(dest_pixels++) = PixelClamp(*(src_pixels++) + shift);
                     *(dest_pixels++) = PixelClamp(*(src_pixels++) + shift);
                     *(dest_pixels++) = PixelClamp(*(src_pixels++) + shift);
-                    
+
                     if(src.HasAlpha) {
                         *(dest_pixels++) = *(src_pixels++);
                     }
                 }
             }
-            
+
             return dest;
         }
 
         public string [] IconNames {
             get { return icon_names; }
-            set { 
-                icon_names = value; 
+            set {
+                icon_names = value;
                 LoadPixbufs();
             }
         }
 
         public IconSize IconSize {
             get { return icon_size; }
-            set { 
+            set {
                 icon_size = value;
                 LoadPixbufs();
             }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/LinearProgress.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/LinearProgress.cs
index b985542..9bcbd47 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/LinearProgress.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/LinearProgress.cs
@@ -6,24 +6,24 @@
  *  Written by Aaron Bockover (aaron aaronbock net)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -48,16 +48,16 @@ namespace Banshee.Widgets
         {
             if(bar_gc == null) {
                 bar_gc = new Gdk.GC(GdkWindow);
-                Gdk.Color color = Hyena.Gui.GtkUtilities.ColorBlend(Style.Background(StateType.Normal), 
+                Gdk.Color color = Hyena.Gui.GtkUtilities.ColorBlend(Style.Background(StateType.Normal),
                     Style.Foreground(StateType.Normal));
                 bar_gc.Background = color;
                 bar_gc.Foreground = color;
             }
-        
+
             DrawGdk();
             return false;
         }
-        
+
         private void DrawGdk()
         {
             int bar_width = (int)((double)Allocation.Width * fraction - 3.0);
@@ -66,12 +66,12 @@ namespace Banshee.Widgets
                 GdkWindow.DrawRectangle(bar_gc, true, 2, 2, bar_width, Allocation.Height - 4);
             }
         }
-        
+
         public double Fraction {
             get {
                 return fraction;
             }
-            
+
             set {
                 fraction = Math.Max(0.0, Math.Min(1.0, value));
                 QueueDraw();
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/LinkLabel.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/LinkLabel.cs
index 04735f5..27370a2 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/LinkLabel.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/LinkLabel.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Gtk;
 
@@ -36,10 +36,10 @@ namespace Banshee.Widgets
     public class LinkLabel : EventBox
     {
         public delegate bool UriOpenHandler(string uri);
-    
+
         private static UriOpenHandler default_open_handler;
         private static Gdk.Cursor hand_cursor = new Gdk.Cursor(Gdk.CursorType.Hand1);
-        
+
         private Label label;
         private Uri uri;
         private bool act_as_link;
@@ -48,42 +48,42 @@ namespace Banshee.Widgets
         private bool selectable;
         private UriOpenHandler open_handler;
         private Gdk.Color link_color;
-        
+
         private bool interior_focus;
         private int focus_width;
         private int focus_padding;
         private int padding;
-        
-        public event EventHandler Clicked; 
-        
+
+        public event EventHandler Clicked;
+
         public LinkLabel() : this(null, null)
         {
             Open = DefaultOpen;
         }
-        
+
         public LinkLabel(string text, Uri uri)
         {
             CanFocus = true;
             AppPaintable = true;
-            
+
             this.uri = uri;
-            
+
             label = new Label(text);
             label.Show();
-            
+
             link_color = label.Style.Background(StateType.Selected);
             ActAsLink = true;
-            
+
             Add(label);
         }
 
         protected override void OnStyleSet (Style previous_style)
         {
             base.OnStyleSet (previous_style);
-            
+
             CheckButton check = new CheckButton ();
             check.EnsureStyle ();
-            
+
             interior_focus = GtkUtilities.StyleGetProperty<bool> (check, "interior-focus", false);
             focus_width = GtkUtilities.StyleGetProperty<int> (check, "focus-line-width", -1);
             focus_padding = GtkUtilities.StyleGetProperty<int> (check, "focus-padding", -1);
@@ -95,70 +95,70 @@ namespace Banshee.Widgets
             if(uri != null && Open != null) {
                 Open(uri.AbsoluteUri);
             }
-        
+
             EventHandler handler = Clicked;
             if(handler != null) {
                 handler(this, new EventArgs());
             }
         }
-        
+
         protected override bool OnExposeEvent(Gdk.EventExpose evnt)
         {
             if(!IsDrawable) {
                 return false;
             }
-            
+
             if(evnt.Window == GdkWindow && HasFocus) {
                 int layout_width = 0, layout_height = 0;
                 label.Layout.GetPixelSize(out layout_width, out layout_height);
-                Style.PaintFocus (Style, GdkWindow, State, evnt.Area, this, "checkbutton", 
+                Style.PaintFocus (Style, GdkWindow, State, evnt.Area, this, "checkbutton",
                     0, 0, layout_width + 2 * padding, layout_height + 2 * padding);
             }
-            
+
             if(Child != null) {
                 PropagateExpose(Child, evnt);
             }
-            
+
             return false;
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             if (label == null) {
                 base.OnSizeRequested (ref requisition);
                 return;
             }
-            
+
             requisition.Width = 0;
             requisition.Height = 0;
-                
+
             Requisition child_requisition = label.SizeRequest ();
             requisition.Width = Math.Max (requisition.Width, child_requisition.Width);
             requisition.Height += child_requisition.Height;
-            
+
             requisition.Width += ((int)BorderWidth + padding) * 2;
             requisition.Height += ((int)BorderWidth + padding) * 2;
-            
+
             base.OnSizeRequested (ref requisition);
         }
 
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
-            
+
             Gdk.Rectangle child_allocation = new Gdk.Rectangle ();
-            
+
             if (label == null || !label.Visible) {
                 return;
             }
-            
+
             int total_padding = (int)BorderWidth + padding;
-            
+
             child_allocation.X = total_padding;
             child_allocation.Y = total_padding;
             child_allocation.Width = (int)Math.Max (1, Allocation.Width - 2 * total_padding);
             child_allocation.Height = (int)Math.Max (1, Allocation.Height - 2 * total_padding);
-            
+
             label.SizeAllocate (child_allocation);
         }
 
@@ -168,31 +168,31 @@ namespace Banshee.Widgets
                 HasFocus = true;
                 is_pressed = true;
             }
-            
+
             return false;
         }
-        
+
         protected override bool OnButtonReleaseEvent(Gdk.EventButton evnt)
         {
             if(evnt.Button == 1 && is_pressed && is_hovering) {
                 OnClicked();
                 is_pressed = false;
             }
-            
+
             return false;
         }
-        
+
         protected override bool OnKeyReleaseEvent(Gdk.EventKey evnt)
         {
-            if(evnt.Key != Gdk.Key.KP_Enter && evnt.Key != Gdk.Key.Return 
+            if(evnt.Key != Gdk.Key.KP_Enter && evnt.Key != Gdk.Key.Return
                 && evnt.Key != Gdk.Key.space) {
                 return  false;
             }
-            
+
             OnClicked();
             return false;
         }
-        
+
         protected override bool OnEnterNotifyEvent(Gdk.EventCrossing evnt)
         {
             is_hovering = true;
@@ -206,70 +206,70 @@ namespace Banshee.Widgets
             GdkWindow.Cursor = null;
             return false;
         }
-        
+
         public Pango.EllipsizeMode Ellipsize {
             get { return label.Ellipsize; }
             set { label.Ellipsize = value; }
         }
-        
+
         public string Text {
             get { return label.Text; }
             set { label.Text = value; }
         }
-        
+
         public string Markup {
             set { label.Markup = value; }
         }
-        
+
         public Label Label {
             get { return label; }
         }
-        
+
         public float Xalign {
             get { return label.Xalign; }
             set { label.Xalign = value; }
         }
-        
+
         public float Yalign {
             get { return label.Yalign; }
             set { label.Yalign = value; }
         }
-        
+
         public bool Selectable {
             get { return selectable; }
             set {
                 if((value && !ActAsLink) || !value) {
                     label.Selectable = value;
                 }
-                
+
                 selectable = value;
             }
         }
-        
+
         public Uri Uri {
             get { return uri; }
             set { uri = value; }
         }
-        
+
         public string UriString {
             get { return uri == null ? null : uri.AbsoluteUri; }
             set { uri = value == null ? null : new Uri(value); }
         }
-        
+
         public UriOpenHandler Open {
             get { return open_handler; }
             set { open_handler = value; }
         }
-        
+
         public bool ActAsLink {
             get { return act_as_link; }
             set {
                 if(act_as_link == value) {
                     return;
                 }
-                
+
                 act_as_link = value;
-                
+
                 if(act_as_link) {
                     label.Selectable = false;
                     label.ModifyFg(Gtk.StateType.Normal, link_color);
@@ -277,11 +277,11 @@ namespace Banshee.Widgets
                     label.Selectable = selectable;
                     label.ModifyFg(Gtk.StateType.Normal, label.Style.Foreground(Gtk.StateType.Normal));
                 }
-                
+
                 label.QueueDraw();
             }
         }
-        
+
         public static UriOpenHandler DefaultOpen {
             get { return default_open_handler; }
             set { default_open_handler = value; }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/MenuTile.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/MenuTile.cs
index c4ac917..f94b871 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/MenuTile.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/MenuTile.cs
@@ -5,27 +5,27 @@
  *  Written by Gabriel Burt <gburt novell com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Gtk;
 
@@ -36,7 +36,7 @@ namespace Banshee.Widgets
         public MenuTile () : base ()
         {
         }
-        
+
         protected override bool OnButtonPressEvent (Gdk.EventButton press)
         {
             return false;
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/MessagePane.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/MessagePane.cs
index 4701252..c06ba18 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/MessagePane.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/MessagePane.cs
@@ -32,9 +32,9 @@ using System;
 using Mono.Unix;
 using Gtk;
 
-namespace Banshee.Widgets 
+namespace Banshee.Widgets
 {
-    public class MessagePane : Table 
+    public class MessagePane : Table
     {
         private Image headerIcon;
         private Label header;
@@ -58,7 +58,7 @@ namespace Banshee.Widgets
         public Gdk.Pixbuf HeaderIcon {
             set { headerIcon.Pixbuf = value; }
         }
-        
+
         public Gdk.Pixbuf ArrowIcon {
             set { arrow = value; }
         }
@@ -70,11 +70,11 @@ namespace Banshee.Widgets
         public string HeaderMarkup {
             set { header.Markup = value; }
         }
-        
+
         private void AttachArrow (Gdk.Pixbuf arrow)
         {
             uint row = NRows;
-            
+
             Image image = arrow == null ? new Image (this.arrow) : new Image (arrow);
             image.Yalign = 0.0f;
             image.Xalign = 1.0f;
@@ -91,7 +91,7 @@ namespace Banshee.Widgets
         {
             Append (tip, showArrow, null);
         }
-        
+
         public void Append (string tip, bool showArrow, Gdk.Pixbuf arrow)
         {
             uint row = NRows;
@@ -120,7 +120,7 @@ namespace Banshee.Widgets
             Append(widget, xoptions, yoptions, showArrow, null);
         }
 
-        public void Append (Widget widget, AttachOptions xoptions, AttachOptions yoptions, 
+        public void Append (Widget widget, AttachOptions xoptions, AttachOptions yoptions,
             bool showArrow, Gdk.Pixbuf arrow)
         {
             uint row = NRows;
@@ -132,7 +132,7 @@ namespace Banshee.Widgets
             Attach (widget, 1, 2, row, row + 1, xoptions, yoptions, 0, 0);
             widget.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
         }
-        
+
         public void Clear ()
         {
             foreach (Widget child in Children) {
@@ -140,10 +140,10 @@ namespace Banshee.Widgets
                     Remove (child);
                 }
             }
-            
+
             Resize (1, 2);
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/PropertyTable.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/PropertyTable.cs
index f67a7b2..7cb9bd2 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/PropertyTable.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/PropertyTable.cs
@@ -6,24 +6,24 @@
  *  Written by Aaron Bockover (aaron aaronbock net)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -36,13 +36,13 @@ namespace Banshee.Widgets
     {
         public PropertyTable() : base(1, 1, false)
         {
-        
+
         }
-        
+
         public void AddWidget(string key, Widget widget, bool boldLabel)
         {
             uint rows = NRows;
-            
+
             if(key != null) {
                 Label keyLabel = new Label();
                 if(boldLabel) {
@@ -50,54 +50,54 @@ namespace Banshee.Widgets
                 } else {
                     keyLabel.Text = key;
                 }
-                keyLabel.Xalign = 0.0f; 
-            
+                keyLabel.Xalign = 0.0f;
+
                 Attach(keyLabel, 0, 1, rows, rows + 1);
             }
-            
+
             Attach(widget, 1, 2, rows, rows + 1);
         }
-        
+
         public void AddWidget(string key, Widget widget)
         {
             AddWidget(key, widget, true);
         }
-        
+
         public void AddSeparator()
         {
             HSeparator sep = new HSeparator();
             Attach(sep, 0, 2, NRows, NRows + 1);
             sep.HeightRequest = 10;
         }
-        
+
         public void AddLabel(string key, object value, bool boldLabel)
         {
             if(value == null)
                 return;
-                
+
             Label valLabel = new Label(value.ToString());
             valLabel.Xalign = 0.0f;
             valLabel.UseUnderline = false;
             valLabel.Selectable = true;
-            
+
             AddWidget(key, valLabel, boldLabel);
         }
-        
+
         public void AddLabel(string key, object value)
         {
             AddLabel(key, value, true);
         }
-        
+
         public Entry AddEntry(string key, object value, bool boldLabel)
-        {        
+        {
             Entry valEntry = new Entry();
             valEntry.Text = value == null ? String.Empty : value.ToString();
-            
+
             AddWidget(key, valEntry, boldLabel);
-            
+
             return valEntry;
         }
-        
+
         public Entry AddEntry(string key, object value)
         {
             return AddEntry(key, value, true);
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/RatingActionProxy.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/RatingActionProxy.cs
index e115045..4136adf 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/RatingActionProxy.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/RatingActionProxy.cs
@@ -1,4 +1,4 @@
-// 
+//
 // RatingActionProxy.cs
 //
 // Author:
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/SearchEntry.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/SearchEntry.cs
index 3def9a7..11fa899 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/SearchEntry.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/SearchEntry.cs
@@ -26,7 +26,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using Gtk;
 
@@ -43,7 +43,7 @@ namespace Banshee.Widgets
         private int active_filter_id = -1;
 
         private uint changed_timeout_id = 0;
-        
+
         private string empty_message;
         private bool ready = false;
 
@@ -64,7 +64,7 @@ namespace Banshee.Widgets
             add { filter_changed += value; }
             remove { filter_changed -= value; }
         }
-        
+
         public Menu Menu {
             get { return menu; }
         }
@@ -75,10 +75,10 @@ namespace Banshee.Widgets
 
             BuildWidget();
             BuildMenu();
-            
+
             NoShowAll = true;
         }
-            
+
         private void BuildWidget()
         {
             box = new HBox();
@@ -135,7 +135,7 @@ namespace Banshee.Widgets
         private void OnPositionMenu(Menu menu, out int x, out int y, out bool push_in)
         {
             int origin_x, origin_y, tmp;
-            
+
             filter_button.GdkWindow.GetOrigin(out origin_x, out tmp);
             GdkWindow.GetOrigin(out tmp, out origin_y);
 
@@ -156,10 +156,10 @@ namespace Banshee.Widgets
             if(toggling || !(o is FilterMenuItem)) {
                 return;
             }
-            
+
             toggling = true;
             FilterMenuItem item = (FilterMenuItem)o;
-            
+
             foreach(MenuItem child_item in menu) {
                 if(!(child_item is FilterMenuItem)) {
                     continue;
@@ -199,20 +199,20 @@ namespace Banshee.Widgets
             Gdk.Color color = entry.Style.Base (entry.State);
             filter_button.ModifyBg (entry.State, color);
             clear_button.ModifyBg (entry.State, color);
-            
+
             box.BorderWidth = (uint)entry.Style.XThickness;
         }
-        
+
         private void OnInnerEntryStyleSet (object o, StyleSetArgs args)
         {
             UpdateStyle ();
         }
-        
+
         private void OnInnerEntryStateChanged (object o, EventArgs args)
         {
             UpdateStyle ();
         }
-        
+
         private void OnInnerEntryFocusEvent(object o, EventArgs args)
         {
             QueueDraw();
@@ -250,9 +250,9 @@ namespace Banshee.Widgets
         protected override bool OnExposeEvent(Gdk.EventExpose evnt)
         {
             PropagateExpose(Child, evnt);
-            Style.PaintShadow(entry.Style, GdkWindow, StateType.Normal, 
+            Style.PaintShadow(entry.Style, GdkWindow, StateType.Normal,
                 ShadowType.In, evnt.Area, entry, "entry",
-                0, 0, Allocation.Width, Allocation.Height); 
+                0, 0, Allocation.Width, Allocation.Height);
             return true;
         }
 
@@ -280,7 +280,7 @@ namespace Banshee.Widgets
             if(handler != null) {
                 handler(this, EventArgs.Empty);
             }
-            
+
             if(IsQueryAvailable) {
                 OnInnerEntryChanged(this, EventArgs.Empty);
             }
@@ -353,7 +353,7 @@ namespace Banshee.Widgets
 
         public int ActiveFilterID {
             get { return active_filter_id; }
-            private set { 
+            private set {
                 if(value == active_filter_id) {
                     return;
                 }
@@ -386,13 +386,13 @@ namespace Banshee.Widgets
             get { return ready; }
             set { ready = value; }
         }
-        
+
         public new bool HasFocus {
             get { return entry.HasFocus; }
             set { entry.HasFocus = true; }
         }
 
-        
+
         public Entry InnerEntry {
             get { return entry; }
         }
@@ -425,14 +425,14 @@ namespace Banshee.Widgets
             public string Label {
                 get { return label; }
             }
-            
+
             // FIXME: Remove when restored to CheckMenuItem
             private bool active;
             public bool Active {
                 get { return active; }
                 set { active = value; }
             }
-            
+
             public new event EventHandler Toggled;
             protected override void OnActivated ()
             {
@@ -455,7 +455,7 @@ namespace Banshee.Widgets
             {
                 this.parent = parent;
                 HasFrame = false;
-                
+
                 parent.StyleSet += OnParentStyleSet;
                 WidthChars = 1;
             }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/SeekSlider.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/SeekSlider.cs
index 8927882..83dc20d 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/SeekSlider.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/SeekSlider.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -40,7 +40,7 @@ namespace Banshee.Widgets
         private bool raise_seek_requested;
         private bool can_set_value;
         private double pressed_x;
-        
+
         public event EventHandler SeekRequested;
         public event EventHandler DurationChanged;
 
@@ -48,18 +48,18 @@ namespace Banshee.Widgets
         {
             UpdatePolicy = UpdateType.Continuous;
             DrawValue = false;
-            
+
             raise_seek_requested = true;
             can_set_value = true;
-            
+
             Adjustment.Lower = 0;
             Adjustment.Upper = 0;
 
             Accessible.Name = Catalog.GetString ("Seek");
-            
+
             SetIdle ();
         }
-        
+
         protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
         {
             can_set_value = false;
@@ -85,59 +85,59 @@ namespace Banshee.Widgets
                 SeekValue += (evnt.Direction.Equals (Gdk.ScrollDirection.Down) ? -1 : 1) * 10000; // skip 10s
                 OnSeekRequested ();
             }
-            
+
             return base.OnScrollEvent (evnt);
         }
 
         protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
         {
             can_set_value = true;
-            
+
             if (timeout > 0) {
                 GLib.Source.Remove (timeout);
             }
-            
+
             if (can_seek) {
                 if (evnt.Button == 1 && Math.Abs (pressed_x - evnt.X) <= 3.0) {
                     SeekValue = (long) (evnt.X / Allocation.Width * Duration); // seek to clicked position
                 }
                 OnSeekRequested ();
             }
-            
+
             return base.OnButtonReleaseEvent (evnt);
         }
-        
+
         protected override void OnValueChanged ()
         {
             if (timeout == 0 && raise_seek_requested) {
                 timeout = GLib.Timeout.Add (timeout_delay, OnSeekRequested);
             }
-            
+
             base.OnValueChanged ();
         }
-        
+
         private bool OnSeekRequested ()
-        {   
+        {
             if (raise_seek_requested) {
                 EventHandler handler = SeekRequested;
                 if (handler != null) {
                     handler (this, new EventArgs ());
                 }
             }
-            
+
             timeout = 0;
             return false;
         }
-        
+
         public long SeekValue {
             get { return (long)Value; }
             set {
                 if (!can_set_value) {
                     return;
                 }
-                
+
                 raise_seek_requested = false;
-                
+
                 if (value > Duration) {
                     Duration = Int64.MaxValue;
                     Value = value;
@@ -148,7 +148,7 @@ namespace Banshee.Widgets
                 raise_seek_requested = true;
             }
         }
-        
+
         public double Duration {
             get { return Adjustment.Upper; }
             set {
@@ -159,23 +159,23 @@ namespace Banshee.Widgets
                 }
             }
         }
-        
+
         public void SetIdle ()
         {
             Sensitive = false;
             SeekValue = 0;
             Duration = 0;
         }
-        
+
         public uint SeekRequestDelay {
             get { return timeout_delay; }
             set { timeout_delay = value; }
         }
-        
+
         public bool CanSeek {
             get { return can_seek; }
-            set { 
-                can_seek = value; 
+            set {
+                can_seek = value;
                 Sensitive = value;
             }
         }
@@ -188,6 +188,6 @@ namespace Banshee.Widgets
                 }
                 base.Sensitive = value;
             }
-        } 
+        }
     }
 }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/StreamPositionLabel.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/StreamPositionLabel.cs
index 4cb3694..4283508 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/StreamPositionLabel.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/StreamPositionLabel.cs
@@ -48,103 +48,103 @@ namespace Banshee.Widgets
         private string format_string = "<small>{0}</small>";
         private Pango.Layout layout;
         private StreamLabelState state;
-        
+
         public StreamPositionLabel (SeekSlider seekRange) : base (0.0f, 0.0f, 1.0f, 1.0f)
         {
             AppPaintable = true;
-            
+
             this.seekRange = seekRange;
             this.seekRange.ValueChanged += OnSliderUpdated;
         }
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
             BuildLayouts ();
             UpdateLabel ();
         }
-        
+
         private void BuildLayouts ()
         {
             if (layout != null) {
                 layout.Dispose ();
             }
-            
+
             layout = new Pango.Layout (PangoContext);
             layout.FontDescription = PangoContext.FontDescription.Copy ();
             layout.Ellipsize = Pango.EllipsizeMode.None;
         }
-        
+
         private bool first_style_set = false;
-        
+
         protected override void OnStyleSet (Style old_style)
         {
             base.OnStyleSet (old_style);
-            
+
             if (first_style_set) {
                 BuildLayouts ();
                 UpdateLabel ();
             }
-            
+
             first_style_set = true;
         }
-        
+
         protected override void OnSizeRequested (ref Gtk.Requisition requisition)
         {
             if (!IsRealized || layout == null) {
                 return;
             }
-            
+
             EnsureStyle ();
-            
+
             int width, height;
             layout.GetPixelSize (out width, out height);
-            
+
             requisition.Width = width;
             requisition.Height = height;
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             int bar_width = (int)((double)Allocation.Width * buffering_progress);
             bool render_bar = false;
-            
+
             if (bar_width > 0 && IsBuffering) {
                 bar_width -= 2 * Style.XThickness;
                 render_bar = true;
-                
-                Gtk.Style.PaintBox (Style, GdkWindow, StateType.Normal, ShadowType.In, evnt.Area, this, null, 
+
+                Gtk.Style.PaintBox (Style, GdkWindow, StateType.Normal, ShadowType.In, evnt.Area, this, null,
                     Allocation.X, Allocation.Y, Allocation.Width, Allocation.Height);
-                
+
                 if (bar_width > 0) {
-                    Gtk.Style.PaintBox (Style, GdkWindow, StateType.Selected, ShadowType.EtchedOut, 
-                        evnt.Area, this, "bar", 
-                        Allocation.X + Style.XThickness, Allocation.Y + Style.YThickness, 
+                    Gtk.Style.PaintBox (Style, GdkWindow, StateType.Selected, ShadowType.EtchedOut,
+                        evnt.Area, this, "bar",
+                        Allocation.X + Style.XThickness, Allocation.Y + Style.YThickness,
                         bar_width, Allocation.Height - 2 * Style.YThickness);
                 }
             }
-            
+
             int width, height;
             layout.GetPixelSize (out width, out height);
-            
+
             int x = Allocation.X + ((Allocation.Width - width) / 2);
             int y = Allocation.Y + ((Allocation.Height - height) / 2);
             Gdk.Rectangle rect = evnt.Area;
-            
+
             if (render_bar) {
                 width = bar_width + Style.XThickness;
                 rect = new Gdk.Rectangle (evnt.Area.X, evnt.Area.Y, width, evnt.Area.Height);
                 Gtk.Style.PaintLayout (Style, GdkWindow, StateType.Selected, true, rect, this, null, x, y, layout);
-                
+
                 rect.X += rect.Width;
                 rect.Width = evnt.Area.Width - rect.Width;
             }
-            
+
             Gtk.Style.PaintLayout (Style, GdkWindow, StateType.Normal, false, rect, this, null, x, y, layout);
-            
+
             return true;
         }
-        
+
         private static string idle = Catalog.GetString ("Idle");
         private static string contacting = Catalog.GetString ("Contacting...");
 
@@ -153,7 +153,7 @@ namespace Banshee.Widgets
             if (!IsRealized || layout == null) {
                 return;
             }
-            
+
             if (IsBuffering) {
                 double progress = buffering_progress * 100.0;
                 UpdateLabel (String.Format ("{0}: {1}%", Catalog.GetString("Buffering"), progress.ToString ("0.0")));
@@ -173,30 +173,30 @@ namespace Banshee.Widgets
                     FormatDuration ((long)seekRange.Value), FormatDuration ((long)seekRange.Adjustment.Upper)));
             }
         }
-        
+
         private void UpdateLabel (string text)
         {
             if (!IsRealized || layout == null) {
                 return;
             }
-            
+
             layout.SetMarkup (String.Format (format_string, GLib.Markup.EscapeText (text)));
             QueueResize ();
         }
-        
+
         private static string FormatDuration (long time)
         {
             time /= 1000;
-            return (time > 3600 ? 
+            return (time > 3600 ?
                     String.Format ("{0}:{1:00}:{2:00}", time / 3600, (time / 60) % 60, time % 60) :
                     String.Format ("{0}:{1:00}", time / 60, time % 60));
         }
-        
+
         private void OnSliderUpdated (object o, EventArgs args)
         {
             UpdateLabel ();
         }
-        
+
         public double BufferingProgress {
             get { return buffering_progress; }
             set {
@@ -205,7 +205,7 @@ namespace Banshee.Widgets
                 QueueDraw ();
             }
         }
-        
+
         public bool IsIdle {
             get { return StreamState == StreamLabelState.Idle; }
         }
@@ -213,7 +213,7 @@ namespace Banshee.Widgets
         public bool IsBuffering {
             get { return StreamState == StreamLabelState.Buffering; }
         }
-        
+
         public bool IsContacting {
             get { return StreamState == StreamLabelState.Contacting; }
         }
@@ -224,7 +224,7 @@ namespace Banshee.Widgets
 
         public StreamLabelState StreamState {
             get { return state; }
-            set { 
+            set {
                 if (state != value) {
                     state = value;
                     UpdateLabel ();
@@ -235,7 +235,7 @@ namespace Banshee.Widgets
 
         public bool IsLive {
             get { return is_live; }
-            set { 
+            set {
                 if (is_live != value) {
                     is_live = value;
                     UpdateLabel ();
@@ -243,9 +243,9 @@ namespace Banshee.Widgets
                 }
             }
         }
-        
+
         public string FormatString {
-            set { 
+            set {
                 format_string = value;
                 BuildLayouts ();
                 UpdateLabel ();
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/Tile.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/Tile.cs
index 778c928..363920e 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/Tile.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/Tile.cs
@@ -5,27 +5,27 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Gtk;
 
@@ -34,52 +34,52 @@ namespace Banshee.Widgets
     public class Tile : Button
     {
         private static readonly int pixbuf_size = 40;
-    
+
         private Image image = new Image();
         private Label primary_label = new Label();
         private Label secondary_label = new Label();
-        
+
         private string primary_text;
         private string secondary_text;
-        
+
         public Tile (string primaryText) : base ()
         {
             PrimaryText = primaryText;
         }
-    
+
         public Tile()
         {
             Table table = new Table(2, 2, false);
             table.ColumnSpacing = 6;
             table.RowSpacing = 2;
             table.BorderWidth = 2;
-            
+
             table.Attach(image, 0, 1, 0, 2, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-            table.Attach(primary_label, 1, 2, 0, 1, 
+            table.Attach(primary_label, 1, 2, 0, 1,
                 AttachOptions.Fill | AttachOptions.Expand,
                 AttachOptions.Shrink, 0, 0);
-            table.Attach(secondary_label, 1, 2, 1, 2, 
+            table.Attach(secondary_label, 1, 2, 1, 2,
                 AttachOptions.Fill | AttachOptions.Expand,
                 AttachOptions.Fill | AttachOptions.Expand, 0, 0);
-                
+
             table.ShowAll();
             Add(table);
-            
+
             primary_label.Xalign = 0.0f;
             primary_label.Yalign = 0.0f;
-            
+
             secondary_label.Xalign = 0.0f;
             secondary_label.Yalign = 0.0f;
-            
+
             StyleSet += delegate {
                 primary_label.ModifyFg (StateType.Normal, Style.Text (StateType.Normal));
                 secondary_label.ModifyFg (StateType.Normal, Hyena.Gui.GtkUtilities.ColorBlend (
                     Style.Foreground (StateType.Normal), Style.Background (StateType.Normal)));
             };
-                
+
             Relief = ReliefStyle.None;
         }
-        
+
         public string PrimaryText {
             get { return primary_text; }
             set {
@@ -87,7 +87,7 @@ namespace Banshee.Widgets
                 primary_label.Text = value;
             }
         }
-        
+
         public string SecondaryText {
             get { return secondary_text; }
             set {
@@ -96,7 +96,7 @@ namespace Banshee.Widgets
                     GLib.Markup.EscapeText(value));
             }
         }
-        
+
         public Gdk.Pixbuf Pixbuf {
             get { return image.Pixbuf; }
             set {
@@ -108,7 +108,7 @@ namespace Banshee.Widgets
                     image.Pixbuf = value;
                     return;
                 }
-                
+
                 image.Pixbuf = value.ScaleSimple(pixbuf_size, pixbuf_size,
                     Gdk.InterpType.Bilinear);
             }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/TileView.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/TileView.cs
index b602885..6c922db 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/TileView.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/TileView.cs
@@ -26,7 +26,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Collections.Generic;
 
@@ -45,7 +45,7 @@ namespace Banshee.Widgets
         public TileView(int initialColumnCount) : base(null, null)
         {
             current_column_count = initialColumnCount;
-            
+
             Table table = new Table(1, 1, true);
 
             table.Show();
@@ -54,7 +54,7 @@ namespace Banshee.Widgets
 
             Show ();
         }
-        
+
         public void AddWidget(Widget widget)
         {
             widgets.Add(widget);
@@ -66,7 +66,7 @@ namespace Banshee.Widgets
             widgets.Remove(widget);
             LayoutTableDefault(cached_tables[0], widgets);
         }
-        
+
         public void ClearWidgets()
         {
             widgets.Clear();
@@ -76,7 +76,7 @@ namespace Banshee.Widgets
         protected override void OnSizeAllocated(Gdk.Rectangle allocation)
         {
             Widget child = null;
-            
+
             if(Children != null && Children.Length > 0) {
                 child = Children[0];
             }
@@ -86,10 +86,10 @@ namespace Banshee.Widgets
                 SetSize((uint)allocation.Width, (uint)allocation.Height);
                 return;
             }
-            
+
             if(cached_tables.Count == 0) {
                 base.OnSizeAllocated(allocation);
-                
+
                 Gdk.Rectangle child_allocation;
                 child_allocation.X = 0;
                 child_allocation.Y = 0;
@@ -100,16 +100,16 @@ namespace Banshee.Widgets
                 SetSize((uint)child_allocation.Width, (uint)child_allocation.Height);
                 return;
             }
-            
+
             Table first_table = cached_tables[0];
             int usable_area = allocation.Width - (child.Requisition.Width - first_table.Requisition.Width);
             int new_column_count = RelayoutTablesIfNeeded(usable_area, current_column_count);
-            
+
             if(current_column_count != new_column_count) {
                 child.SizeRequest();
                 current_column_count = new_column_count;
             }
-            
+
             base.OnSizeAllocated(allocation);
             SetSizeRequest (child.Allocation.Width, child.Allocation.Height);
             SetSize ((uint)child.Allocation.Width, (uint)child.Allocation.Height);
@@ -120,38 +120,38 @@ namespace Banshee.Widgets
             if(widget.Children == null) {
                 return;
             }
-            
+
             while(widget.Children.Length > 0) {
                 widget.Remove(widget.Children[0]);
             }
         }
-        
+
         private void ResizeTable(Table table, int columns, IList<Widget> list)
         {
             RemoveContainerEntries(table);
-            
+
             double rows = (double)list.Count / (double)columns;
             double remainder = rows - (int)rows;
-            
+
             if(remainder != 0.0) {
                 rows++;
             }
-            
+
             if(rows > 0 && columns > 0) {
                 table.Resize((uint)rows, (uint)columns);
             }
         }
-        
+
         private void RelayoutTable(Table table, IList<Widget> widgets)
         {
             uint maxcols = table.NColumns;
             uint row = 0, col = 0;
-            
+
             foreach(Widget widget in widgets) {
                 table.Attach(widget, col, col + 1, row, row + 1,
                     AttachOptions.Expand | AttachOptions.Fill,
                     AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-                
+
                 if(++col == maxcols) {
                     col = 0;
                     row++;
@@ -164,7 +164,7 @@ namespace Banshee.Widgets
             ResizeTable(table, current_column_count, widgets);
             RelayoutTable(table, widgets);
         }
-        
+
         private void RelayoutTables(int columnCount)
         {
             foreach(Table table in cached_tables) {
@@ -197,12 +197,12 @@ namespace Banshee.Widgets
             if(column_count < 1) {
                 column_count = 1;
             }
-            
+
             if(currentColumnCount != column_count) {
                 RelayoutTables(column_count);
                 return column_count;
             }
-            
+
             return currentColumnCount;
         }
     }
diff --git a/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs b/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs
index 40d78c5..0a2663a 100644
--- a/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs
+++ b/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs
@@ -14,24 +14,24 @@
  *    Christian Persch <chpe gnome org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -50,18 +50,18 @@ namespace Bacon
     public class VolumeButton : Button
     {
         public delegate void VolumeChangedHandler(int volume);
-        
+
         private const int SCALE_SIZE = 100;
         private const int CLICK_TIMEOUT = 250;
-    
+
         private Tooltips tooltips = new Tooltips();
-        
+
         private Window dock;
         private VolumeScale slider;
         private Image image;
         private Button plus;
         private Button minus;
-        
+
         private IconSize size;
         private uint click_id;
         private int direction;
@@ -69,60 +69,60 @@ namespace Bacon
         private uint pop_time;
         private bool timeout;
         private bool classic;
-        
+
         private Gdk.Pixbuf [] pixbufs;
-        
+
         public event VolumeChangedHandler VolumeChanged;
-        
+
         public bool Classic {
             get { return classic; }
             set { classic = value; }
         }
-        
+
         public bool Active {
             get { return dock == null ? false : dock.Visible; }
         }
-        
+
         public VolumeButton() : this(0.0, 100.0, 5.0, IconSize.SmallToolbar)
         {
         }
-        
+
         public VolumeButton(double min, double max, double step, IconSize size) : base()
         {
             this.size = size;
-            
+
             BuildButton();
             BuildPopup(min, max, step);
             Accessible.Name = Catalog.GetString ("Volume");
-            
+
             WidgetEventAfter += OnWidgetEventAfter;
         }
-        
+
         public override void Dispose()
         {
             if(dock != null) {
                 dock.Destroy();
                 dock = null;
             }
-            
+
             if(click_id != 0) {
                 GLib.Source.Remove(click_id);
                 click_id = 0;
             }
-            
+
             base.Dispose();
         }
-        
+
         private void BuildButton()
         {
             FocusOnClick = false;
             Relief = ReliefStyle.None;
-            
+
             image = new Image();
             image.Show();
             Add(image);
         }
-        
+
         private void BuildPopup(double min, double max, double step)
         {
             dock = new Window(WindowType.Popup);
@@ -132,7 +132,7 @@ namespace Bacon
             dock.KeyReleaseEvent += OnDockKeyReleaseEvent;
             dock.ScrollEvent += OnPlusMinusScollEvent;
             dock.Hidden += OnDockHidden;
-            
+
             Frame frame = new Frame();
             frame.Shadow = ShadowType.Out;
             frame.Show();
@@ -170,10 +170,10 @@ namespace Bacon
             minus.ScrollEvent += OnPlusMinusScollEvent;
             minus.ShowAll();
             box.PackEnd(minus, false, true, 0);
-            
+
             Show();
         }
-        
+
         protected virtual void OnVolumeChanged()
         {
             VolumeChangedHandler handler = VolumeChanged;
@@ -181,7 +181,7 @@ namespace Bacon
                 handler(Volume);
             }
         }
-        
+
         private bool ShowDock(Gdk.Event evnt)
         {
             Adjustment adj = slider.Adjustment;
@@ -192,7 +192,7 @@ namespace Bacon
             if(previous_volume != (int)slider.Adjustment.Lower) {
                 previous_volume = Volume;
             }
-            
+
             if(evnt is Gdk.EventKey) {
                 event_time = ((Gdk.EventKey)evnt).Time;
             } else if(evnt is Gdk.EventButton) {
@@ -202,18 +202,18 @@ namespace Bacon
             } else {
                 throw new ApplicationException("ShowDock expects EventKey, EventButton, or EventScroll");
             }
-  
+
             if(classic) {
                 dock.Realize();
             }
-            
+
             dock.Screen = Screen;
-            
+
             GdkWindow.GetOrigin(out x, out y);
             x += Allocation.X;
-            
+
             v = Volume / (adj.Upper - adj.Lower);
-            
+
             if(classic) {
                 dock.Move(x + (Allocation.Width - dock.Allocation.Width) / 2, y - dock.Allocation.Height);
                 dock.ShowAll();
@@ -221,80 +221,80 @@ namespace Bacon
                 State = StateType.Active;
             } else {
                 y += Allocation.Y;
-                
+
                 dock.Move(x, y - (SCALE_SIZE / 2));
                 dock.ShowAll();
-                
+
                 dock.GdkWindow.GetOrigin(out dx, out dy);
                 dy += dock.Allocation.Y;
-                
+
                 slider.GdkWindow.GetOrigin(out sx, out sy);
                 sy += slider.Allocation.Y;
                 ystartoff = sy - dy;
-                
+
                 timeout = true;
-                
+
                 x += (Allocation.Width - dock.Allocation.Width) / 2;
                 y -= ystartoff;
                 y -= slider.MinSliderSize / 2;
                 m = slider.Allocation.Height - slider.MinSliderSize;
                 y -= (int)(m * (1.0 - v));
-                
+
                 if(evnt is Gdk.EventButton) {
                     y += (int)((Gdk.EventButton)evnt).Y;
                 } else if(evnt is Gdk.EventScroll) {
                     y += (int)((Gdk.EventScroll)evnt).Y;
                 }
-                
+
                 dock.Move(x, y);
                 slider.GdkWindow.GetOrigin(out sx, out sy);
             }
-            
-            bool base_result = !classic && evnt is Gdk.EventButton 
-                ? base.OnButtonPressEvent((Gdk.EventButton)evnt) 
+
+            bool base_result = !classic && evnt is Gdk.EventButton
+                ? base.OnButtonPressEvent((Gdk.EventButton)evnt)
                 : true;
-            
+
             Gtk.Grab.Add(dock);
-            
-            if(Gdk.Pointer.Grab(dock.GdkWindow, true, 
-                Gdk.EventMask.ButtonPressMask | 
-                Gdk.EventMask.ButtonReleaseMask | 
+
+            if(Gdk.Pointer.Grab(dock.GdkWindow, true,
+                Gdk.EventMask.ButtonPressMask |
+                Gdk.EventMask.ButtonReleaseMask |
                 Gdk.EventMask.PointerMotionMask, null, null, event_time) != Gdk.GrabStatus.Success) {
                 Gtk.Grab.Remove(dock);
                 dock.Hide();
                 return false;
             }
-            
+
             if(Gdk.Keyboard.Grab(dock.GdkWindow, true, event_time) != Gdk.GrabStatus.Success) {
                 Display.PointerUngrab(event_time);
                 Gtk.Grab.Remove(dock);
                 dock.Hide();
                 return false;
             }
-            
+
             if(!classic && evnt is Gdk.EventButton) {
                 dock.GrabFocus();
-            
+
                 Gdk.EventButton evnt_copy = (Gdk.EventButton)Gdk.EventHelper.Copy(evnt);
                 m = slider.Allocation.Height - slider.MinSliderSize;
-                UpdateEventButton(evnt_copy, slider.GdkWindow, slider.Allocation.Width / 2, 
+                UpdateEventButton(evnt_copy, slider.GdkWindow, slider.Allocation.Width / 2,
                     ((1.0 - v) * m) + slider.MinSliderSize / 2);
                 slider.ProcessEvent(evnt_copy);
                 Gdk.EventHelper.Free(evnt_copy);
             } else {
                 slider.GrabFocus();
             }
-                   
+
             pop_time = event_time;
-            
+
             return base_result;
         }
-        
+
         protected override bool OnButtonPressEvent(Gdk.EventButton evnt)
         {
             return ShowDock(evnt);
         }
-        
+
         protected override bool OnKeyReleaseEvent(Gdk.EventKey evnt)
         {
             switch(evnt.Key) {
@@ -306,7 +306,7 @@ namespace Bacon
                     return false;
             }
         }
-        
+
         protected override bool OnKeyPressEvent(Gdk.EventKey evnt)
         {
             switch(evnt.Key) {
@@ -326,26 +326,26 @@ namespace Bacon
                 default:
                     break;
             }
-            
+
             return false;
         }
-        
+
         // FIXME: There's no g_signal_stop_emission* binding:
         // http://bugzilla.ximian.com/show_bug.cgi?id=76416
-        
+
         [DllImport("libgobject-2.0-0.dll")]
         private static extern void g_signal_stop_emission_by_name(IntPtr o, string signal);
-        
+
         // In case there's no map provided by the assembly .config file
         [DllImport("libgobject-2.0-0.dll", EntryPoint="g_signal_stop_emission_by_name")]
         private static extern void g_signal_stop_emission_by_name_fallback(IntPtr o, string signal);
-            
+
         private void OnWidgetEventAfter(object o, WidgetEventAfterArgs args)
         {
             if(args.Event.Type != Gdk.EventType.Scroll) {
                 return;
             }
-            
+
             try {
                 g_signal_stop_emission_by_name(Handle, "event-after");
             } catch(DllNotFoundException) {
@@ -353,33 +353,33 @@ namespace Bacon
                 g_signal_stop_emission_by_name_fallback(Handle, "event-after");
             }
         }
-        
+
         protected override bool OnScrollEvent(Gdk.EventScroll evnt)
         {
             if(evnt.Type != Gdk.EventType.Scroll) {
                 return false;
             }
-            
+
             if(evnt.Direction == Gdk.ScrollDirection.Up) {
                 AdjustVolume(1);
             } else if(evnt.Direction == Gdk.ScrollDirection.Down) {
                 AdjustVolume(-1);
             }
-            
+
             return true;
         }
-        
+
         protected override void OnStyleSet(Style previous)
         {
             base.OnStyleSet(previous);
             LoadIcons();
         }
-        
+
         private void OnDockKeyPressEvent(object o, KeyPressEventArgs args)
         {
             args.RetVal = args.Event.Key == Gdk.Key.Escape;
         }
-        
+
         private void OnDockKeyReleaseEvent(object o, KeyReleaseEventArgs args)
         {
             if(args.Event.Key == Gdk.Key.Escape) {
@@ -391,16 +391,16 @@ namespace Bacon
                 args.RetVal = true;
                 return;
             }
-            
+
             args.RetVal = false;
         }
-        
+
         private void OnDockHidden(object o, EventArgs args)
         {
             State = StateType.Normal;
             Relief = ReliefStyle.None;
         }
-        
+
         private void OnDockButtonPressEvent(object o, ButtonPressEventArgs args)
         {
             if(args.Event.Type == Gdk.EventType.ButtonPress) {
@@ -408,41 +408,41 @@ namespace Bacon
                 args.RetVal = true;
                 return;
             }
-            
+
             args.RetVal = false;
         }
-        
+
         private bool PlusMinusButtonTimeout()
         {
             if(click_id == 0) {
                 return false;
             }
-            
+
             bool result = AdjustVolume(direction);
-            
+
             if(!result) {
                 GLib.Source.Remove(click_id);
                 click_id = 0;
             }
-            
+
             return result;
         }
-        
+
         [GLib.ConnectBefore]
         private void OnPlusMinusButtonPressEvent(object o, ButtonPressEventArgs args)
         {
             if(click_id != 0) {
                 GLib.Source.Remove(click_id);
             }
-            
+
             direction = o == minus ? -1 : 1;
-            
+
             click_id = GLib.Timeout.Add(CLICK_TIMEOUT / 2, PlusMinusButtonTimeout);
             PlusMinusButtonTimeout();
-            
+
             args.RetVal = true;
         }
-        
+
         [GLib.ConnectBefore]
         private void OnPlusMinusButtonReleaseEvent(object o, ButtonReleaseEventArgs args)
         {
@@ -451,7 +451,7 @@ namespace Bacon
                 click_id = 0;
             }
         }
-        
+
         [GLib.ConnectBefore]
         private void OnPlusMinusScollEvent(object o, ScrollEventArgs args)
         {
@@ -461,11 +461,11 @@ namespace Bacon
                 AdjustVolume(-1);
             }
         }
-        
+
         private void ReleaseGrab(Gdk.Event evnt)
-        {       
+        {
             uint event_time;
-                 
+
             if(evnt is Gdk.EventKey) {
                 event_time = ((Gdk.EventKey)evnt).Time;
             } else if(evnt is Gdk.EventButton) {
@@ -473,14 +473,14 @@ namespace Bacon
             } else {
                 throw new ApplicationException("ShowDock expects EventKey or EventButton");
             }
-            
+
             Display.KeyboardUngrab(event_time);
             Display.PointerUngrab(event_time);
             Gtk.Grab.Remove(dock);
-            
+
             dock.Hide();
             timeout = false;
-            
+
             if(evnt is Gdk.EventButton) {
                 Gdk.EventButton evnt_copy = (Gdk.EventButton)Gdk.EventHelper.Copy(evnt);
                 UpdateEventButton(evnt_copy, GdkWindow, Gdk.EventType.ButtonRelease);
@@ -488,10 +488,10 @@ namespace Bacon
                 Gdk.EventHelper.Free(evnt_copy);
             }
         }
-        
+
         private void LoadIcons()
         {
-            string [,] icon_names = { 
+            string [,] icon_names = {
                 { "audio-volume-muted",  "stock_volume-0"   },
                 { "audio-volume-low",    "stock_volume-min" },
                 { "audio-volume-medium", "stock_volume-med" },
@@ -501,18 +501,18 @@ namespace Bacon
             int width, height;
             Icon.SizeLookup(size, out width, out height);
             IconTheme theme = IconTheme.GetForScreen(Screen);
-            
+
             if(pixbufs == null) {
                 pixbufs = new Gdk.Pixbuf[icon_names.Length / icon_names.Rank];
             }
-            
+
             for(int i = 0; i < icon_names.Length / icon_names.Rank; i++) {
                 for(int j = 0; j < icon_names.Rank; j++) {
                     if(pixbufs[i] != null) {
                         pixbufs[i].Dispose();
                         pixbufs[i] = null;
                     }
-                    
+
                     try {
                         pixbufs[i] = theme.LoadIcon(icon_names[i, j], width, 0);
                         break;
@@ -520,30 +520,30 @@ namespace Bacon
                     }
                 }
             }
-            
+
             Update();
         }
-        
+
         private void Update()
         {
             UpdateIcon();
             UpdateTip();
         }
-        
+
         private void UpdateIcon()
         {
             if(slider == null || pixbufs == null) {
                 return;
             }
-            
+
             double step = (slider.Adjustment.Upper - slider.Adjustment.Lower - 1) / (pixbufs.Length - 1);
             image.Pixbuf = pixbufs[(int)Math.Ceiling((Volume - 1) / step)];
         }
-        
+
         private void UpdateTip()
         {
             string tip;
-            
+
             if(Volume == slider.Adjustment.Lower) {
                 tip = Catalog.GetString("Muted");
             } else if(Volume == slider.Adjustment.Upper) {
@@ -552,14 +552,14 @@ namespace Bacon
                 tip = String.Format("{0}%", (int)((Volume - slider.Adjustment.Lower) /
                     (slider.Adjustment.Upper - slider.Adjustment.Lower) * 100.0));
             }
-            
+
             tooltips.SetTip(this, tip, null);
         }
-        
-        private bool AdjustVolume(int direction) 
+
+        private bool AdjustVolume(int direction)
         {
             Adjustment adj = slider.Adjustment;
-            
+
             double temp_vol = Volume + direction * adj.StepIncrement;
             temp_vol = Math.Min(adj.Upper, temp_vol);
             temp_vol = Math.Max(adj.Lower, temp_vol);
@@ -568,7 +568,7 @@ namespace Bacon
 
             return Volume > adj.Lower && Volume < adj.Upper;
         }
-        
+
         public void ToggleMute()
         {
             if(Volume == (int)slider.Adjustment.Lower) {
@@ -578,47 +578,47 @@ namespace Bacon
                 Volume = (int)slider.Adjustment.Lower;
             }
         }
-        
+
         public int Volume {
             get { return (int)slider.Value; }
-            set { 
-                slider.Value = value; 
+            set {
+                slider.Value = value;
                 Update();
             }
         }
-        
+
         // FIXME: This is seriously LAME. The Gtk# binding does not support mutating
         // Gdk.Event* objects. All the properties are marked read only. Support for
         // these objects is simply incomplete.
         // http://bugzilla.ximian.com/show_bug.cgi?id=80685
-        
+
         private void UpdateEventButton(Gdk.EventButton evnt, Gdk.Window window, Gdk.EventType type)
         {
             Marshal.WriteInt32(evnt.Handle, 0, (int)type);
             UpdateEventButtonWindow(evnt, window);
         }
-        
+
         private void UpdateEventButton(Gdk.EventButton evnt, Gdk.Window window, double x, double y)
         {
             int x_offset = IntPtr.Size * 2 + 8;
-       
-            UpdateEventButtonWindow(evnt, window);                    
+
+            UpdateEventButtonWindow(evnt, window);
             MarshalWriteDouble(evnt.Handle, x_offset, x);
             MarshalWriteDouble(evnt.Handle, x_offset + 8, y);
         }
-    
+
         private void UpdateEventButtonWindow(Gdk.EventButton evnt, Gdk.Window window)
         {
             // FIXME: GLib.Object.Ref is obsolete because it's low level and shouldn't
             // be exposed, but it was in 1.x, and it's not going to go away, so this is OK.
-            
+
             #pragma warning disable 0612
             window.Ref();
             #pragma warning restore 0612
-            
+
             Marshal.WriteIntPtr(evnt.Handle, IntPtr.Size, window.Handle);
         }
-    
+
         private void MarshalWriteDouble(IntPtr ptr, int offset, double value)
         {
             byte [] bytes = BitConverter.GetBytes(value);
@@ -631,30 +631,30 @@ namespace Bacon
         {
             Console.Error.WriteLine("* WARNING *: Provide a DLL Map for libgobject-2.0-0.dll");
         }
-            
+
         private class VolumeScale : VScale
         {
             private VolumeButton button;
-            
+
             public VolumeScale(VolumeButton button, double min, double max, double step)
                 : base(new Adjustment(min, min, max, step, 10 * step, 0))
             {
                 this.button = button;
             }
-            
+
             protected override void OnValueChanged()
             {
                 base.OnValueChanged();
                 button.Update();
                 button.OnVolumeChanged();
             }
-            
+
             protected override bool OnButtonPressEvent(Gdk.EventButton evnt)
             {
                 Gtk.Grab.Remove(button.dock);
                 return base.OnButtonPressEvent(evnt);
             }
-            
+
             protected override bool OnButtonReleaseEvent(Gdk.EventButton evnt)
             {
                 if(button.timeout) {
@@ -662,17 +662,17 @@ namespace Bacon
                         button.ReleaseGrab(evnt);
                         return base.OnButtonReleaseEvent(evnt);
                     }
-                    
+
                     button.timeout = false;
                 }
-            
+
                 bool result = base.OnButtonReleaseEvent(evnt);
-                
+
                 Gtk.Grab.Add(button.dock);
-                
+
                 return result;
             }
-            
+
             protected override bool OnKeyReleaseEvent(Gdk.EventKey evnt)
             {
                 switch(evnt.Key) {
@@ -682,18 +682,18 @@ namespace Bacon
                         button.ReleaseGrab(evnt);
                         break;
                 }
-            
+
                 return base.OnKeyReleaseEvent(evnt);
             }
-            
+
             // FIXME: This is also seriously LAME. The MinSliderSize property is "protected"
-            // according to gtkrange.h, and thus should be exposed and accessible through 
+            // according to gtkrange.h, and thus should be exposed and accessible through
             // this sub-class, but GAPI does not bind protected structure fields. LAME LAME.
             // http://bugzilla.ximian.com/show_bug.cgi?id=80684
-            
+
             [DllImport("libgobject-2.0-0.dll")]
             private static extern void g_type_query(IntPtr type, IntPtr query);
-            
+
             // In case there's no map provided by the assembly .config file
             [DllImport("libgobject-2.0-0.dll", EntryPoint="g_type_query")]
             private static extern void g_type_query_fallback(IntPtr type, IntPtr query);
@@ -701,20 +701,20 @@ namespace Bacon
             private int min_slider_size_offset = -1;
 
             public int MinSliderSize {
-                get { 
+                get {
                     if(min_slider_size_offset < 0) {
                         IntPtr query = Marshal.AllocHGlobal(5 * IntPtr.Size);
-                        
+
                         try {
                             g_type_query(Gtk.Widget.GType.Val, query);
                         } catch(DllNotFoundException) {
                             button.WarnGObjectMap();
                             g_type_query_fallback(Gtk.Widget.GType.Val, query);
                         }
-                        
-                        min_slider_size_offset = (int)Marshal.ReadIntPtr(query, 2 * IntPtr.Size + 4); 
+
+                        min_slider_size_offset = (int)Marshal.ReadIntPtr(query, 2 * IntPtr.Size + 4);
                         min_slider_size_offset += IntPtr.Size + 8;
-                            
+
                         Marshal.FreeHGlobal(query);
                     }
 
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/DatabaseRebuilder.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/DatabaseRebuilder.cs
index 53ad203..72dcb71 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/DatabaseRebuilder.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/DatabaseRebuilder.cs
@@ -49,7 +49,7 @@ namespace Banshee.Dap.Ipod
             public string Path;
             public TagLib.File File;
         }
-        
+
         private class FileContainerComparer : IComparer<FileContainer>
         {
             public int Compare (FileContainer a, FileContainer b)
@@ -58,25 +58,25 @@ namespace Banshee.Dap.Ipod
                 if (artist != 0) {
                     return artist;
                 }
-                
+
                 int album = String.Compare (a.File.Tag.Album, b.File.Tag.Album);
                 if (album != 0) {
                     return album;
                 }
-                
+
                 int at = (int)a.File.Tag.Track;
                 int bt = (int)b.File.Tag.Track;
-                
+
                 if (at == bt) {
                     return 0;
                 } else if (at < bt) {
                     return -1;
                 }
-                
+
                 return 1;
             }
         }
-    
+
         private IpodSource source;
         private UserJob user_job;
         private Queue<FileInfo> song_queue = new Queue<FileInfo>();
@@ -88,7 +88,7 @@ namespace Banshee.Dap.Ipod
         public DatabaseRebuilder (IpodSource source)
         {
             this.source = source;
-            
+
             user_job = new UserJob (Catalog.GetString ("Rebuilding Database"));
             user_job.PriorityHints = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
             user_job.SetResources (Resource.Disk, Resource.Cpu);
@@ -97,78 +97,78 @@ namespace Banshee.Dap.Ipod
             user_job.IconNames = source._GetIconNames ();
             user_job.CanCancel = true;
             user_job.Register ();
-            
+
             ThreadPool.QueueUserWorkItem (RebuildDatabase);
         }
-        
+
         private void RebuildDatabase (object state)
         {
             string music_path = Paths.Combine (source.IpodDevice.ControlPath, "Music");
-            
+
             Directory.CreateDirectory (source.IpodDevice.ControlPath);
             Directory.CreateDirectory (music_path);
-        
+
             DirectoryInfo music_dir = new DirectoryInfo (music_path);
-                
+
             foreach (DirectoryInfo directory in music_dir.GetDirectories ()) {
                 ScanMusicDirectory (directory);
             }
-            
+
             ProcessTrackQueue ();
         }
-        
+
         private void ScanMusicDirectory (DirectoryInfo directory)
         {
             foreach (FileInfo file in directory.GetFiles ()) {
                 song_queue.Enqueue (file);
             }
         }
-        
+
         private void ProcessTrackQueue ()
         {
             discovery_count = song_queue.Count;
-            
+
             user_job.Status = Catalog.GetString ("Processing Tracks...");
-            
+
             while (song_queue.Count > 0) {
                 user_job.Progress = (double)(discovery_count - song_queue.Count) / (double)discovery_count;
-                
+
                 try {
                     ProcessTrack (song_queue.Dequeue ());
                 } catch {
                 }
-                
+
                 if (user_job.IsCancelRequested) {
                     break;
                 }
             }
-            
+
             user_job.Progress = 0.0;
             user_job.Status = Catalog.GetString ("Ordering Tracks...");
-            
+
             files.Sort (new FileContainerComparer ());
-            
+
             foreach (FileContainer container in files) {
                 try {
                     ProcessTrack (container);
                 } catch {
                 }
-                
+
                 if (user_job.IsCancelRequested) {
                     break;
                 }
             }
-            
+
             if (!user_job.IsCancelRequested) {
                 SaveDatabase ();
             }
-            
+
             user_job.Finish ();
             user_job = null;
-            
+
             OnFinished ();
         }
-        
+
         private void ProcessTrack (FileInfo file)
         {
             TagLib.File af = Banshee.IO.DemuxVfs.OpenFile (file.FullName);
@@ -177,7 +177,7 @@ namespace Banshee.Dap.Ipod
             container.Path = file.FullName;
             files.Add (container);
         }
-        
+
         private void ProcessTrack (FileContainer container)
         {
             TagLib.File af = container.File;
@@ -198,26 +198,26 @@ namespace Banshee.Dap.Ipod
             if ((af.Properties.MediaTypes & TagLib.MediaTypes.Video) != 0) {
                 song.Type = MediaType.Video;
             }
-            
+
             ResolveCoverArt (song);
         }
-        
+
         private void ResolveCoverArt (Track track)
         {
             string aaid = CoverArtSpec.CreateArtistAlbumId (track.Artist, track.Album);
             string path = CoverArtSpec.GetPath (aaid);
-            
+
             if (File.Exists (path)) {
                 IpodTrackInfo.SetIpodCoverArt (source.IpodDevice, track, path);
             }
         }
-        
+
         private void SaveDatabase ()
         {
             user_job.CanCancel = false;
             user_job.Status = Catalog.GetString ("Saving new database...");
             user_job.Progress = 0.0;
-            
+
             try {
                 source.IpodDevice.Name = source.Name;
                 source.IpodDevice.TrackDatabase.Save ();
@@ -230,7 +230,7 @@ namespace Banshee.Dap.Ipod
                 Log.Error (Catalog.GetString ("Error rebuilding iPod database"), e.Message);
             }
         }
-        
+
         protected virtual void OnFinished ()
         {
             ThreadAssist.ProxyToMain (delegate {
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
index ea13d0f..4ccdafb 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
@@ -54,28 +54,28 @@ namespace Banshee.Dap.Ipod
         internal PodSleuthDevice IpodDevice {
             get { return ipod_device; }
         }
-        
+
         private Dictionary<int, IpodTrackInfo> tracks_map = new Dictionary<int, IpodTrackInfo> (); // FIXME: EPIC FAIL
         private bool database_loaded;
-        
+
         private string name_path;
         internal string NamePath {
             get { return name_path; }
         }
-        
+
         private bool database_supported;
         internal bool DatabaseSupported {
             get { return database_supported; }
         }
-        
+
         private UnsupportedDatabaseView unsupported_view;
-        
+
 #region Device Setup/Dispose
-        
+
         public override void DeviceInitialize (IDevice device)
         {
             base.DeviceInitialize (device);
-            
+
             ipod_device = device as PodSleuthDevice;
             if (ipod_device == null) {
                 throw new InvalidDeviceException ();
@@ -129,10 +129,10 @@ namespace Banshee.Dap.Ipod
             if (ipod_device.CanEject) {
                 ipod_device.Eject ();
             }
-            
+
             Dispose ();
         }
-        
+
         protected override bool CanHandleDeviceCommand (DeviceCommand command)
         {
             try {
@@ -142,11 +142,11 @@ namespace Banshee.Dap.Ipod
                 return false;
             }
         }
-        
+
         protected override IDeviceMediaCapabilities MediaCapabilities {
             get { return ipod_device.Parent.MediaCapabilities ?? base.MediaCapabilities; }
         }
-        
+
 #endregion
 
 #region Database Loading
@@ -162,9 +162,9 @@ namespace Banshee.Dap.Ipod
         private void LoadIpod ()
         {
             database_supported = false;
-            
+
             try {
-                if (File.Exists (ipod_device.TrackDatabasePath)) { 
+                if (File.Exists (ipod_device.TrackDatabasePath)) {
                     ipod_device.LoadTrackDatabase (false);
                 } else {
                     int count = CountMusicFiles ();
@@ -178,7 +178,7 @@ namespace Banshee.Dap.Ipod
             } catch (DatabaseReadException e) {
                 Log.Exception ("Could not read iPod database", e);
                 ipod_device.LoadTrackDatabase (true);
-                
+
                 ThreadAssist.ProxyToMain (delegate {
                     DestroyUnsupportedView ();
                     unsupported_view = new UnsupportedDatabaseView (this);
@@ -188,39 +188,39 @@ namespace Banshee.Dap.Ipod
             } catch (Exception e) {
                 Log.Exception (e);
             }
-            
+
             database_loaded = true;
 
             Name = GetDeviceName ();
         }
-        
+
         private int CountMusicFiles ()
         {
             try {
                 int file_count = 0;
-                
+
                 DirectoryInfo m_dir = new DirectoryInfo (Path.Combine (ipod_device.ControlPath, "Music"));
                 foreach (DirectoryInfo f_dir in m_dir.GetDirectories ()) {
                     file_count += f_dir.GetFiles().Length;
                 }
-                
+
                 return file_count;
             } catch {
                 return 0;
             }
         }
-        
+
         private void LoadFromDevice (bool refresh)
         {
             // bool previous_database_supported = database_supported;
-            
+
             if (refresh) {
                 ipod_device.TrackDatabase.Reload ();
             }
-            
+
             tracks_map.Clear ();
 
-            if (database_supported || (ipod_device.HasTrackDatabase && 
+            if (database_supported || (ipod_device.HasTrackDatabase &&
                 ipod_device.ModelInfo.DeviceClass == "shuffle")) {
                 foreach (Track ipod_track in ipod_device.TrackDatabase.Tracks) {
                     try {
@@ -251,22 +251,22 @@ namespace Banshee.Dap.Ipod
                     AddChildSource (pl_src);
                 }
             }
-            
+
             /*else {
                 BuildDatabaseUnsupportedWidget ();
             }*/
-            
+
             /*if(previous_database_supported != database_supported) {
                 OnPropertiesChanged();
             }*/
         }
-        
+
         private void OnRebuildDatabaseRefresh (object o, EventArgs args)
         {
             ServiceManager.SourceManager.SetActiveSource (MusicGroupSource);
             base.LoadDeviceContents ();
         }
-        
+
         private void DestroyUnsupportedView ()
         {
             if (unsupported_view != null) {
@@ -275,7 +275,7 @@ namespace Banshee.Dap.Ipod
                 unsupported_view = null;
             }
         }
-        
+
 #endregion
 
 #region Source Cosmetics
@@ -290,23 +290,23 @@ namespace Banshee.Dap.Ipod
             string [] names = new string[4];
             string prefix = "multimedia-player-";
             string shell_color = ipod_device.ModelInfo.ShellColor;
-            
+
             names[0] = ipod_device.ModelInfo.IconName;
             names[2] = "ipod-standard-color";
             names[3] = "multimedia-player";
-            
+
             switch (ipod_device.ModelInfo.DeviceClass) {
-                case "grayscale": 
+                case "grayscale":
                     names[1] = "ipod-standard-monochrome";
                     break;
-                case "color": 
-                    names[1] = "ipod-standard-color"; 
+                case "color":
+                    names[1] = "ipod-standard-color";
                     break;
-                case "mini": 
+                case "mini":
                     names[1] = String.Format ("ipod-mini-{0}", shell_color);
                     names[2] = "ipod-mini-silver";
                     break;
-                case "shuffle": 
+                case "shuffle":
                     names[1] = String.Format ("ipod-shuffle-{0}", shell_color);
                     names[2] = "ipod-shuffle";
                     break;
@@ -325,25 +325,25 @@ namespace Banshee.Dap.Ipod
                 default:
                     break;
             }
-            
+
             names[1] = names[1] ?? names[2];
             names[1] = prefix + names[1];
             names[2] = prefix + names[2];
-            
+
             return names;
         }
-        
+
         public override void Rename (string name)
         {
             if (!CanRename) {
                 return;
             }
-        
+
             try {
                 if (name_path != null) {
                     Directory.CreateDirectory (Path.GetDirectoryName (name_path));
-                
-                    using (StreamWriter writer = new StreamWriter (File.Open (name_path, FileMode.Create), 
+
+                    using (StreamWriter writer = new StreamWriter (File.Open (name_path, FileMode.Create),
                         System.Text.Encoding.Unicode)) {
                         writer.Write (name);
                     }
@@ -351,11 +351,11 @@ namespace Banshee.Dap.Ipod
             } catch (Exception e) {
                 Log.Exception (e);
             }
-            
+
             ipod_device.Name = name;
             base.Rename (name);
         }
-        
+
         private string GetDeviceName ()
         {
             string name = null;
@@ -364,11 +364,11 @@ namespace Banshee.Dap.Ipod
                     name = reader.ReadLine ();
                 }
             }
-            
+
             if (String.IsNullOrEmpty (name) && database_loaded && database_supported) {
                 name = ipod_device.Name;
             }
-                
+
             if (!String.IsNullOrEmpty (name)) {
                 return name;
             } else if (ipod_device.PropertyExists ("volume.label")) {
@@ -378,22 +378,22 @@ namespace Banshee.Dap.Ipod
             } else {
                 name = ((IDevice)ipod_device).Name ?? "iPod";
             }
-            
+
             return name;
         }
-        
+
         public override bool CanRename {
             get { return !(IsAdding || IsDeleting || IsReadOnly); }
         }
-        
+
         public override long BytesUsed {
             get { return (long)ipod_device.VolumeInfo.SpaceUsed; }
         }
-        
+
         public override long BytesCapacity {
             get { return (long)ipod_device.VolumeInfo.Size; }
         }
-        
+
 #endregion
 
 #region Syncing
@@ -413,10 +413,10 @@ namespace Banshee.Dap.Ipod
             }
             base.OnTracksDeleted ();
         }
-        
+
         private Queue<IpodTrackInfo> tracks_to_add = new Queue<IpodTrackInfo> ();
         private Queue<IpodTrackInfo> tracks_to_remove = new Queue<IpodTrackInfo> ();
-        
+
         private uint sync_timeout_id = 0;
         private object sync_timeout_mutex = new object ();
         private object sync_mutex = new object ();
@@ -427,7 +427,7 @@ namespace Banshee.Dap.Ipod
         public override bool IsReadOnly {
             get { return ipod_device.IsReadOnly || !database_supported; }
         }
-        
+
         public override void Import ()
         {
             Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (Path.Combine (ipod_device.ControlPath, "Music"));
@@ -444,28 +444,28 @@ namespace Banshee.Dap.Ipod
                 if (!tracks_map.ContainsKey (track.TrackId)) {
                     return true;
                 }
-                
+
                 IpodTrackInfo ipod_track = tracks_map[track.TrackId];
                 if (ipod_track != null) {
                     tracks_to_remove.Enqueue (ipod_track);
                 }
-                
+
                 return true;
             }
         }
-        
+
         protected override void AddTrackToDevice (DatabaseTrackInfo track, SafeUri fromUri)
         {
             lock (sync_mutex) {
                 if (track.PrimarySourceId == DbId) {
                     return;
                 }
-                
+
                 IpodTrackInfo ipod_track = new IpodTrackInfo (track);
                 ipod_track.Uri = fromUri;
                 ipod_track.PrimarySource = this;
                 ipod_track.Save (false);
-            
+
                 tracks_to_add.Enqueue (ipod_track);
             }
         }
@@ -484,11 +484,11 @@ namespace Banshee.Dap.Ipod
                 if (sync_timeout_id > 0) {
                     Application.IdleTimeoutRemove (sync_timeout_id);
                 }
-                
+
                 sync_timeout_id = Application.RunTimeout (150, PerformSync);
             }
         }
-        
+
         private void CancelSyncThread ()
         {
             Thread thread = sync_thread;
@@ -503,30 +503,30 @@ namespace Banshee.Dap.Ipod
                 thread.Join ();
             }
         }
-        
+
         private bool PerformSync ()
         {
             lock (sync_mutex) {
                 if (sync_thread == null) {
                     sync_thread_wait = new AutoResetEvent (false);
-                
+
                     sync_thread = new Thread (new ThreadStart (PerformSyncThread));
                     sync_thread.Name = "iPod Sync Thread";
                     sync_thread.IsBackground = false;
                     sync_thread.Priority = ThreadPriority.Lowest;
                     sync_thread.Start ();
                 }
-                
+
                 sync_thread_wait.Set ();
-                
+
                 lock (sync_timeout_mutex) {
                     sync_timeout_id = 0;
                 }
-                
+
                 return false;
             }
         }
-        
+
         private void PerformSyncThread ()
         {
             try {
@@ -535,10 +535,10 @@ namespace Banshee.Dap.Ipod
                     if (sync_thread_dispose) {
                         break;
                     }
-                    
+
                     PerformSyncThreadCycle ();
                 }
-                
+
                 lock (sync_mutex) {
                     sync_thread_dispose = false;
                     sync_thread_wait.Close ();
@@ -549,7 +549,7 @@ namespace Banshee.Dap.Ipod
                 Log.Exception (e);
             }
         }
-        
+
         private void PerformSyncThreadCycle ()
         {
             while (tracks_to_add.Count > 0) {
@@ -557,7 +557,7 @@ namespace Banshee.Dap.Ipod
                 lock (sync_mutex) {
                     track = tracks_to_add.Dequeue ();
                 }
-                
+
                 try {
                     track.CommitToIpod (ipod_device);
                     tracks_map[track.TrackId] = track;
@@ -567,17 +567,17 @@ namespace Banshee.Dap.Ipod
             }
 
             // TODO sync updated metadata to changed tracks
-            
+
             while (tracks_to_remove.Count > 0) {
                 IpodTrackInfo track = null;
                 lock (sync_mutex) {
                     track = tracks_to_remove.Dequeue ();
                 }
-                
+
                 if (tracks_map.ContainsKey (track.TrackId)) {
                     tracks_map.Remove (track.TrackId);
                 }
-                
+
                 try {
                     if (track.IpodTrack != null) {
                         ipod_device.TrackDatabase.RemoveTrack (track.IpodTrack);
@@ -595,7 +595,7 @@ namespace Banshee.Dap.Ipod
                 }
             }
             device_playlists.Clear ();
-            
+
             if (SupportsPlaylists) {
                 // Add playlists from Banshee to the device
                 foreach (Source child in Children) {
@@ -611,7 +611,7 @@ namespace Banshee.Dap.Ipod
                     }
                 }
             }
-    
+
             try {
                 ipod_device.TrackDatabase.SaveStarted += OnIpodDatabaseSaveStarted;
                 ipod_device.TrackDatabase.SaveEnded += OnIpodDatabaseSaveEnded;
@@ -629,21 +629,21 @@ namespace Banshee.Dap.Ipod
         }
 
         private UserJob sync_user_job;
-        
+
         private void OnIpodDatabaseSaveStarted (object o, EventArgs args)
         {
             DisposeSyncUserJob ();
-            
-            sync_user_job = new UserJob (Catalog.GetString ("Syncing iPod"), 
+
+            sync_user_job = new UserJob (Catalog.GetString ("Syncing iPod"),
                 Catalog.GetString ("Preparing to synchronize..."), GetIconNames ());
             sync_user_job.Register ();
         }
-        
+
         private void OnIpodDatabaseSaveEnded (object o, EventArgs args)
         {
             DisposeSyncUserJob ();
         }
-        
+
         private void DisposeSyncUserJob ()
         {
             if (sync_user_job != null) {
@@ -651,14 +651,14 @@ namespace Banshee.Dap.Ipod
                 sync_user_job = null;
             }
         }
-        
+
         private void OnIpodDatabaseSaveProgressChanged (object o, IPod.TrackSaveProgressArgs args)
         {
             double progress = args.CurrentTrack == null ? 0.0 : args.TotalProgress;
-            string message = args.CurrentTrack == null 
+            string message = args.CurrentTrack == null
                     ? Catalog.GetString ("Updating...")
                     : String.Format ("{0} - {1}", args.CurrentTrack.Artist, args.CurrentTrack.Title);
-             
+
              if (progress >= 0.99) {
                  sync_user_job.Status = Catalog.GetString ("Flushing to disk...");
                  sync_user_job.Progress = 0;
@@ -667,7 +667,7 @@ namespace Banshee.Dap.Ipod
                  sync_user_job.Progress = progress;
              }
         }
-        
+
         public bool SyncNeeded {
             get {
                 lock (sync_mutex) {
@@ -677,6 +677,6 @@ namespace Banshee.Dap.Ipod
         }
 
 #endregion
-        
+
     }
 }
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
index 5a875a4..289e6cc 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
@@ -36,14 +36,14 @@ using Banshee.Collection.Database;
 using Hyena;
 
 namespace Banshee.Dap.Ipod
-{   
+{
     public class IpodTrackInfo : DatabaseTrackInfo
     {
         private IPod.Track track;
         internal IPod.Track IpodTrack {
             get { return track; }
         }
-        
+
         private int ipod_id;
         internal int IpodId {
             get { return ipod_id; }
@@ -51,14 +51,14 @@ namespace Banshee.Dap.Ipod
 
         // Used for podcasts only
         private string description;
-        
+
         public IpodTrackInfo (IPod.Track track) : base ()
         {
             this.track = track;
             LoadFromIpodTrack ();
             CanSaveToDatabase = true;
         }
-        
+
         public IpodTrackInfo (TrackInfo track)
         {
             if (track is IpodTrackInfo) {
@@ -100,21 +100,21 @@ namespace Banshee.Dap.Ipod
                     ReleaseDate = podcast_info.ReleaseDate;
                 }
             }
-            
+
             CanSaveToDatabase = true;
         }
-        
+
         private void LoadFromIpodTrack ()
         {
             try {
                 Uri = new SafeUri (track.Uri.LocalPath);
-            } catch { 
+            } catch {
                 Uri = null;
             }
 
             ExternalId = track.Id;
             ipod_id = (int)track.Id;
-            
+
             AlbumArtist = track.AlbumArtist;
             AlbumTitle = String.IsNullOrEmpty (track.Album) ? null : track.Album;
             ArtistName = String.IsNullOrEmpty (track.Artist) ? null : track.Artist;
@@ -138,23 +138,23 @@ namespace Banshee.Dap.Ipod
             Year = track.Year;
             description = track.Description;
             ReleaseDate = track.DateReleased;
-            
+
             switch (track.Rating) {
                 case IPod.TrackRating.One:   rating = 1; break;
                 case IPod.TrackRating.Two:   rating = 2; break;
                 case IPod.TrackRating.Three: rating = 3; break;
                 case IPod.TrackRating.Four:  rating = 4; break;
                 case IPod.TrackRating.Five:  rating = 5; break;
-                case IPod.TrackRating.Zero: 
+                case IPod.TrackRating.Zero:
                 default:                     rating = 0; break;
             }
-            
+
             if (track.IsProtected) {
                 PlaybackError = StreamPlaybackError.Drm;
             }
-            
+
             MediaAttributes = TrackMediaAttributes.AudioStream;
-            
+
             switch (track.Type) {
                 case IPod.MediaType.Audio:
                     MediaAttributes |= TrackMediaAttributes.Music;
@@ -184,7 +184,7 @@ namespace Banshee.Dap.Ipod
                     break;
             }
         }
-        
+
         public void CommitToIpod (IPod.Device device)
         {
             track = track ?? device.TrackDatabase.CreateTrack ();
@@ -196,7 +196,7 @@ namespace Banshee.Dap.Ipod
                 Log.Exception ("Failed to create System.Uri for iPod track", e);
                 device.TrackDatabase.RemoveTrack (track);
             }
-            
+
             track.AlbumArtist = AlbumArtist;
             track.BitRate = BitRate;
             track.BPM = (short)Bpm;
@@ -215,12 +215,12 @@ namespace Banshee.Dap.Ipod
             track.TrackNumber = TrackNumber;
             track.Year = Year;
             track.DateReleased = ReleaseDate;
-            
+
             track.Album = AlbumTitle;
             track.Artist = ArtistName;
             track.Title = TrackTitle;
             track.Genre = Genre;
-            
+
             switch (Rating) {
                 case 1: track.Rating = IPod.TrackRating.Zero; break;
                 case 2: track.Rating = IPod.TrackRating.Two; break;
@@ -260,13 +260,13 @@ namespace Banshee.Dap.Ipod
                     track.Type = IPod.MediaType.Audio;
                 }
             }
-            
+
             if (CoverArtSpec.CoverExists (ArtworkId)) {
                 SetIpodCoverArt (device, track, CoverArtSpec.GetPath (ArtworkId));
             }
         }
-        
-        // FIXME: No reason for this to use GdkPixbuf - the file is on disk already in 
+
+        // FIXME: No reason for this to use GdkPixbuf - the file is on disk already in
         // the artwork cache as a JPEG, so just shove the bytes from disk into the track
         public static void SetIpodCoverArt (IPod.Device device, IPod.Track track, string path)
         {
@@ -278,11 +278,11 @@ namespace Banshee.Dap.Ipod
                         if (pixbuf == null) {
                             pixbuf = new Gdk.Pixbuf (path);
                         }
-                        
+
                         track.SetCoverArt (format, IPod.ArtworkHelpers.ToBytes (format, pixbuf));
                     }
                 }
-                
+
                 if (pixbuf != null) {
                     pixbuf.Dispose ();
                 }
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDevice.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDevice.cs
index 3e85582..26b974c 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDevice.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDevice.cs
@@ -51,72 +51,72 @@ namespace Banshee.Dap.Ipod
                 Year = volume.GetPropertyInteger (PodsleuthPrefix + "production.year");
             }
         }
-        
+
         private class _VolumeInfo : IPod.VolumeInfo
         {
             private IVolume volume;
-            
+
             public _VolumeInfo (IVolume volume)
             {
                 this.volume = volume;
-                
+
                 MountPoint = volume.GetPropertyString ("volume.mount_point");
                 Label = volume.GetPropertyString ("volume.label");
                 IsMountedReadOnly = volume.GetPropertyBoolean ("volume.is_mounted_read_only");
                 Uuid = volume.GetPropertyString ("volume.uuid");
             }
-            
+
             public override ulong Size {
                 get { return volume.Capacity; }
             }
-        
+
             public override ulong SpaceUsed {
                 get { return volume.Capacity - (ulong)volume.Available; }
             }
         }
-        
+
         private class _ModelInfo : IPod.ModelInfo
         {
             public _ModelInfo (IVolume volume)
             {
                 AdvertisedCapacity = GetVolumeSizeString (volume);
-                
+
                 IsUnknown = true;
                 if (volume.PropertyExists (PodsleuthPrefix + "is_unknown")) {
                     IsUnknown = volume.GetPropertyBoolean (PodsleuthPrefix + "is_unknown");
                 }
-                
+
                 if (volume.PropertyExists (PodsleuthPrefix + "images.album_art_supported")) {
                     AlbumArtSupported = volume.GetPropertyBoolean (PodsleuthPrefix + "images.album_art_supported");
                 }
-                
+
                 if (volume.PropertyExists (PodsleuthPrefix + "images.photos_supported")) {
                     PhotosSupported = volume.GetPropertyBoolean (PodsleuthPrefix + "images.photos_supported");
                 }
-                
+
                 if (volume.PropertyExists (PodsleuthPrefix + "model.device_class")) {
                     DeviceClass = volume.GetPropertyString (PodsleuthPrefix + "model.device_class");
                 }
-                
+
                 if (volume.PropertyExists (PodsleuthPrefix + "model.generation")) {
                     Generation = volume.GetPropertyDouble (PodsleuthPrefix + "model.generation");
                 }
-                
+
                 if (volume.PropertyExists (PodsleuthPrefix + "model.shell_color")) {
                     ShellColor = volume.GetPropertyString (PodsleuthPrefix + "model.shell_color");
                 }
-                
+
                 if (volume.PropertyExists ("info.icon_name")) {
                     IconName = volume.GetPropertyString ("info.icon_name");
                 }
-                
+
                 if (volume.PropertyExists (PodsleuthPrefix + "capabilities")) {
                     foreach (string capability in volume.GetPropertyStringList (PodsleuthPrefix + "capabilities")) {
                         AddCapability (capability);
                     }
                 }
             }
-            
+
             private static string GetVolumeSizeString (IVolume volume)
             {
                 string format = "GiB";
@@ -130,42 +130,42 @@ namespace Banshee.Dap.Ipod
                 return String.Format ("{0} {1}", (int)Math.Round (value), format);
             }
         }
-        
+
         private IVolume volume;
-        
+
         private IPod.ProductionInfo production_info;
         private IPod.VolumeInfo volume_info;
         private IPod.ModelInfo model_info;
-        
+
         public override IPod.ProductionInfo ProductionInfo {
             get { return production_info; }
         }
-        
+
         public override IPod.VolumeInfo VolumeInfo {
             get { return volume_info; }
         }
-        
+
         public override IPod.ModelInfo ModelInfo {
             get { return model_info; }
         }
 
-        internal PodSleuthDevice (IVolume volume) 
+        internal PodSleuthDevice (IVolume volume)
         {
             this.volume = volume;
 
             volume_info = new _VolumeInfo (volume);
             production_info = new _ProductionInfo (volume);
             model_info = new _ModelInfo (volume);
-            
+
             if (volume.PropertyExists (PodsleuthPrefix + "control_path")) {
                 string relative_control = volume.GetPropertyString (PodsleuthPrefix + "control_path");
                 if (relative_control[0] == Path.DirectorySeparatorChar) {
                     relative_control = relative_control.Substring (1);
                 }
-                
+
                 ControlPath = Path.Combine(VolumeInfo.MountPoint, relative_control);
             }
-            
+
             ArtworkFormats = new ReadOnlyCollection<ArtworkFormat> (LoadArtworkFormats ());
 
             if (volume.PropertyExists (PodsleuthPrefix + "firmware_version")) {
@@ -175,27 +175,27 @@ namespace Banshee.Dap.Ipod
             if (volume.PropertyExists (PodsleuthPrefix + "firewire_id")) {
                 FirewireId = volume.GetPropertyString (PodsleuthPrefix + "firewire_id");
             }
-            
+
             RescanDisk ();
         }
-        
+
         public override void Eject ()
         {
             volume.Eject ();
         }
-        
-        public override void RescanDisk () 
+
+        public override void RescanDisk ()
         {
         }
 
-        private List<ArtworkFormat> LoadArtworkFormats () 
+        private List<ArtworkFormat> LoadArtworkFormats ()
         {
             List<ArtworkFormat> formats = new List<ArtworkFormat> ();
 
             if (!ModelInfo.AlbumArtSupported) {
                 return formats;
             }
-            
+
             string [] formatList = volume.GetPropertyStringList (PodsleuthPrefix + "images.formats");
 
             foreach (string formatStr in formatList) {
@@ -210,13 +210,13 @@ namespace Banshee.Dap.Ipod
                 pformat = PixelFormat.Unknown;
 
                 string[] pairs = formatStr.Split(',');
-                
+
                 foreach (string pair in pairs) {
                     string[] splitPair = pair.Split('=');
                     if (splitPair.Length != 2) {
                         continue;
                     }
-                    
+
                     string value = splitPair[1];
                     switch (splitPair[0]) {
                         case "corr_id": correlationId = Int16.Parse (value); break;
@@ -261,7 +261,7 @@ namespace Banshee.Dap.Ipod
         {
             volume.Unmount ();
         }
-        
+
         public string Uuid {
             get { return volume.Uuid; }
         }
@@ -356,12 +356,12 @@ namespace Banshee.Dap.Ipod
         {
             return volume.GetPropertyStringList (key);
         }
-        
+
         public IUsbDevice ResolveRootUsbDevice ()
         {
             return volume.ResolveRootUsbDevice ();
         }
-        
+
 #endregion
 
     }
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs
index 5925fe9..42a0e3b 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs
@@ -38,26 +38,26 @@ namespace Banshee.Dap.Ipod
         {
             IDiskDevice disk_device = device as IDiskDevice;
             IVolume volume = device as IVolume;
-            
+
             if (volume != null && CheckStorageCaps (volume.Parent) && CheckVolume (volume)) {
                 return AsPodSleuthDevice<T> (volume, device);
             } else if (disk_device == null || !CheckStorageCaps (device)) {
                 return device;
             }
-            
+
             foreach (IVolume child_volume in disk_device.Volumes) {
                 if (CheckVolume (child_volume)) {
                     return AsPodSleuthDevice<T> (child_volume, device);
                 }
             }
-            
+
             return device;
         }
-        
+
         public void Dispose ()
         {
         }
-        
+
         private T AsPodSleuthDevice<T> (IVolume volume, T original)
         {
             try {
@@ -67,12 +67,12 @@ namespace Banshee.Dap.Ipod
                 return original;
             }
         }
-        
+
         private bool CheckStorageCaps (IDevice device)
         {
             return device != null && device.MediaCapabilities != null && device.MediaCapabilities.IsType ("ipod");
         }
-        
+
         private bool CheckVolume (IVolume volume)
         {
             return volume.PropertyExists ("org.podsleuth.version");
diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/UnsupportedDatabaseView.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/UnsupportedDatabaseView.cs
index e231ef2..cde763b 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/UnsupportedDatabaseView.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/UnsupportedDatabaseView.cs
@@ -45,53 +45,53 @@ namespace Banshee.Dap.Ipod
         private MessagePane pane;
         private bool info_link_clicked = false;
         private IpodSource source;
-        
+
         public event EventHandler Refresh;
-        
+
         public UnsupportedDatabaseView (IpodSource source) : base (source)
         {
             this.source = source;
-            
+
             pane = new MessagePane();
             pane.HeaderIcon = IconThemeUtils.LoadIcon(48, "face-surprise", Stock.DialogError);
             pane.ArrowIcon = IconThemeUtils.LoadIcon(24, "go-next", Stock.GoForward);
-            pane.HeaderMarkup = String.Format("<big><b>{0}</b></big>", 
+            pane.HeaderMarkup = String.Format("<big><b>{0}</b></big>",
                 GLib.Markup.EscapeText(Catalog.GetString("Unable to read your iPod")));
-                
+
             AddPaneItems();
-            
+
             Add(pane);
             ShowAll ();
         }
-        
+
         private void AddPaneItems()
         {
             if(info_link_clicked) {
                 bool file_exists = System.IO.File.Exists (Paths.Combine (
                     source.IpodDevice.ControlPath, "iTunes", "iTunesDB"));
-                
+
                 if(file_exists) {
                     pane.Append(Catalog.GetString(
                         "You have used this iPod with a version of iTunes that saves a " +
                         "version of the song database for your iPod that is too new " +
                         "for Banshee to recognize.\n\n" +
-                        
+
                         "Banshee can rebuild your database, but some settings might be lost. " +
                         "Using Banshee and iTunes with the same iPod is not recommended."
                     ));
-                    
+
                     LinkLabel link = new LinkLabel();
                     link.Xalign = 0.0f;
                     link.Markup = String.Format("<u>{0}</u>", GLib.Markup.EscapeText(Catalog.GetString(
                         "Learn more about Banshee's iPod support")));
-                    
+
                     link.Clicked += delegate { Banshee.Web.Browser.Open ("http://banshee-project.org/IpodAndItunes";); };
-                    
+
                     link.Show();
                     pane.Append(link, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, true);
                 } else {
                     pane.Append(Catalog.GetString(
-                        "An iPod database could not be found on this device.\n\n" + 
+                        "An iPod database could not be found on this device.\n\n" +
                         "Banshee can build a new database for you."
                     ));
                 }
@@ -100,36 +100,36 @@ namespace Banshee.Dap.Ipod
                 link.Xalign = 0.0f;
                 link.Markup = String.Format("<u>{0}</u>", GLib.Markup.EscapeText(Catalog.GetString(
                     "What is the reason for this?")));
-                    
+
                 link.Clicked += delegate {
                     info_link_clicked = true;
                     pane.Clear();
                     AddPaneItems();
                 };
-                
+
                 link.Show();
                 pane.Append(link, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, true);
             }
-            
+
             if(source.IpodDevice.VolumeInfo.IsMountedReadOnly) {
-                pane.Append(Catalog.GetString("Your iPod is mounted read only. Banshee can not restore your iPod."), 
+                pane.Append(Catalog.GetString("Your iPod is mounted read only. Banshee can not restore your iPod."),
                     true, IconThemeUtils.LoadIcon(48, "dialog-error"));
                 return;
             }
-            
+
             LinkLabel rebuild_link = new LinkLabel();
             rebuild_link.Xalign = 0.0f;
             rebuild_link.Markup = String.Format("<u>{0}</u>", GLib.Markup.EscapeText(Catalog.GetString(
                 "Rebuild iPod Database...")));
-            rebuild_link.Clicked += OnRebuildDatabase; 
+            rebuild_link.Clicked += OnRebuildDatabase;
             rebuild_link.Show();
             pane.Append(rebuild_link, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, true);
         }
-        
+
         private void OnRebuildDatabase(object o, EventArgs args)
         {
             string title = Catalog.GetString("Confirm Rebuild iPod Database");
-            HigMessageDialog md = new HigMessageDialog(null, 
+            HigMessageDialog md = new HigMessageDialog(null,
                 DialogFlags.DestroyWithParent, MessageType.Question,
                 ButtonsType.Cancel,
                 title,
@@ -139,19 +139,19 @@ namespace Banshee.Dap.Ipod
                     "Are you sure you want to rebuild your iPod database?"));
             md.Title = title;
             md.AddButton(Catalog.GetString("Rebuild Database"), Gtk.ResponseType.Yes, true);
-            
+
             if(md.Run() != (int)ResponseType.Yes) {
                 md.Destroy();
                 return;
             }
-            
+
             md.Destroy();
-            
+
             pane.HeaderIcon = null;
             pane.HeaderMarkup = null;
 
             pane.Clear();
-            pane.Append(String.Format("<big><b>{0}</b></big>", 
+            pane.Append(String.Format("<big><b>{0}</b></big>",
                 GLib.Markup.EscapeText(Catalog.GetString("Rebuilding iPod Database..."))),
                 true, LargeIcon);
 
@@ -160,7 +160,7 @@ namespace Banshee.Dap.Ipod
                 OnRefresh ();
             };
         }
-        
+
         protected virtual void OnRefresh()
         {
             EventHandler handler = Refresh;
diff --git a/src/Dap/Banshee.Dap.Karma/Banshee.Dap.Karma/KarmaSource.cs b/src/Dap/Banshee.Dap.Karma/Banshee.Dap.Karma/KarmaSource.cs
index cd9fcad..50819bc 100644
--- a/src/Dap/Banshee.Dap.Karma/Banshee.Dap.Karma/KarmaSource.cs
+++ b/src/Dap/Banshee.Dap.Karma/Banshee.Dap.Karma/KarmaSource.cs
@@ -120,7 +120,7 @@ namespace Banshee.Dap.Karma
                 device.Save();
                 track_map.Remove(track.TrackId);
             }
-            
+
             return true;
         }
 
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs
index ca5e3a9..23bf5cf 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/AndroidDevice.cs
@@ -52,7 +52,7 @@ namespace Banshee.Dap.MassStorage
             "audio/3gpp",
             "audio/x-midi"
         };
-        
+
         private static string [] audio_folders = new string [] {
             "Music/",
             "amazonmp3/",
@@ -68,31 +68,31 @@ namespace Banshee.Dap.MassStorage
         };
 
         private static string playlists_path = "Playlists/";
-        
+
         private static string [] icon_names = new string [] {
             "phone-htc-g1-white", DapSource.FallbackIcon
         };
-        
+
         private AmazonMp3GroupSource amazon_source;
         private string amazon_base_dir;
-        
+
         public override void SourceInitialize ()
         {
             amazon_base_dir = System.IO.Path.Combine (Source.Volume.MountPoint, audio_folders[1]);
-            
+
             amazon_source = new AmazonMp3GroupSource (Source, "amazonmp3", amazon_base_dir);
             amazon_source.AutoHide = true;
         }
-        
+
         public override bool LoadDeviceConfiguration ()
         {
             return true;
         }
-        
+
         public override string Name {
             get { return VendorProductInfo.ProductName; }
         }
-        
+
         public override string [] AudioFolders {
             get { return audio_folders; }
         }
@@ -104,7 +104,7 @@ namespace Banshee.Dap.MassStorage
         public override string [] PlaylistFormats {
             get { return playlist_formats; }
         }
-        
+
         public override string PlaylistPath {
             get { return playlists_path; }
         }
@@ -112,32 +112,32 @@ namespace Banshee.Dap.MassStorage
         public override string [] PlaybackMimeTypes {
             get { return playback_mime_types; }
         }
-        
+
         // Cover art information gleaned from Android's Music application
         // packages/apps/Music/src/com/android/music/MusicUtils.java
         // <3 open source
-        
+
         public override int FolderDepth {
             get { return 2; }
         }
-        
+
         public override string CoverArtFileName {
             get { return "AlbumArt.jpg"; }
         }
-        
+
         public override string CoverArtFileType {
             get { return "jpeg"; }
         }
-        
+
         public override int CoverArtSize {
             get { return 320; }
         }
-        
-        public override string [] GetIconNames () 
+
+        public override string [] GetIconNames ()
         {
             return icon_names;
         }
-        
+
         public override bool GetTrackPath (TrackInfo track, out string path)
         {
             path = FileNamePattern.CreateFromTrackInfo (
@@ -145,28 +145,28 @@ namespace Banshee.Dap.MassStorage
                 track);
             return true;
         }
-        
+
 #region Amazon MP3 Store Purchased Tracks Management
 
         public override bool DeleteTrackHook (DatabaseTrackInfo track)
         {
             // Do not allow removing purchased tracks if not in the
             // Amazon Purchased Music source; this should prevent
-            // accidental deletion of purchased music that may not 
+            // accidental deletion of purchased music that may not
             // have been copied from the device yet.
             //
             // TODO: Provide some feedback when a purchased track is
             // skipped from deletion
             //
-            // FIXME: unfortunately this does not work due to 
+            // FIXME: unfortunately this does not work due to
             // the cache models being potentially different
             // even though they will always reference the same tracks
             // amazon_source.TrackModel.IndexOf (track) >= 0
-            
+
             if (!amazon_source.Active && amazon_source.Count > 0 && track.Uri.LocalPath.StartsWith (amazon_base_dir)) {
                 return false;
             }
-            
+
             return true;
         }
 
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/CustomMassStorageDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/CustomMassStorageDevice.cs
index 37182b5..1eb1df3 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/CustomMassStorageDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/CustomMassStorageDevice.cs
@@ -31,15 +31,15 @@ using System;
 using Banshee.Hardware;
 
 namespace Banshee.Dap.MassStorage
-{   
+{
     public class CustomMassStorageDevice : MassStorageDevice
-    {       
+    {
         private VendorProductInfo vendor_product_info;
         public VendorProductInfo VendorProductInfo {
             get { return vendor_product_info; }
             set { vendor_product_info = value; }
         }
-        
+
         public override string Name {
             get { return vendor_product_info.ProductName; }
         }
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/DeviceMapper.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/DeviceMapper.cs
index 043e877..4008a0f 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/DeviceMapper.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/DeviceMapper.cs
@@ -43,9 +43,9 @@ namespace Banshee.Dap.MassStorage
                 "/Banshee/Dap/MassStorage/Device")) {
                 short vendor_id = (short)u.VendorId;
                 short product_id = (short)u.ProductId;
-                
+
                 if (node.Matches (vendor_id, product_id)) {
-                    CustomMassStorageDevice device = (CustomMassStorageDevice)node.CreateInstance (); 
+                    CustomMassStorageDevice device = (CustomMassStorageDevice)node.CreateInstance ();
                     device.VendorProductInfo = new VendorProductInfo (
                         node.VendorName, node.ProductName,
                         vendor_id, product_id);
@@ -64,7 +64,7 @@ namespace Banshee.Dap.MassStorage
                     };
                 }
             }
-            
+
             return new MassStorageDevice (source);
         }
     }
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
index 1a1b91d..a4c8153 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
@@ -48,35 +48,35 @@ namespace Banshee.Dap.MassStorage
             get { return source; }
             set { source = value; }
         }
-        
+
         public MassStorageDevice ()
         {
         }
-        
+
         public MassStorageDevice (MassStorageSource source)
         {
             Source = source;
         }
-        
+
         public virtual void SourceInitialize ()
         {
         }
-        
+
         public virtual bool DeleteTrackHook (DatabaseTrackInfo track)
         {
             return true;
         }
-        
+
         public virtual bool LoadDeviceConfiguration ()
         {
             string path = IsAudioPlayerPath;
             string path_rockbox = System.IO.Path.Combine (source.Volume.MountPoint, ".rockbox/config.cfg");
             StreamReader reader = null;
-            
+
             if (!File.Exists (path) && !File.Exists (path_rockbox) ) {
                 return false;
             }
-            
+
             if (File.Exists (path_rockbox) ) {
                 Hyena.Log.DebugFormat ("Found RockBox Device");
                 name = Catalog.GetString ("Rockbox Device");
@@ -106,14 +106,14 @@ namespace Banshee.Dap.MassStorage
                                 case "output_formats": playback_mime_types = item.Value; break;
                                 case "playlist_format": playlist_formats = item.Value; break;
                                 case "playlist_path": playlist_path = item.Value[0]; break;
-                                case "folder_depth": 
+                                case "folder_depth":
                                     if (!Int32.TryParse (item.Value[0], out folder_depth)) {
                                         folder_depth = -1;
                                     }
                                     Hyena.Log.DebugFormat ("MassStorageDevice.LoadDeviceConfiguration {0}", folder_depth);
                                     break;
                                 default:
-                                    throw new ApplicationException ("unsupported key");    
+                                    throw new ApplicationException ("unsupported key");
                             }
                         } catch (Exception e) {
                             Log.Exception ("Invalid .is_audio_player item " + item.Key, e);
@@ -129,21 +129,21 @@ namespace Banshee.Dap.MassStorage
             }
 
             has_is_audio_player_file = true;
-            
+
             return true;
         }
-        
+
         public virtual bool GetTrackPath (TrackInfo track, out string path)
         {
             path = null;
             return false;
         }
-        
+
         private bool has_is_audio_player_file;
         public bool HasIsAudioPlayerFile {
             get { return has_is_audio_player_file; }
         }
-        
+
         private string IsAudioPlayerPath {
             get { return System.IO.Path.Combine (source.Volume.MountPoint, ".is_audio_player"); }
         }
@@ -152,61 +152,61 @@ namespace Banshee.Dap.MassStorage
         public virtual string Name {
             get { return name ?? source.Volume.Name; }
         }
-        
+
         private int cover_art_size;
-        public virtual int CoverArtSize { 
-            get { return cover_art_size; } 
+        public virtual int CoverArtSize {
+            get { return cover_art_size; }
         }
-        
+
         private int folder_depth = -1;
-        public virtual int FolderDepth { 
-            get { return folder_depth; } 
+        public virtual int FolderDepth {
+            get { return folder_depth; }
         }
-        
+
         private string [] audio_folders = new string[0];
-        public virtual string [] AudioFolders { 
-            get { return audio_folders; } 
+        public virtual string [] AudioFolders {
+            get { return audio_folders; }
         }
 
         private string [] video_folders = new string[0];
-        public virtual string [] VideoFolders { 
-            get { return video_folders; } 
+        public virtual string [] VideoFolders {
+            get { return video_folders; }
         }
-        
+
         private string cover_art_file_type;
-        public virtual string CoverArtFileType { 
-            get { return cover_art_file_type; } 
+        public virtual string CoverArtFileType {
+            get { return cover_art_file_type; }
         }
-        
+
         private string cover_art_file_name;
-        public virtual string CoverArtFileName { 
-            get { return cover_art_file_name; } 
+        public virtual string CoverArtFileName {
+            get { return cover_art_file_name; }
         }
-        
+
         private string [] playlist_formats;
-        public virtual string [] PlaylistFormats { 
-            get { return playlist_formats; } 
+        public virtual string [] PlaylistFormats {
+            get { return playlist_formats; }
         }
-        
+
         private string playlist_path;
-        public virtual string PlaylistPath { 
-            get { return playlist_path; } 
+        public virtual string PlaylistPath {
+            get { return playlist_path; }
         }
-        
+
         private string [] playback_mime_types;
-        public virtual string [] PlaybackMimeTypes { 
-            get { return playback_mime_types; } 
+        public virtual string [] PlaybackMimeTypes {
+            get { return playback_mime_types; }
         }
-        
+
         public virtual string DeviceType {
             get { return "mass-storage"; }
         }
-        
+
         public virtual string [] GetIconNames ()
         {
             return null;
         }
-        
+
         public bool IsType (string type)
         {
             return type == DeviceType;
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
index b00b145..8150950 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
@@ -50,9 +50,9 @@ namespace Banshee.Dap.MassStorage
 {
     public class MassStorageSource : DapSource
     {
-        private Banshee.Collection.Gui.ArtworkManager artwork_manager 
+        private Banshee.Collection.Gui.ArtworkManager artwork_manager
             = ServiceManager.Get<Banshee.Collection.Gui.ArtworkManager> ();
-        
+
         private MassStorageDevice ms_device;
         private IVolume volume;
         private IUsbDevice usb_device;
@@ -60,12 +60,12 @@ namespace Banshee.Dap.MassStorage
         public override void DeviceInitialize (IDevice device)
         {
             base.DeviceInitialize (device);
-            
+
             volume = device as IVolume;
             if (volume == null || (usb_device = volume.ResolveRootUsbDevice ()) == null) {
                 throw new InvalidDeviceException ();
             }
-            
+
             ms_device = DeviceMapper.Map (this);
             try {
                 if (!ms_device.LoadDeviceConfiguration ()) {
@@ -78,7 +78,7 @@ namespace Banshee.Dap.MassStorage
             if (!HasMediaCapabilities && ms_device == null) {
                 throw new InvalidDeviceException ();
             }
-            
+
             // Ignore iPods, except ones with .is_audio_player files
             if (MediaCapabilities != null && MediaCapabilities.IsType ("ipod")) {
                 if (ms_device != null && ms_device.HasIsAudioPlayerFile) {
@@ -96,11 +96,11 @@ namespace Banshee.Dap.MassStorage
             mount_point = volume.MountPoint;
 
             Initialize ();
-            
+
             if (ms_device != null) {
                 ms_device.SourceInitialize ();
             }
-            
+
             AddDapProperties ();
 
             // TODO differentiate between Audio Players and normal Disks, and include the size, eg "2GB Audio Player"?
@@ -203,7 +203,7 @@ namespace Banshee.Dap.MassStorage
         public IVolume Volume {
             get { return volume; }
         }
-        
+
         public IUsbDevice UsbDevice {
             get { return usb_device; }
         }
@@ -271,7 +271,7 @@ namespace Banshee.Dap.MassStorage
                         }
                     }
                 }
-                
+
                 SupportsPlaylists &= CanSyncPlaylists;
                 return playlist_types;
             }
@@ -335,11 +335,11 @@ namespace Banshee.Dap.MassStorage
             string [] names = ms_device != null ? ms_device.GetIconNames () : null;
             return names == null ? base.GetIconNames () : names;
         }
-        
+
         public override long BytesUsed {
             get { return BytesCapacity - volume.Available; }
         }
-        
+
         public override long BytesCapacity {
             get { return (long) volume.Capacity; }
         }
@@ -486,7 +486,7 @@ namespace Banshee.Dap.MassStorage
                 // and the MetadataHash will actually match.  We do this by comparing the time
                 // stamps on files for last update of the db metadata vs the sync to file.
                 // The equals on the inequality below is necessary for podcasts who often have a sync and
-                // update time that are the same to the second, even though the album metadata has changed in the 
+                // update time that are the same to the second, even though the album metadata has changed in the
                 // DB to the feedname instead of what is in the file.  It should be noted that writing the metadata
                 // is a small fraction of the total copy time anyway.
 
@@ -498,7 +498,7 @@ namespace Banshee.Dap.MassStorage
                 copied_track.Save (false);
             }
 
-            if (CoverArtSize > -1 && !String.IsNullOrEmpty (CoverArtFileType) && 
+            if (CoverArtSize > -1 && !String.IsNullOrEmpty (CoverArtFileType) &&
                     !String.IsNullOrEmpty (CoverArtFileName) && (FolderDepth == -1 || FolderDepth > 0)) {
                 SafeUri cover_uri = new SafeUri (System.IO.Path.Combine (System.IO.Path.GetDirectoryName (new_uri.LocalPath),
                                                                          CoverArtFileName));
@@ -507,13 +507,13 @@ namespace Banshee.Dap.MassStorage
                     coverart_id = String.Format ("podcast-{0}", Banshee.Base.CoverArtSpec.EscapePart (track.AlbumTitle));
                 } else {
                     coverart_id = track.ArtworkId;
-                }                
-                
-                if (!File.Exists (cover_uri) && CoverArtSpec.CoverExists (coverart_id)) {       
+                }
+
+                if (!File.Exists (cover_uri) && CoverArtSpec.CoverExists (coverart_id)) {
                     Gdk.Pixbuf pic = null;
-                    
+
                     if (CoverArtSize == 0) {
-                        if (CoverArtFileType == "jpg" || CoverArtFileType == "jpeg") {                        
+                        if (CoverArtFileType == "jpg" || CoverArtFileType == "jpeg") {
                             SafeUri local_cover_uri = new SafeUri (Banshee.Base.CoverArtSpec.GetPath (coverart_id));
                             Banshee.IO.File.Copy (local_cover_uri, cover_uri, false);
                         } else {
@@ -524,7 +524,7 @@ namespace Banshee.Dap.MassStorage
                     }
 
                     if (pic != null) {
-                        try {                        
+                        try {
                             byte [] bytes = pic.SaveToBuffer (CoverArtFileType);
                             System.IO.Stream cover_art_file = File.OpenWrite (cover_uri, true);
                             cover_art_file.Write (bytes, 0, bytes.Length);
@@ -545,11 +545,11 @@ namespace Banshee.Dap.MassStorage
                 if (ms_device != null && !ms_device.DeleteTrackHook (track)) {
                     return false;
                 }
-            
+
                 string track_file = System.IO.Path.GetFileName (track.Uri.LocalPath);
                 string track_dir = System.IO.Path.GetDirectoryName (track.Uri.LocalPath);
                 int files = 0;
-                
+
                 // Count how many files remain in the track's directory,
                 // excluding self or cover art
                 foreach (string file in System.IO.Directory.GetFiles (track_dir)) {
@@ -558,18 +558,18 @@ namespace Banshee.Dap.MassStorage
                         files++;
                     }
                 }
-                
+
                 // If we are the last track, go ahead and delete the artwork
                 // to ensure that the directory tree can get trimmed away too
                 if (files == 0 && CoverArtFileName != null) {
                     System.IO.File.Delete (Paths.Combine (track_dir, CoverArtFileName));
                 }
-                
+
                 Banshee.IO.Utilities.DeleteFileTrimmingParentDirectories (track.Uri);
             } catch (System.IO.FileNotFoundException) {
             } catch (System.IO.DirectoryNotFoundException) {
             }
-            
+
             return true;
         }
 
@@ -584,7 +584,7 @@ namespace Banshee.Dap.MassStorage
                 volume.Eject ();
             }
         }
-        
+
         protected override bool CanHandleDeviceCommand (DeviceCommand command)
         {
             try {
@@ -617,7 +617,7 @@ namespace Banshee.Dap.MassStorage
                     string track_album  = FileNamePattern.Escape (track.DisplayAlbumTitle);
                     string track_number = FileNamePattern.Escape (Convert.ToString (track.TrackNumber));
                     string track_title  = FileNamePattern.Escape (track.DisplayTrackTitle);
-    
+
                     if (depth == 0) {
                         // Artist - Album - 01 - Title
                         string track_artist = FileNamePattern.Escape (track.DisplayArtistName);
@@ -638,10 +638,10 @@ namespace Banshee.Dap.MassStorage
                                 file_path = album_artist.Substring (0, Math.Min (i+1, album_artist.Length)).Trim ();
                             } else {
                                 file_path = System.IO.Path.Combine (file_path, album_artist.Substring (0, Math.Min (i+1, album_artist.Length)).Trim ());
-                            }                                        
-                            
+                            }
+
                         }
-    
+
                         // Finally add on the Artist/Album/01 - Track
                         file_path = System.IO.Path.Combine (file_path, album_artist);
                         file_path = System.IO.Path.Combine (file_path, track_album);
@@ -651,14 +651,14 @@ namespace Banshee.Dap.MassStorage
                     file_path = FileNamePattern.CreateFromTrackInfo (track);
                 }
             }
-            
+
             if (track.HasAttribute (TrackMediaAttributes.VideoStream)) {
               file_path = System.IO.Path.Combine (WritePathVideo, file_path);
             } else {
               file_path = System.IO.Path.Combine (WritePath, file_path);
             }
             file_path += ext;
-            
+
             return file_path;
         }
     }
diff --git a/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs b/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
index 87cd88e..560f11f 100644
--- a/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
+++ b/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
@@ -67,7 +67,7 @@ namespace Banshee.Dap.Mtp
         public override void DeviceInitialize (IDevice device)
         {
             base.DeviceInitialize (device);
-            
+
             if (MediaCapabilities == null || !MediaCapabilities.IsType ("mtp")) {
                 throw new InvalidDeviceException ();
             }
@@ -244,7 +244,7 @@ namespace Banshee.Dap.Mtp
                     playlist.Remove ();
                 }
                 device_playlists.Clear ();
-    
+
                 // Add playlists from Banshee to the device
                 foreach (Source child in Children) {
                     PlaylistSource from = child as PlaylistSource;
@@ -308,7 +308,7 @@ namespace Banshee.Dap.Mtp
                 return bytes_used;
             }
         }
-        
+
         private long bytes_capacity;
         public override long BytesCapacity {
             get {
@@ -412,7 +412,7 @@ namespace Banshee.Dap.Mtp
                         album_cache.Remove (key);
                     }
                 }
-                
+
                 return true;
             }
         }
diff --git a/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpTrackInfo.cs b/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpTrackInfo.cs
index eb90d24..8932d0f 100644
--- a/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpTrackInfo.cs
+++ b/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpTrackInfo.cs
@@ -5,28 +5,28 @@
  *  Written by Patrick van Staveren (trick vanstaveren us)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
-using System; 
+using System;
 using System.IO;
 
 using Banshee.Base;
@@ -42,7 +42,7 @@ namespace Banshee.Dap.Mtp
     public class MtpTrackInfo : DatabaseTrackInfo
     {
         private Track file;
-        
+
         public Track OriginalFile {
             get { return file; }
         }
@@ -51,12 +51,12 @@ namespace Banshee.Dap.Mtp
         {
             return String.Format ("mtp://{0}/{1}", track.FileId, track.FileName);
         }
-        
+
         public MtpTrackInfo (MtpDevice device, Track file) : base()
         {
             this.file = file;
             ExternalId = file.FileId;
-            
+
             AlbumTitle = file.Album;
             ArtistName = file.Artist;
             Duration = TimeSpan.FromMilliseconds (file.Duration);
@@ -75,7 +75,7 @@ namespace Banshee.Dap.Mtp
                 SetAttributeIf (file.InFolder (device.MusicFolder), TrackMediaAttributes.Music);
                 SetAttributeIf (file.InFolder (device.VideoFolder), TrackMediaAttributes.VideoStream);
             }
-            
+
             // This can be implemented if there's enough people requesting it
             CanPlay = false;
             CanSaveToDatabase = true;
diff --git a/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/Tests/MtpDapTests.cs b/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/Tests/MtpDapTests.cs
index f4f8b9e..0cc4540 100644
--- a/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/Tests/MtpDapTests.cs
+++ b/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/Tests/MtpDapTests.cs
@@ -36,7 +36,7 @@ using Mtp;
 
 using Banshee.Collection;
 using Banshee.Dap.Mtp;
-    
+
 namespace Banshee.Dap.Mtp
 {
     [TestFixture]
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapActions.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapActions.cs
index dc696b9..17b775f 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapActions.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapActions.cs
@@ -52,7 +52,7 @@ namespace Banshee.Dap.Gui
             );
 
             AddUiFromFile ("GlobalUI.xml");
-            
+
             this["SyncDapAction"].IconName = Stock.Refresh;
             ServiceManager.SourceManager.ActiveSourceChanged += OnActiveSourceChanged;
             Actions.SourceActions.Updated += delegate { UpdateActions (); };
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs
index 08498aa..8a5765f 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapContent.cs
@@ -44,7 +44,7 @@ namespace Banshee.Dap.Gui
     {
         private Label title;
         private DapSource dap;
-        
+
         // Ugh, this is to avoid the GLib.MissingIntPtrCtorException seen by some; BGO #552169
         protected DapContent (IntPtr ptr) : base (ptr)
         {
@@ -62,25 +62,25 @@ namespace Banshee.Dap.Gui
         {
             HBox split_box = new HBox ();
             VBox content_box = new VBox ();
-            
+
             content_box.BorderWidth = 5;
-            
+
             title = new Label ();
             SetTitleText (dap.Name);
             title.Xalign = 0.0f;
-            
+
             Banshee.Preferences.Gui.NotebookPage properties = new Banshee.Preferences.Gui.NotebookPage (dap.Preferences);
             properties.BorderWidth = 0;
-            
+
             content_box.PackStart (title, false, false, 0);
             content_box.PackStart (properties, false, false, 0);
-            
+
             Image image = new Image (LargeIcon);
             image.Yalign = 0.0f;
-            
+
             split_box.PackStart (image, false, true, 0);
             split_box.PackEnd (content_box, true, true, 0);
-            
+
             Add (split_box);
             ShowAll ();
         }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapInfoBar.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapInfoBar.cs
index 19994fe..6fd148e 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapInfoBar.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapInfoBar.cs
@@ -40,45 +40,45 @@ namespace Banshee.Dap.Gui
         private DapSource source;
         private SegmentedBar disk_bar;
         private Alignment disk_bar_align;
-        
+
         public DapInfoBar (DapSource source)
         {
             this.source = source;
             source.Updated += OnSourceUpdated;
-            
+
             BuildWidget ();
         }
-        
+
         protected override void OnDestroyed ()
         {
             base.OnDestroyed ();
             source.Updated -= OnSourceUpdated;
             source = null;
         }
-        
+
         private void BuildWidget ()
         {
             HBox box = new HBox ();
-            
+
             disk_bar_align = new Alignment (0.5f, 0.5f, 1.0f, 1.0f);
             disk_bar = new SegmentedBar ();
             disk_bar.ValueFormatter = DapValueFormatter;
-            
+
             disk_bar.AddSegmentRgb (Catalog.GetString ("Audio"), 0, 0x3465a4);
             disk_bar.AddSegmentRgb (Catalog.GetString ("Video"), 0, 0x73d216);
             disk_bar.AddSegmentRgb (Catalog.GetString ("Other"), 0, 0xf57900);
             disk_bar.AddSegment (Catalog.GetString ("Free Space"), 0, disk_bar.RemainderColor, false);
-            
+
             UpdateUsage ();
 
             disk_bar_align.Add (disk_bar);
 
             box.PackStart (disk_bar_align, true, true, 0);
             disk_bar_align.TopPadding = 6;
-            
+
             Add (box);
             box.ShowAll ();
-            
+
             SizeAllocated += delegate (object o, Gtk.SizeAllocatedArgs args) {
                 SetBackground ();
                 disk_bar.HorizontalPadding = (int)(args.Allocation.Width * 0.25);
@@ -92,11 +92,11 @@ namespace Banshee.Dap.Gui
             }
 
             long size = (long)(source.BytesCapacity * segment.Percent);
-            return size <= 0 
+            return size <= 0
                 ? Catalog.GetString ("None")
                 : new Hyena.Query.FileSizeQueryValue (size).ToUserQuery ();
         }
-        
+
         private void OnSourceUpdated (object o, EventArgs args)
         {
             if (source.Sync.Syncing)
@@ -110,18 +110,18 @@ namespace Banshee.Dap.Gui
                 }
             });
         }
-        
+
         protected override void OnStyleSet (Style previous_style)
         {
             base.OnStyleSet (previous_style);
             SetBackground ();
         }
-        
+
         private void SetBackground ()
         {
             Cairo.Color light = CairoExtensions.GdkColorToCairoColor (Style.Background (StateType.Normal));
             Cairo.Color dark = CairoExtensions.ColorShade (light, 0.85);
-            
+
             Cairo.LinearGradient grad = new Cairo.LinearGradient (0, Allocation.Y, 0, Allocation.Y + Allocation.Height);
             grad.AddColorStop (0, dark);
             grad.AddColorStop (1, light);
@@ -132,7 +132,7 @@ namespace Banshee.Dap.Gui
         {
             long data = source.BytesUsed - source.BytesMusic - source.BytesVideo;
             double cap = (double)source.BytesCapacity;
-        
+
             disk_bar.UpdateSegment (0, source.BytesMusic / cap);
             disk_bar.UpdateSegment (1, source.BytesVideo / cap);
             disk_bar.UpdateSegment (2, data / cap);
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDialog.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDialog.cs
index 82ab131..d439faa 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDialog.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDialog.cs
@@ -44,12 +44,12 @@ namespace Banshee.Dap
         private DapSource source;
         private Entry nameEntry;
         //private Entry ownerEntry;
-        
+
         private string name_update;
         //private string owner_update;
-        
+
         private bool edited;
-        
+
         public DapPropertiesDialog(DapSource source) : base(
             // Translators: {0} is the name assigned to a Digital Audio Player by its owner
             String.Format(Catalog.GetString("{0} Properties"), source.Name),
@@ -59,28 +59,28 @@ namespace Banshee.Dap
             ResponseType.Close)
         {
             this.source = source;
-            
+
             HBox iconbox = new HBox();
             iconbox.Spacing = 10;
             //Image icon = new Image (source.Properties.Get<string> ("Icon.Names")[0], IconSize.Dialog);
             //icon.Yalign = 0.0f;
             //icon.Pixbuf = device.GetIcon(48);
             //iconbox.PackStart(icon, false, false, 0);
-            
+
             VBox box = new VBox();
             box.Spacing = 10;
-            
+
             PropertyTable table = new PropertyTable();
             table.ColumnSpacing = 10;
             table.RowSpacing = 5;
-            
+
             if(!source.IsReadOnly && source.CanRename) {
                 nameEntry = table.AddEntry(Catalog.GetString("Device name"), source.Name);
                 nameEntry.Changed += OnEntryChanged;
             } else {
                 table.AddLabel(Catalog.GetString("Device name"), source.Name);
             }
-            
+
             /*if(device.ShowOwner) {
                 if(!device.IsReadOnly && device.CanSetOwner) {
                     ownerEntry = table.AddEntry(Catalog.GetString("Owner name"), device.Owner);
@@ -89,39 +89,39 @@ namespace Banshee.Dap
                     table.AddLabel(Catalog.GetString("Owner name"), device.Owner);
                 }
             }*/
-            
+
             if(!source.IsReadOnly) {
                 try {
                     VBox profile_description_box = new VBox();
-                    ProfileComboBoxConfigurable profile_box = new ProfileComboBoxConfigurable(ServiceManager.MediaProfileManager, 
+                    ProfileComboBoxConfigurable profile_box = new ProfileComboBoxConfigurable(ServiceManager.MediaProfileManager,
                         source.UniqueId, profile_description_box);
                     profile_box.Combo.MimeTypeFilter = source.AcceptableMimeTypes;
                     table.AddWidget(Catalog.GetString("Encode to"), profile_box);
                     table.AddWidget(null, profile_description_box);
                     profile_description_box.Show();
-                
+
                     table.AddSeparator();
                 } catch(Exception e) {
                     Console.WriteLine(e);
                 }
             }
-            
+
             table.AddWidget(Catalog.GetString("Capacity used"), UsedProgressBar);
-    
+
             box.PackStart(table, true, true, 0);
-            
+
             PropertyTable extTable = new PropertyTable();
             extTable.ColumnSpacing = 10;
             extTable.RowSpacing = 5;
-            
+
             foreach(DapSource.DapProperty property in source.DapProperties) {
                 extTable.AddLabel(property.Name, property.Value);
             }
-            
+
             Expander expander = new Expander(Catalog.GetString("Advanced details"));
             expander.Add(extTable);
             box.PackStart(expander, false, false, 0);
-            
+
             BorderWidth = 10;
             Resizable = false;
             iconbox.PackStart(box, true, true, 0);
@@ -139,7 +139,7 @@ namespace Banshee.Dap
 
             Destroy ();
         }
-        
+
         private ProgressBar UsedProgressBar {
             get {
                 ProgressBar usedBar = new ProgressBar();
@@ -152,32 +152,32 @@ namespace Banshee.Dap
                 return usedBar;
             }
         }
-        
+
         private void OnEntryChanged(object o, EventArgs args)
         {
             /*if(ownerEntry != null) {
                 owner_update = ownerEntry.Text;
             }*/
-            
+
             if(nameEntry != null) {
                 name_update = nameEntry.Text;
             }
-            
+
             edited = true;
         }
-        
+
         public bool Edited {
             get {
                 return edited;
             }
         }
-        
+
         public string UpdatedName {
             get {
                 return name_update;
             }
         }
-        
+
         public string UpdatedOwner {
             get {
                 return null; //owner_update;
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDisplay.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDisplay.cs
index 9950c23..2ae6fb2 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDisplay.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDisplay.cs
@@ -44,12 +44,12 @@ using Hyena.Gui.Theming;
 
 namespace Banshee.Dap.Gui
 {
-    
+
     public class DapPropertiesDisplay : Alignment, ISourceContents
     {
         private DapSource source;
         private Theme theme;
-        
+
         private Gdk.Pixbuf large_icon;
         public Gdk.Pixbuf LargeIcon {
             get {
@@ -64,23 +64,23 @@ namespace Banshee.Dap.Gui
         protected DapPropertiesDisplay (IntPtr ptr) : base (ptr)
         {
         }
-        
+
         public DapPropertiesDisplay (DapSource source) : base (0.5f, 0.35f, 0.0f, 0.0f)
         {
             AppPaintable = true;
             this.source = source;
         }
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
             theme = new GtkTheme (this);
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-                
+
             try {
                 DrawFrame (cr, evnt.Area);
                 return base.OnExposeEvent (evnt);
@@ -88,36 +88,36 @@ namespace Banshee.Dap.Gui
                 ((IDisposable)cr).Dispose ();
             }
         }
-        
+
         private void DrawFrame (Cairo.Context cr, Gdk.Rectangle clip)
         {
-            Gdk.Rectangle rect = new Gdk.Rectangle (Allocation.X, Allocation.Y, 
+            Gdk.Rectangle rect = new Gdk.Rectangle (Allocation.X, Allocation.Y,
                 Allocation.Width, Allocation.Height);
             theme.Context.ShowStroke = true;
             theme.DrawFrameBackground (cr, rect, true);
             theme.DrawFrameBorder (cr, rect);
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
             QueueDraw ();
         }
-        
+
         /*private void BuildPropertyTable ()
         {
             MessagePane pane = new MessagePane ();
-            pane.HeaderIcon = 
+            pane.HeaderIcon =
             pane.HeaderMarkup = String.Format ("<big><b>{0}</b></big>", GLib.Markup.EscapeText (source.Name));
-            
+
             Button properties_button = new Button (String.Format (Catalog.GetString ("{0} Properties"), source.GenericName));
             pane.Append (properties_button);
-            
+
             Add (pane);
         }*/
-        
+
 #region ISourceContents
-        
+
         public bool SetSource (ISource src)
         {
             this.source = source as DapSource;
@@ -136,7 +136,7 @@ namespace Banshee.Dap.Gui
         public Widget Widget {
             get { return this; }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/PurchasedMusicActions.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/PurchasedMusicActions.cs
index 580f914..2f6a12e 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/PurchasedMusicActions.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/PurchasedMusicActions.cs
@@ -45,7 +45,7 @@ namespace Banshee.Dap.Gui
                 instance = new PurchasedMusicActions ();
             }
         }
-    
+
         private PurchasedMusicActions () : base ("dap-purchased-music")
         {
             AddImportant (
@@ -53,9 +53,9 @@ namespace Banshee.Dap.Gui
                     Catalog.GetString ("Import Purchased Music"), null,
                     null, OnImportPurchasedMusic)
             );
-            
+
             this["PurchasedMusicImportAction"].IconName = Stock.Save;
-            
+
             Actions.SourceActions.Updated += OnUpdateActions;
             Register ();
         }
@@ -64,7 +64,7 @@ namespace Banshee.Dap.Gui
         {
             UpdateAction ("PurchasedMusicImportAction", source is IPurchasedMusicSource);
         }
-        
+
         private void OnImportPurchasedMusic (object o, EventArgs args)
         {
             IPurchasedMusicSource source = Actions.SourceActions.ActionSource as IPurchasedMusicSource;
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
index 55b6876..9ec6b47 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
@@ -44,7 +44,7 @@ using Banshee.SmartPlaylist;
 using Banshee.Query;
 
 namespace Banshee.Dap
-{ 
+{
     public sealed class DapLibrarySync
     {
         private DapSync sync;
@@ -55,13 +55,13 @@ namespace Banshee.Dap
         private SchemaPreference<bool> enabled_pref;
         private SmartPlaylistSource sync_src, to_add, to_remove;
         private Section library_prefs_section;
-        
+
         #region Public Properties
 
         public bool Enabled {
             get { return sync.Enabled && enabled.Get (); }
         }
-        
+
         public bool SyncEntireLibrary {
             get { return sync_entire_library.Get (); }
         }
@@ -73,13 +73,13 @@ namespace Banshee.Dap
         public LibrarySource Library {
             get { return library; }
         }
-        
+
         #endregion
-        
+
         public string [] SyncPlaylistIds {
             get { return playlist_ids.Get (); }
         }
-        
+
         private IList<AbstractPlaylistSource> GetSyncPlaylists ()
         {
             List<AbstractPlaylistSource> playlists = new List<AbstractPlaylistSource> ();
@@ -94,7 +94,7 @@ namespace Banshee.Dap
         internal string SmartPlaylistId {
             get { return sync_src.DbId.ToString (); }
         }
-        
+
         internal DapLibrarySync (DapSync sync, LibrarySource library)
         {
             this.sync = sync;
@@ -119,13 +119,13 @@ namespace Banshee.Dap
         private void BuildPreferences ()
         {
             conf_ns = String.Format ("{0}.{1}", sync.ConfigurationNamespace, library.ParentConfigurationId);
-            
+
             enabled = sync.Dap.CreateSchema<bool> (conf_ns, "enabled", true,
                 String.Format (Catalog.GetString ("Sync {0}"), library.Name), "");
-            
+
             sync_entire_library = sync.Dap.CreateSchema<bool> (conf_ns, "sync_entire_library", true,
                 "Whether to sync the entire library and all playlists.", "");
-            
+
             playlist_ids = sync.Dap.CreateSchema<string[]> (conf_ns, "playlist_ids", new string [0],
                 "If sync_entire_library is false, this contains a list of playlist ids specifically to sync", "");
 
@@ -160,13 +160,13 @@ namespace Banshee.Dap
             to_remove.Save ();
             to_remove.AddCondition (library.AttributesCondition);
             to_remove.AddCondition (String.Format (
-                @"MetadataHash NOT IN (SELECT MetadataHash FROM CoreTracks, CoreSmartPlaylistEntries 
+                @"MetadataHash NOT IN (SELECT MetadataHash FROM CoreTracks, CoreSmartPlaylistEntries
                     WHERE CoreSmartPlaylistEntries.SmartPlaylistID = {0} AND
                         CoreTracks.TrackID = CoreSmartPlaylistEntries.TrackID)",
                 sync_src.DbId
             ));
         }
-        
+
         internal void CalculateSync ()
         {
             if (SyncEntireLibrary) {
@@ -195,7 +195,7 @@ namespace Banshee.Dap
             return String.Format ("Sync calculated for {1}: to add: {0} items, remove {2} items; sync_src.cacheid = {5}, to_add.cacheid = {3}, to_remove.cacheid = {4}", to_add.Count, library.Name, to_remove.Count,
                                   to_add.DatabaseTrackModel.CacheId, to_remove.DatabaseTrackModel.CacheId, sync_src.DatabaseTrackModel.CacheId);
         }
-        
+
         internal void Sync ()
         {
             if (Enabled) {
@@ -220,7 +220,7 @@ namespace Banshee.Dap
                         ServiceManager.DbConnection.Execute (
                             String.Format (
                                 @"INSERT INTO CorePlaylistEntries (PlaylistID, TrackID)
-                                    SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND MetadataHash IN 
+                                    SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND MetadataHash IN
                                         (SELECT MetadataHash FROM {0} WHERE {1})",
                                 from.DatabaseTrackModel.ConditionFromFragment, from.DatabaseTrackModel.Condition),
                             to.DbId, sync.Dap.DbId
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs
index ea5192b..0356540 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs
@@ -64,9 +64,9 @@ namespace Banshee.Dap
 
                 sources = new Dictionary<string, DapSource> ();
                 supported_dap_types = new List<TypeExtensionNode> ();
-                
+
                 AddinManager.AddExtensionNodeHandler ("/Banshee/Dap/DeviceClass", OnExtensionChanged);
-                
+
                 ServiceManager.HardwareManager.DeviceAdded += OnHardwareDeviceAdded;
                 ServiceManager.HardwareManager.DeviceRemoved += OnHardwareDeviceRemoved;
                 ServiceManager.HardwareManager.DeviceCommand += OnDeviceCommand;
@@ -75,29 +75,29 @@ namespace Banshee.Dap
             }
         }
 
-        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args) 
+        private void OnExtensionChanged (object o, ExtensionNodeEventArgs args)
         {
             lock (sync) {
                 TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;
-                
+
                 if (args.Change == ExtensionChange.Add) {
                     Log.DebugFormat ("Dap support extension loaded: {0}", node.Addin.Id);
                     supported_dap_types.Add (node);
-    
+
                     // See if any existing devices are handled by this new DAP support
                     foreach (IDevice device in ServiceManager.HardwareManager.GetAllDevices ()) {
                         MapDevice (device);
                     }
                 } else if (args.Change == ExtensionChange.Remove) {
                     supported_dap_types.Remove (node);
-                    
+
                     Queue<DapSource> to_remove = new Queue<DapSource> ();
                     foreach (DapSource source in sources.Values) {
                         if (source.AddinId == node.Addin.Id) {
                             to_remove.Enqueue (source);
                         }
                     }
-                    
+
                     while (to_remove.Count > 0) {
                         UnmapDevice (to_remove.Dequeue ().Device.Uuid);
                     }
@@ -113,17 +113,17 @@ namespace Banshee.Dap
                     return;
 
                 AddinManager.RemoveExtensionNodeHandler ("/Banshee/Dap/DeviceClass", OnExtensionChanged);
-                
+
                 ServiceManager.HardwareManager.DeviceAdded -= OnHardwareDeviceAdded;
                 ServiceManager.HardwareManager.DeviceRemoved -= OnHardwareDeviceRemoved;
                 ServiceManager.HardwareManager.DeviceCommand -= OnDeviceCommand;
                 ServiceManager.SourceManager.SourceRemoved -= OnSourceRemoved;
-                
+
                 List<DapSource> dap_sources = new List<DapSource> (sources.Values);
                 foreach (DapSource source in dap_sources) {
                     UnmapDevice (source.Device.Uuid);
                 }
-                
+
                 sources.Clear ();
                 sources = null;
                 supported_dap_types.Clear ();
@@ -131,7 +131,7 @@ namespace Banshee.Dap
                 initialized = false;
             }
         }
-        
+
         private DapSource FindDeviceSource (IDevice device)
         {
             foreach (TypeExtensionNode node in supported_dap_types) {
@@ -148,10 +148,10 @@ namespace Banshee.Dap
                     Log.Exception (e);
                 }
             }
-            
+
             return null;
         }
-        
+
         private void MapDevice (IDevice device)
         {
             Scheduler.Schedule (new MapDeviceJob (this, device));
@@ -171,7 +171,7 @@ namespace Banshee.Dap
             public string Uuid {
                 get { return device.Uuid; }
             }
-            
+
             public void Run ()
             {
                 DapSource source = null;
@@ -180,19 +180,19 @@ namespace Banshee.Dap
                         if (service.sources.ContainsKey (device.Uuid)) {
                             return;
                         }
-                        
+
                         if (device is ICdromDevice || device is IDiscVolume) {
                             return;
                         }
-                        
+
                         if (device is IVolume && (device as IVolume).ShouldIgnore) {
                             return;
                         }
-                        
+
                         if (device.MediaCapabilities == null && !(device is IBlockDevice) && !(device is IVolume)) {
                             return;
                         }
-                        
+
                         source = service.FindDeviceSource (device);
                         if (source != null) {
                             Log.DebugFormat ("Found DAP support ({0}) for device {1}", source.GetType ().FullName, source.Name);
@@ -207,7 +207,7 @@ namespace Banshee.Dap
                     ThreadAssist.ProxyToMain (delegate {
                         ServiceManager.SourceManager.AddSource (source);
                         source.NotifyUser ();
-                        
+
                         // If there are any queued device commands, see if they are to be
                         // handled by this new DAP (e.g. --device-activate=file:///media/disk)
                         try {
@@ -230,7 +230,7 @@ namespace Banshee.Dap
                 }
             }
         }
-        
+
         internal void UnmapDevice (string uuid)
         {
             DapSource source = null;
@@ -261,18 +261,18 @@ namespace Banshee.Dap
                 UnmapDevice (dap_source.Device.Uuid);
             }
         }
-        
+
         private void OnHardwareDeviceAdded (object o, DeviceAddedArgs args)
         {
             MapDevice (args.Device);
         }
-        
+
         private void OnHardwareDeviceRemoved (object o, DeviceRemovedArgs args)
         {
             UnmapDevice (args.DeviceUuid);
         }
-        
-      
+
+
 #region DeviceCommand Handling
 
         private void HandleDeviceCommand (DapSource source, DeviceCommandAction action)
@@ -281,7 +281,7 @@ namespace Banshee.Dap
                 ServiceManager.SourceManager.SetActiveSource (source);
             }
         }
-        
+
         private void OnDeviceCommand (object o, DeviceCommand command)
         {
             lock (this) {
@@ -293,16 +293,16 @@ namespace Banshee.Dap
                         return;
                     }
                 }
-                
+
                 if (unhandled_device_commands == null) {
                     unhandled_device_commands = new List<DeviceCommand> ();
                 }
                 unhandled_device_commands.Add (command);
             }
         }
-        
+
 #endregion
-        
+
         string IService.ServiceName {
             get { return "DapService"; }
         }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
index a78e475..89faf06 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
@@ -56,23 +56,23 @@ namespace Banshee.Dap
         private DapInfoBar dap_info_bar;
         private Page page;
         // private DapPropertiesDisplay dap_properties_display;
-        
+
         private IDevice device;
         internal IDevice Device {
             get { return device; }
         }
-        
+
         private string addin_id;
         internal string AddinId {
             get { return addin_id; }
             set { addin_id = value; }
         }
-        
+
         private MediaGroupSource music_group_source;
         protected MediaGroupSource MusicGroupSource {
             get { return music_group_source; }
         }
-        
+
         private MediaGroupSource video_group_source;
         protected MediaGroupSource VideoGroupSource {
             get { return video_group_source; }
@@ -82,7 +82,7 @@ namespace Banshee.Dap
         protected MediaGroupSource PodcastGroupSource {
             get { return podcast_group_source; }
         }
-        
+
         protected DapSource ()
         {
         }
@@ -97,14 +97,14 @@ namespace Banshee.Dap
         {
             PurgeTemporaryPlaylists ();
             PurgeTracks ();
-            
+
             if (dap_info_bar != null) {
                 dap_info_bar.Destroy ();
                 dap_info_bar = null;
             }
-            
+
             Properties.Remove ("Nereid.SourceContents.FooterWidget");
-            
+
             /*Properties.Remove ("Nereid.SourceContents");
             dap_properties_display.Destroy ();
             dap_properties_display = null;*/
@@ -112,14 +112,14 @@ namespace Banshee.Dap
             if (sync != null)
                 sync.Dispose ();
         }
-        
+
         private void PurgeTemporaryPlaylists ()
         {
             ServiceManager.DbConnection.Execute (new HyenaSqliteCommand (@"
                 BEGIN TRANSACTION;
                     DELETE FROM CoreSmartPlaylistEntries WHERE SmartPlaylistID IN
                         (SELECT SmartPlaylistID FROM CoreSmartPlaylists WHERE PrimarySourceID = ?);
-                    DELETE FROM CoreSmartPlaylists WHERE PrimarySourceID = ?;   
+                    DELETE FROM CoreSmartPlaylists WHERE PrimarySourceID = ?;
                 COMMIT TRANSACTION",
                 DbId, DbId
             ));
@@ -128,12 +128,12 @@ namespace Banshee.Dap
                 BEGIN TRANSACTION;
                     DELETE FROM CorePlaylistEntries WHERE PlaylistID IN
                         (SELECT PlaylistID FROM CorePlaylists WHERE PrimarySourceID = ?);
-                    DELETE FROM CorePlaylists WHERE PrimarySourceID = ?;   
+                    DELETE FROM CorePlaylists WHERE PrimarySourceID = ?;
                 COMMIT TRANSACTION",
                 DbId, DbId
             ));
         }
-        
+
         internal void RaiseUpdated ()
         {
             OnUpdated ();
@@ -166,16 +166,16 @@ namespace Banshee.Dap
         protected override void Initialize ()
         {
             PurgeTemporaryPlaylists ();
-            
+
             base.Initialize ();
-            
+
             Expanded = true;
             Properties.SetStringList ("Icon.Name", GetIconNames ());
             Properties.Set<string> ("SourcePropertiesActionLabel", Catalog.GetString ("Device Properties"));
             Properties.Set<OpenPropertiesDelegate> ("SourceProperties.GuiHandler", delegate {
                 new DapPropertiesDialog (this).RunDialog ();
             });
-            
+
             Properties.Set<bool> ("Nereid.SourceContents.HeaderVisible", false);
             Properties.Set<System.Reflection.Assembly> ("ActiveSourceUIResource.Assembly", System.Reflection.Assembly.GetExecutingAssembly ());
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
@@ -183,26 +183,26 @@ namespace Banshee.Dap
             sync = new DapSync (this);
             dap_info_bar = new DapInfoBar (this);
             Properties.Set<Gtk.Widget> ("Nereid.SourceContents.FooterWidget", dap_info_bar);
-            
+
             /*dap_properties_display = new DapPropertiesDisplay (this);
             Properties.Set<Banshee.Sources.Gui.ISourceContents> ("Nereid.SourceContents", dap_properties_display);*/
 
             if (String.IsNullOrEmpty (GenericName)) {
                 GenericName = Catalog.GetString ("Media Player");
             }
-            
+
             if (String.IsNullOrEmpty (Name)) {
                 Name = device.Name;
             }
 
             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) {
@@ -225,7 +225,7 @@ namespace Banshee.Dap
             page = new Page ();
             Section main_section = new Section ();
             main_section.Order = -1;
-            
+
             space_for_data = CreateSchema<long> ("space_for_data", 0, "How much space, in bytes, to reserve for data on the device.", "");
             main_section.Add (space_for_data);
             page.Add (main_section);
@@ -234,12 +234,12 @@ namespace Banshee.Dap
                 page.Add (section);
             }
         }
-        
+
         // Force to zero so that count doesn't show up
         public override int Count {
             get { return 0; }
         }
-        
+
         public override bool HasProperties {
             get { return true; }
         }
@@ -261,14 +261,14 @@ namespace Banshee.Dap
         }
 
 #endregion
-        
-#region Track Management/Syncing   
- 
+
+#region Track Management/Syncing
+
         public void LoadDeviceContents ()
         {
             ThreadPool.QueueUserWorkItem (ThreadedLoadDeviceContents);
         }
-        
+
         private void ThreadedLoadDeviceContents (object state)
         {
             try {
@@ -324,13 +324,13 @@ namespace Banshee.Dap
                 }
             }
         }
-        
+
         protected abstract void AddTrackToDevice (DatabaseTrackInfo track, SafeUri fromUri);
 
         protected bool TrackNeedsTranscoding (TrackInfo track)
         {
             foreach (string mimetype in AcceptableMimeTypes) {
-                if (ServiceManager.MediaProfileManager.GetExtensionForMimeType (track.MimeType) == 
+                if (ServiceManager.MediaProfileManager.GetExtensionForMimeType (track.MimeType) ==
                     ServiceManager.MediaProfileManager.GetExtensionForMimeType (mimetype)) {
                     return false;
                 }
@@ -382,26 +382,26 @@ namespace Banshee.Dap
                 throw new ApplicationException (Catalog.GetString (
                     "File format conversion support is not available"));
             }
-            
+
             transcoder.Enqueue (track, PreferredConfiguration, OnTrackTranscoded, OnTrackTranscodeCancelled, OnTrackTranscodeError);
         }
-        
+
         private void OnTrackTranscoded (TrackInfo track, SafeUri outputUri)
         {
             AddTrackJob.Status = String.Format ("{0} - {1}", track.ArtistName, track.TrackTitle);
-            
+
             try {
                 AttemptToAddTrackToDevice ((DatabaseTrackInfo)track, outputUri);
             } catch (Exception e) {
                 Log.Exception (e);
             }
-            
+
             IncrementAddedTracks ();
         }
-        
+
         private void OnTrackTranscodeCancelled ()
         {
-            IncrementAddedTracks (); 
+            IncrementAddedTracks ();
         }
 
         private void OnTrackTranscodeError (TrackInfo track)
@@ -409,7 +409,7 @@ namespace Banshee.Dap
             ErrorSource.AddMessage (Catalog.GetString ("Error converting file"), track.Uri.ToString ());
             IncrementAddedTracks ();
         }
-        
+
 #endregion
 
 #region Device Properties
@@ -418,20 +418,20 @@ namespace Banshee.Dap
         {
             string vendor = device.Vendor;
             string product = device.Product;
-            
+
             vendor = vendor != null ? vendor.Trim () : null;
             product = product != null ? product.Trim () : null;
 
             if (!String.IsNullOrEmpty (vendor) && !String.IsNullOrEmpty (product)) {
-                return new string [] { 
-                    String.Format ("multimedia-player-{0}-{1}", vendor, product).Replace (' ', '-').ToLower (), 
+                return new string [] {
+                    String.Format ("multimedia-player-{0}-{1}", vendor, product).Replace (' ', '-').ToLower (),
                     FallbackIcon
                 };
             } else {
                 return new string [] { FallbackIcon };
             }
         }
-        
+
         public static string FallbackIcon {
             get { return "multimedia-player"; }
         }
@@ -458,17 +458,17 @@ namespace Banshee.Dap
                 if (preferred_config != null) {
                     return preferred_config;
                 }
-            
+
                 MediaProfileManager manager = ServiceManager.MediaProfileManager;
                 if (manager == null) {
                     return null;
                 }
-        
+
                 preferred_config = manager.GetActiveProfileConfiguration (UniqueId, acceptable_mimetypes);
                 return preferred_config;
             }
         }
-        
+
         internal protected virtual bool CanHandleDeviceCommand (DeviceCommand command)
         {
             return false;
@@ -479,24 +479,24 @@ namespace Banshee.Dap
             get { return acceptable_mimetypes; }
             protected set { acceptable_mimetypes = value; }
         }
-       
+
         public long BytesVideo {
             get { return VideoGroupSource == null ? 0 : VideoGroupSource.BytesUsed; }
         }
-        
+
         public long BytesMusic {
             get { return MusicGroupSource == null ? 0 : MusicGroupSource.BytesUsed; }
         }
-                    
+
         public long BytesData {
             get { return BytesUsed - BytesVideo - BytesMusic; }
         }
-                    
+
         public long BytesReserved {
             get { return space_for_data.Get (); }
             set { space_for_data.Set (value); }
         }
-                    
+
         public override long BytesAvailable {
             get { return BytesCapacity - BytesUsed - Math.Max (0, BytesReserved - BytesData); }
         }
@@ -516,9 +516,9 @@ namespace Banshee.Dap
         public override bool PlaylistsReadOnly {
             get { return Sync.Enabled || IsReadOnly; }
         }
-            
+
         private Banshee.Configuration.SchemaEntry<long> space_for_data;
 #endregion
-        
+
     }
 }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
index a1f4032..aa1c3c0 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSync.cs
@@ -63,9 +63,9 @@ namespace Banshee.Dap
         internal string ConfigurationNamespace {
             get { return conf_ns; }
         }
-        
+
         #region Public Properites
-        
+
         public DapSource Dap {
             get { return dap; }
         }
@@ -73,11 +73,11 @@ namespace Banshee.Dap
         public IEnumerable<DapLibrarySync> LibrarySyncs {
             get { return library_syncs; }
         }
-        
+
         public bool Enabled {
             get { return !manually_manage.Get (); }
         }
-        
+
         public bool AutoSync {
             get { return Enabled && auto_sync.Get (); }
         }
@@ -85,9 +85,9 @@ namespace Banshee.Dap
         public IEnumerable<Section> PreferenceSections {
             get { return pref_sections; }
         }
-        
+
         #endregion
-        
+
         public DapSync (DapSource dapSource)
         {
             dap = dapSource;
@@ -116,7 +116,7 @@ namespace Banshee.Dap
                 Catalog.GetString ("Manually manage this device"),
                 Catalog.GetString ("Manually managing your device means you can drag and drop items onto the device, and manually remove them.")
             );
-            
+
             auto_sync = dap.CreateSchema<bool> (conf_ns, "auto_sync", false,
                 Catalog.GetString ("Automatically sync the device when plugged in or when the libraries change"),
                 Catalog.GetString ("Begin synchronizing the device as soon as the device is plugged in or the libraries change.")
@@ -129,10 +129,10 @@ namespace Banshee.Dap
             manually_manage_pref.ShowDescription = true;
             manually_manage_pref.ShowLabel = false;
             manually_manage_pref.ValueChanged += OnManuallyManageChanged;
-            
+
             auto_sync_pref = dap_prefs_section.Add (auto_sync);
             auto_sync_pref.ValueChanged += OnAutoSyncChanged;
-            
+
             //manually_manage_pref.Changed += OnEnabledChanged;
             //auto_sync_pref.Changed += delegate { OnUpdated (); };
             //OnEnabledChanged (null);
@@ -152,7 +152,7 @@ namespace Banshee.Dap
                 library_syncs.Add (library_sync);
                 pref_sections.Add (library_sync.PrefsSection);
                 library_sync.PrefsSection.Order = ++i;
-                
+
                 source.TracksAdded += OnLibraryChanged;
                 source.TracksDeleted += OnLibraryChanged;
             }
@@ -175,7 +175,7 @@ namespace Banshee.Dap
                 lib_sync.PrefsSection.Sensitive = sync_enabled;
             }
         }
-        
+
         private void OnAutoSyncChanged (Root preference)
         {
             OnUpdated ();
@@ -198,7 +198,7 @@ namespace Banshee.Dap
             if (!Enabled) {
                 return;
             }
-            
+
             foreach (DapLibrarySync lib_sync in library_syncs) {
                 if (lib_sync.Library == sender) {
                     if (AutoSync) {
@@ -218,7 +218,7 @@ namespace Banshee.Dap
                 sources.Sort (delegate (Source a, Source b) {
                     return a.Order.CompareTo (b.Order);
                 });
-    
+
                 if (!dap.SupportsVideo) {
                     sources.Remove (ServiceManager.SourceManager.VideoLibrary);
                 }
@@ -226,7 +226,7 @@ namespace Banshee.Dap
                 if (!dap.SupportsPodcasts) {
                     sources.RemoveAll (s => s.UniqueId == "PodcastSource-PodcastLibrary");
                 }
-                
+
                 foreach (Source source in sources) {
                     if (source is LibrarySource) {
                         yield return source as LibrarySource;
@@ -234,19 +234,19 @@ namespace Banshee.Dap
                 }
             }
         }
-        
+
         public int ItemCount {
             get { return 0; }
         }
-        
+
         public long FileSize {
             get { return 0; }
         }
-        
+
         public TimeSpan Duration {
             get { return TimeSpan.Zero; }
         }
-        
+
         public void CalculateSync ()
         {
             foreach (DapLibrarySync library_sync in library_syncs) {
@@ -298,7 +298,7 @@ namespace Banshee.Dap
                     }
                 }
             }
-            
+
             if (sync_playlists) {
                 dap.RemovePlaylists ();
             }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/MediaGroupSource.cs b/src/Dap/Banshee.Dap/Banshee.Dap/MediaGroupSource.cs
index 324fa48..593ea92 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/MediaGroupSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/MediaGroupSource.cs
@@ -44,17 +44,17 @@ namespace Banshee.Dap
     public abstract class MediaGroupSource : SmartPlaylistSource
     {
         private DapSource parent;
-        
+
         public MediaGroupSource (DapSource parent, string name) : base (name, parent)
         {
             this.parent = parent;
-            
-            Properties.Set<Gtk.Widget> ("Nereid.SourceContents.FooterWidget", 
+
+            Properties.Set<Gtk.Widget> ("Nereid.SourceContents.FooterWidget",
                 parent.Properties.Get<Gtk.Widget> ("Nereid.SourceContents.FooterWidget"));
-            
+
             if (this is IPurchasedMusicSource) {
                 PurchasedMusicActions.Create ();
-                
+
                 Properties.Set<Assembly> ("ActiveSourceUIResource.Assembly", Assembly.GetExecutingAssembly ());
                 Properties.SetString ("ActiveSourceUIResource", "PurchasedMusicSourceUI.xml");
             }
@@ -65,18 +65,18 @@ namespace Banshee.Dap
             base.AfterInitialized ();
             Reload ();
         }
-        
+
         protected override void OnUpdated ()
         {
             base.OnUpdated ();
             if (parent != null) {
                 parent.RaiseUpdated ();
             }
-            
+
             if (AutoHide) {
                 bool contains_me = parent.ContainsChildSource (this);
                 int count = Count;
-                
+
                 if (count == 0 && contains_me) {
                     parent.RemoveChildSource (this);
                 } else if (count > 0 && !contains_me) {
@@ -89,29 +89,29 @@ namespace Banshee.Dap
         {
             return (source is DatabaseSource) && source.Parent != Parent && source != Parent;
         }*/
-        
+
         private bool auto_hide;
         public virtual bool AutoHide {
             get { return auto_hide; }
             set { auto_hide = value; }
         }
-        
+
         public override string ConditionSql {
             get { return base.ConditionSql; }
-            protected set { 
+            protected set {
                 base.ConditionSql = value;
                 Save ();
             }
         }
-        
+
         public override bool CanRename {
             get { return false; }
         }
-        
+
         public override bool CanUnmap {
             get { return false; }
         }
-        
+
         public override bool HasProperties {
             get { return false; }
         }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs b/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
index a6193ec..ac551fa 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
@@ -91,7 +91,7 @@ namespace Banshee.Dap
         string IImportSource.ImportLabel {
             get { return null; }
         }
-        
+
         int IImportSource.SortOrder {
             get { return 20; }
         }
@@ -104,9 +104,9 @@ namespace Banshee.Dap
             if (track != null && track.PrimarySourceId == this.DbId) {
                 ServiceManager.PlayerEngine.Close ();
             }
-            
+
             SetStatus (String.Format (Catalog.GetString ("Ejecting {0}..."), GenericName), false);
-        
+
             ThreadPool.QueueUserWorkItem (delegate {
                 try {
                     Eject ();
@@ -115,11 +115,11 @@ namespace Banshee.Dap
                         SetStatus (String.Format (Catalog.GetString ("Could not eject {0}: {1}"),
                             GenericName, e.Message), true);
                     });
-                    
+
                     Log.Exception (e);
                 }
             });
-            
+
             return true;
         }
 
@@ -146,7 +146,7 @@ namespace Banshee.Dap
         }
 
         public abstract bool IsReadOnly { get; }
-        
+
         public abstract long BytesUsed { get; }
         public abstract long BytesCapacity { get; }
         public virtual long BytesAvailable {
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDiscModel.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDiscModel.cs
index 22da746..24b6972 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDiscModel.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDiscModel.cs
@@ -46,45 +46,45 @@ namespace Banshee.AudioCd
     {
         // 44.1 kHz sample rate * 16 bit channel resolution * 2 channels (stereo)
         private const long PCM_FACTOR = 176400;
-    
+
         private IDiscVolume volume;
-        
+
         public event EventHandler MetadataQueryStarted;
         public event EventHandler MetadataQueryFinished;
         public event EventHandler EnabledCountChanged;
-        
+
         private bool metadata_query_success;
         private DateTime metadata_query_start_time;
-        
+
         public bool MetadataQuerySuccess {
             get { return metadata_query_success; }
         }
-        
+
         private TimeSpan duration;
         public TimeSpan Duration {
             get { return duration; }
         }
-        
+
         private long file_size;
         public long FileSize {
             get { return file_size; }
         }
-        
+
         public AudioCdDiscModel (IDiscVolume volume)
         {
             this.volume = volume;
             disc_title = Catalog.GetString ("Audio CD");
         }
-        
+
         public void NotifyUpdated ()
         {
             OnReloaded ();
         }
-        
+
         public void LoadModelFromDisc ()
         {
             Clear ();
-        
+
             LocalDisc mb_disc = LocalDisc.GetFromDevice (volume.DeviceNode);
             if (mb_disc == null) {
                 throw new ApplicationException ("Could not read contents of the disc. Platform may not be supported.");
@@ -102,47 +102,47 @@ namespace Banshee.AudioCd
                 track.TrackTitle = String.Format (Catalog.GetString ("Track {0}"), track.TrackNumber);
                 track.FileSize = PCM_FACTOR * (uint)track.Duration.TotalSeconds;
                 Add (track);
-                
+
                 duration += track.Duration;
                 file_size += track.FileSize;
             }
-            
+
             EnabledCount = Count;
-            
+
             Reload ();
-            
+
             ThreadPool.QueueUserWorkItem (LoadDiscMetadata, mb_disc);
         }
-        
+
         private void LoadDiscMetadata (object state)
         {
             try {
                 LocalDisc mb_disc = (LocalDisc)state;
-                
+
                 OnMetadataQueryStarted (mb_disc);
-                
+
                 Release release = Release.Query (mb_disc).PerfectMatch ();
-    
+
                 var tracks = release.GetTracks ();
                 if (release == null || tracks.Count != Count) {
                     OnMetadataQueryFinished (false);
                     return;
                 }
-                            
+
                 disc_title = release.GetTitle ();
-                
+
                 int disc_number = 1;
                 int i = 0;
-                
+
                 foreach (Disc disc in release.GetDiscs ()) {
                     i++;
                     if (disc.Id == mb_disc.Id) {
                         disc_number = i;
                     }
                 }
-                
+
                 DateTime release_date = DateTime.MaxValue;
-     
+
                 foreach (Event release_event in release.GetEvents ()) {
                     if (release_event.Date != null) {
                         try {
@@ -152,7 +152,7 @@ namespace Banshee.AudioCd
                                 date_str.Length > 4 ? date_str : date_str + "-01",
                                 ApplicationContext.InternalCultureInfo
                             );
-    
+
                             if (date < release_date) {
                                 release_date = date;
                             }
@@ -160,46 +160,46 @@ namespace Banshee.AudioCd
                         }
                     }
                 }
-                
+
                 DatabaseArtistInfo artist = new DatabaseArtistInfo ();
                 var mb_artist = release.GetArtist ();
                 artist.Name = mb_artist.GetName ();
                 artist.NameSort = mb_artist.GetSortName ();
                 artist.MusicBrainzId = mb_artist.Id;
                 bool is_compilation = false;
-                
+
                 DatabaseAlbumInfo album = new DatabaseAlbumInfo ();
                 album.Title = disc_title;
                 album.ArtistName = artist.Name;
                 album.MusicBrainzId = release.Id;
                 album.ReleaseDate = release_date == DateTime.MaxValue ? DateTime.MinValue : release_date;
-                
+
                 i = 0;
                 foreach (Track track in tracks) {
                     AudioCdTrackInfo model_track = (AudioCdTrackInfo)this[i++];
                     var mb_track_artist = track.GetArtist ();
-                    
+
                     model_track.MusicBrainzId = track.Id;
                     model_track.TrackTitle = track.GetTitle ();
                     model_track.ArtistName = mb_track_artist.GetName ();
                     model_track.AlbumTitle = disc_title;
                     model_track.DiscNumber = disc_number;
                     model_track.Album = album;
-    
+
                     model_track.Artist = new DatabaseArtistInfo ();
                     model_track.Artist.Name = model_track.ArtistName;
                     model_track.Artist.NameSort = mb_track_artist.GetSortName ();
                     model_track.Artist.MusicBrainzId = mb_track_artist.Id;
-                    
+
                     if (release_date != DateTime.MinValue) {
                         model_track.Year = release_date.Year;
                     }
-    
+
                     if (!is_compilation && mb_track_artist.Id != artist.MusicBrainzId) {
                         is_compilation = true;
                     }
                 }
-    
+
                 if (is_compilation) {
                     album.IsCompilation = true;
                     for (i = 0; i < tracks.Count; i++) {
@@ -209,44 +209,44 @@ namespace Banshee.AudioCd
                         model_track.AlbumArtistSort = artist.NameSort;
                     }
                 }
-                
+
                 OnMetadataQueryFinished (true);
             } catch (Exception ex) {
                 Log.DebugException (ex);
                 OnMetadataQueryFinished (false);
             }
         }
-        
+
         private void OnMetadataQueryStarted (LocalDisc mb_disc)
         {
             metadata_query_success = false;
             metadata_query_start_time = DateTime.Now;
             Log.InformationFormat ("Querying MusicBrainz for Disc Release ({0})", mb_disc.Id);
-        
-            ThreadAssist.ProxyToMain (delegate { 
+
+            ThreadAssist.ProxyToMain (delegate {
                 EventHandler handler = MetadataQueryStarted;
                 if (handler != null) {
                     handler (this, EventArgs.Empty);
                 }
             });
         }
-        
+
         private void OnMetadataQueryFinished (bool success)
         {
             metadata_query_success = success;
-            Log.InformationFormat ("Query finished (success: {0}, {1} seconds)", 
+            Log.InformationFormat ("Query finished (success: {0}, {1} seconds)",
                 success, (DateTime.Now - metadata_query_start_time).TotalSeconds);
-            
+
             ThreadAssist.ProxyToMain (delegate {
                 Reload ();
-                
+
                 EventHandler handler = MetadataQueryFinished;
                 if (handler != null) {
                     handler (this, EventArgs.Empty);
                 }
             });
         }
-        
+
         private void OnEnabledCountChanged ()
         {
             EventHandler handler = EnabledCountChanged;
@@ -254,45 +254,45 @@ namespace Banshee.AudioCd
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         private ICdromDevice Drive {
             get { return Volume == null ? null : (Volume.Parent as ICdromDevice); }
         }
-        
+
         public bool LockDoor ()
         {
             ICdromDevice drive = Drive;
             return drive != null ? drive.LockDoor () : false;
         }
-        
+
         public bool UnlockDoor ()
         {
             ICdromDevice drive = Drive;
             return drive != null ? drive.UnlockDoor () : false;
         }
-        
+
         public bool IsDoorLocked {
-            get { 
+            get {
                 ICdromDevice drive = Drive;
                 return drive != null ? drive.IsDoorLocked : false;
             }
         }
-        
+
         public IDiscVolume Volume {
             get { return volume; }
         }
-        
+
         private string disc_title;
         public string Title {
             get { return disc_title; }
         }
-        
+
         private int enabled_count;
         public int EnabledCount {
             get { return enabled_count; }
-            internal set { 
-                enabled_count = value; 
-                OnEnabledCountChanged (); 
+            internal set {
+                enabled_count = value;
+                OnEnabledCountChanged ();
             }
         }
     }
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDuplicator.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDuplicator.cs
index 8390531..6cc8dd9 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDuplicator.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDuplicator.cs
@@ -37,25 +37,25 @@ namespace Banshee.AudioCd
     {
         private static bool duplicator_extension_queried = false;
         private static TypeExtensionNode duplicator_extension_node = null;
-        
+
         public static bool Supported {
-            get { 
+            get {
                 if (duplicator_extension_queried) {
                     return duplicator_extension_node != null;
                 }
-                
+
                 duplicator_extension_queried = true;
-                
+
                 foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (
                     "/Banshee/Platform/DiscDuplicator")) {
                     duplicator_extension_node = node;
                     break;
                 }
-                
+
                 return duplicator_extension_node != null;
             }
         }
-        
+
         public static void Duplicate (AudioCdDiscModel model)
         {
             if (Supported && model != null && model.Volume != null) {
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs
index 370a4ab..b7dde94 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs
@@ -46,45 +46,45 @@ namespace Banshee.AudioCd
     {
         private static bool ripper_extension_queried = false;
         private static TypeExtensionNode ripper_extension_node = null;
-        
+
         public static bool Supported {
-            get { 
+            get {
                 if (ripper_extension_queried) {
                     return ripper_extension_node != null;
                 }
-                
+
                 ripper_extension_queried = true;
-                
+
                 foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (
                     "/Banshee/MediaEngine/AudioCdRipper")) {
                     ripper_extension_node = node;
                     break;
                 }
-                
+
                 return ripper_extension_node != null;
             }
         }
 
         public event EventHandler Finished;
-        
+
         // State that does real work
         private IAudioCdRipper ripper;
         private AudioCdSource source;
         private UserJob user_job;
-        
+
         // State to process the rip operation
         private Queue<AudioCdTrackInfo> queue = new Queue<AudioCdTrackInfo> ();
-        
+
         private TimeSpan ripped_duration;
         private TimeSpan total_duration;
         private int track_index;
-        
+
         // State to compute/display the rip speed (i.e. 24x)
         private TimeSpan last_speed_poll_duration;
         private DateTime last_speed_poll_time;
         private double last_speed_poll_factor;
         private string status;
-        
+
         public AudioCdRipper (AudioCdSource source)
         {
             if (ripper_extension_node != null) {
@@ -95,12 +95,12 @@ namespace Banshee.AudioCd
             } else {
                 throw new ApplicationException ("No AudioCdRipper extension is installed");
             }
-            
+
             this.source = source;
         }
-        
+
         public void Start ()
-        {   
+        {
             ResetState ();
 
             foreach (AudioCdTrackInfo track in source.DiscModel) {
@@ -109,14 +109,14 @@ namespace Banshee.AudioCd
                     queue.Enqueue (track);
                 }
             }
-            
+
             if (queue.Count == 0) {
                 return;
             }
 
             source.LockAllTracks ();
-                                                
-            user_job = new UserJob (Catalog.GetString ("Importing Audio CD"), 
+
+            user_job = new UserJob (Catalog.GetString ("Importing Audio CD"),
                 Catalog.GetString ("Initializing Drive"), "media-import-audio-cd");
             user_job.CancelMessage = String.Format (Catalog.GetString (
                 "<i>{0}</i> is still being imported into the music library. Would you like to stop it?"
@@ -127,37 +127,37 @@ namespace Banshee.AudioCd
             user_job.CancelRequested += OnCancelRequested;
             user_job.Finished += OnFinished;
             user_job.Register ();
-            
+
             if (source != null && source.DiscModel != null) {
                 if (!source.DiscModel.LockDoor ()) {
                     Hyena.Log.Warning ("Could not lock CD-ROM door", false);
                 }
             }
-            
+
             ripper.Begin (source.DiscModel.Volume.DeviceNode, AudioCdService.ErrorCorrection.Get ());
-            
+
             RipNextTrack ();
         }
-        
+
         public void Dispose ()
         {
             ResetState ();
-            
+
             if (source != null && source.DiscModel != null) {
                 source.DiscModel.UnlockDoor ();
             }
-                            
+
             if (ripper != null) {
                 ripper.Finish ();
                 ripper = null;
             }
-            
+
             if (user_job != null) {
                 user_job.Finish ();
                 user_job = null;
             }
         }
-        
+
         private void ResetState ()
         {
             track_index = 0;
@@ -169,7 +169,7 @@ namespace Banshee.AudioCd
             status = null;
             queue.Clear ();
         }
-        
+
         private void RipNextTrack ()
         {
             if (queue.Count == 0) {
@@ -177,14 +177,14 @@ namespace Banshee.AudioCd
                 Dispose ();
                 return;
             }
-            
+
             AudioCdTrackInfo track = queue.Dequeue ();
 
-            user_job.Title = String.Format (Catalog.GetString ("Importing {0} of {1}"), 
+            user_job.Title = String.Format (Catalog.GetString ("Importing {0} of {1}"),
                 ++track_index, source.DiscModel.EnabledCount);
             status = String.Format("{0} - {1}", track.ArtistName, track.TrackTitle);
             user_job.Status = status;
-            
+
             SafeUri uri = new SafeUri (FileNamePattern.BuildFull (ServiceManager.SourceManager.MusicLibrary.BaseDirectory, track, null));
             bool tagging_supported;
             ripper.RipTrack (track.IndexOnDisc, track, uri, out tagging_supported);
@@ -197,50 +197,50 @@ namespace Banshee.AudioCd
             if (user_job == null || ripper == null) {
                 return;
             }
-        
+
             AudioCdTrackInfo track = (AudioCdTrackInfo)args.Track;
-        
+
             ripped_duration += track.Duration;
             track.PrimarySource = ServiceManager.SourceManager.MusicLibrary;
             track.Uri = args.Uri;
-            
+
             track.FileSize = Banshee.IO.File.GetSize (track.Uri);
             track.FileModifiedStamp = Banshee.IO.File.GetModifiedTime (track.Uri);
             track.LastSyncedStamp = DateTime.Now;
-            
+
             track.Save ();
 
             source.UnlockTrack (track);
             RipNextTrack ();
         }
-        
+
         private void OnProgress (object o, AudioCdRipperProgressArgs args)
         {
             if (user_job == null) {
                 return;
             }
-        
+
             TimeSpan total_ripped_duration = ripped_duration + args.EncodedTime;
             user_job.Progress = total_ripped_duration.TotalMilliseconds / total_duration.TotalMilliseconds;
-            
+
             TimeSpan poll_diff = DateTime.Now - last_speed_poll_time;
             double factor = 0;
-            
+
             if (poll_diff.TotalMilliseconds >= 1000) {
-                factor = ((total_ripped_duration - last_speed_poll_duration).TotalMilliseconds 
+                factor = ((total_ripped_duration - last_speed_poll_duration).TotalMilliseconds
                     * (poll_diff.TotalMilliseconds / 1000.0)) / 1000.0;
-                
+
                 last_speed_poll_duration = total_ripped_duration;
                 last_speed_poll_time = DateTime.Now;
                 last_speed_poll_factor = factor > 1 ? factor : 0;
             }
-            
+
             // Make sure the speed factor is between 1 and 200 to allow it to ramp and settle
-            user_job.Status = last_speed_poll_factor > 1 && last_speed_poll_factor <= 200 
-                ? String.Format ("{0} ({1:0.0}x)", status, last_speed_poll_factor) 
+            user_job.Status = last_speed_poll_factor > 1 && last_speed_poll_factor <= 200
+                ? String.Format ("{0} ({1:0.0}x)", status, last_speed_poll_factor)
                 : status;
         }
-        
+
         private void OnError (object o, AudioCdRipperErrorArgs args)
         {
             Dispose ();
@@ -256,14 +256,14 @@ namespace Banshee.AudioCd
                 handler (this, EventArgs.Empty);
             }
         }
-                                
-#region User Job Event Handlers        
-        
+
+#region User Job Event Handlers
+
         private void OnCancelRequested (object o, EventArgs args)
         {
             Dispose ();
         }
-        
+
         private void OnFinished (object o, EventArgs args)
         {
             if (user_job != null) {
@@ -271,10 +271,10 @@ namespace Banshee.AudioCd
                 user_job.Finished -= OnFinished;
                 user_job = null;
             }
-            
+
             source.UnlockAllTracks ();
         }
-        
+
 #endregion
 
     }
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs
index 3ba371c..d8eb5cc 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs
@@ -47,51 +47,51 @@ namespace Banshee.AudioCd
         private SourcePage pref_page;
         private Section pref_section;
         private uint global_interface_id;
-        
+
         public AudioCdService ()
         {
         }
-        
+
         public void Initialize ()
         {
             lock (this) {
                 InstallPreferences ();
-            
+
                 sources = new Dictionary<string, AudioCdSource> ();
-                
+
                 foreach (ICdromDevice device in ServiceManager.HardwareManager.GetAllCdromDevices ()) {
                     MapCdromDevice (device);
                 }
-                
+
                 ServiceManager.HardwareManager.DeviceAdded += OnHardwareDeviceAdded;
                 ServiceManager.HardwareManager.DeviceRemoved += OnHardwareDeviceRemoved;
                 ServiceManager.HardwareManager.DeviceCommand += OnDeviceCommand;
-                
+
                 SetupActions ();
             }
         }
-        
+
         public void Dispose ()
         {
             lock (this) {
                 UninstallPreferences ();
-            
+
                 ServiceManager.HardwareManager.DeviceAdded -= OnHardwareDeviceAdded;
                 ServiceManager.HardwareManager.DeviceRemoved -= OnHardwareDeviceRemoved;
                 ServiceManager.HardwareManager.DeviceCommand -= OnDeviceCommand;
-                
+
                 foreach (AudioCdSource source in sources.Values) {
                     source.Dispose ();
                     ServiceManager.SourceManager.RemoveSource (source);
                 }
-                
+
                 sources.Clear ();
                 sources = null;
-                
+
                 DisposeActions ();
             }
         }
-        
+
         private void MapCdromDevice (ICdromDevice device)
         {
             lock (this) {
@@ -102,7 +102,7 @@ namespace Banshee.AudioCd
                 }
             }
         }
-        
+
         private void MapDiscVolume (IDiscVolume volume)
         {
             lock (this) {
@@ -129,12 +129,12 @@ namespace Banshee.AudioCd
                     } catch (Exception e) {
                         Log.Exception (e);
                     }
-                    
+
                     Log.DebugFormat ("Mapping audio CD ({0})", volume.Uuid);
                 }
             }
         }
-        
+
         internal void UnmapDiscVolume (string uuid)
         {
             lock (this) {
@@ -147,7 +147,7 @@ namespace Banshee.AudioCd
                 }
             }
         }
-        
+
         private void OnHardwareDeviceAdded (object o, DeviceAddedArgs args)
         {
             lock (this) {
@@ -158,14 +158,14 @@ namespace Banshee.AudioCd
                 }
             }
         }
-        
+
         private void OnHardwareDeviceRemoved (object o, DeviceRemovedArgs args)
         {
             lock (this) {
                 UnmapDiscVolume (args.DeviceUuid);
             }
         }
-        
+
 #region DeviceCommand Handling
 
         private bool DeviceCommandMatchesSource (AudioCdSource source, DeviceCommand command)
@@ -173,14 +173,14 @@ namespace Banshee.AudioCd
             if (command.DeviceId.StartsWith ("cdda:")) {
                 try {
                     Uri uri = new Uri (command.DeviceId);
-                    string match_device_node = String.Format ("{0}{1}", uri.Host, 
+                    string match_device_node = String.Format ("{0}{1}", uri.Host,
                         uri.AbsolutePath).TrimEnd ('/', '\\');
                     string device_node = source.DiscModel.Volume.DeviceNode;
                     return device_node.EndsWith (match_device_node);
                 } catch {
                 }
             }
-            
+
             return false;
         }
 
@@ -197,7 +197,7 @@ namespace Banshee.AudioCd
                 }
             }
         }
-        
+
         private void OnDeviceCommand (object o, DeviceCommand command)
         {
             lock (this) {
@@ -209,96 +209,96 @@ namespace Banshee.AudioCd
                         return;
                     }
                 }
-                
+
                 if (unhandled_device_commands == null) {
                     unhandled_device_commands = new List<DeviceCommand> ();
                 }
                 unhandled_device_commands.Add (command);
             }
         }
-        
+
 #endregion
 
-#region Preferences        
-        
+#region Preferences
+
         private void InstallPreferences ()
         {
             PreferenceService service = ServiceManager.Get<PreferenceService> ();
             if (service == null) {
                 return;
             }
-            
+
             service.InstallWidgetAdapters += OnPreferencesServiceInstallWidgetAdapters;
-            
+
             pref_page = new Banshee.Preferences.SourcePage ("audio-cd", Catalog.GetString ("Audio CDs"), "media-cdrom", 400);
-            
+
             pref_section = pref_page.Add (new Section ("audio-cd", Catalog.GetString ("Audio CD Importing"), 20));
             pref_section.ShowLabel = false;
 
             pref_section.Add (new VoidPreference ("import-profile",  Catalog.GetString ("_Import format")));
             pref_section.Add (new VoidPreference ("import-profile-desc"));
 
-            pref_section.Add (new SchemaPreference<bool> (AutoRip, 
+            pref_section.Add (new SchemaPreference<bool> (AutoRip,
                 Catalog.GetString ("_Automatically import audio CDs when inserted"),
                 Catalog.GetString ("When an audio CD is inserted, automatically begin importing it " +
                     "if metadata can be found and it is not already in the library.")));
 
-            pref_section.Add (new SchemaPreference<bool> (EjectAfterRipped, 
+            pref_section.Add (new SchemaPreference<bool> (EjectAfterRipped,
                 Catalog.GetString ("_Eject when done importing"),
                 Catalog.GetString ("When an audio CD has been imported, automatically eject it.")));
-            
-            pref_section.Add (new SchemaPreference<bool> (ErrorCorrection, 
+
+            pref_section.Add (new SchemaPreference<bool> (ErrorCorrection,
                 Catalog.GetString ("Use error correction when importing"),
                 Catalog.GetString ("Error correction tries to work around problem areas on a disc, such " +
                     "as surface scratches, but will slow down importing substantially.")));
         }
-        
+
         private void UninstallPreferences ()
         {
             PreferenceService service = ServiceManager.Get<PreferenceService> ();
             if (service == null || pref_page == null) {
                 return;
             }
-            
+
             service.InstallWidgetAdapters -= OnPreferencesServiceInstallWidgetAdapters;
-            
+
             pref_page.Dispose ();
             pref_page = null;
             pref_section = null;
         }
-        
+
         private void OnPreferencesServiceInstallWidgetAdapters (object o, EventArgs args)
         {
             if (pref_section == null) {
                 return;
             }
-            
+
             Gtk.HBox description_box = new Gtk.HBox ();
-            Banshee.MediaProfiles.Gui.ProfileComboBoxConfigurable chooser 
-                = new Banshee.MediaProfiles.Gui.ProfileComboBoxConfigurable (ServiceManager.MediaProfileManager, 
+            Banshee.MediaProfiles.Gui.ProfileComboBoxConfigurable chooser
+                = new Banshee.MediaProfiles.Gui.ProfileComboBoxConfigurable (ServiceManager.MediaProfileManager,
                     "cd-importing", description_box);
-            
+
             pref_section["import-profile"].DisplayWidget = chooser;
             pref_section["import-profile"].MnemonicWidget = chooser.Combo;
             pref_section["import-profile-desc"].DisplayWidget = description_box;
         }
-        
+
         public static readonly SchemaEntry<bool> ErrorCorrection = new SchemaEntry<bool> (
-            "import", "audio_cd_error_correction", 
+            "import", "audio_cd_error_correction",
             false,
             "Enable error correction",
             "When importing an audio CD, enable error correction (paranoia mode)"
         );
 
         public static readonly SchemaEntry<bool> AutoRip = new SchemaEntry<bool> (
-            "import", "auto_rip_cds", 
+            "import", "auto_rip_cds",
             false,
             "Enable audio CD auto ripping",
             "When an audio CD is inserted, automatically begin ripping it."
         );
 
         public static readonly SchemaEntry<bool> EjectAfterRipped = new SchemaEntry<bool> (
-            "import", "eject_after_ripped", 
+            "import", "eject_after_ripped",
             false,
             "Eject audio CD after ripped",
             "After an audio CD has been ripped, automatically eject it."
@@ -314,14 +314,14 @@ namespace Banshee.AudioCd
             if (uia_service == null) {
                 return;
             }
-            
+
             uia_service.GlobalActions.AddImportant (new Gtk.ActionEntry [] {
                 new Gtk.ActionEntry ("RipDiscAction", null,
                     Catalog.GetString ("Import CD"), null,
                     Catalog.GetString ("Import this audio CD to the library"),
                     OnImportDisc)
             });
-            
+
             uia_service.GlobalActions.AddImportant (
                 new Gtk.ActionEntry ("DuplicateDiscAction", null,
                     Catalog.GetString ("Duplicate CD"), null,
@@ -331,14 +331,14 @@ namespace Banshee.AudioCd
 
             global_interface_id = uia_service.UIManager.AddUiFromResource ("GlobalUI.xml");
         }
-        
+
         private void DisposeActions ()
         {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             if (uia_service == null) {
                 return;
             }
-            
+
             uia_service.GlobalActions.Remove ("RipDiscAction");
             uia_service.GlobalActions.Remove ("DuplicateDiscAction");
             uia_service.UIManager.RemoveUi (global_interface_id);
@@ -348,19 +348,19 @@ namespace Banshee.AudioCd
         {
             ImportOrDuplicateDisc (true);
         }
-        
+
         private void OnDuplicateDisc (object o, EventArgs args)
         {
             ImportOrDuplicateDisc (false);
         }
-        
+
         private void ImportOrDuplicateDisc (bool import)
         {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             if (uia_service == null) {
                 return;
             }
-            
+
             AudioCdSource source = uia_service.SourceActions.ActionSource as AudioCdSource;
             if (source != null) {
                 if (import) {
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
index 539c962..ab14347 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
@@ -44,21 +44,21 @@ using Banshee.Gui;
 
 namespace Banshee.AudioCd
 {
-    public class AudioCdSource : Source, ITrackModelSource, IUnmapableSource, 
+    public class AudioCdSource : Source, ITrackModelSource, IUnmapableSource,
         IImportSource, IDurationAggregator, IFileSizeAggregator, IDisposable
     {
         private AudioCdService service;
         private AudioCdDiscModel disc_model;
         private SourceMessage query_message;
 
-        public AudioCdSource (AudioCdService service, AudioCdDiscModel discModel) 
+        public AudioCdSource (AudioCdService service, AudioCdDiscModel discModel)
             : base (Catalog.GetString ("Audio CD"), discModel.Title, 400)
         {
             this.service = service;
             this.disc_model = discModel;
 
             TypeUniqueId = "";
-            
+
             Properties.SetString ("TrackView.ColumnControllerXml", String.Format (@"
                 <column-controller>
                   <column>
@@ -67,7 +67,7 @@ namespace Banshee.AudioCd
                   <add-all-defaults />
                 </column-controller>
             "));
-            
+
             disc_model.MetadataQueryStarted += OnMetadataQueryStarted;
             disc_model.MetadataQueryFinished += OnMetadataQueryFinished;
             disc_model.EnabledCountChanged += OnEnabledCountChanged;
@@ -75,29 +75,29 @@ namespace Banshee.AudioCd
 
             SetupGui ();
         }
-        
+
         public TimeSpan Duration {
             get { return disc_model.Duration; }
         }
-        
+
         public long FileSize {
             get { return disc_model.FileSize; }
         }
-        
+
         public bool DiscIsPlaying {
             get {
                 AudioCdTrackInfo playing_track = ServiceManager.PlayerEngine.CurrentTrack as AudioCdTrackInfo;
                 return playing_track != null && playing_track.Model == disc_model;
             }
         }
-        
+
         public void StopPlayingDisc ()
         {
             if (DiscIsPlaying) {
                 ServiceManager.PlayerEngine.Close (true);
             }
         }
-        
+
         public void Dispose ()
         {
             ClearMessages ();
@@ -107,39 +107,39 @@ namespace Banshee.AudioCd
             service = null;
             disc_model = null;
         }
-        
+
         public AudioCdDiscModel DiscModel {
             get { return disc_model; }
         }
-        
+
         private void OnEnabledCountChanged (object o, EventArgs args)
         {
             UpdateActions ();
         }
-        
+
         private void OnMetadataQueryStarted (object o, EventArgs args)
         {
             if (query_message != null) {
                 DestroyQueryMessage ();
             }
-            
+
             query_message = new SourceMessage (this);
             query_message.FreezeNotify ();
             query_message.CanClose = false;
             query_message.IsSpinning = true;
             query_message.Text = Catalog.GetString ("Searching for CD metadata...");
             query_message.ThawNotify ();
-            
+
             PushMessage (query_message);
         }
-        
+
         private void OnMetadataQueryFinished (object o, EventArgs args)
         {
             if (disc_model.Title != Name) {
                 Name = disc_model.Title;
                 OnUpdated ();
             }
-        
+
             if (disc_model.MetadataQuerySuccess) {
                 DestroyQueryMessage ();
                 if (DiscIsPlaying) {
@@ -156,7 +156,7 @@ namespace Banshee.AudioCd
             if (query_message == null) {
                 return;
             }
-            
+
             query_message.FreezeNotify ();
             query_message.IsSpinning = false;
             query_message.SetIconName ("dialog-error");
@@ -164,7 +164,7 @@ namespace Banshee.AudioCd
             query_message.CanClose = true;
             query_message.ThawNotify ();
         }
-        
+
         private void DestroyQueryMessage ()
         {
             if (query_message != null) {
@@ -178,10 +178,10 @@ namespace Banshee.AudioCd
             // Make sure the album isn't already in the Library
             TrackInfo track = disc_model[0];
             int count = ServiceManager.DbConnection.Query<int> (
-                @"SELECT Count(*) FROM CoreTracks, CoreArtists, CoreAlbums WHERE 
+                @"SELECT Count(*) FROM CoreTracks, CoreArtists, CoreAlbums WHERE
                     CoreTracks.PrimarySourceID = ? AND
-                    CoreTracks.ArtistID = CoreArtists.ArtistID AND 
-                    CoreTracks.AlbumID = CoreAlbums.AlbumID AND 
+                    CoreTracks.ArtistID = CoreArtists.ArtistID AND
+                    CoreTracks.AlbumID = CoreAlbums.AlbumID AND
                     CoreArtists.Name = ? AND CoreAlbums.Title = ? AND (CoreTracks.Disc = ? OR CoreTracks.Disc = 0)",
                     ServiceManager.SourceManager.MusicLibrary.DbId,
                     track.ArtistName, track.AlbumTitle, track.DiscNumber
@@ -199,7 +199,7 @@ namespace Banshee.AudioCd
         internal void ImportDisc ()
         {
             AudioCdRipper ripper = null;
-            
+
             try {
                 if (AudioCdRipper.Supported) {
                     ripper = new AudioCdRipper (this);
@@ -210,7 +210,7 @@ namespace Banshee.AudioCd
                 if (ripper != null) {
                     ripper.Dispose ();
                 }
-                
+
                 Log.Error (Catalog.GetString ("Could not import CD"), e.Message, true);
                 Log.Exception (e);
             }
@@ -232,27 +232,27 @@ namespace Banshee.AudioCd
                 Hyena.Log.Exception (e);
             }
         }
-        
+
         internal void LockAllTracks ()
         {
             StopPlayingDisc ();
-        
+
             foreach (AudioCdTrackInfo track in disc_model) {
                 track.CanPlay = false;
             }
-            
+
             disc_model.NotifyUpdated ();
         }
-        
+
         internal void UnlockAllTracks ()
         {
             foreach (AudioCdTrackInfo track in disc_model) {
                 track.CanPlay = true;
             }
-            
+
             disc_model.NotifyUpdated ();
         }
-        
+
         internal void UnlockTrack (AudioCdTrackInfo track)
         {
             track.CanPlay = true;
@@ -276,9 +276,9 @@ namespace Banshee.AudioCd
         public override bool HasViewableTrackProperties {
             get { return true; }
         }
-        
+
 #endregion
-        
+
 #region ITrackModelSource Implementation
 
         public TrackListModel TrackModel {
@@ -333,7 +333,7 @@ namespace Banshee.AudioCd
         public bool ShowBrowser {
             get { return false; }
         }
-        
+
         public bool HasDependencies {
             get { return false; }
         }
@@ -349,13 +349,13 @@ namespace Banshee.AudioCd
         public bool Unmap ()
         {
             StopPlayingDisc ();
-            
+
             foreach (TrackInfo track in disc_model) {
                 track.CanPlay = false;
             }
-            
+
             OnUpdated ();
-            
+
             SourceMessage eject_message = new SourceMessage (this);
             eject_message.FreezeNotify ();
             eject_message.IsSpinning = true;
@@ -363,12 +363,12 @@ namespace Banshee.AudioCd
             eject_message.Text = Catalog.GetString ("Ejecting audio CD...");
             eject_message.ThawNotify ();
             PushMessage (eject_message);
-        
+
             ThreadPool.QueueUserWorkItem (delegate {
                 try {
                     disc_model.Volume.Unmount ();
                     disc_model.Volume.Eject ();
-                    
+
                     ThreadAssist.ProxyToMain (delegate {
                         service.UnmapDiscVolume (disc_model.Volume.Uuid);
                         Dispose ();
@@ -380,17 +380,17 @@ namespace Banshee.AudioCd
                         eject_message.SetIconName ("dialog-error");
                         eject_message.Text = String.Format (Catalog.GetString ("Could not eject audio CD: {0}"), e.Message);
                         PushMessage (eject_message);
-                        
+
                         foreach (TrackInfo track in disc_model) {
                             track.CanPlay = true;
                         }
                         OnUpdated ();
                     });
-                    
+
                     Log.Exception (e);
                 }
             });
-            
+
             return true;
         }
 
@@ -409,31 +409,31 @@ namespace Banshee.AudioCd
         private bool actions_loaded = false;
 
         private void SetupGui ()
-        {                                       
+        {
             Properties.SetStringList ("Icon.Name", "media-cdrom", "gnome-dev-cdrom-audio", "source-cd-audio");
             Properties.SetString ("SourcePreferencesActionLabel", Catalog.GetString ("Audio CD Preferences"));
             Properties.SetString ("UnmapSourceActionLabel", Catalog.GetString ("Eject Disc"));
             Properties.SetString ("UnmapSourceActionIconName", "media-eject");
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
             Properties.SetString ("GtkActionPath", "/AudioCdContextMenu");
-            
+
             actions_loaded = true;
-            
+
             UpdateActions ();
         }
-        
+
         private void UpdateActions ()
         {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             if (uia_service == null) {
                 return;
             }
-            
+
             Gtk.Action rip_action = uia_service.GlobalActions["RipDiscAction"];
             if (rip_action != null) {
                 string title = disc_model.Title;
                 int max_title_length = 20;
-                title = title.Length > max_title_length 
+                title = title.Length > max_title_length
                     ? String.Format ("{0}\u2026", title.Substring (0, max_title_length).Trim ())
                     : title;
                 rip_action.Label = String.Format (Catalog.GetString ("Import \u201f{0}\u201d"), title);
@@ -441,23 +441,23 @@ namespace Banshee.AudioCd
                 rip_action.IconName = "media-import-audio-cd";
                 rip_action.Sensitive = AudioCdRipper.Supported && disc_model.EnabledCount > 0;
             }
-            
+
             Gtk.Action duplicate_action = uia_service.GlobalActions["DuplicateDiscAction"];
             if (duplicate_action != null) {
                 duplicate_action.IconName = "media-cdrom";
                 duplicate_action.Visible = AudioCdDuplicator.Supported;
             }
         }
-        
+
         protected override void OnUpdated ()
         {
             if (actions_loaded) {
                 UpdateActions ();
             }
-            
+
             base.OnUpdated ();
         }
-        
+
 #endregion
 
 #region IImportSource
@@ -466,15 +466,15 @@ namespace Banshee.AudioCd
         {
             ImportDisc ();
         }
-        
+
         string [] IImportSource.IconNames {
             get { return Properties.GetStringList ("Icon.Name"); }
         }
-        
+
         bool IImportSource.CanImport {
             get { return true; }
         }
-        
+
         int IImportSource.SortOrder {
             get { return -10; }
         }
@@ -482,7 +482,7 @@ namespace Banshee.AudioCd
         string IImportSource.ImportLabel {
             get { return null; }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdTrackInfo.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdTrackInfo.cs
index 447bfd7..67a8631 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdTrackInfo.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdTrackInfo.cs
@@ -40,38 +40,38 @@ namespace Banshee.AudioCd
         {
             this.model = model;
             this.index_on_disc = index;
-            
-            Uri = new SafeUri (String.Format ("cdda://{0}#{1}", index_on_disc + 1, deviceNode)); 
+
+            Uri = new SafeUri (String.Format ("cdda://{0}#{1}", index_on_disc + 1, deviceNode));
         }
-        
+
         public override bool TrackEqual (TrackInfo track)
         {
             AudioCdTrackInfo cd_track = track as AudioCdTrackInfo;
             return cd_track == null ? false : (cd_track.Model == Model && cd_track.IndexOnDisc == IndexOnDisc);
         }
-        
+
         private AudioCdDiscModel model;
         public AudioCdDiscModel Model {
             get { return model; }
         }
-        
+
         private int index_on_disc;
         public int IndexOnDisc {
             get { return index_on_disc; }
         }
-        
+
         private DatabaseAlbumInfo album_info;
         public new DatabaseAlbumInfo Album {
             get { return album_info; }
             set { album_info = value; }
         }
-        
+
         public DatabaseArtistInfo artist_info;
         public new DatabaseArtistInfo Artist {
             get { return artist_info; }
             set { artist_info = value; }
         }
-        
+
         public override string AlbumMusicBrainzId {
             get { return Album == null ? null : Album.MusicBrainzId; }
         }
@@ -79,10 +79,10 @@ namespace Banshee.AudioCd
         public override string ArtistMusicBrainzId {
             get { return Artist == null ? null : Artist.MusicBrainzId; }
         }
-        
+
         public override DateTime ReleaseDate {
             get { return Album == null ? base.ReleaseDate : Album.ReleaseDate; }
-            set { 
+            set {
                 if (Album == null) {
                     base.ReleaseDate = value;
                 } else {
@@ -94,11 +94,11 @@ namespace Banshee.AudioCd
         private bool rip_enabled = true;
         public bool RipEnabled {
             get { return rip_enabled; }
-            set { 
+            set {
                 if (rip_enabled == value) {
                     return;
                 }
-                
+
                 rip_enabled = value;
                 model.EnabledCount += rip_enabled ? 1 : -1;
             }
diff --git a/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs b/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs
index 528e593..407a171 100644
--- a/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs
+++ b/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs
@@ -1,4 +1,4 @@
-// 
+//
 // BooScriptService.cs
 //
 // Author:
@@ -44,18 +44,18 @@ namespace Banshee.BooScript
     public class BooScriptService : IExtensionService
     {
         private static string scripts_directory = Path.Combine (Paths.ApplicationData, "boo-scripts");
-        
+
         private bool initialized;
-        
+
         void IExtensionService.Initialize ()
         {
             lock (this) {
                 if (initialized) {
                     return;
                 }
-                
+
                 Directory.CreateDirectory (scripts_directory);
-                
+
                 if (ApplicationContext.CommandLine.Contains ("run-scripts")) {
                     foreach (string file in ApplicationContext.CommandLine.Files) {
                         if (Path.GetExtension (file) == ".boo") {
@@ -63,64 +63,64 @@ namespace Banshee.BooScript
                         }
                     }
                 }
-            
+
                 foreach (string file in Directory.GetFiles (scripts_directory, "*.boo")) {
                     RunBooScript (file);
                 }
-                
+
                 initialized = true;
             }
         }
-        
+
         public void Dispose ()
         {
         }
-        
+
 #region Boo Scripting Engine
 
         private void RunBooScript (string file)
         {
             uint timer_id = Log.DebugTimerStart ();
-        
+
             BooCompiler compiler = new BooCompiler ();
             compiler.Parameters.Ducky = true;
             compiler.Parameters.Pipeline = new CompileToMemory ();
             compiler.Parameters.Input.Add (new FileInput (file));
-            
+
             foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies ()) {
                 compiler.Parameters.References.Add (assembly);
             }
-            
+
             CompilerContext context = compiler.Run ();
-            
+
             if (context.GeneratedAssembly == null) {
                 foreach (CompilerError error in context.Errors) {
-                    Log.Warning (String.Format ("BooScript: compiler error: {0} ({1})", 
+                    Log.Warning (String.Format ("BooScript: compiler error: {0} ({1})",
                         error.ToString (), file), false);
                 }
-                
+
                 return;
             }
-            
+
             try {
                 Type script_module = context.GeneratedAssembly.GetTypes ()[0];
-                
+
                 if (script_module == null) {
                     Log.Warning (String.Format ("BooScript: could not find module in script ({0})", file), false);
                     return;
                 }
-                
+
                 MethodInfo main_entry = script_module.Assembly.EntryPoint;
                 main_entry.Invoke (null, new object[main_entry.GetParameters ().Length]);
-                        
+
                 Log.DebugTimerPrint (timer_id, "BooScript: compiled and invoked: {0}");
             } catch (Exception e) {
                 Log.Exception ("BooScript: scripted failed", e);
             }
         }
 
-#endregion                
-        
+#endregion
+
         string IService.ServiceName {
             get { return "BooScriptService"; }
         }
diff --git a/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks/BookmarksService.cs b/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks/BookmarksService.cs
index 21a0605..ae4d696 100644
--- a/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks/BookmarksService.cs
+++ b/src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks/BookmarksService.cs
@@ -19,17 +19,17 @@ namespace Banshee.Bookmarks
     public class BookmarksService : IExtensionService, IDisposable
     {
         private BookmarkUI ui;
-        
+
         public BookmarksService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             Bookmark.Initialize();
             ui = BookmarkUI.Instance;
         }
-        
+
         public void Dispose ()
         {
             if (ui != null)
@@ -55,11 +55,11 @@ namespace Banshee.Bookmarks
         private Dictionary<Bookmark, MenuItem> select_items = new Dictionary<Bookmark, MenuItem>();
         private Dictionary<Bookmark, MenuItem> remove_items = new Dictionary<Bookmark, MenuItem>();
         private Dictionary<MenuItem, Bookmark> bookmark_map = new Dictionary<MenuItem, Bookmark>();
-        
+
         private InterfaceActionService action_service;
         private ActionGroup actions;
         private uint ui_manager_id;
-        
+
         private static BookmarkUI instance = null;
         public static BookmarkUI Instance {
             get {
@@ -76,7 +76,7 @@ namespace Banshee.Bookmarks
         private BookmarkUI()
         {
             action_service = ServiceManager.Get<InterfaceActionService> ("InterfaceActionService");
-            
+
             actions = new ActionGroup("Bookmarks");
 
             actions.Add(new ActionEntry [] {
@@ -135,7 +135,7 @@ namespace Banshee.Bookmarks
 
             bookmark_item.ShowAll();
         }
-        
+
         public void AddBookmark(Bookmark bookmark)
         {
             if (select_items.ContainsKey(bookmark))
@@ -269,12 +269,12 @@ namespace Banshee.Bookmarks
                 Remove();
             }
         }
-        
+
         private void HandleStateChanged (PlayerEventArgs args)
         {
             if (((PlayerEventStateChangeArgs)args).Current == PlayerState.Playing) {
                 ServiceManager.PlayerEngine.DisconnectEvent (HandleStateChanged);
-                
+
                 if (!ServiceManager.PlayerEngine.CurrentTrack.IsLive) {
                     // Sleep in 5ms increments for at most 250ms waiting for CanSeek to be true
                     int count = 0;
@@ -283,7 +283,7 @@ namespace Banshee.Bookmarks
                         count++;
                     }
                 }
-                
+
                 if (ServiceManager.PlayerEngine.CanSeek) {
                     ServiceManager.PlayerEngine.Position = position;
                 }
diff --git a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmDetectJob.cs b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmDetectJob.cs
index 5563ce9..08621fd 100644
--- a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmDetectJob.cs
+++ b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmDetectJob.cs
@@ -57,10 +57,10 @@ namespace Banshee.Bpm
         private ManualResetEvent result_ready_event = new ManualResetEvent (false);
         private SafeUri result_uri;
         private int result_bpm;
-        
+
         private static HyenaSqliteCommand update_query = new HyenaSqliteCommand (
             "UPDATE CoreTracks SET BPM = ?, DateUpdatedStamp = ? WHERE TrackID = ?");
-        
+
         public BpmDetectJob () : base (Catalog.GetString ("Detecting BPM"))
         {
             IconNames = new string [] {"audio-x-generic"};
@@ -84,7 +84,7 @@ namespace Banshee.Bpm
 
             Register ();
         }
-        
+
         protected override void Init ()
         {
             detector = GetDetector ();
diff --git a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmEntry.cs b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmEntry.cs
index 818fce3..4260d22 100644
--- a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmEntry.cs
+++ b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmEntry.cs
@@ -53,7 +53,7 @@ namespace Banshee.Bpm
         private EditorEditableUndoAdapter<Entry> undo_adapter = new EditorEditableUndoAdapter<Entry> ();
 
         public event EventHandler Changed;
-        
+
         public BpmEntry ()
         {
             detector = BpmDetectJob.GetDetector ();
@@ -112,19 +112,19 @@ namespace Banshee.Bpm
 
             ShowAll ();
         }
-        
+
         public void DisconnectUndo ()
         {
             undo_adapter.DisconnectUndo ();
         }
-        
+
         public void ConnectUndo (EditorTrackInfo track)
         {
             this.track = track;
             tap_adapter.Reset ();
             undo_adapter.ConnectUndo (bpm_entry, track);
         }
-        
+
         public int Bpm {
             get { return bpm_entry.ValueAsInt; }
             set { bpm_entry.Value = value; }
diff --git a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmService.cs b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmService.cs
index 1e0f8f3..05f678f 100644
--- a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmService.cs
+++ b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmService.cs
@@ -51,11 +51,11 @@ namespace Banshee.Bpm
         private BpmDetectJob job;
         private bool disposed;
         private object sync = new object ();
-        
+
         public BpmService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             Banshee.MediaEngine.IBpmDetector detector = BpmDetectJob.GetDetector ();
@@ -69,20 +69,20 @@ namespace Banshee.Bpm
                 ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             }
         }
-        
+
         private void OnSourceAdded (SourceAddedArgs args)
         {
             if (ServiceStartup ()) {
                 ServiceManager.SourceManager.SourceAdded -= OnSourceAdded;
             }
         }
-        
+
         private bool ServiceStartup ()
         {
             if (ServiceManager.SourceManager.MusicLibrary == null) {
                 return false;
             }
-            
+
             ServiceManager.SourceManager.MusicLibrary.TracksAdded += OnTracksAdded;
             InstallPreferences ();
 
@@ -90,10 +90,10 @@ namespace Banshee.Bpm
                 Detect ();
                 return false;
             });
-            
+
             return true;
         }
-        
+
         public void Dispose ()
         {
             if (disposed) {
@@ -102,10 +102,10 @@ namespace Banshee.Bpm
 
             ServiceManager.SourceManager.MusicLibrary.TracksAdded -= OnTracksAdded;
             UninstallPreferences ();
-        
+
             disposed = true;
         }
-        
+
         public void Detect ()
         {
             if (!Enabled) {
@@ -122,40 +122,40 @@ namespace Banshee.Bpm
 
             job.Finished += delegate { job = null; };
         }
-        
+
         private void OnTracksAdded (Source sender, TrackEventArgs args)
         {
             Detect ();
         }
-        
+
         string IService.ServiceName {
             get { return "BpmService"; }
         }
 
-#region Preferences        
+#region Preferences
 
         private PreferenceBase enabled_pref;
-        
+
         private void InstallPreferences ()
         {
             PreferenceService service = ServiceManager.Get<PreferenceService> ();
             if (service == null) {
                 return;
             }
-            
+
             enabled_pref = ServiceManager.SourceManager.MusicLibrary.PreferencesPage["misc"].Add (
-                new SchemaPreference<bool> (EnabledSchema, 
+                new SchemaPreference<bool> (EnabledSchema,
                     Catalog.GetString ("_Automatically detect BPM for all songs"),
                     Catalog.GetString ("Detect BPM for all songs that don't already have a value set"),
                     delegate { Enabled = EnabledSchema.Get (); })
             );
         }
-        
+
         private void UninstallPreferences ()
         {
             ServiceManager.SourceManager.MusicLibrary.PreferencesPage["misc"].Remove (enabled_pref);
         }
-        
+
 #endregion
 
         public bool Enabled {
@@ -171,7 +171,7 @@ namespace Banshee.Bpm
                 }
             }
         }
-        
+
         private static readonly SchemaEntry<bool> EnabledSchema = new SchemaEntry<bool> (
             "plugins.bpm", "auto_enabled",
             false,
diff --git a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmTapAdapter.cs b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmTapAdapter.cs
index 24ae1b2..cd83afe 100644
--- a/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmTapAdapter.cs
+++ b/src/Extensions/Banshee.Bpm/Banshee.Bpm/BpmTapAdapter.cs
@@ -87,7 +87,7 @@ namespace Banshee.Bpm
 
             if (last_tap != 0) {
                 int period = now - last_tap;
-                
+
                 Console.WriteLine ("{0} ms since last tap; eq {1} BPM", period, 60000/period);
                 tap_periods[tap_index] = period;
                 tap_index = (tap_index + 1) % (NUM_PERIODS - 1);
diff --git a/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs b/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs
index 47171b0..6fa1b6c 100644
--- a/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs
+++ b/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtJob.cs
@@ -54,7 +54,7 @@ namespace Banshee.CoverArt
     {
         private DateTime last_scan = DateTime.MinValue;
         private TimeSpan retry_every = TimeSpan.FromDays (7);
-        
+
         public CoverArtJob (DateTime lastScan) : base (Catalog.GetString ("Downloading Cover Art"))
         {
             last_scan = lastScan;
@@ -71,7 +71,7 @@ namespace Banshee.CoverArt
                     WHERE
                         CoreTracks.PrimarySourceID = ? AND
                         CoreTracks.DateUpdatedStamp > ? AND
-                        CoreTracks.AlbumID = CoreAlbums.AlbumID AND 
+                        CoreTracks.AlbumID = CoreAlbums.AlbumID AND
                         CoreAlbums.ArtistID = CoreArtists.ArtistID AND
                         CoreTracks.AlbumID NOT IN (
                             SELECT AlbumID FROM CoverArtDownloads WHERE
@@ -80,12 +80,12 @@ namespace Banshee.CoverArt
             );
 
             SelectCommand = new HyenaSqliteCommand (@"
-                SELECT DISTINCT CoreAlbums.AlbumID, CoreAlbums.Title, CoreArtists.Name, CoreTracks.Uri 
+                SELECT DISTINCT CoreAlbums.AlbumID, CoreAlbums.Title, CoreArtists.Name, CoreTracks.Uri
                     FROM CoreTracks, CoreArtists, CoreAlbums
                     WHERE
                         CoreTracks.PrimarySourceID = ? AND
                         CoreTracks.DateUpdatedStamp > ? AND
-                        CoreTracks.AlbumID = CoreAlbums.AlbumID AND 
+                        CoreTracks.AlbumID = CoreAlbums.AlbumID AND
                         CoreAlbums.ArtistID = CoreArtists.ArtistID AND
                         CoreTracks.AlbumID NOT IN (
                             SELECT AlbumID FROM CoverArtDownloads WHERE
@@ -101,7 +101,7 @@ namespace Banshee.CoverArt
             CanCancel = true;
             DelayShow = true;
         }
-        
+
         public void Start ()
         {
             Register ();
diff --git a/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs b/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
index 1e57654..e487721 100644
--- a/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
+++ b/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
@@ -53,13 +53,13 @@ namespace Banshee.CoverArt
         private ActionGroup actions;
         private bool disposed;
         private uint ui_manager_id;
-        
+
         private CoverArtJob job;
-        
+
         public CoverArtService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             if (!ServiceManager.DbConnection.TableExists ("CoverArtDownloads")) {
@@ -72,35 +72,35 @@ namespace Banshee.CoverArt
             }
 
             action_service = ServiceManager.Get<InterfaceActionService> ();
-            
+
             if (!ServiceStartup ()) {
                 ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             }
         }
-        
+
         private void OnSourceAdded (SourceAddedArgs args)
         {
             if (ServiceStartup ()) {
                 ServiceManager.SourceManager.SourceAdded -= OnSourceAdded;
             }
         }
-        
+
         private bool ServiceStartup ()
         {
             if (action_service == null || ServiceManager.SourceManager.MusicLibrary == null) {
                 return false;
             }
-            
+
             Initialize ();
-            
+
             return true;
         }
-        
+
         private void Initialize ()
-        {            
+        {
             Banshee.Base.ThreadAssist.AssertInMainThread ();
             actions = new ActionGroup ("CoverArt");
-            
+
             ActionEntry[] action_list = new ActionEntry [] {
                 new ActionEntry ("CoverArtAction", null,
                     Catalog.GetString ("_Cover Art"), null,
@@ -109,16 +109,16 @@ namespace Banshee.CoverArt
                     Catalog.GetString ("_Download Cover Art"), null,
                     Catalog.GetString ("Download cover art for all tracks"), OnFetchCoverArt)
             };
-            
+
             actions.Add (action_list);
-            
+
             action_service.UIManager.InsertActionGroup (actions, 0);
             ui_manager_id = action_service.UIManager.AddUiFromResource ("CoverArtMenu.xml");
-            
+
             ServiceManager.SourceManager.MusicLibrary.TracksAdded += OnTracksAdded;
             ServiceManager.SourceManager.MusicLibrary.TracksChanged += OnTracksChanged;
         }
-        
+
         public void Dispose ()
         {
             if (disposed) {
@@ -130,36 +130,36 @@ namespace Banshee.CoverArt
                 if (fetch_action != null) {
                     action_service.GlobalActions.Remove (fetch_action);
                 }
-                
+
                 action_service.RemoveActionGroup ("CoverArt");
                 action_service.UIManager.RemoveUi (ui_manager_id);
-                
+
                 actions = null;
                 action_service = null;
-                
+
                 ServiceManager.SourceManager.MusicLibrary.TracksAdded -= OnTracksAdded;
                 ServiceManager.SourceManager.MusicLibrary.TracksChanged -= OnTracksChanged;
-            
+
                 disposed = true;
             });
         }
-        
+
         public void FetchCoverArt ()
         {
             bool force = false;
             if (!String.IsNullOrEmpty (Environment.GetEnvironmentVariable ("BANSHEE_FORCE_COVER_ART_FETCH"))) {
                 Log.Debug ("Forcing cover art download session");
-                force = true;                
+                force = true;
             }
-            
+
             FetchCoverArt (force);
         }
-        
+
         public void FetchCoverArt (bool force)
         {
             if (job == null && ServiceManager.Get<Network> ().Connected) {
                 DateTime last_scan = DateTime.MinValue;
-                
+
                 if (!force) {
                     try {
                         last_scan = DatabaseConfigurationClient.Client.Get<DateTime> ("last_cover_art_scan",
@@ -180,17 +180,17 @@ namespace Banshee.CoverArt
                 job.Start ();
             }
         }
-        
+
         private void OnFetchCoverArt (object o, EventArgs args)
         {
             FetchCoverArt (true);
         }
-        
+
         private void OnTracksAdded (Source sender, TrackEventArgs args)
         {
             FetchCoverArt ();
         }
-        
+
         private void OnTracksChanged (Source sender, TrackEventArgs args)
         {
             if (args.ChangedFields == null) {
@@ -205,11 +205,11 @@ namespace Banshee.CoverArt
                 }
             }
         }
-    
+
         string IService.ServiceName {
             get { return "CoverArtService"; }
         }
-        
+
         public static readonly SchemaEntry<bool> EnabledSchema = new SchemaEntry<bool> (
             "plugins.cover_art", "enabled",
             true,
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs
index 39dfefb..ee26644 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapContainerSource.cs
@@ -44,7 +44,7 @@ namespace Banshee.Daap
             Properties.SetStringList ("Icon.Name", "applications-internet", "network-server");
             TypeUniqueId = "daap-container";
         }
-        
+
         public override bool? AutoExpand {
             get { return ExpandedSchema.Get (); }
         }
@@ -57,7 +57,7 @@ namespace Banshee.Daap
         public override bool CanActivate {
             get { return false; }
         }
-        
+
         public override bool CanRename {
             get { return false; }
         }
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapErrorView.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapErrorView.cs
index 8182326..06f1f9e 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapErrorView.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapErrorView.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -41,14 +41,14 @@ namespace Banshee.Daap
         InvalidAuthentication,
         UserDisconnect
     }
-    
+
     public class DaapErrorView : Hyena.Widgets.RoundedFrame, Banshee.Sources.Gui.ISourceContents
     {
         private MessagePane pane;
         private bool info_link_clicked;
         private DaapSource source;
         private DaapErrorType failure;
-        
+
         public Banshee.Sources.ISource Source {
             get { return source; }
         }
@@ -56,29 +56,29 @@ namespace Banshee.Daap
         public Widget Widget {
             get { return this; }
         }
-        
+
         public DaapErrorView (DaapSource source, DaapErrorType failure) : base()
         {
             //AppPaintable = true;
             //BorderWidth = 10;
-            
+
             this.source = source;
             this.failure = failure;
-            
+
             pane = new MessagePane();
             pane.HeaderIcon = IconThemeUtils.LoadIcon(48, "face-surprise", Stock.DialogError);
             pane.ArrowIcon = IconThemeUtils.LoadIcon(24, "go-next", Stock.GoForward);
-            pane.HeaderMarkup = String.Format("<big><b>{0}</b></big>", 
-                GLib.Markup.EscapeText((failure == DaapErrorType.UserDisconnect 
+            pane.HeaderMarkup = String.Format("<big><b>{0}</b></big>",
+                GLib.Markup.EscapeText((failure == DaapErrorType.UserDisconnect
                     ? Catalog.GetString("Disconnected from music share")
                     : Catalog.GetString("Unable to connect to music share"))));
-                
+
             AddPaneItems();
             pane.Show();
-            
+
             Add(pane);
         }
-        
+
         private void AddPaneItems()
         {
             if(info_link_clicked) {
@@ -86,22 +86,22 @@ namespace Banshee.Daap
                 link.Xalign = 0.0f;
                 link.Markup = String.Format("<u>{0}</u>", GLib.Markup.EscapeText(Catalog.GetString(
                     "Back")));
-                    
+
                 link.Clicked += delegate(object o, EventArgs args) {
                     info_link_clicked = false;
                     pane.Clear();
                     AddPaneItems();
                 };
-                
+
                 link.Show();
-                pane.Append(link, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, true, 
+                pane.Append(link, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, true,
                     IconThemeUtils.LoadIcon(24, "go-previous", Stock.GoBack));
-                
+
                 pane.Append(Catalog.GetString(
                     "iTunes\u00ae 7 introduced new compatibility issues and currently only " +
-                    "works with other iTunes\u00ae 7 clients.\n\n" + 
-                    "No third-party clients can connect to iTunes\u00ae music shares anymore. " + 
-                    "This is an intentional limitation by Apple in iTunes\u00ae 7 and we apologize for " + 
+                    "works with other iTunes\u00ae 7 clients.\n\n" +
+                    "No third-party clients can connect to iTunes\u00ae music shares anymore. " +
+                    "This is an intentional limitation by Apple in iTunes\u00ae 7 and we apologize for " +
                     "the unfortunate inconvenience."
                 ));
             } else {
@@ -111,16 +111,16 @@ namespace Banshee.Daap
                         "Common reasons for connection failures:")));
                     header_label.Xalign = 0.0f;
                     header_label.Show();
-                    
+
                     pane.Append(header_label, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, false);
-                    
+
                     pane.Append(Catalog.GetString("The provided login credentials are invalid"));
                     pane.Append(Catalog.GetString("The login process was canceled"));
                     pane.Append(Catalog.GetString("Too many users are connected to this share"));
                 } else {
                     pane.Append(Catalog.GetString("You are no longer connected to this music share"));
                 }
-                
+
                 if(failure == DaapErrorType.UserDisconnect || failure == DaapErrorType.InvalidAuthentication) {
                     Button button = new Button(Catalog.GetString("Try connecting again"));
                     button.Clicked += delegate { source.Activate(); };
@@ -132,18 +132,18 @@ namespace Banshee.Daap
                     pane.Append(bbox, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, false);
                     return;
                 }
-                
+
                 LinkLabel link = new LinkLabel();
                 link.Xalign = 0.0f;
                 link.Markup = String.Format("<u>{0}</u>", GLib.Markup.EscapeText(Catalog.GetString(
                     "The music share is hosted by iTunes\u00ae 7")));
-                    
+
                 link.Clicked += delegate(object o, EventArgs args) {
                     info_link_clicked = true;
                     pane.Clear();
                     AddPaneItems();
                 };
-                
+
                 link.Show();
                 pane.Append(link, Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill, 0, true);
             }
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs
index 87c75da..87e7fd6 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs
@@ -1,4 +1,4 @@
-// 
+//
 // DaapLoginDialog.cs
 //
 // Author:
@@ -42,7 +42,7 @@ namespace Banshee.Daap
         private Entry username_entry;
         private Entry password_entry;
         private Gtk.AccelGroup accel_group;
-        
+
         public DaapLoginDialog(string shareName, bool showUsername) :  base(
             Catalog.GetString("Login to Music Share"),
             null,
@@ -57,7 +57,7 @@ namespace Banshee.Daap
             AddAccelGroup(accel_group);
             BuildWindow();
         }
-        
+
         private void BuildWindow()
         {
             BorderWidth = 5;
@@ -67,66 +67,66 @@ namespace Banshee.Daap
             HBox box = new HBox();
             box.BorderWidth = 5;
             box.Spacing = 15;
-            
+
             Image image = new Image(Stock.Network, IconSize.Dialog);
             image.Yalign = 0.2f;
             box.PackStart(image, false, false, 0);
-            
+
             VBox content_box = new VBox();
             content_box.Spacing = 12;
-            
+
             Label header = new Label();
             header.Markup = "<big><b>" + GLib.Markup.EscapeText(Catalog.GetString(
                 "Authentication Required")) + "</b></big>";
             header.Justify = Justification.Left;
             header.SetAlignment(0.0f, 0.5f);
-            
+
             Label message = new Label(Catalog.GetString(String.Format(
                 "Please provide login information to access {0}.", share_name)));
             message.Wrap = true;
             message.Justify = Justification.Left;
             message.SetAlignment(0.0f, 0.5f);
-            
+
             content_box.PackStart(header, false, false, 0);
             content_box.PackStart(message, false, false, 0);
-            
+
             username_entry = new Entry();
             password_entry = new Entry();
             password_entry.Visibility = false;
-            
+
             uint yoff = show_username ? (uint)0 : (uint)1;
-            
+
             Table table = new Table(2, 2, false);
             table.RowSpacing = 5;
             table.ColumnSpacing = 10;
-            
+
             if(show_username) {
                 table.Attach(new Label(Catalog.GetString("Username:")), 0, 1, 0, 1,
                     AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-                
+
                 table.Attach(username_entry, 1, 2, 0, 1,
                     AttachOptions.Expand | AttachOptions.Fill,
                     AttachOptions.Shrink, 0, 0);
             }
-            
+
             table.Attach(new Label(Catalog.GetString("Password:")), 0, 1, 1 - yoff, 2 - yoff,
                 AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
-            
+
             table.Attach(password_entry, 1, 2, 1 - yoff, 2 - yoff,
                 AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Shrink, 0, 0);
-            
+
             content_box.PackStart(table, false, false, 0);
-            
+
             box.PackStart(content_box, true, true, 0);
 
             /* Translators: this is a verb used as a button label, not a noun */
             AddButton(Catalog.GetString("Login"), ResponseType.Ok, true);
-            
+
             box.ShowAll();
             VBox.Add(box);
         }
-        
+
         private void AddButton(string stock_id, Gtk.ResponseType response, bool is_default)
         {
             Gtk.Button button = new Gtk.Button(stock_id);
@@ -140,13 +140,13 @@ namespace Banshee.Daap
                 button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return, 0, Gtk.AccelFlags.Visible);
             }
         }
-        
+
         public string Username {
             get {
                 return username_entry.Text == String.Empty ? null : username_entry.Text;
             }
         }
-        
+
         public string Password {
             get {
                 return password_entry.Text;
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapPlaylistSource.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapPlaylistSource.cs
index 8888341..be183fa 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapPlaylistSource.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapPlaylistSource.cs
@@ -1,4 +1,4 @@
-// 
+//
 // DaapPlaylistSource.cs
 //
 // Author:
@@ -47,20 +47,20 @@ namespace Banshee.Daap
     public class DaapPlaylistSource : PlaylistSource
     {
         private HyenaSqliteCommand insert_track_command = new HyenaSqliteCommand (@"
-            INSERT INTO CorePlaylistEntries (PlaylistID, TrackID) 
+            INSERT INTO CorePlaylistEntries (PlaylistID, TrackID)
                 SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND ExternalID IN (?)"
         );
-        
+
         private DaapSource parent;
         public DAAP.Database Database {
             get { return parent.Database; }
         }
-        
+
         public DaapPlaylistSource (DAAP.Playlist playlist, DaapSource parent) : base (playlist.Name, parent)
         {
             this.parent = parent;
             Save ();
-            
+
             int count = 0;
             if (playlist.Tracks.Count > 0) {
                 //IList<DAAP.Track> tracks = playlist.Tracks;
@@ -78,24 +78,24 @@ namespace Banshee.Daap
                 }
             }
             SavedCount = count;
-            
+
             ThreadAssist.ProxyToMain (delegate {
                 OnUpdated ();
             });
         }
-        
+
         public override bool CanDeleteTracks {
             get { return false; }
         }
-        
+
         public override bool CanAddTracks {
             get { return false; }
         }
-        
+
         public override bool CanRename {
             get { return false; }
         }
-        
+
         public override bool CanUnmap {
             get { return false; }
         }
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapProxyWebServer.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapProxyWebServer.cs
index 40e9bba..2f25f59 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapProxyWebServer.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapProxyWebServer.cs
@@ -9,24 +9,24 @@
  *             Neil Loknath <neil loknath gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -48,12 +48,12 @@ namespace Banshee.Daap
     internal class DaapProxyWebServer : BaseHttpServer
     {
         private ArrayList databases = new ArrayList();
-      
+
         public DaapProxyWebServer() : base (new IPEndPoint(IPAddress.Any, 8089), "DAAP Proxy")
         {
         }
 
-        public override void Start (int backlog) 
+        public override void Start (int backlog)
         {
             try {
                 base.Start (backlog);
@@ -62,19 +62,19 @@ namespace Banshee.Daap
                 base.Start (backlog);
             }
         }
-        
+
         public void RegisterDatabase(DAAP.Database database)
         {
             databases.Add(database);
         }
-        
+
         public void UnregisterDatabase(DAAP.Database database)
         {
             databases.Remove(database);
         }
 
         protected override void HandleValidRequest(Socket client, string [] split_request, string [] body_request)
-        {        
+        {
             if(split_request[1].StartsWith("/")) {
                split_request[1] = split_request[1].Substring(1);
             }
@@ -85,9 +85,9 @@ namespace Banshee.Daap
 
             if(nodes.Length == 1 && nodes[0] == String.Empty) {
                body = GetHtmlHeader("Available Databases");
-               
+
                if(databases.Count == 0) {
-                   body += "<blockquote><p><em>No databases found. Connect to a " + 
+                   body += "<blockquote><p><em>No databases found. Connect to a " +
                        "share in Banshee.</em></p></blockquote>";
                } else {
                    body += "<ul>";
@@ -104,30 +104,30 @@ namespace Banshee.Daap
                     id = Convert.ToInt32(nodes[0]);
                 } catch {
                 }
-                
+
                 foreach(DAAP.Database database in (ArrayList)databases.Clone()) {
                     if(database.GetHashCode() != id) {
                         continue;
                     }
-                    
+
                     body = GetHtmlHeader("Tracks in " + Escape (database.Name));
-                    
+
                     if(database.TrackCount == 0) {
                         body += "<blockquote><p><em>No songs in this database.</em></p></blockquote>";
                     } else {
                         body += "<p>Showing all " + database.TrackCount + " songs:</p><ul>";
                         foreach(DAAP.Track song in database.Tracks) {
                             body += String.Format("<li><a href=\"/{0}/{1}\">{2} - {3}</a> ({4}:{5})</li>",
-                                database.GetHashCode(), song.Id, Escape (song.Artist), Escape (song.Title), 
+                                database.GetHashCode(), song.Id, Escape (song.Artist), Escape (song.Title),
                                 song.Duration.Minutes, song.Duration.Seconds.ToString("00"));
                         }
                         body += "</ul>";
                     }
-                    
+
                     db_found = true;
                     break;
                 }
-                
+
                 if(!db_found) {
                     code = HttpStatusCode.BadRequest;
                     body = GetHtmlHeader("Invalid Request");
@@ -137,18 +137,18 @@ namespace Banshee.Daap
                 bool db_found = false;
                 int db_id = 0;
                 int song_id = 0;
-                
+
                 try {
                     db_id = Convert.ToInt32(nodes[0]);
                     song_id = Convert.ToInt32(nodes[1]);
                 } catch {
                 }
-                
+
                 foreach(DAAP.Database database in (ArrayList)databases.Clone()) {
                     if(database.GetHashCode() != db_id) {
                         continue;
                     }
-                    
+
                     try {
                         DAAP.Track song = database.LookupTrackById(song_id);
                         if(song != null) {
@@ -158,22 +158,22 @@ namespace Banshee.Daap
                                     offset = ParseRangeRequest (line);
                                 }
                             }
-                            
+
                             StreamTrack(client, database, song, offset);
                             return;
                         }
                     } catch (Exception e) {
                         Hyena.Log.Exception (e);
                     }
-                        
+
                     code = HttpStatusCode.BadRequest;
                     body = GetHtmlHeader("Invalid Request");
                     body += String.Format("<p>No song with id `{0}'</p>", song_id);
-                    
+
                     db_found = true;
                     break;
                 }
-                
+
                 if(!db_found) {
                     code = HttpStatusCode.BadRequest;
                     body = GetHtmlHeader("Invalid Request");
@@ -193,7 +193,7 @@ namespace Banshee.Daap
         {
             StreamTrack (client, database, song, -1);
         }
-        
+
         protected virtual void StreamTrack(Socket client, DAAP.Database database, DAAP.Track song, long offset)
         {
             long length;
@@ -205,13 +205,13 @@ namespace Banshee.Daap
 
         private static string GetHtmlHeader(string title)
         {
-            return String.Format("<html><head><title>{0} - Banshee DAAP Browser</title></head><body><h1>{0}</h1>", 
+            return String.Format("<html><head><title>{0} - Banshee DAAP Browser</title></head><body><h1>{0}</h1>",
                 title);
         }
-        
+
         private static string GetHtmlFooter()
         {
-            return String.Format("<hr /><address>Generated on {0} by " + 
+            return String.Format("<hr /><address>Generated on {0} by " +
                 "Banshee DAAP Extension (<a href=\"http://banshee-project.org\";>http://banshee-project.org</a>)",
                 DateTime.Now.ToString());
         }
@@ -222,7 +222,7 @@ namespace Banshee.Daap
                 return local_address;
             }
         }
-        
+
         public string HttpBaseAddress {
             get {
                 return String.Format("http://{0}:{1}/";, IPAddress, Port);
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs
index 1bdd59c..058daa9 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapService.cs
@@ -43,18 +43,18 @@ namespace Banshee.Daap
         private ServiceLocator locator;
         private DateTime locator_started;
         private static DaapProxyWebServer proxy_server;
-        
+
         private DaapContainerSource container;
         private Dictionary<string, DaapSource> source_map;
-        
+
         internal static DaapProxyWebServer ProxyServer {
             get { return proxy_server; }
         }
-        
+
         void IExtensionService.Initialize ()
         {
         }
-        
+
         public void Dispose ()
         {
             if (locator != null) {
@@ -63,12 +63,12 @@ namespace Banshee.Daap
                 locator.Removed -= OnServiceRemoved;
                 locator = null;
             }
-            
+
             if (proxy_server != null) {
                 proxy_server.Stop ();
                 proxy_server = null;
             }
-            
+
             // Dispose any remaining child sources
             if (source_map != null) {
                 foreach (KeyValuePair <string, DaapSource> kv in source_map) {
@@ -77,26 +77,26 @@ namespace Banshee.Daap
                         kv.Value.Dispose ();
                     }
                 }
-            
+
                 source_map.Clear ();
             }
-            
+
             if (container != null) {
                 ServiceManager.SourceManager.RemoveSource (container, true);
                 container = null;
             }
         }
-        
+
         private void OnServiceFound (object o, ServiceArgs args)
         {
             ThreadAssist.ProxyToMain (delegate {
                 DaapSource source = new DaapSource (args.Service);
                 string key = String.Format ("{0}:{1}", args.Service.Name, args.Service.Port);
-                
+
                 if (source_map.Count == 0) {
                     ServiceManager.SourceManager.AddSource (container);
                 }
-                
+
                 if (source_map.ContainsKey (key)) {
                     // Received new connection info for service
                     container.RemoveChildSource (source_map [key]);
@@ -105,26 +105,26 @@ namespace Banshee.Daap
                     // New service information
                     source_map.Add (key, source);
                 }
-                
+
                 container.AddChildSource (source);
-                
+
                 // Don't flash shares we find on startup (well, within 5s of startup)
                 if ((DateTime.Now - locator_started).TotalSeconds > 5) {
                     source.NotifyUser ();
                 }
             });
         }
-        
+
         private void OnServiceRemoved (object o, ServiceArgs args)
         {
             ThreadAssist.ProxyToMain (delegate {
                 string key = String.Format ("{0}:{1}", args.Service.Name, args.Service.Port);
                 DaapSource source = source_map [key];
-                
+
                 source.Disconnect (true);
                 container.RemoveChildSource (source);
                 source_map.Remove (key);
-                
+
                 if (source_map.Count == 0) {
                     ServiceManager.SourceManager.RemoveSource (container);
                 }
@@ -142,7 +142,7 @@ namespace Banshee.Daap
             // plugin is enabled, just no child sources yet.
             source_map = new Dictionary<string, DaapSource> ();
             container = new DaapContainerSource ();
-            
+
             try {
                 // Now start looking for services.
                 // We do this after creating the source because if we do it before
@@ -154,7 +154,7 @@ namespace Banshee.Daap
                 locator.ShowLocalServices = true;
                 locator_started = DateTime.Now;
                 locator.Start ();
-                
+
                 proxy_server = new DaapProxyWebServer ();
                 proxy_server.Start ();
             } catch (Exception e) {
@@ -162,7 +162,7 @@ namespace Banshee.Daap
             }
             return false;
         }
-        
+
         string IService.ServiceName {
             get { return "DaapService"; }
         }
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
index 62d6078..6f848e4 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
@@ -50,29 +50,29 @@ namespace Banshee.Daap
         private DAAP.Client client;
         private DAAP.Database database;
         private bool connected = false;
-        
+
         public DAAP.Database Database {
             get { return database; }
         }
 
         private bool is_activating;
-        
-        public DaapSource (DAAP.Service service) : base (Catalog.GetString ("Music Share"), service.Name, 
+
+        public DaapSource (DAAP.Service service) : base (Catalog.GetString ("Music Share"), service.Name,
                                                     (service.Address.ToString () + service.Port).Replace (":", "").Replace (".", ""), 300)
         {
             this.service = service;
             Properties.SetString ("UnmapSourceActionLabel", Catalog.GetString ("Disconnect"));
             Properties.SetString ("UnmapSourceActionIconName", "gtk-disconnect");
-            
+
             SupportsPlaylists = false;
             SavedCount = 0;
             UpdateIcon ();
-            
+
             AfterInitialized ();
         }
-        
-        
-        
+
+
+
         private void UpdateIcon ()
         {
             if (service != null && !service.IsProtected) {
@@ -81,7 +81,7 @@ namespace Banshee.Daap
                 Properties.SetStringList ("Icon.Name", "system-lock-screen", "computer", "network-server");
             }
         }
-        
+
         public override void CopyTrackTo (DatabaseTrackInfo track, SafeUri uri, BatchUserJob job)
         {
             if (track.PrimarySource == this && track.Uri.Scheme.StartsWith ("http")) {
@@ -91,25 +91,25 @@ namespace Banshee.Daap
             }
         }
 
-        
+
         public override void Activate ()
         {
             if (client != null || is_activating) {
                 return;
             }
-            
+
             ClearErrorView ();
-            
+
             is_activating = true;
             base.Activate ();
-            
+
             SetStatus (String.Format (Catalog.GetString ("Connecting to {0}"), service.Name), false);
-            
+
             ThreadAssist.Spawn (delegate {
                 try {
                     client = new DAAP.Client (service);
                     client.Updated += OnClientUpdated;
-                    
+
                     if (client.AuthenticationMethod == DAAP.AuthenticationMethod.None) {
                         client.Login ();
                     } else {
@@ -121,11 +121,11 @@ namespace Banshee.Daap
                     });
                     Hyena.Log.Exception (e);
                 }
-               
+
                 is_activating = false;
             });
         }
-        
+
         private void ShowErrorView (DaapErrorType error_type)
         {
             PurgeTracks ();
@@ -136,12 +136,12 @@ namespace Banshee.Daap
             Properties.Set<Banshee.Sources.Gui.ISourceContents> ("Nereid.SourceContents", error_view);
             HideStatus ();
         }
-        
+
         private void ClearErrorView ()
         {
             Properties.Remove ("Nereid.SourceContents");
         }
-        
+
         internal bool Disconnect (bool logout)
         {
             // Stop currently playing track if its from us.
@@ -153,23 +153,23 @@ namespace Banshee.Daap
                     }
                 }
             } catch {}
-            
+
             connected = false;
-            
+
             // Remove tracks associated with this source, since we don't want
             // them after we unmap - we'll refetch.
             PurgeTracks ();
-            
+
             if (client != null) {
                 if (logout) {
                     client.Logout ();
                 }
-                
+
                 client.Dispose ();
                 client = null;
                 database = null;
             }
-            
+
             if (database != null) {
                 try {
                     DaapService.ProxyServer.UnregisterDatabase (database);
@@ -178,30 +178,30 @@ namespace Banshee.Daap
                 database.TrackRemoved -= OnDatabaseTrackRemoved;
                 database = null;
             }
-            
+
             List<Source> children = new List<Source> (Children);
             foreach (Source child in children) {
                 if (child is Banshee.Sources.IUnmapableSource) {
                     (child as Banshee.Sources.IUnmapableSource).Unmap ();
                 }
             }
-            
+
             ClearChildSources ();
-            
+
             return true;
         }
-        
+
         public override void Dispose ()
         {
             Disconnect (true);
             base.Dispose ();
         }
-        
+
         private void PromptLogin ()
         {
             SetStatus (Catalog.GetString ("Logging in to {0}."), false);
-            
-            DaapLoginDialog dialog = new DaapLoginDialog (client.Name, 
+
+            DaapLoginDialog dialog = new DaapLoginDialog (client.Name,
             client.AuthenticationMethod == DAAP.AuthenticationMethod.UserAndPassword);
             if (dialog.Run () == (int) Gtk.ResponseType.Ok) {
                 AuthenticatedLogin (dialog.Username, dialog.Password);
@@ -211,7 +211,7 @@ namespace Banshee.Daap
 
             dialog.Destroy ();
         }
-        
+
         private void AuthenticatedLogin (string username, string password)
         {
             ThreadAssist.Spawn (delegate {
@@ -224,7 +224,7 @@ namespace Banshee.Daap
                 }
             });
         }
-        
+
         private void OnClientUpdated (object o, EventArgs args)
         {
             try {
@@ -233,16 +233,16 @@ namespace Banshee.Daap
                     DaapService.ProxyServer.RegisterDatabase (database);
                     database.TrackAdded += OnDatabaseTrackAdded;
                     database.TrackRemoved += OnDatabaseTrackRemoved;
-                    
+
                     SetStatus (String.Format (Catalog.GetPluralString (
                         "Loading {0} track", "Loading {0} tracks", database.TrackCount),
                         database.TrackCount), false
                     );
-                    
+
                     // Notify (eg reload the source before sync is done) at most 5 times
                     int notify_every = Math.Max (250, (database.Tracks.Count / 4));
                     notify_every -= notify_every % 250;
-                    
+
                     int count = 0;
                     DaapTrackInfo daap_track = null;
 
@@ -250,7 +250,7 @@ namespace Banshee.Daap
                     conn.BeginTransaction ();
                     foreach (DAAP.Track track in database.Tracks) {
                         daap_track = new DaapTrackInfo (track, this);
-                        
+
                         // Only notify once in a while because otherwise the source Reloading slows things way down
                         if (++count % notify_every == 0) {
                             conn.CommitTransaction ();
@@ -261,21 +261,21 @@ namespace Banshee.Daap
                         }
                     }
                     conn.CommitTransaction ();
-                    
+
                     // Save the last track once more to trigger the NotifyTrackAdded
                     if (daap_track != null) {
                         daap_track.Save ();
                     }
-                    
+
                     SetStatus (Catalog.GetString ("Loading playlists"), false);
                     AddPlaylistSources ();
                     connected = true;
                     Reload ();
                     HideStatus ();
                 }
-                
+
                 Name = client.Name;
-                
+
                 UpdateIcon ();
                 OnUpdated ();
             } catch (Exception e) {
@@ -286,7 +286,7 @@ namespace Banshee.Daap
                 });
             }
         }
-        
+
         private void AddPlaylistSources ()
         {
             foreach (DAAP.Playlist pl in database.Playlists) {
@@ -300,18 +300,18 @@ namespace Banshee.Daap
                 });
             }
         }
-        
+
         public void OnDatabaseTrackAdded (object o, DAAP.TrackArgs args)
         {
             DaapTrackInfo track = new DaapTrackInfo (args.Track, this);
             track.Save ();
         }
-        
+
         public void OnDatabaseTrackRemoved (object o, DAAP.TrackArgs args)
         {
             //RemoveTrack (
         }
-        
+
         public override bool CanRemoveTracks {
             get { return false; }
         }
@@ -329,27 +329,27 @@ namespace Banshee.Daap
             // Disconnect and clear out our tracks and such.
             Disconnect (true);
             ShowErrorView (DaapErrorType.UserDisconnect);
-            
+
             return true;
         }
-        
+
         public bool CanUnmap {
             get { return connected; }
         }
-        
+
         public bool ConfirmBeforeUnmap {
             get { return false; }
         }
-        
+
         public void Import ()
         {
             ServiceManager.SourceManager.MusicLibrary.MergeSourceInput (this, SourceMergeType.All);
         }
-        
+
         public bool CanImport {
             get { return connected; }
         }
-        
+
         int IImportSource.SortOrder {
             get { return 30; }
         }
@@ -357,7 +357,7 @@ namespace Banshee.Daap
         string IImportSource.ImportLabel {
             get { return null; }
         }
-        
+
         public string [] IconNames {
             get { return Properties.GetStringList ("Icon.Name"); }
         }
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs
index 694952d..97a8561 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs
@@ -43,10 +43,10 @@ namespace Banshee.Daap
             TrackTitle = track.Title;
             AlbumTitle = track.Album;
             ArtistName = track.Artist;
-            
+
             DateAdded = track.DateAdded;
             DateUpdated = track.DateModified;
-            
+
             Genre = track.Genre;
             FileSize = track.Size;
             TrackCount = track.TrackCount;
@@ -58,11 +58,11 @@ namespace Banshee.Daap
             ExternalId = track.Id;
 
             PrimarySource = source;
-            
+
             Uri = new SafeUri (String.Format (
                 "{0}{1}/{2}", DaapService.ProxyServer.HttpBaseAddress, source.Database.GetHashCode (), track.Id
             ));
-            
+
             //this.IsLive = false;
             //this.CanSaveToDatabase = false;
         }
diff --git a/src/Extensions/Banshee.Daap/Daap/BrokenMD5.cs b/src/Extensions/Banshee.Daap/Daap/BrokenMD5.cs
index 4de823c..098a0bc 100644
--- a/src/Extensions/Banshee.Daap/Daap/BrokenMD5.cs
+++ b/src/Extensions/Banshee.Daap/Daap/BrokenMD5.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -34,10 +34,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -63,7 +63,7 @@ namespace Daap {
         private int _ProcessingBufferCount; // Counts how much data we have stored that still needs processed.
         private int _version;
 	
-        public BrokenMD5 ( int version ) 
+        public BrokenMD5 ( int version )
         {
             _H = new uint[4];
             buff = new uint[16];
@@ -73,12 +73,12 @@ namespace Daap {
             Initialize();
         }
 
-        ~BrokenMD5 () 
+        ~BrokenMD5 ()
         {
             Dispose (false);
         }
 
-        protected override void Dispose (bool disposing) 
+        protected override void Dispose (bool disposing)
         {
             if (_ProcessingBuffer != null) {
                 Array.Clear (_ProcessingBuffer, 0, _ProcessingBuffer.Length);
@@ -94,7 +94,7 @@ namespace Daap {
             }
         }
 
-        protected override void HashCore (byte[] rgb, int start, int size) 
+        protected override void HashCore (byte[] rgb, int start, int size)
         {
             int i;
             State = 1;
@@ -125,7 +125,7 @@ namespace Daap {
             }
         }
 	
-        protected override byte[] HashFinal () 
+        protected override byte[] HashFinal ()
         {
             byte[] hash = new byte[16];
             int i, j;
@@ -141,7 +141,7 @@ namespace Daap {
             return hash;
         }
 
-        public override void Initialize () 
+        public override void Initialize ()
         {
             count = 0;
             _ProcessingBufferCount = 0;
@@ -152,7 +152,7 @@ namespace Daap {
             _H[3] = 0x10325476;
         }
 
-        private void ProcessBlock (byte[] inputBuffer, int inputOffset) 
+        private void ProcessBlock (byte[] inputBuffer, int inputOffset)
         {
             uint a, b, c, d;
             int i;
@@ -242,7 +242,7 @@ namespace Daap {
 
 
             // ---- Round 2 --------
-  
+
             a += (((b ^ c) & d) ^ c) + (uint) K [16] + buff [1];
             a = (a << 5) | (a >> 27);
             a += b;
@@ -318,7 +318,7 @@ namespace Daap {
 
 
             // ---- Round 3 --------
-  
+
             a += (b ^ c ^ d) + (uint) K [32] + buff [5];
             a = (a << 4) | (a >> 28);
             a += b;
@@ -385,7 +385,7 @@ namespace Daap {
 
 
             // ---- Round 4 --------
-  
+
             a += (((~d) | b) ^ c) + (uint) K [48] + buff [0];
             a = (a << 6) | (a >> 26);
             a += b;
@@ -456,7 +456,7 @@ namespace Daap {
             _H [3] += d;
         }
 		
-        private void ProcessFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount) 
+        private void ProcessFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)
         {
             ulong total = count + (ulong)inputCount;
             int paddingSize = (int)(56 - total % BLOCK_SIZE_BYTES);
@@ -499,7 +499,7 @@ namespace Daap {
 
         private readonly static uint[] K = {
             0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
-            0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 
+            0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
             0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
             0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
             0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
diff --git a/src/Extensions/Banshee.Daap/Daap/Client.cs b/src/Extensions/Banshee.Daap/Daap/Client.cs
index ecb3ee1..6324c48 100644
--- a/src/Extensions/Banshee.Daap/Daap/Client.cs
+++ b/src/Extensions/Banshee.Daap/Daap/Client.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -32,7 +32,7 @@ namespace Daap {
 
     public class Client : IDisposable {
         private const int UpdateSleepInterval = 2 * 60 * 1000; // 2 minutes
-        
+
         private IPAddress address;
         private UInt16 port;
         private ContentCodeBag bag;
@@ -99,7 +99,7 @@ namespace Daap {
 
         public void Dispose () {
             updateRunning = false;
-            
+
             if (fetcher != null) {
                 fetcher.Dispose ();
                 fetcher = null;
@@ -128,7 +128,7 @@ namespace Daap {
 
                 FetchDatabases ();
                 Refresh ();
-                
+
                 if (serverInfo.SupportsUpdate) {
                     updateRunning = true;
                     Thread thread = new Thread (UpdateLoop);
@@ -154,7 +154,7 @@ namespace Daap {
             } catch (WebException) {
                 // some servers don't implement this, etc.
             }
-            
+
             fetcher.SessionId = 0;
         }
 
@@ -192,16 +192,16 @@ namespace Daap {
                     newrev = GetCurrentRevision ();
                 else
                     newrev = WaitForRevision (revision);
-            
+
                 if (newrev == revision)
                     return;
             }
-                
+
             // Console.WriteLine ("Got new revision: " + newrev);
             foreach (Database db in databases) {
                 db.Refresh (newrev);
             }
-            
+
             revision = newrev;
             if (Updated != null)
                 Updated (this, new EventArgs ());
@@ -212,19 +212,19 @@ namespace Daap {
                 try {
                     if (!updateRunning)
                         break;
-                    
+
                     Refresh ();
                 } catch (WebException) {
                     if (!updateRunning)
                         break;
-                    
+
                     // chill out for a while, maybe the server went down
                     // temporarily or something.
                     Thread.Sleep (UpdateSleepInterval);
                 } catch (Exception e) {
                     if (!updateRunning)
                         break;
-                    
+
                     Console.Error.WriteLine ("Exception in update loop: " + e);
                     Thread.Sleep (UpdateSleepInterval);
                 }
diff --git a/src/Extensions/Banshee.Daap/Daap/ContentCodeBag.cs b/src/Extensions/Banshee.Daap/Daap/ContentCodeBag.cs
index c7fd80a..83d5fa8 100644
--- a/src/Extensions/Banshee.Daap/Daap/ContentCodeBag.cs
+++ b/src/Extensions/Banshee.Daap/Daap/ContentCodeBag.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -49,7 +49,7 @@ namespace Daap {
     internal class ContentCodeBag {
 
         private const int ChunkLength = 8192;
-        
+
         private static ContentCodeBag defaultBag;
         private Dictionary <int, ContentCode> codes = new Dictionary <int, ContentCode> ();
 
@@ -59,7 +59,7 @@ namespace Daap {
 
                     // this is crappy
                     // Alex: Agreed. :)
-                    
+
                     string name = "content-codes";
                     using (BinaryReader reader = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(name))) {
                         MemoryStream buf = new MemoryStream();
@@ -116,7 +116,7 @@ namespace Daap {
 
         internal ContentNode ToNode () {
             List <ContentNode> nodes = new List <ContentNode> ();
-            
+
             foreach (int number in codes.Keys) {
                 ContentCode code = (ContentCode) codes[number];
 
@@ -154,9 +154,9 @@ namespace Daap {
                 if (dictNode.Name != "dmap.dictionary") {
                     continue;
                 }
-                
+
                 ContentCode code = new ContentCode ();
-                
+
                 foreach (ContentNode item in (dictNode.Value as ContentNode[])) {
                     switch (item.Name) {
                     case "dmap.contentcodesnumber":
@@ -173,7 +173,7 @@ namespace Daap {
 
                 bag.codes[code.Number] = code;
             }
-            
+
             return bag;
         }
     }
diff --git a/src/Extensions/Banshee.Daap/Daap/ContentFetcher.cs b/src/Extensions/Banshee.Daap/Daap/ContentFetcher.cs
index b6c4392..16cf880 100644
--- a/src/Extensions/Banshee.Daap/Daap/ContentFetcher.cs
+++ b/src/Extensions/Banshee.Daap/Daap/ContentFetcher.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -46,7 +46,7 @@ namespace Daap {
             get { return creds.Password; }
             set { creds.Password = value; }
         }
-        
+
         public int SessionId {
             get { return sessionId; }
             set { sessionId = value; }
@@ -139,7 +139,7 @@ namespace Daap {
             }
 
             request.ServicePoint.ConnectionLimit = 3;
-            
+
             if (extraHeaders != null)
                 request.Headers = extraHeaders;
 
@@ -156,10 +156,10 @@ namespace Daap {
 
             if (requestId >= 0)
                 request.Headers.Set ("Client-DAAP-Request-ID", requestId.ToString ());
-                                 
+
             request.Credentials = creds;
             request.PreAuthenticate = true;
-            
+
             try {
                 lock (requests) {
                     requests.Add (request);
@@ -195,7 +195,7 @@ namespace Daap {
                 get { return password; }
                 set { password = value; }
             }
-            
+
             public NetworkCredential GetCredential (Uri uri, string type) {
                 return new NetworkCredential (username == null ? "none" : username, password);
             }
diff --git a/src/Extensions/Banshee.Daap/Daap/ContentParser.cs b/src/Extensions/Banshee.Daap/Daap/ContentParser.cs
index 69f15f0..01ef987 100644
--- a/src/Extensions/Banshee.Daap/Daap/ContentParser.cs
+++ b/src/Extensions/Banshee.Daap/Daap/ContentParser.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -36,7 +36,7 @@ namespace Daap {
 
         public ContentNode () {
         }
-        
+
         public ContentNode (string name, params object[] values) {
             this.Name = name;
 
@@ -58,7 +58,7 @@ namespace Daap {
         public void Dump () {
             Dump (0);
         }
-        
+
         private void Dump (int level) {
             Console.WriteLine ("{0}Name: {1}", String.Empty.PadRight (level * 4), Name);
 
@@ -118,7 +118,7 @@ namespace Daap {
             }
 
             int length = IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (buffer, offset + 4));
-            
+
             if (code.Equals (ContentCode.Zero)) {
                 string s = System.Text.ASCIIEncoding.ASCII.GetString (buffer);
                 throw new ContentException (String.Format ("Failed to find content code for '{0}'. Data length is {1}; content is {2}",
@@ -175,7 +175,7 @@ namespace Daap {
                 return node;
             }
         }
-        
+
         public static ContentNode Parse (ContentCodeBag bag, byte[] buffer, string root) {
             int offset = 0;
             return Parse (bag, buffer, root, ref offset);
diff --git a/src/Extensions/Banshee.Daap/Daap/ContentWriter.cs b/src/Extensions/Banshee.Daap/Daap/ContentWriter.cs
index 6733edb..277a945 100644
--- a/src/Extensions/Banshee.Daap/Daap/ContentWriter.cs
+++ b/src/Extensions/Banshee.Daap/Daap/ContentWriter.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -91,7 +91,7 @@ namespace Daap {
                 break;
             }
         }
-        
+
         public static byte[] Write (ContentCodeBag bag, ContentNode node) {
             MemoryStream stream = new MemoryStream ();
             BinaryWriter writer = new BinaryWriter (stream);
diff --git a/src/Extensions/Banshee.Daap/Daap/Database.cs b/src/Extensions/Banshee.Daap/Daap/Database.cs
index b508291..0c4dd11 100644
--- a/src/Extensions/Banshee.Daap/Daap/Database.cs
+++ b/src/Extensions/Banshee.Daap/Daap/Database.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -34,12 +34,12 @@ namespace Daap {
         public Track Track {
             get { return track; }
         }
-        
+
         public TrackArgs (Track track) {
             this.track = track;
         }
     }
-        
+
     public delegate void PlaylistHandler (object o, PlaylistArgs args);
 
     public class PlaylistArgs : EventArgs {
@@ -48,7 +48,7 @@ namespace Daap {
         public Playlist Playlist {
             get { return pl; }
         }
-        
+
         public PlaylistArgs (Playlist pl) {
             this.pl = pl;
         }
@@ -99,13 +99,13 @@ namespace Daap {
                 basePlaylist.Name = value;
             }
         }
-        
+
         public IList<Track> Tracks {
             get {
                 return new ReadOnlyCollection<Track> (tracks);
             }
         }
-        
+
         public int TrackCount {
             get { return tracks.Count; }
         }
@@ -191,7 +191,7 @@ namespace Daap {
 
             if (deletedIds.Length > 0) {
                 deletedNodes = new List <ContentNode> ();
-                
+
                 foreach (int id in deletedIds) {
                     deletedNodes.Add (new ContentNode ("dmap.itemid", id));
                 }
@@ -207,7 +207,7 @@ namespace Daap {
             if (deletedNodes != null) {
                 children.Add (new ContentNode ("dmap.deletedidlisting", deletedNodes));
             }
-            
+
             return new ContentNode ("daap.databasesongs", children);
         }
 
@@ -215,7 +215,7 @@ namespace Daap {
             List <ContentNode> nodes = new List <ContentNode> ();
 
             nodes.Add (basePlaylist.ToNode (true));
-            
+
             foreach (Playlist pl in playlists) {
                 nodes.Add (pl.ToNode (false));
             }
@@ -269,7 +269,7 @@ namespace Daap {
             } catch (WebException) {
                 return;
             }
-            
+
             ContentNode playlistsNode = ContentParser.Parse (client.Bag, playlistsData);
 
             if (IsUpdateResponse (playlistsNode))
@@ -277,7 +277,7 @@ namespace Daap {
 
             // handle playlist additions/changes
             List <int> plids = new List <int> ();
-            
+
             foreach (ContentNode playlistNode in (ContentNode[]) playlistsNode.GetChild ("dmap.listing").Value) {
                 Playlist pl = Playlist.FromNode (playlistNode);
 
@@ -406,18 +406,18 @@ namespace Daap {
         {
             return StreamTrack (track, -1, out length);
         }
-        
+
         public Stream StreamTrack (Track track, long offset, out long length)
         {
             return StreamTrack (track.Id, track.Format, offset, out length);
         }
-        
+
         public Stream StreamTrack (int track_id, string track_format, out long length)
         {
             return StreamTrack (track_id, track_format, -1, out length);
         }
-        
-        public Stream StreamTrack (int track_id, string track_format, long offset, out long length) 
+
+        public Stream StreamTrack (int track_id, string track_format, long offset, out long length)
         {
             HttpWebResponse response = FetchTrack (track_id, track_format, offset);
             length = response.ContentLength;
@@ -432,12 +432,12 @@ namespace Daap {
                 using (BinaryReader reader = new BinaryReader (StreamTrack (track_id, track_format, out len))) {
                     int count = 0;
                     byte [] buf = new byte[ChunkLength];
-                    
+
                     do {
                         count = reader.Read (buf, 0, ChunkLength);
                         pos += count;
                         writer.Write (buf, 0, count);
-                        
+
                         // Roughly every 40KB yield an updated percent-done double
                         if (i++ % 5 == 0) {
                             yield return (double)pos / (double)len;
@@ -452,7 +452,7 @@ namespace Daap {
         public void AddTrack (Track track) {
             if (track.Id == 0)
                 track.SetId (nextTrackId++);
-            
+
             tracks.Add (track);
             basePlaylist.AddTrack (track);
 
diff --git a/src/Extensions/Banshee.Daap/Daap/Hasher.cs b/src/Extensions/Banshee.Daap/Daap/Hasher.cs
index 31544ba..069fe43 100644
--- a/src/Extensions/Banshee.Daap/Daap/Hasher.cs
+++ b/src/Extensions/Banshee.Daap/Daap/Hasher.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -44,7 +44,7 @@ using System;
 using System.Text;
 
 namespace Daap {
-    
+
     internal class Hasher
     {
         private static byte [] _hasht42 = null;
diff --git a/src/Extensions/Banshee.Daap/Daap/Playlist.cs b/src/Extensions/Banshee.Daap/Daap/Playlist.cs
index 4a37d1f..54491ef 100644
--- a/src/Extensions/Banshee.Daap/Daap/Playlist.cs
+++ b/src/Extensions/Banshee.Daap/Daap/Playlist.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -29,7 +29,7 @@ namespace Daap {
     public class Playlist {
 
         private static int nextid = 1;
-        
+
         private int id;
         private string name = String.Empty;
         private List<Track> tracks = new List<Track> ();
@@ -48,7 +48,7 @@ namespace Daap {
             }
             set { tracks[index] = value; }
         }
-        
+
         public IList<Track> Tracks {
             get { return new ReadOnlyCollection<Track> (tracks); }
         }
@@ -94,7 +94,7 @@ namespace Daap {
         public void AddTrack (Track track) {
             AddTrack (track, tracks.Count + 1);
         }
-        
+
         internal void AddTrack (Track track, int id) {
             tracks.Add (track);
             containerIds.Add (id);
@@ -107,7 +107,7 @@ namespace Daap {
             Track track = (Track) tracks[index];
             tracks.RemoveAt (index);
             containerIds.RemoveAt (index);
-            
+
             if (TrackRemoved != null)
                 TrackRemoved (this, index, track);
         }
@@ -115,7 +115,7 @@ namespace Daap {
         public bool RemoveTrack (Track track) {
             int index;
             bool ret = false;
-            
+
             while ((index = IndexOf (track)) >= 0) {
                 ret = true;
                 RemoveAt (index);
@@ -158,8 +158,8 @@ namespace Daap {
 
             if (deletedNodes != null)
                 children.Add (new ContentNode ("dmap.deletedidlisting", deletedNodes));
-            
-            
+
+
             return new ContentNode ("daap.playlistsongs", children);
         }
 
@@ -173,7 +173,7 @@ namespace Daap {
             nodes.Add (new ContentNode ("dmap.itemcount", tracks.Count));
             if (basePlaylist)
                 nodes.Add (new ContentNode ("daap.baseplaylist", (byte) 1));
-            
+
             return new ContentNode ("dmap.listingitem", nodes);
         }
 
diff --git a/src/Extensions/Banshee.Daap/Daap/ServerInfo.cs b/src/Extensions/Banshee.Daap/Daap/ServerInfo.cs
index f33816f..4571c7d 100644
--- a/src/Extensions/Banshee.Daap/Daap/ServerInfo.cs
+++ b/src/Extensions/Banshee.Daap/Daap/ServerInfo.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -28,13 +28,13 @@ namespace Daap {
         UserAndPassword,
         Password,
     }
-            
+
     internal class ServerInfo {
 
         private string name;
         private AuthenticationMethod authMethod;
         private bool supportsUpdate;
-        
+
         public string Name {
             get { return name; }
             set { name = value; }
diff --git a/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs b/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs
index 9d16562..ccb0107 100644
--- a/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs
+++ b/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -33,11 +33,11 @@ namespace Daap {
     public class ServiceArgs : EventArgs {
 
         private Service service;
-        
+
         public Service Service {
             get { return service; }
         }
-        
+
         public ServiceArgs (Service service) {
             this.service = service;
         }
@@ -77,21 +77,21 @@ namespace Daap {
             return String.Format("{0}:{1} ({2})", Address, Port, Name);
         }
     }
-    
+
     public class ServiceLocator {
-        
+
         private ServiceBrowser browser;
         private Dictionary <string, Service> services = new Dictionary <string, Service> ();
         private bool showLocals = false;
-        
+
         public event ServiceHandler Found;
         public event ServiceHandler Removed;
-        
+
         public bool ShowLocalServices {
             get { return showLocals; }
             set { showLocals = value; }
         }
-        
+
         public Service [] Services {
             get {
                 Service [] ret = new Service [services.Count];
@@ -99,22 +99,22 @@ namespace Daap {
                 return ret;
             }
         }
-        
+
         public ServiceLocator ()
         {
         }
-        
+
         public void Start () {
             if (browser != null) {
                 Stop ();
             }
-        
+
             browser = new ServiceBrowser ();
             browser.ServiceAdded += OnServiceAdded;
             browser.ServiceRemoved += OnServiceRemoved;
             browser.Browse ("_daap._tcp", null);
         }
-        
+
         public void Stop () {
             if (browser != null) {
                 browser.Dispose ();
@@ -122,18 +122,18 @@ namespace Daap {
             }
             services.Clear ();
         }
-        
+
         private void OnServiceAdded (object o, ServiceBrowseEventArgs args) {
             args.Service.Resolved += OnServiceResolved;
             Log.DebugFormat ("Found DAAP share {0}, trying to resolve...", args.Service.Name);
             args.Service.Resolve ();
         }
-        
+
         private void OnServiceResolved (object o, ServiceResolvedEventArgs args) {
             string name = args.Service.Name;
 
             Log.DebugFormat ("Managed to resolve DAAP share {0}.", args.Service.Name);
-                        
+
             bool password_required = false;
 
             // iTunes tacks this on to indicate a passsword protected share.  Ugh.
@@ -141,9 +141,9 @@ namespace Daap {
                 name = name.Substring (0, name.Length - 3);
                 password_required = true;
             }
-            
+
             IResolvableService service = (IResolvableService) args.Service;
-            
+
             foreach(TxtRecordItem item in service.TxtRecord) {
                 if(item.Key.ToLower () == "password") {
                     password_required = item.ValueString.ToLower () == "true";
@@ -151,11 +151,11 @@ namespace Daap {
                     name = item.ValueString;
                 }
             }
-            
+
             IPAddress address = args.Service.HostEntry.AddressList[0];
-            
+
             Log.DebugFormat ("OnServiceResolved provided {0}", address);
-            
+
             // XXX: Workaround a Mono bug where we can't resolve IPv6 addresses properly
             if (services.ContainsKey (name) && address.AddressFamily == AddressFamily.InterNetworkV6) {
                 // Only skip this service if it resolves to a IPv6 address, and we already have info
@@ -166,29 +166,29 @@ namespace Daap {
                 // This is the first address we've resolved, however, it's an IPv6 address.
                 // Try and resolve the hostname in hope that it'll end up as an IPv4 address - it doesn't
                 // really matter if it still ends up with an IPv6 address, we're not risking anything.
-                
+
                 foreach (IPAddress addr in Dns.GetHostEntry (args.Service.HostEntry.HostName).AddressList) {
                     if (addr.AddressFamily == AddressFamily.InterNetwork) {
                         address = addr;
                     }
                 }
             }
-            
+
             Log.DebugFormat ("Using address {0}", address);
-            
-            Daap.Service svc = new Daap.Service (address, (ushort)service.Port, 
+
+            Daap.Service svc = new Daap.Service (address, (ushort)service.Port,
                 name, password_required);
-            
+
             if (services.ContainsKey (name)) {
                 services[name] = svc;
             } else {
                 services.Add (name, svc);
             }
-            
+
             if (Found != null)
-                Found (this, new ServiceArgs (svc)); 
+                Found (this, new ServiceArgs (svc));
         }
-        
+
         private void OnServiceRemoved (object o, ServiceBrowseEventArgs args) {
             if (services.ContainsKey (args.Service.Name)) {
                 Service svc = (Service) services[args.Service.Name];
diff --git a/src/Extensions/Banshee.Daap/Daap/Track.cs b/src/Extensions/Banshee.Daap/Daap/Track.cs
index d772eb1..13621d1 100644
--- a/src/Extensions/Banshee.Daap/Daap/Track.cs
+++ b/src/Extensions/Banshee.Daap/Daap/Track.cs
@@ -1,17 +1,17 @@
 /*
  * daap-sharp
  * Copyright (C) 2005  James Willcox <snorp snorp net>
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
@@ -41,7 +41,7 @@ namespace Daap {
         private short bitrate;
 
         public event EventHandler Updated;
-        
+
         public string Artist {
             get { return artist; }
             set {
@@ -49,7 +49,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public string Album {
             get { return album; }
             set {
@@ -57,7 +57,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public string Title {
             get { return title; }
             set {
@@ -65,7 +65,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public int Year {
             get { return year; }
             set {
@@ -73,7 +73,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public string Format {
             get { return format; }
             set {
@@ -81,7 +81,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public TimeSpan Duration {
             get { return duration; }
             set {
@@ -89,11 +89,11 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public int Id {
             get { return id; }
         }
-        
+
         public int Size {
             get { return size; }
             set {
@@ -101,7 +101,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public string Genre {
             get { return genre; }
             set {
@@ -109,7 +109,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public int TrackNumber {
             get { return trackNumber; }
             set {
@@ -117,7 +117,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public int TrackCount {
             get { return trackCount; }
             set {
@@ -125,7 +125,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public string FileName {
             get { return fileName; }
             set {
@@ -133,7 +133,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public DateTime DateAdded {
             get { return dateAdded; }
             set {
@@ -141,7 +141,7 @@ namespace Daap {
                 EmitUpdated ();
             }
         }
-        
+
         public DateTime DateModified {
             get { return dateModified; }
             set {
@@ -187,10 +187,10 @@ namespace Daap {
         internal ContentNode ToNode (string[] fields) {
 
             ArrayList nodes = new ArrayList ();
-            
+
             foreach (string field in fields) {
                 object val = null;
-                
+
                 switch (field) {
                 case "dmap.itemid":
                     val = id;
@@ -294,7 +294,7 @@ namespace Daap {
                 default:
                     break;
                 }
-                
+
                 if (val != null) {
                     // iTunes wants this to go first, sigh
                     if (field == "dmap.itemkind")
@@ -303,13 +303,13 @@ namespace Daap {
                         nodes.Add (new ContentNode (field, val));
                 }
             }
-            
+
             return new ContentNode ("dmap.listingitem", nodes);
         }
 
         internal static Track FromNode (ContentNode node) {
             Track track = new Track ();
-            
+
             foreach (ContentNode field in (ContentNode[]) node.Value) {
                 switch (field.Name) {
                 case "dmap.itemid":
@@ -371,7 +371,7 @@ namespace Daap {
         internal static void FromPlaylistNode (Database db, ContentNode node, out Track track, out int containerId) {
             track = null;
             containerId = 0;
-            
+
             foreach (ContentNode field in (ContentNode[]) node.Value) {
                 switch (field.Name) {
                 case "dmap.itemid":
diff --git a/src/Extensions/Banshee.Daap/Daap/User.cs b/src/Extensions/Banshee.Daap/Daap/User.cs
index c48e8aa..1145c6d 100644
--- a/src/Extensions/Banshee.Daap/Daap/User.cs
+++ b/src/Extensions/Banshee.Daap/Daap/User.cs
@@ -12,7 +12,7 @@ namespace Daap {
         public User User {
             get { return user; }
         }
-        
+
         public UserArgs (User user) {
             this.user = user;
         }
diff --git a/src/Extensions/Banshee.Daap/Daap/Utility.cs b/src/Extensions/Banshee.Daap/Daap/Utility.cs
index 0be647c..af1115e 100644
--- a/src/Extensions/Banshee.Daap/Daap/Utility.cs
+++ b/src/Extensions/Banshee.Daap/Daap/Utility.cs
@@ -6,7 +6,7 @@ namespace Daap {
     internal class Utility {
 
         private static DateTime epoch = new DateTime (1970, 1, 1).ToLocalTime ();
-        
+
         public static DateTime ToDateTime (int time) {
             return epoch.AddSeconds (time);
         }
diff --git a/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue/FileSystemQueueSource.cs b/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue/FileSystemQueueSource.cs
index e81e6f7..c1f1748 100644
--- a/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue/FileSystemQueueSource.cs
+++ b/src/Extensions/Banshee.FileSystemQueue/Banshee.FileSystemQueue/FileSystemQueueSource.cs
@@ -53,19 +53,19 @@ namespace Banshee.FileSystemQueue
         private bool actions_loaded = false;
         private bool play_enqueued = false;
         private string path_to_play;
-        
-        public FileSystemQueueSource () : base (Catalog.GetString ("File System Queue"), 
+
+        public FileSystemQueueSource () : base (Catalog.GetString ("File System Queue"),
             Catalog.GetString ("File System Queue"), "file-system-queue", 30)
         {
             TypeUniqueId = "file-system-queue";
             Properties.SetStringList ("Icon.Name", "system-file-manager");
             Properties.Set<bool> ("AutoAddSource", false);
             IsLocal = true;
-            
+
             ServiceManager.Get<DBusCommandService> ().ArgumentPushed += OnCommandLineArgument;
-            
+
             AfterInitialized ();
-            
+
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             uia_service.GlobalActions.AddImportant (
                 new ActionEntry ("ClearFileSystemQueueAction", Stock.Clear,
@@ -73,29 +73,29 @@ namespace Banshee.FileSystemQueue
                     Catalog.GetString ("Remove all tracks from the file system queue"),
                     OnClearFileSystemQueue)
             );
-            
+
             uia_service.GlobalActions.Add (new ToggleActionEntry [] {
                 new ToggleActionEntry ("ClearFileSystemQueueOnQuitAction", null,
-                    Catalog.GetString ("Clear on Quit"), null, 
-                    Catalog.GetString ("Clear the file system queue when quitting"), 
+                    Catalog.GetString ("Clear on Quit"), null,
+                    Catalog.GetString ("Clear the file system queue when quitting"),
                     OnClearFileSystemQueueOnQuit, ClearOnQuitSchema.Get ())
             });
-            
+
             uia_service.UIManager.AddUiFromResource ("GlobalUI.xml");
-            
+
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
             Properties.SetString ("GtkActionPath", "/FileSystemQueueContextMenu");
-            
+
             actions_loaded = true;
-            
+
             UpdateActions ();
             ServiceManager.SourceManager.ActiveSourceChanged += delegate { Banshee.Base.ThreadAssist.ProxyToMain (UpdateActions); };
             TrackModel.Reloaded += OnTrackModelReloaded;
-            
+
             Reload ();
 
             play_enqueued = ApplicationContext.CommandLine.Contains ("play-enqueued");
-            
+
             foreach (string path in ApplicationContext.CommandLine.Files) {
                 // If it looks like a URI with a protocol, leave it as is
                 if (System.Text.RegularExpressions.Regex.IsMatch (path, "^\\w+\\:\\/")) {
@@ -107,7 +107,7 @@ namespace Banshee.FileSystemQueue
                 }
             }
         }
-        
+
         public void Enqueue (string path)
         {
             try {
@@ -127,7 +127,7 @@ namespace Banshee.FileSystemQueue
                             if (args.Error != null || path_to_play != null) {
                                 return;
                             }
-                            
+
                             path_to_play = args.Path;
                             if (args.Track == null) {
                                 // Play immediately if the track is already in the source,
@@ -150,7 +150,7 @@ namespace Banshee.FileSystemQueue
                         }
                     };
                 }
-            
+
                 if (PlaylistFileUtil.PathHasPlaylistExtension (path)) {
                     Banshee.Kernel.Scheduler.Schedule (new DelegateJob (delegate {
                         // If it's in /tmp it probably came from Firefox - just play it
@@ -165,22 +165,22 @@ namespace Banshee.FileSystemQueue
                 }
             }
         }
-        
+
         private void PlayEnqueued ()
-        {   
+        {
             if (!play_enqueued || path_to_play == null) {
                 return;
             }
-            
+
             SafeUri uri = null;
-            
+
             ServiceManager.PlaybackController.NextSource = this;
-            
+
             try {
                 uri = new SafeUri (path_to_play);
             } catch {
             }
-            
+
             if (uri == null) {
                 return;
             }
@@ -202,7 +202,7 @@ namespace Banshee.FileSystemQueue
         public override bool CanDeleteTracks {
             get { return false; }
         }
-        
+
         public override void Dispose ()
         {
             ServiceManager.Get<DBusCommandService> ().ArgumentPushed -= OnCommandLineArgument;
@@ -211,7 +211,7 @@ namespace Banshee.FileSystemQueue
             }
             base.Dispose ();
         }
-        
+
         private void OnCommandLineArgument (string argument, object value, bool isFile)
         {
             if (!isFile) {
@@ -221,9 +221,9 @@ namespace Banshee.FileSystemQueue
                 }
                 return;
             }
-            
+
             Log.DebugFormat ("FSQ Enqueue: {0}", argument);
-            
+
             try {
                 if (Banshee.IO.Directory.Exists (argument) || Banshee.IO.File.Exists (new SafeUri (argument))) {
                     Enqueue (argument);
@@ -231,16 +231,16 @@ namespace Banshee.FileSystemQueue
             } catch {
             }
         }
-        
+
         protected override void OnUpdated ()
         {
             base.OnUpdated ();
-            
+
             if (actions_loaded) {
                 UpdateActions ();
             }
         }
-        
+
         private void OnTrackModelReloaded (object sender, EventArgs args)
         {
             if (Count > 0 && !visible) {
@@ -250,12 +250,12 @@ namespace Banshee.FileSystemQueue
                 ServiceManager.SourceManager.RemoveSource (this);
                 visible = false;
             }
-            
+
             if (Count > 0) {
                 PlayEnqueued ();
             }
         }
-        
+
         private void OnClearFileSystemQueue (object o, EventArgs args)
         {
             // Delete any child playlists
@@ -270,28 +270,28 @@ namespace Banshee.FileSystemQueue
             RemoveTrackRange ((DatabaseTrackListModel)TrackModel, new Hyena.Collections.RangeCollection.Range (0, Count));
             Reload ();
         }
-        
+
         private void OnClearFileSystemQueueOnQuit (object o, EventArgs args)
         {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             if (uia_service == null) {
                 return;
             }
-            
+
             ToggleAction action = (ToggleAction)uia_service.GlobalActions["ClearFileSystemQueueOnQuitAction"];
             ClearOnQuitSchema.Set (action.Active);
         }
-        
+
         private void UpdateActions ()
-        {   
+        {
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             if (uia_service == null) {
                 return;
             }
-            
+
             uia_service.GlobalActions.UpdateAction ("ClearFileSystemQueueAction", true, Count > 0);
         }
-        
+
         public static readonly SchemaEntry<bool> ClearOnQuitSchema = new SchemaEntry<bool> (
             "plugins.file_system_queue", "clear_on_quit",
             false,
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs
index db7fd83..a7b27ea 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs
@@ -186,7 +186,7 @@ namespace Banshee.InternetArchive
 
         public bool Indexable { get { return false; } }
 
-        public bool ShowBrowser { 
+        public bool ShowBrowser {
             get { return false; }
         }
 
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsView.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsView.cs
index 469e0e6..27923d8 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsView.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsView.cs
@@ -284,7 +284,7 @@ namespace Banshee.InternetArchive
                     // Translators: {0} is the unicode-stars-rating, {1} is the name of a person who reviewed this item, and {1} is a date/time string
                     sb.AppendFormat (Catalog.GetString ("{0} by {1} on {2}"),
                         stars[Math.Max (0, Math.Min (5, review.Stars))],
-                        GLib.Markup.EscapeText (review.Reviewer), 
+                        GLib.Markup.EscapeText (review.Reviewer),
                         GLib.Markup.EscapeText (review.DateReviewed.ToLocalTime ().ToShortDateString ())
                     );
 
@@ -512,7 +512,7 @@ namespace Banshee.InternetArchive
 
             vbox.PackStart (file_sw, true, true, 0);
             vbox.PackStart (format_list, false, false, 0);
-           
+
             file_list.SizeAllocated += (o, a) => {
                 int target_list_width = file_list.MaxWidth;
                 if (file_sw.VScrollbar != null && file_sw.VScrollbar.IsMapped) {
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HomeView.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HomeView.cs
index e7c0442..52bfc9f 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HomeView.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HomeView.cs
@@ -235,7 +235,7 @@ namespace Banshee.InternetArchive
                     Remove (row);
                 }
             }
-            
+
             private void Reparent (Widget widget, HBox box, int index)
             {
                 if (widget.Parent == box) {
diff --git a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs
index 97e8059..7447515 100644
--- a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs
+++ b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSource.cs
@@ -51,15 +51,15 @@ namespace Banshee.InternetRadio
     {
         private InternetRadioSourceContents source_contents;
         private uint ui_id;
-        
+
         public InternetRadioSource () : base (Catalog.GetString ("Radio"), Catalog.GetString ("Radio"), "internet-radio", 220)
         {
             Properties.SetString ("Icon.Name", "radio");
             TypeUniqueId = "internet-radio";
             IsLocal = false;
-            
+
             AfterInitialized ();
-            
+
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             uia_service.GlobalActions.AddImportant (
                 new ActionEntry ("AddRadioStationAction", Stock.Add,
@@ -67,19 +67,19 @@ namespace Banshee.InternetRadio
                     Catalog.GetString ("Add a new Internet Radio station or playlist"),
                     OnAddStation)
             );
-            
+
             ui_id = uia_service.UIManager.AddUiFromResource ("GlobalUI.xml");
-            
+
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
             Properties.Set<bool> ("ActiveSourceUIResourcePropagate", true);
             Properties.Set<System.Reflection.Assembly> ("ActiveSourceUIResource.Assembly", typeof(InternetRadioSource).Assembly);
 
             Properties.SetString ("GtkActionPath", "/InternetRadioContextMenu");
-            
+
             source_contents = new InternetRadioSourceContents ();
             Properties.Set<bool> ("Nereid.SourceContentsPropagate", true);
             Properties.Set<ISourceContents> ("Nereid.SourceContents", source_contents);
-            
+
             Properties.SetString ("TrackEditorActionLabel", Catalog.GetString ("Edit Station"));
             Properties.Set<InvokeHandler> ("TrackEditorActionHandler", delegate {
                 ITrackModelSource active_track_model_source =
@@ -89,7 +89,7 @@ namespace Banshee.InternetRadio
                     active_track_model_source.TrackModel.SelectedItems.Count <= 0) {
                     return;
                 }
-                
+
                 foreach (TrackInfo track in active_track_model_source.TrackModel.SelectedItems) {
                     DatabaseTrackInfo station_track = track as DatabaseTrackInfo;
                     if (station_track != null) {
@@ -98,7 +98,7 @@ namespace Banshee.InternetRadio
                     }
                 }
             });
-            
+
             Properties.SetString ("TrackView.ColumnControllerXml", String.Format (@"
                 <column-controller>
                   <!--<column modify-default=""IndicatorColumn"">
@@ -136,16 +136,16 @@ namespace Banshee.InternetRadio
                 Catalog.GetString ("Creator"),
                 Catalog.GetString ("Description")
             ));
-            
+
             ServiceManager.PlayerEngine.TrackIntercept += OnPlayerEngineTrackIntercept;
             //ServiceManager.PlayerEngine.ConnectEvent (OnTrackInfoUpdated, Banshee.MediaEngine.PlayerEvent.TrackInfoUpdated);
-            
+
             TrackEqualHandler = delegate (DatabaseTrackInfo a, TrackInfo b) {
                 RadioTrackInfo radio_track = b as RadioTrackInfo;
                 return radio_track != null && DatabaseTrackInfo.TrackEqual (
                     radio_track.ParentTrack as DatabaseTrackInfo, a);
             };
-            
+
             if (new XspfMigrator (this).Migrate ()) {
                 Reload ();
             }
@@ -162,24 +162,24 @@ namespace Banshee.InternetRadio
 
             yield return genre_model;
         }
-        
+
         public override void Dispose ()
         {
             base.Dispose ();
 
             //ServiceManager.PlayerEngine.DisconnectEvent (OnTrackInfoUpdated);
-            
+
             InterfaceActionService uia_service = ServiceManager.Get<InterfaceActionService> ();
             if (uia_service == null) {
                 return;
             }
-            
+
             if (ui_id > 0) {
                 uia_service.UIManager.RemoveUi (ui_id);
                 uia_service.GlobalActions.Remove ("AddRadioStationAction");
-                ui_id = 0;    
+                ui_id = 0;
             }
-            
+
             ServiceManager.PlayerEngine.TrackIntercept -= OnPlayerEngineTrackIntercept;
         }
 
@@ -194,62 +194,62 @@ namespace Banshee.InternetRadio
                 Banshee.Metadata.MetadataService.Instance.Lookup (radio_track);
             }
         }*/
-        
+
         private bool OnPlayerEngineTrackIntercept (TrackInfo track)
         {
             DatabaseTrackInfo station = track as DatabaseTrackInfo;
             if (station == null || station.PrimarySource != this) {
                 return false;
             }
-            
+
             new RadioTrackInfo (station).Play ();
-            
+
             return true;
         }
-        
+
         private void OnAddStation (object o, EventArgs args)
         {
             EditStation (null);
         }
-        
+
         private void EditStation (DatabaseTrackInfo track)
         {
             StationEditor editor = new StationEditor (track);
             editor.Response += OnStationEditorResponse;
             editor.Show ();
         }
-        
+
         private void OnStationEditorResponse (object o, ResponseArgs args)
         {
             StationEditor editor = (StationEditor)o;
             bool destroy = true;
-            
+
             try {
                 if (args.ResponseId == ResponseType.Ok) {
                     DatabaseTrackInfo track = editor.Track ?? new DatabaseTrackInfo ();
                     track.PrimarySource = this;
                     track.IsLive = true;
-                
+
                     try {
                         track.Uri = new SafeUri (editor.StreamUri);
                     } catch {
                         destroy = false;
                         editor.ErrorMessage = Catalog.GetString ("Please provide a valid station URI");
                     }
-                    
+
                     if (!String.IsNullOrEmpty (editor.StationCreator)) {
                         track.ArtistName = editor.StationCreator;
-                    }    
-                    
+                    }
+
                     track.Comment = editor.Description;
-                    
+
                     if (!String.IsNullOrEmpty (editor.Genre)) {
                         track.Genre = editor.Genre;
                     } else {
                         destroy = false;
                         editor.ErrorMessage = Catalog.GetString ("Please provide a station genre");
                     }
-                    
+
                     if (!String.IsNullOrEmpty (editor.StationTitle)) {
                         track.TrackTitle = editor.StationTitle;
                         track.AlbumTitle = editor.StationTitle;
@@ -257,9 +257,9 @@ namespace Banshee.InternetRadio
                         destroy = false;
                         editor.ErrorMessage = Catalog.GetString ("Please provide a station title");
                     }
-                    
+
                     track.Rating = editor.Rating;
-                    
+
                     if (destroy) {
                         track.Save ();
                     }
@@ -272,13 +272,13 @@ namespace Banshee.InternetRadio
             }
         }
 
-        #region IBasicPlaybackController implementation 
-        
+        #region IBasicPlaybackController implementation
+
         public bool First ()
         {
             return false;
         }
-        
+
         public bool Next (bool restart)
         {
             RadioTrackInfo radio_track = ServiceManager.PlaybackController.CurrentTrack as RadioTrackInfo;
@@ -288,7 +288,7 @@ namespace Banshee.InternetRadio
                 return false;
             }
         }
-        
+
         public bool Previous (bool restart)
         {
             RadioTrackInfo radio_track = ServiceManager.PlaybackController.CurrentTrack as RadioTrackInfo;
@@ -298,14 +298,14 @@ namespace Banshee.InternetRadio
                 return false;
             }
         }
-        
-        #endregion 
+
+        #endregion
 
         public override bool AcceptsInputFromSource (Source source)
         {
             return false;
         }
-        
+
         public override bool CanDeleteTracks {
             get { return false; }
         }
@@ -313,15 +313,15 @@ namespace Banshee.InternetRadio
         public override bool ShowBrowser {
             get { return true; }
         }
-        
+
         public override bool CanRename {
             get { return false; }
         }
-        
+
         protected override bool HasArtistAlbum {
             get { return false; }
         }
-        
+
         public override bool HasViewableTrackProperties {
             get { return false; }
         }
diff --git a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSourceContents.cs b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSourceContents.cs
index c73c840..d25c6b5 100644
--- a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSourceContents.cs
+++ b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/InternetRadioSourceContents.cs
@@ -29,9 +29,9 @@
 using System;
 using Mono.Unix;
 
-using Gtk; 
- 
-using Hyena.Data; 
+using Gtk;
+
+using Hyena.Data;
 using Hyena.Data.Gui;
 
 using Banshee.Base;
@@ -51,17 +51,17 @@ namespace Banshee.InternetRadio
     {
         private TrackListView track_view;
         private QueryFilterView<string> genre_view;
-        
+
         public InternetRadioSourceContents () : base ("iradio")
         {
         }
-        
+
         protected override void InitializeViews ()
         {
             SetupMainView (track_view = new TrackListView ());
-            SetupFilterView (genre_view = new QueryFilterView<string> (Catalog.GetString ("Not Set")));    
+            SetupFilterView (genre_view = new QueryFilterView<string> (Catalog.GetString ("Not Set")));
         }
-        
+
         protected override void ClearFilterSelections ()
         {
             if (genre_view.Model != null) {
@@ -72,7 +72,7 @@ namespace Banshee.InternetRadio
         protected override bool ActiveSourceCanHasBrowser {
             get { return true; }
         }
-        
+
         protected override string ForcePosition {
             get { return "left"; }
         }
@@ -85,18 +85,18 @@ namespace Banshee.InternetRadio
             if (track_source == null) {
                 return false;
             }
-            
+
             base.source = source;
-            
+
             SetModel (track_view, track_source.TrackModel);
-            
+
             foreach (IListModel model in track_source.CurrentFilters) {
                 IListModel<QueryFilterInfo<string>> genre_model = model as IListModel<QueryFilterInfo<string>>;
                 if (genre_model != null) {
                     SetModel (genre_view, genre_model);
                 }
             }
-            
+
             return true;
         }
 
@@ -109,12 +109,12 @@ namespace Banshee.InternetRadio
 
         #endregion
 
-        #region ITrackModelSourceContents implementation 
-        
+        #region ITrackModelSourceContents implementation
+
         public IListView<TrackInfo> TrackView {
             get { return track_view; }
         }
-        
+
         #endregion
     }
 }
diff --git a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/StationEditor.cs b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/StationEditor.cs
index 24b958b..137d5ed 100644
--- a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/StationEditor.cs
+++ b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/StationEditor.cs
@@ -49,45 +49,45 @@ namespace Banshee.InternetRadio
         private Alignment error_container;
         private Label error;
         private DatabaseTrackInfo track;
-        
+
         Table table;
-        
+
         public StationEditor (DatabaseTrackInfo track) : base()
         {
             AccelGroup accel_group = new AccelGroup ();
             AddAccelGroup (accel_group);
-            
+
             Title = String.Empty;
             SkipTaskbarHint = true;
             Modal = true;
-            
+
             this.track = track;
-            
+
             string title = track == null
                 ? Catalog.GetString ("Add new radio station")
                 : Catalog.GetString ("Edit radio station");
-            
+
             BorderWidth = 6;
             HasSeparator = false;
             DefaultResponse = ResponseType.Ok;
             Modal = true;
-            
+
             VBox.Spacing = 6;
-            
+
             HBox split_box = new HBox ();
             split_box.Spacing = 12;
             split_box.BorderWidth = 6;
-            
+
             Image image = new Image ();
             image.IconSize = (int)IconSize.Dialog;
             image.IconName = "radio";
             image.Yalign = 0.0f;
             image.Show ();
-            
+
             VBox main_box = new VBox ();
             main_box.BorderWidth = 5;
             main_box.Spacing = 10;
-            
+
             Label header = new Label ();
             header.Markup = String.Format ("<big><b>{0}</b></big>", GLib.Markup.EscapeText (title));
             header.Xalign = 0.0f;
@@ -98,11 +98,11 @@ namespace Banshee.InternetRadio
             message.Xalign = 0.0f;
             message.Wrap = true;
             message.Show ();
-            
+
             table = new Table (5, 2, false);
             table.RowSpacing = 6;
             table.ColumnSpacing = 6;
-                        
+
             genre_entry = ComboBoxEntry.NewText ();
 
             foreach (string genre in ServiceManager.DbConnection.QueryEnumerable<string> ("SELECT DISTINCT Genre FROM CoreTracks ORDER BY Genre")) {
@@ -110,170 +110,170 @@ namespace Banshee.InternetRadio
                     genre_entry.AppendText (genre);
                 }
             }
-            
+
             if (track != null && !String.IsNullOrEmpty (track.Genre)) {
                 genre_entry.Entry.Text = track.Genre;
             }
-            
+
             AddRow (Catalog.GetString ("Station Genre:"), genre_entry);
-            
+
             name_entry        = AddEntryRow (Catalog.GetString ("Station Name:"));
             stream_entry      = AddEntryRow (Catalog.GetString ("Stream URL:"));
             creator_entry     = AddEntryRow (Catalog.GetString ("Station Creator:"));
             description_entry = AddEntryRow (Catalog.GetString ("Description:"));
-            
+
             rating_entry = new RatingEntry ();
             HBox rating_box = new HBox ();
             rating_box.PackStart (rating_entry, false, false, 0);
             AddRow (Catalog.GetString ("Rating:"), rating_box);
-            
+
             table.ShowAll ();
-            
+
             main_box.PackStart (header, false, false, 0);
             main_box.PackStart (message, false, false, 0);
             main_box.PackStart (table, false, false, 0);
             main_box.Show ();
-            
+
             split_box.PackStart (image, false, false, 0);
             split_box.PackStart (main_box, true, true, 0);
             split_box.Show ();
-            
+
             VBox.PackStart (split_box, true, true, 0);
-            
+
             Button cancel_button = new Button (Stock.Cancel);
             cancel_button.CanDefault = false;
             cancel_button.UseStock = true;
             cancel_button.Show ();
             AddActionWidget (cancel_button, ResponseType.Close);
-            
-            cancel_button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Escape, 
+
+            cancel_button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Escape,
                 0, Gtk.AccelFlags.Visible);
-            
+
             save_button = new Button (Stock.Save);
             save_button.CanDefault = true;
             save_button.UseStock = true;
             save_button.Sensitive = false;
             save_button.Show ();
             AddActionWidget (save_button, ResponseType.Ok);
-            
-            save_button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Return, 
+
+            save_button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Return,
                 0, Gtk.AccelFlags.Visible);
-                
+
             name_entry.HasFocus = true;
-            
+
             if (track != null) {
                 if (!String.IsNullOrEmpty (track.TrackTitle)) {
                     name_entry.Text = track.TrackTitle;
                 }
-                
+
                 if (!String.IsNullOrEmpty (track.Uri.AbsoluteUri)) {
                     stream_entry.Text = track.Uri.AbsoluteUri;
                 }
-                
+
                 if (!String.IsNullOrEmpty (track.Comment)) {
                     description_entry.Text = track.Comment;
                 }
-                
+
                 if (!String.IsNullOrEmpty (track.ArtistName)) {
                     creator_entry.Text = track.ArtistName;
                 }
-                
+
                 rating_entry.Value = track.Rating;
             }
-            
+
             error_container = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
             error_container.TopPadding = 6;
             HBox error_box = new HBox ();
             error_box.Spacing = 4;
-            
+
             Image error_image = new Image ();
             error_image.Stock = Stock.DialogError;
             error_image.IconSize = (int)IconSize.Menu;
             error_image.Show ();
-            
+
             error = new Label ();
             error.Xalign = 0.0f;
             error.Show ();
-            
+
             error_box.PackStart (error_image, false, false, 0);
             error_box.PackStart (error, true, true, 0);
             error_box.Show ();
-            
+
             error_container.Add (error_box);
-            
+
             table.Attach (error_container, 0, 2, 4, 5, AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Shrink, 0, 0);
-            
+
             genre_entry.Entry.Changed += OnFieldsChanged;
             name_entry.Changed += OnFieldsChanged;
             stream_entry.Changed += OnFieldsChanged;
-            
+
             OnFieldsChanged (this, EventArgs.Empty);
         }
-        
+
         private Entry AddEntryRow (string title)
         {
             Entry entry = new Entry ();
             AddRow (title, entry);
             return entry;
         }
-        
+
         private uint row = 0;
         private void AddRow (string title, Widget entry)
         {
             Label label = new Label (title);
             label.Xalign = 0.0f;
-            
+
             table.Attach (label, 0, 1, row, row + 1, AttachOptions.Fill, AttachOptions.Fill | AttachOptions.Expand, 0, 0);
             table.Attach (entry, 1, 2, row, row + 1, AttachOptions.Fill | AttachOptions.Expand, AttachOptions.Shrink, 0, 0);
             row++;
         }
-        
+
         private void OnFieldsChanged (object o, EventArgs args)
         {
-            save_button.Sensitive = genre_entry.Entry.Text.Trim ().Length > 0 && 
+            save_button.Sensitive = genre_entry.Entry.Text.Trim ().Length > 0 &&
                 name_entry.Text.Trim ().Length > 0 && stream_entry.Text.Trim ().Length > 0;
         }
-        
+
         public void FocusUri ()
         {
             stream_entry.HasFocus = true;
             stream_entry.SelectRegion (0, stream_entry.Text.Length);
         }
-        
+
         public DatabaseTrackInfo Track {
             get { return track; }
         }
-        
+
         public string Genre {
             get { return genre_entry.Entry.Text.Trim (); }
         }
-        
+
         public string StationCreator {
             get { return creator_entry.Text.Trim (); }
         }
-        
+
         public string StationTitle {
             get { return name_entry.Text.Trim (); }
         }
-        
+
         public string StreamUri {
             get { return stream_entry.Text.Trim (); }
         }
-        
+
         public string Description {
             get { return description_entry.Text.Trim (); }
         }
-        
+
         public int Rating {
             get { return rating_entry.Value; }
         }
-        
+
         public string ErrorMessage {
-            set { 
+            set {
                 if (value == null) {
                     error_container.Hide ();
                 } else {
-                    error.Text = value; 
+                    error.Text = value;
                     error_container.Show ();
                 }
             }
diff --git a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/XspfMigrator.cs b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/XspfMigrator.cs
index df65e5e..6db686f 100644
--- a/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/XspfMigrator.cs
+++ b/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio/XspfMigrator.cs
@@ -43,43 +43,43 @@ namespace Banshee.InternetRadio
     public class XspfMigrator
     {
         private InternetRadioSource source;
-        
+
         public XspfMigrator (InternetRadioSource source)
         {
             this.source = source;
         }
-        
+
         public bool Migrate ()
         {
             if (DatabaseConfigurationClient.Client.Get<bool> ("InternetRadio.LegacyXspfMigrated", false)) {
                 return false;
             }
-            
+
             DatabaseConfigurationClient.Client.Set<bool> ("InternetRadio.LegacyXspfMigrated", true);
-            
+
             string xspf_path = Paths.Combine (Paths.LegacyApplicationData, "plugins", "stations");
 
             try {
                 foreach (string file in Directory.GetFiles (Paths.Combine (xspf_path, "user"), "*.xspf")) {
                     MigrateXspf (file);
                 }
-                
+
                 foreach (string file in Directory.GetFiles (xspf_path, "*.xspf")) {
                     MigrateXspf (file);
                 }
             } catch (Exception e) {
                 Hyena.Log.Exception ("Migrating Internet Radio Stations", e);
             }
-            
+
             return true;
         }
-        
+
         private void MigrateXspf (string path)
         {
             try {
                 Media.Playlists.Xspf.Playlist playlist = new Media.Playlists.Xspf.Playlist ();
                 playlist.Load (path);
-                
+
                 foreach (Track track in playlist.Tracks) {
                     try {
                         MigrateXspfTrack (playlist, track);
@@ -89,51 +89,51 @@ namespace Banshee.InternetRadio
                 }
             } catch (Exception e) {
                 Log.Exception ("Could not migrat XSPF playlist", e);
-            }   
+            }
         }
-        
+
         private void MigrateXspfTrack (Media.Playlists.Xspf.Playlist playlist, Track track)
         {
             if (track.LocationCount <= 0) {
                 return;
             }
-        
+
             DatabaseTrackInfo station = new DatabaseTrackInfo ();
             station.PrimarySource = source;
             station.IsLive = true;
-            
+
             station.Uri = GetSafeUri (track.Locations[0]);
-            
+
             if (!String.IsNullOrEmpty (track.Title)) {
                 station.TrackTitle = track.Title;
             }
-            
+
             if (!String.IsNullOrEmpty (track.Creator)) {
                 station.ArtistName = track.Creator;
             }
-            
+
             if (!String.IsNullOrEmpty (track.Annotation)) {
                 station.Comment = track.Annotation;
             }
-            
+
             if (!String.IsNullOrEmpty (playlist.Title)) {
                 station.Genre = playlist.Title;
             }
-            
+
             if (track.Info != null) {
                 station.MoreInfoUri = GetSafeUri (track.Info);
             }
-            
+
             station.Save ();
         }
-        
+
         private SafeUri GetSafeUri (Uri uri)
         {
             try {
                 if (uri == null) {
                     return null;
                 }
-                
+
                 string absolute = uri.AbsoluteUri;
                 return String.IsNullOrEmpty (absolute) ? null : new SafeUri (absolute);
             } catch {
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/AudioscrobblerService.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/AudioscrobblerService.cs
index d3baed9..88e1535 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/AudioscrobblerService.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/AudioscrobblerService.cs
@@ -61,92 +61,92 @@ namespace Banshee.Lastfm.Audioscrobbler
         private ActionGroup actions;
         private uint ui_manager_id;
         private InterfaceActionService action_service;
-        private Queue queue;        
+        private Queue queue;
         private Account account;
-        
+
         private bool queued; /* if current_track has been queued */
         private bool now_playing_sent = false; /* self explanitory :) */
         private int iterate_countdown = 4 * 4; /* number of times to wait for iterate event before sending now playing */
-        
+
         private DateTime song_start_time;
         private TrackInfo last_track;
-    
+
         public AudioscrobblerService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             account = LastfmCore.Account;
-            
+
             if (account.UserName == null) {
                 account.UserName = LastUserSchema.Get ();
                 account.SessionKey = LastSessionKeySchema.Get ();
                 account.ScrobbleUrl = LastScrobbleUrlSchema.Get ();
             }
-            
+
             if (LastfmCore.UserAgent == null) {
                 LastfmCore.UserAgent = Banshee.Web.Browser.UserAgent;
             }
-            
+
             Browser.Open = Banshee.Web.Browser.Open;
-            
+
             queue = new Queue ();
             LastfmCore.AudioscrobblerQueue = queue;
             connection = LastfmCore.Audioscrobbler;
-            
+
             Network network = ServiceManager.Get<Network> ();
             connection.UpdateNetworkState (network.Connected);
             network.StateChanged += delegate (object o, NetworkStateChangedArgs args) {
                 connection.UpdateNetworkState (args.Connected);
             };
-            
+
             // Update the Visit action menu item if we update our account info
             LastfmCore.Account.Updated += delegate (object o, EventArgs args) {
                 actions["AudioscrobblerVisitAction"].Sensitive = String.IsNullOrEmpty (LastfmCore.Account.UserName);
             };
-            
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
+
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
                 PlayerEvent.StartOfStream |
                 PlayerEvent.EndOfStream |
                 PlayerEvent.Seek |
                 PlayerEvent.Iterate);
-            
+
             action_service = ServiceManager.Get<InterfaceActionService> ("InterfaceActionService");
             InterfaceInitialize ();
         }
-        
+
         public void InterfaceInitialize ()
         {
             actions = new ActionGroup ("Audioscrobbler");
-            
+
             actions.Add (new ActionEntry [] {
                 new ActionEntry ("AudioscrobblerAction", null,
                     Catalog.GetString ("_Last.fm"), null,
                     Catalog.GetString ("Configure the Audioscrobbler plugin"), null),
-                    
+
                 new ActionEntry ("AudioscrobblerVisitAction", null,
                     Catalog.GetString ("Visit _User Profile Page"), null,
                     Catalog.GetString ("Visit Your Last.fm Profile Page"), OnVisitOwnProfile),
-                
+
                 new ActionEntry ("AudioscrobblerConfigureAction", Stock.Properties,
                     Catalog.GetString ("_Configure..."), null,
                     Catalog.GetString ("Configure the Last.fm Extension"), OnConfigurePlugin)
             });
-            
-            actions.Add (new ToggleActionEntry [] { 
+
+            actions.Add (new ToggleActionEntry [] {
                 new ToggleActionEntry ("AudioscrobblerEnableAction", null,
                     Catalog.GetString ("_Enable Song Reporting"), "<control>U",
                     Catalog.GetString ("Enable song reporting"), OnToggleEnabled, Enabled)
             });
-            
+
             action_service.UIManager.InsertActionGroup (actions, 0);
             ui_manager_id = action_service.UIManager.AddUiFromResource ("AudioscrobblerMenu.xml");
-            
+
             actions["AudioscrobblerVisitAction"].Sensitive = account.UserName != null && account.UserName != String.Empty;
         }
-        
-  
+
+
         public void Dispose ()
         {
             // Try and queue the currently playing track just in case it's queueable
@@ -154,18 +154,18 @@ namespace Banshee.Lastfm.Audioscrobbler
             if (ServiceManager.PlayerEngine.CurrentTrack != null) {
                 Queue (ServiceManager.PlayerEngine.CurrentTrack);
             }
-            
+
             ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
-            
+
             // When we stop the connection, queue ends up getting saved too, so the
             // track we queued earlier should stay until next session.
             connection.Stop ();
-        
+
             action_service.UIManager.RemoveUi (ui_manager_id);
             action_service.UIManager.RemoveActionGroup (actions);
             actions = null;
         }
-        
+
         // We need to time how long the song has played
         internal class SongTimer
         {
@@ -173,16 +173,16 @@ namespace Banshee.Lastfm.Audioscrobbler
             public long PlayTime {
                 get { return playtime; }
             }
-            
+
             private long previouspos = 0;
-            
+
             // number of events to ignore to get sync (since events may be fired in wrong order)
             private int ignorenext = 0;
-                        
+
             public void IncreasePosition ()
             {
                 long increase = 0;
-                
+
                 if (ignorenext == 0) {
                     increase = (ServiceManager.PlayerEngine.Position - previouspos);
                     if (increase > 0) {
@@ -191,17 +191,17 @@ namespace Banshee.Lastfm.Audioscrobbler
                 } else {
                     ignorenext--;
                 }
-                
+
                 previouspos = ServiceManager.PlayerEngine.Position;
             }
-            
+
             public void SkipPosition ()
-            {                
+            {
                 // Set newly seeked position
                 previouspos = ServiceManager.PlayerEngine.Position;
                 ignorenext = 2; // allow 2 iterates to sync
             }
-            
+
             public void Reset ()
             {
                 playtime = 0;
@@ -209,78 +209,78 @@ namespace Banshee.Lastfm.Audioscrobbler
                 ignorenext = 0;
             }
         }
-        
+
         SongTimer st = new SongTimer ();
-        
+
         private void Queue (TrackInfo track) {
-            if (track == null || st.PlayTime == 0 || 
+            if (track == null || st.PlayTime == 0 ||
                 !(actions["AudioscrobblerEnableAction"] as ToggleAction).Active) {
-                
+
                 return;
             }
-            
+
             Log.DebugFormat ("Track {3} had playtime of {0} msec ({4}sec), duration {1} msec, queued: {2}",
                 st.PlayTime, track.Duration.TotalMilliseconds, queued, track, st.PlayTime / 1000);
-            
-            if (!queued && track.Duration.TotalSeconds > 30 && 
-                (track.MediaAttributes & TrackMediaAttributes.Music) != 0 && 
+
+            if (!queued && track.Duration.TotalSeconds > 30 &&
+                (track.MediaAttributes & TrackMediaAttributes.Music) != 0 &&
                 !String.IsNullOrEmpty (track.ArtistName) && !String.IsNullOrEmpty (track.TrackTitle) &&
                 (st.PlayTime > track.Duration.TotalMilliseconds / 2 || st.PlayTime > 240 * 1000)) {
                     if (!connection.Started) {
                         connection.Start ();
                     }
-                    
+
                     queue.Add (track, song_start_time);
                     queued = true;
             }
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
                 case PlayerEvent.StartOfStream:
                     // Queue the previous track in case of a skip
                     Queue (last_track);
-                
+
                     st.Reset ();
                     song_start_time = DateTime.Now;
                     last_track = ServiceManager.PlayerEngine.CurrentTrack;
                     queued = false;
                     now_playing_sent = false;
                     iterate_countdown = 4 * 4;  /* we get roughly 4 events/sec */
-                    
+
                     break;
-                
+
                 case PlayerEvent.Seek:
                     st.SkipPosition ();
                     break;
-                
+
                 case PlayerEvent.Iterate:
                     // Queue as now playing
                     if (!now_playing_sent && iterate_countdown == 0) {
                         if (last_track != null && last_track.Duration.TotalSeconds > 30 &&
                             (actions["AudioscrobblerEnableAction"] as ToggleAction).Active &&
                             (last_track.MediaAttributes & TrackMediaAttributes.Music) != 0) {
-                            
+
                             connection.NowPlaying (last_track.ArtistName, last_track.TrackTitle,
                                 last_track.AlbumTitle, last_track.Duration.TotalSeconds, last_track.TrackNumber);
                         }
-                        
+
                         now_playing_sent = true;
                     } else if (iterate_countdown > 0) {
                         iterate_countdown --;
                     }
-                    
+
                     st.IncreasePosition ();
                     break;
-                
+
                 case PlayerEvent.EndOfStream:
                     Queue (ServiceManager.PlayerEngine.CurrentTrack);
-                    iterate_countdown = 4 * 4; 
+                    iterate_countdown = 4 * 4;
                     break;
             }
         }
-        
+
         private void OnConfigurePlugin (object o, EventArgs args)
         {
             AccountLoginDialog dialog = new AccountLoginDialog (account, true);
@@ -291,25 +291,25 @@ namespace Banshee.Lastfm.Audioscrobbler
             dialog.Run ();
             dialog.Destroy ();
         }
-        
+
         private void OnVisitOwnProfile (object o, EventArgs args)
         {
             account.VisitUserProfile (account.UserName);
         }
-        
+
         private void OnToggleEnabled (object o, EventArgs args)
         {
             Enabled = (o as ToggleAction).Active;
         }
-        
+
         internal bool Enabled {
             get { return EngineEnabledSchema.Get (); }
-            set { 
+            set {
                 EngineEnabledSchema.Set (value);
                 (actions["AudioscrobblerEnableAction"] as ToggleAction).Active = value;
             }
         }
-           
+
         public static readonly SchemaEntry<string> LastUserSchema = new SchemaEntry<string> (
             "plugins.lastfm", "username", "", "Last.fm user", "Last.fm username"
         );
@@ -317,7 +317,7 @@ namespace Banshee.Lastfm.Audioscrobbler
         public static readonly SchemaEntry<string> LastSessionKeySchema = new SchemaEntry<string> (
             "plugins.lastfm", "session_key", "", "Last.fm session key", "Last.fm sessions key used in authenticated calls"
         );
-   
+
         public static readonly SchemaEntry<string> LastScrobbleUrlSchema = new SchemaEntry<string> (
             "plugins.audioscrobbler", "api_url",
             null,
@@ -331,7 +331,7 @@ namespace Banshee.Lastfm.Audioscrobbler
             "Engine enabled",
             "Audioscrobbler reporting engine enabled"
         );
-        
+
         string IService.ServiceName {
             get { return "AudioscrobblerService"; }
         }
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs
index fd582dc..462c602 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs
@@ -67,9 +67,9 @@ namespace Banshee.Lastfm.Audioscrobbler
                 this.start_time = (long) (start_time.ToUniversalTime () - epoch).TotalSeconds;
                 // TODO
                 //this.musicbrainzid = track.MusicBrainzId;
-                
+
                 this.musicbrainzid = "";
-                
+
                 // set trackauth value, otherwise empty string is default
                 if (track is LastfmTrackInfo) {
                     this.track_auth = (track as LastfmTrackInfo).TrackAuth;
@@ -93,31 +93,31 @@ namespace Banshee.Lastfm.Audioscrobbler
             public long StartTime {
                 get { return start_time; }
             }
-            
+
             public string Artist {
                 get { return artist; }
             }
-            
+
             public string Album {
                 get { return album; }
             }
-            
+
             public string Title {
                 get { return title; }
             }
-            
+
             public int TrackNumber {
                 get { return track_number; }
             }
-            
+
             public int Duration {
                 get { return duration; }
             }
-            
+
             public string MusicBrainzId {
                 get { return musicbrainzid; }
             }
-            
+
             public string TrackAuth {
                 get { return track_auth; }
             }
@@ -143,7 +143,7 @@ namespace Banshee.Lastfm.Audioscrobbler
             string xmlfilepath = Path.Combine (Banshee.Base.Paths.ExtensionCacheRoot, "last.fm");
             xml_path = Path.Combine (xmlfilepath, "audioscrobbler-queue.xml");
             queue = new List<QueuedTrack> ();
-            
+
             if (!Directory.Exists(xmlfilepath)) {
                 Directory.CreateDirectory (xmlfilepath);
             }
@@ -166,7 +166,7 @@ namespace Banshee.Lastfm.Audioscrobbler
 
             writer.WriteStartElement ("AudioscrobblerQueue");
             foreach (QueuedTrack track in queue) {
-                writer.WriteStartElement ("QueuedTrack");    
+                writer.WriteStartElement ("QueuedTrack");
                 writer.WriteElementString ("Artist", track.Artist);
                 writer.WriteElementString ("Album", track.Album);
                 writer.WriteElementString ("Title", track.Title);
@@ -193,7 +193,7 @@ namespace Banshee.Lastfm.Audioscrobbler
                 XmlNodeList nodes = doc.SelectNodes (query);
 
                 foreach (XmlNode node in nodes) {
-                    string artist = "";    
+                    string artist = "";
                     string album = "";
                     string title = "";
                     int track_number = 0;
@@ -225,7 +225,7 @@ namespace Banshee.Lastfm.Audioscrobbler
                     queue.Add (new QueuedTrack (artist, album, title, track_number, duration,
                         start_time, musicbrainzid, track_auth));
                 }
-            } catch { 
+            } catch {
             }
         }
 
@@ -239,14 +239,14 @@ namespace Banshee.Lastfm.Audioscrobbler
                 if (i == 49) break;
 
                 QueuedTrack track = (QueuedTrack) queue[i];
-                
+
                 string str_track_number = String.Empty;
                 if (track.TrackNumber != 0)
                     str_track_number = track.TrackNumber.ToString();
-                 
-                string source = "P"; /* chosen by user */   
+
+                string source = "P"; /* chosen by user */
                 if (track.TrackAuth.Length != 0) {
-                    // from last.fm 
+                    // from last.fm
                     source = "L" + track.TrackAuth;
                 }
 
@@ -255,13 +255,13 @@ namespace Banshee.Lastfm.Audioscrobbler
                     HttpUtility.UrlEncode (track.Artist),
                     HttpUtility.UrlEncode (track.Title),
                     track.StartTime.ToString (),
-                    source, 
-                    ""  /* rating: L/B/S */, 
+                    source,
+                    ""  /* rating: L/B/S */,
                     track.Duration.ToString (),
                     HttpUtility.UrlEncode (track.Album),
                     str_track_number,
                     track.MusicBrainzId,
-                    
+
                     i);
             }
 
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs
index 7465dba..cc24a8f 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs
@@ -59,7 +59,7 @@ namespace Banshee.Lastfm.Radio
         public LastfmActions (LastfmSource lastfm) : base (ServiceManager.Get<InterfaceActionService> (), "Lastfm")
         {
             this.lastfm = lastfm;
-            
+
             AddImportant (
                 new ActionEntry (
                     "LastfmAddAction", Stock.Add,
@@ -112,7 +112,7 @@ namespace Banshee.Lastfm.Radio
 
                 new ActionEntry ("LastfmArtistPlaySimilarRadioAction", StationType.Similar.IconName,
                     String.Format (listen_to, String.Format ("'{0}'", Catalog.GetString ("Similar to"))), null,
-                    String.Format (listen_to_long, String.Format ("'{0}'", Catalog.GetString ("Similar to"))), 
+                    String.Format (listen_to_long, String.Format ("'{0}'", Catalog.GetString ("Similar to"))),
                     OnArtistPlaySimilarRadio),
 
                 new ActionEntry ("LastfmArtistRecommendAction", "",
@@ -169,8 +169,8 @@ namespace Banshee.Lastfm.Radio
             lastfm.Connection.StateChanged += HandleConnectionStateChanged;
             Actions.SourceActions ["SourcePropertiesAction"].Activated += OnSourceProperties;
             ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
-                PlayerEvent.StartOfStream | 
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
+                PlayerEvent.StartOfStream |
                 PlayerEvent.EndOfStream);
             UpdateActions ();
         }
@@ -183,7 +183,7 @@ namespace Banshee.Lastfm.Radio
             base.Dispose ();
         }
 
-#region Action Handlers 
+#region Action Handlers
 
         private void OnAddStation (object sender, EventArgs args)
         {
@@ -219,7 +219,7 @@ namespace Banshee.Lastfm.Radio
         private void OnLoved (object sender, EventArgs args)
         {
             LastfmTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as LastfmTrackInfo;
-            if (track == null) 
+            if (track == null)
                 return;
 
             track.Love ();
@@ -301,7 +301,7 @@ namespace Banshee.Lastfm.Radio
                     break;
                 }
             }
-            
+
             if (fan_radio == null) {
                 fan_radio = new StationSource (lastfm,
                     String.Format (Catalog.GetString ("Fans of {0}"), CurrentArtist),
@@ -322,7 +322,7 @@ namespace Banshee.Lastfm.Radio
                     break;
                 }
             }
-            
+
             if (similar_radio == null) {
                 similar_radio = new StationSource (lastfm,
                     String.Format (Catalog.GetString ("Similar to {0}"), CurrentArtist),
@@ -345,7 +345,7 @@ namespace Banshee.Lastfm.Radio
         private void OnTrackRecommend (object sender, EventArgs args)
         {
         }
-        
+
 #endregion
 
         private string artist;
@@ -378,7 +378,7 @@ namespace Banshee.Lastfm.Radio
         }
 
         private void OnPlayerEvent (PlayerEventArgs args)
-        { 
+        {
             UpdateActions ();
         }
 
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmColumnController.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmColumnController.cs
index 8cc3c4d..8df6a11 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmColumnController.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmColumnController.cs
@@ -43,7 +43,7 @@ namespace Banshee.Lastfm.Radio
                 AlbumColumn,
                 DurationColumn
             );
-            
+
             DefaultSortColumn = ArtistColumn;
             Load ();
         }
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs
index 6350271..aac024b 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs
@@ -49,7 +49,7 @@ using Banshee.Sources.Gui;
 using Browser = Lastfm.Browser;
 
 namespace Banshee.Lastfm.Radio
-{   
+{
     public class LastfmSource : Source, IDisposable
     {
         private const string lastfm = "Last.fm";
@@ -84,9 +84,9 @@ namespace Banshee.Lastfm.Radio
             if (LastfmCore.UserAgent == null) {
                 LastfmCore.UserAgent = Banshee.Web.Browser.UserAgent;
             }
-            
+
             Browser.Open = Banshee.Web.Browser.Open;
-            
+
             connection = LastfmCore.Radio;
             Network network = ServiceManager.Get<Network> ();
             connection.UpdateNetworkState (network.Connected);
@@ -124,7 +124,7 @@ namespace Banshee.Lastfm.Radio
             Connection.Dispose ();
             UninstallPreferences ();
             actions.Dispose ();
-            
+
             actions = null;
             connection = null;
             account = null;
@@ -135,7 +135,7 @@ namespace Banshee.Lastfm.Radio
             if (!isFile || String.IsNullOrEmpty (uri)) {
                 return;
             }
-            
+
             // Handle lastfm:// URIs
             if (uri.StartsWith ("lastfm://")) {
                 StationSource.CreateFromUrl (this, uri);
@@ -160,15 +160,15 @@ namespace Banshee.Lastfm.Radio
                 Catalog.GetString ("Total Play Count"),
                 SortType.Descending, new PlayCountComparer ())
         };
-        
+
         public override SourceSortType[] ChildSortTypes {
             get { return sort_types; }
         }
-        
+
         public override SourceSortType DefaultChildSort {
             get { return SortNameAscending; }
         }
-        
+
         private string last_username;
         private bool last_was_subscriber = false;
         public void SetUserName (string username)
@@ -221,12 +221,12 @@ namespace Banshee.Lastfm.Radio
         {
             bool have_user = Account.UserName != null;
             bool have_session_key = Account.SessionKey != null;
-            
+
             if (have_session_key) {
                 LastSessionKeySchema.Set (Account.SessionKey);
                 LastIsSubscriberSchema.Set (Account.Subscriber);
             }
-            
+
             if (have_user) {
                 SetUserName (Account.UserName);
             } else {
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs
index e43b89f..f451395 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs
@@ -57,7 +57,7 @@ namespace Banshee.Lastfm.Radio
             };
 
             viewport.Add (main_box);
-            
+
             StyleSet += delegate {
                 viewport.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
                 viewport.ModifyFg (StateType.Normal, Style.Text (StateType.Normal));
@@ -76,7 +76,7 @@ namespace Banshee.Lastfm.Radio
 
             if (lastfm.Connection.Connected) {
                 UpdateForUser (lastfm.Account.UserName);
-            } else { 
+            } else {
                 lastfm.Connection.StateChanged += HandleConnectionStateChanged;
             }
 
@@ -139,7 +139,7 @@ namespace Banshee.Lastfm.Radio
             recently_loved.SetList (user.RecentLovedTracks);
             recently_played.SetList (user.RecentTracks);
             top_artists.SetList (user.GetTopArtists (TopType.Overall));
-            
+
             ShowAll ();
         }
 
@@ -260,7 +260,7 @@ namespace Banshee.Lastfm.Radio
                 //menu.Append (new MenuItem ("Listen to Loved Station"));
                 //menu.Append (new MenuItem ("Listen to Neighbors Station"));
 
-                menu.ShowAll (); 
+                menu.ShowAll ();
                 menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
                 menu.Deactivated += delegate {
                     (sender as Button).Relief = ReliefStyle.None;
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs
index 44e22e7..7f41504 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs
@@ -58,7 +58,7 @@ namespace Banshee.Lastfm.Radio
         public bool Hated {
             get { return hated; }
         }
-        
+
         public string TrackAuth {
             get { return trackauth; }
         }
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs
index d30ed88..8f2e83d 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs
@@ -63,7 +63,7 @@ namespace Banshee.Lastfm.Radio
             Initialize ();
             Dialog.Title = Catalog.GetString ("Edit Station");
         }
-    
+
         public StationEditor (LastfmSource lastfm) : base (dialog_name, new Glade.XML (
             System.Reflection.Assembly.GetExecutingAssembly (), dialog_resource, dialog_name, Banshee.ServiceStack.Application.InternalName))
         {
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
index d03d3f0..2aeffce 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
@@ -49,7 +49,7 @@ using Banshee.MediaEngine;
 using Banshee.Collection;
 using Banshee.ServiceStack;
 using Banshee.PlaybackController;
- 
+
 namespace Banshee.Lastfm.Radio
 {
     public class StationSource : Source, ITrackModelSource, IUnmapableSource, IDisposable, IBasicPlaybackController
@@ -71,9 +71,9 @@ namespace Banshee.Lastfm.Radio
             }
             return null;
         }
-        
+
         private MemoryTrackListModel track_model;
-        
+
         private LastfmSource lastfm;
         public LastfmSource LastfmSource {
             get { return lastfm; }
@@ -113,7 +113,7 @@ namespace Banshee.Lastfm.Radio
         }
 
         private int dbid;
-        
+
         // For StationSources that already exist in the db
         protected StationSource (LastfmSource lastfm, int dbId, string name, string type, string arg, int playCount) : base (generic_name, name, 150, dbId.ToString ())
         {
@@ -174,7 +174,7 @@ namespace Banshee.Lastfm.Radio
             HyenaSqliteCommand command = new HyenaSqliteCommand (
                 @"INSERT INTO LastfmStations (Creator, Name, Type, Arg, PlayCount)
                     VALUES (?, ?, ?, ?, ?)",
-                lastfm.Account.UserName, Name, 
+                lastfm.Account.UserName, Name,
                 Type.ToString (), Arg, PlayCount
             );
 
@@ -195,7 +195,7 @@ namespace Banshee.Lastfm.Radio
             Station = Type.GetStationFor (Arg);
             OnUpdated ();
         }
-        
+
         //private bool shuffle;
         public override void Activate ()
         {
@@ -289,15 +289,15 @@ namespace Banshee.Lastfm.Radio
                     current_track = i;
             }
         }
-        
+
 #region IBasicPlaybackController
 
         bool IBasicPlaybackController.First ()
         {
             return ((IBasicPlaybackController)this).Next (false);
         }
-        
-        private bool playback_requested;    
+
+        private bool playback_requested;
         bool IBasicPlaybackController.Next (bool restart)
         {
             TrackInfo next = NextTrack;
@@ -308,12 +308,12 @@ namespace Banshee.Lastfm.Radio
             }
             return true;
         }
-        
+
         bool IBasicPlaybackController.Previous (bool restart)
         {
             return true;
         }
-        
+
 #endregion
 
         public TrackInfo NextTrack {
@@ -330,7 +330,7 @@ namespace Banshee.Lastfm.Radio
                 return (left < 0) ? 0 : left;
             }
         }
-        
+
         public bool HasDependencies {
             get { return false; }
         }
@@ -388,7 +388,7 @@ namespace Banshee.Lastfm.Radio
 
         private void OnPlayerEvent (PlayerEventArgs args)
         {
-            if (((PlayerEventStateChangeArgs)args).Current == PlayerState.Loaded && 
+            if (((PlayerEventStateChangeArgs)args).Current == PlayerState.Loaded &&
                 track_model.Contains (ServiceManager.PlayerEngine.CurrentTrack)) {
                 CurrentTrack = ServiceManager.PlayerEngine.CurrentTrack;
 
@@ -417,7 +417,7 @@ namespace Banshee.Lastfm.Radio
                 }
             }
         }
-        
+
         private void HandleConnectionStateChanged (object sender, ConnectionStateChangedArgs args)
         {
             UpdateUI (args.State);
@@ -504,7 +504,7 @@ namespace Banshee.Lastfm.Radio
         public bool ShowBrowser {
             get { return false; }
         }
-        
+
         public bool Indexable {
             get { return false; }
         }
@@ -540,7 +540,7 @@ namespace Banshee.Lastfm.Radio
             base.Rename (newName);
             Save ();
         }
-        
+
         public override bool HasProperties {
             get { return true; }
         }
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs
index a2c2961..dca4ebe 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/RecommendationPane.cs
@@ -71,9 +71,9 @@ namespace Banshee.Lastfm.Recommendations
         private TitledList artist_box;
         private TitledList album_box;
         private TitledList track_box;
-        
+
         private Gtk.ScrolledWindow similar_artists_view_sw;
-        
+
         private TileView similar_artists_view;
         private VBox album_list;
         private VBox track_list;
@@ -91,7 +91,7 @@ namespace Banshee.Lastfm.Recommendations
             Catalog.GetString ("Unknown Artist"),
             Catalog.GetString ("Various Artists")
         };
-        
+
         private bool ready = false;
         private bool refreshing = false;
         private bool show_when_ready = true;
@@ -100,7 +100,7 @@ namespace Banshee.Lastfm.Recommendations
             set {
                 show_when_ready = value;
                 ShowIfReady ();
-                
+
                 if (!show_when_ready) {
                     CancelTasks ();
                 } else if (!ready && !refreshing) {
@@ -108,7 +108,7 @@ namespace Banshee.Lastfm.Recommendations
                 }
             }
         }
-        
+
         private void ShowIfReady ()
         {
             if (ShowWhenReady && ready) {
@@ -123,7 +123,7 @@ namespace Banshee.Lastfm.Recommendations
                 if (artist == value) {
                     return;
                 }
-                
+
                 ready = false;
                 artist = value;
 
@@ -133,35 +133,35 @@ namespace Banshee.Lastfm.Recommendations
                         break;
                     }
                 }
-                
+
                 if (!String.IsNullOrEmpty (artist)) {
                     RefreshRecommendations ();
                 }
             }
         }
-        
+
         private void RefreshRecommendations ()
         {
             CancelTasks ();
-            
+
             if (show_when_ready && !String.IsNullOrEmpty (Artist)) {
                 refreshing = true;
                 context_page.SetState (Banshee.ContextPane.ContextState.Loading);
                 Banshee.Kernel.Scheduler.Schedule (new RefreshRecommendationsJob (this, Artist));
             }
         }
-        
+
         private void CancelTasks ()
         {
             Banshee.Kernel.Scheduler.Unschedule (typeof (RefreshRecommendationsJob));
             refreshing = false;
         }
-        
+
         public void HideWithTimeout ()
         {
             GLib.Timeout.Add (200, OnHideTimeout);
         }
-        
+
         private bool OnHideTimeout ()
         {
             if (!ShowWhenReady || !ready) {
@@ -196,7 +196,7 @@ namespace Banshee.Lastfm.Recommendations
             track_box.TitleWidthChars = 25;
             track_list = new VBox ();
             track_box.PackStart (track_list, true, true, 0);
-            
+
             no_artists_pane = new MessagePane ();
             no_artists_pane.NoShowAll = true;
             no_artists_pane.Visible = false;
@@ -218,72 +218,72 @@ namespace Banshee.Lastfm.Recommendations
             main_box.PackStart (album_box, false, false, 5);
             main_box.PackStart (new VSeparator (), false, false, 0);
             main_box.PackStart (track_box, false, false, 5);
-            
+
             no_artists_pane.Hide ();
         }
-        
+
         private void OnSideSizeAllocated (object o, SizeAllocatedArgs args)
         {
             SetSizeRequest (-1, args.Allocation.Height + (Allocation.Height - args.Allocation.Height));
         }
-        
+
         protected override void OnStyleSet (Style previous_style)
         {
             base.OnStyleSet (previous_style);
             similar_artists_view.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
         }
-        
+
         private class RefreshRecommendationsJob : Banshee.Kernel.Job
         {
             private RecommendationPane pane;
             private string artist;
-            
+
             public RefreshRecommendationsJob (RecommendationPane pane, string artist)
             {
                 this.pane = pane;
                 this.artist = artist;
             }
-            
+
             protected override void RunJob ()
             {
                 pane.UpdateForArtist (artist);
             }
         }
-            
+
         private void UpdateForArtist (string artist)
         {
             try {
                 LastfmArtistData artist_data = new LastfmArtistData (artist);
-                
+
                 // Make sure all the album art is downloaded
                 foreach (SimilarArtist similar in artist_data.SimilarArtists) {
                     DataCore.DownloadContent (similar.SmallImageUrl);
                 }
-                
+
                 UpdateForArtist (artist, artist_data.SimilarArtists, artist_data.TopAlbums, artist_data.TopTracks);
             } catch (Exception e) {
                 Log.Exception (e);
             }
         }
-        
-        private void UpdateForArtist (string artist_name, LastfmData<SimilarArtist> similar_artists, 
+
+        private void UpdateForArtist (string artist_name, LastfmData<SimilarArtist> similar_artists,
             LastfmData<ArtistTopAlbum> top_albums, LastfmData<ArtistTopTrack> top_tracks)
         {
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 album_box.Title = String.Format (album_title_format, artist);
                 track_box.Title = String.Format (track_title_format, artist);
-                
+
                 similar_artists_view.ClearWidgets ();
                 ClearBox (album_list);
                 ClearBox (track_list);
-                
-                // Similar Artists                
+
+                // Similar Artists
                 for (int i = 0; i < Math.Min (20, similar_artists.Count); i++) {
                     SimilarArtistTile tile = new SimilarArtistTile (similar_artists[i]);
                     tile.ShowAll ();
                     similar_artists_view.AddWidget (tile);
                 }
-                
+
                 if (similar_artists.Count > 0) {
                     no_artists_pane.Hide ();
                     similar_artists_view_sw.ShowAll ();
@@ -291,39 +291,39 @@ namespace Banshee.Lastfm.Recommendations
                     similar_artists_view_sw.Hide ();
                     no_artists_pane.ShowAll ();
                 }
-                
+
                 for (int i = 0; i < Math.Min (5, top_albums.Count); i++) {
                     ArtistTopAlbum album = top_albums[i];
                     Button album_button = new Button ();
                     album_button.Relief = ReliefStyle.None;
-        
+
                     Label label = new Label ();
                     label.ModifyFg (StateType.Normal, Style.Text (StateType.Normal));
                     label.Ellipsize = Pango.EllipsizeMode.End;
                     label.Xalign = 0;
                     label.Markup = String.Format ("{0}. {1}", i+1, GLib.Markup.EscapeText (album.Name));
                     album_button.Add (label);
-        
+
                     album_button.Clicked += delegate {
                         Banshee.Web.Browser.Open (album.Url);
                     };
                     album_list.PackStart (album_button, false, true, 0);
                 }
                 album_box.ShowAll ();
-                
+
                 for (int i = 0; i < Math.Min (5, top_tracks.Count); i++) {
                     ArtistTopTrack track = top_tracks[i];
                     Button track_button = new Button ();
                     track_button.Relief = ReliefStyle.None;
-        
+
                     HBox box = new HBox ();
-        
+
                     Label label = new Label ();
                     label.ModifyFg (StateType.Normal, Style.Text (StateType.Normal));
                     label.Ellipsize = Pango.EllipsizeMode.End;
                     label.Xalign = 0;
                     label.Markup = String.Format ("{0}. {1}", i+1, GLib.Markup.EscapeText (track.Name));
-        
+
                     /*if(node.SelectSingleNode("track_id") != null) {
                         box.PackEnd(new Image(now_playing_arrow), false, false, 0);
                         track_button.Clicked += delegate {
@@ -335,19 +335,19 @@ namespace Banshee.Lastfm.Recommendations
                             Banshee.Web.Browser.Open (track.Url);
                         };
                     //}
-        
+
                     box.PackStart (label, true, true, 0);
                     track_button.Add (box);
                     track_list.PackStart (track_button, false, true, 0);
                 }
                 track_box.ShowAll ();
-                
+
                 ready = true;
                 refreshing = false;
                 context_page.SetState (Banshee.ContextPane.ContextState.Loaded);
             });
         }
-        
+
         private static void ClearBox (Box box)
         {
             while (box.Children.Length > 0) {
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/SimilarArtistTile.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/SimilarArtistTile.cs
index 2af64ca..9928f14 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/SimilarArtistTile.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Recommendations/SimilarArtistTile.cs
@@ -37,31 +37,31 @@ namespace Banshee.Lastfm.Recommendations
     public class SimilarArtistTile : Tile
     {
         private SimilarArtist artist;
-        
+
         public SimilarArtistTile (SimilarArtist artist)
         {
             Artist = artist;
         }
-        
+
         protected override void OnClicked ()
         {
             if (artist != null) {
                 Banshee.Web.Browser.Open (artist.Url);
             }
         }
-        
+
         public SimilarArtist Artist {
             set {
                 artist = value;
-                
+
                 PrimaryText = value.Name;
-                
+
                 try {
                     SecondaryText = String.Format (Catalog.GetString ("{0}% Similarity"), value.MatchAsInt);
                 } catch {
                     SecondaryText = Catalog.GetString ("Unknown Similarity");
                 }
-                
+
                 try {
                     Pixbuf = new Gdk.Pixbuf (DataCore.GetCachedPathFromUrl (value.SmallImageUrl));
                 } catch {
diff --git a/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeService.cs b/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeService.cs
index aad67a5..7603399 100644
--- a/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeService.cs
+++ b/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeService.cs
@@ -16,11 +16,11 @@ namespace Banshee.MiniMode
         private Menu viewMenu;
         private MenuItem menuItem;
         private InterfaceActionService action_service;
-        
+
         void IExtensionService.Initialize ()
         {
             action_service = ServiceManager.Get<InterfaceActionService> ("InterfaceActionService");
-            
+
             viewMenu = (action_service.UIManager.GetWidget ("/MainMenu/ViewMenu") as MenuItem).Submenu as Menu;
             menuItem = new MenuItem (Catalog.GetString ("_Mini Mode"));
             menuItem.Activated += delegate {
@@ -34,13 +34,13 @@ namespace Banshee.MiniMode
             viewMenu.Insert (menuItem, 2);
             menuItem.Show ();
         }
-        
+
         public void Dispose ()
         {
             if (viewMenu != null && menuItem != null) {
                 viewMenu.Remove (menuItem);
             }
-        
+
             if (mini_mode != null) {
                 // We'll do our visual cleaning in a timeout to avoid
                 // glitches when Banshee quits. Besides, the plugin window is
@@ -49,13 +49,13 @@ namespace Banshee.MiniMode
                 GLib.Timeout.Add (1000, delegate {
                     try {
                         mini_mode.Hide ();
-                    } catch { 
+                    } catch {
                     }
                     return false;
                 });
             }
         }
-        
+
         string IService.ServiceName {
             get { return "MiniModeService"; }
         }
diff --git a/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs b/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs
index 76c8c8b..0299fc3 100644
--- a/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs
+++ b/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs
@@ -6,27 +6,27 @@
  *             Felipe Almeida Lessa
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Gtk;
 using Glade;
@@ -45,7 +45,7 @@ using Banshee.ServiceStack;
 using Banshee.Widgets;
 
 namespace Banshee.MiniMode
-{ 
+{
     public class MiniMode : Banshee.Gui.BaseClientWindow
     {
         [Widget] private Gtk.Box SeekContainer;
@@ -55,9 +55,9 @@ namespace Banshee.MiniMode
         [Widget] private Gtk.Box CoverBox;
         [Widget] private Gtk.Box PlaybackBox;
         [Widget] private Gtk.Box LowerButtonsBox;
-        
+
         [Widget] private Gtk.Button fullmode_button;
-        
+
         private TrackInfoDisplay track_info_display;
         private ConnectedVolumeButton volume_button;
         private SourceComboBox source_combo_box;
@@ -71,10 +71,10 @@ namespace Banshee.MiniMode
         public MiniMode (BaseClientWindow defaultMainWindow) : base (Catalog.GetString ("Banshee Media Player"), "minimode", 0, 0)
         {
             default_main_window = defaultMainWindow;
-            
+
             glade = new Glade.XML (System.Reflection.Assembly.GetExecutingAssembly (), "minimode.glade", "MiniModeWindow", null);
             glade.Autoconnect (this);
-            
+
             Widget child = glade["mini_mode_contents"];
             (child.Parent as Container).Remove (child);
             Add (child);
@@ -83,21 +83,21 @@ namespace Banshee.MiniMode
 
             // Playback Buttons
             Widget previous_button = ActionService.PlaybackActions["PreviousAction"].CreateToolItem ();
-            
+
             Widget playpause_button = ActionService.PlaybackActions["PlayPauseAction"].CreateToolItem ();
-            
+
             Widget button = ActionService.PlaybackActions["NextAction"].CreateToolItem ();
             Menu menu = ActionService.PlaybackActions.ShuffleActions.CreateMenu ();
             MenuButton next_button = new MenuButton (button, menu, true);
-            
+
             PlaybackBox.PackStart (previous_button, false, false, 0);
             PlaybackBox.PackStart (playpause_button, false, false, 0);
             PlaybackBox.PackStart (next_button, false, false, 0);
             PlaybackBox.ShowAll ();
-            
+
             // Seek Slider/Position Label
             seek_slider = new ConnectedSeekSlider ();
-            
+
             SeekContainer.PackStart (seek_slider, false, false, 0);
             SeekContainer.ShowAll ();
 
@@ -105,12 +105,12 @@ namespace Banshee.MiniMode
             volume_button = new ConnectedVolumeButton ();
             VolumeContainer.PackStart (volume_button, false, false, 0);
             volume_button.Show ();
-            
+
             // Source combobox
             source_combo_box = new SourceComboBox ();
             SourceBox.PackStart (source_combo_box, true, true, 0);
             source_combo_box.Show ();
-            
+
             // Track info
             track_info_display = new ClassicTrackInfoDisplay ();
             track_info_display.Show ();
@@ -118,21 +118,21 @@ namespace Banshee.MiniMode
 
             // Repeat button
             RepeatActionButton repeat_toggle_button = new RepeatActionButton ();
-            
+
             LowerButtonsBox.PackEnd (repeat_toggle_button, false, false, 0);
             LowerButtonsBox.ShowAll ();
-            
+
             tooltip_host = TooltipSetter.CreateHost ();
 
             SetTip (fullmode_button, Catalog.GetString ("Switch back to full mode"));
             SetTip (repeat_toggle_button, Catalog.GetString ("Change repeat playback mode"));
-            
+
             // Hook up everything
-            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, 
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
                 PlayerEvent.Error |
                 PlayerEvent.StateChange |
                 PlayerEvent.TrackInfoUpdated);
-            
+
             SetHeightLimit ();
         }
 
@@ -148,7 +148,7 @@ namespace Banshee.MiniMode
         private void SetHeightLimit ()
         {
             Gdk.Geometry limits = new Gdk.Geometry ();
-            
+
             limits.MinHeight = -1;
             limits.MaxHeight = -1;
             limits.MinWidth = SizeRequest ().Width;
@@ -184,7 +184,7 @@ namespace Banshee.MiniMode
         }
 
         // ---- Player Event Handlers ----
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
@@ -209,14 +209,14 @@ namespace Banshee.MiniMode
         protected void UpdateMetaDisplay ()
         {
             TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
-            
+
             if (track == null) {
                 InfoBox.Visible = false;
                 return;
             }
-            
+
             InfoBox.Visible = true;
-            
+
             try {
                 SetHeightLimit ();
             } catch (Exception) {
@@ -229,7 +229,7 @@ namespace Banshee.MiniMode
 
         private void OverrideFullscreen ()
         {
-            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> (); 
+            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> ();
             if (service == null || service.ViewActions == null) {
                 return;
             }
@@ -240,7 +240,7 @@ namespace Banshee.MiniMode
 
         private void RelinquishFullscreen ()
         {
-            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> (); 
+            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> ();
             if (service == null || service.ViewActions == null) {
                 return;
             }
diff --git a/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceModel.cs b/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceModel.cs
index aa37df8..09608cc 100644
--- a/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceModel.cs
+++ b/src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceModel.cs
@@ -6,27 +6,27 @@
  *             Felipe Almeida Lessa
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using Gtk;
 
@@ -35,39 +35,39 @@ using Banshee.Sources;
 using Banshee.Sources.Gui;
 
 namespace Banshee.MiniMode
-{ 
+{
     public class SourceModel : Gtk.TreeStore
     {
         internal SourceModel() : base(typeof(Gdk.Pixbuf), typeof(string), typeof(Source))
-        {          
+        {
             Clear();
-            
+
             foreach(Source source in ServiceManager.SourceManager.Sources) {
                 AddSource(source);
             }
-            
+
             ServiceManager.SourceManager.SourceAdded += delegate(SourceAddedArgs args) {
                 AddSource(args.Source, args.Position);
             };
-            
+
             ServiceManager.SourceManager.SourceRemoved += delegate(SourceEventArgs args) {
                 RemoveSource(args.Source);
             };
         }
 
-        private void SetSource(TreeIter iter, Source source) 
+        private void SetSource(TreeIter iter, Source source)
         {
             Gdk.Pixbuf icon = SourceIconResolver.ResolveIcon(source);
-            
+
             if(icon == null) {
                 icon = Banshee.Gui.IconThemeUtils.LoadIcon(22, "source-library");
             }
-            
+
             SetValue(iter, 0, icon);
             SetValue(iter, 1, source.Name);
             SetValue(iter, 2, source);
         }
-                
+
         private void AddSource(Source source)
         {
             if(source.Parent == null) {
@@ -82,11 +82,11 @@ namespace Banshee.MiniMode
                 AddSource(source, iter);
             }
         }
-        
+
         private void AddSource(Source source, TreeIter iter)
         {
             SetSource(iter, source);
-            
+
             foreach(Source child in source.Children) {
                 AddSource(child, AppendNode(iter));
             }
@@ -109,25 +109,25 @@ namespace Banshee.MiniMode
                 Remove(ref iter);
             }
         }
-        
+
         public TreeIter FindSource(Source source)
         {
             TreeIter iter = TreeIter.Zero;
             GetIterFirst(out iter);
             return FindSource(source, iter);
         }
-        
+
         private TreeIter FindSource(Source source, TreeIter iter)
         {
             if(!IterIsValid(iter)) {
                 return TreeIter.Zero;
             }
-            
+
             do {
                 if((GetValue(iter, 2) as Source) == source) {
                     return iter;
                 }
-                
+
                 if(IterHasChild(iter)) {
                     TreeIter citer = TreeIter.Zero;
                     IterChildren(out citer, iter);
@@ -137,7 +137,7 @@ namespace Banshee.MiniMode
                     }
                 }
             } while(IterNext(ref iter));
-            
+
             return TreeIter.Zero;
         }
     }
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MediaPanelContents.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MediaPanelContents.cs
index 2225b11..5f93b52 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MediaPanelContents.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MediaPanelContents.cs
@@ -1,21 +1,21 @@
-// 
+//
 // MediaPanelContents.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -45,12 +45,12 @@ namespace Banshee.Moblin
             BorderWidth = 10;
             Spacing = 10;
         }
-        
+
         private void BuildViews ()
         {
             var left = new VBox () { Spacing = 10 };
             left.PackStart (new SearchHeader (), false, false, 0);
-            
+
             left.PackStart (new Label () {
                 Xalign = 0.0f,
                 Xpad = 10,
@@ -58,7 +58,7 @@ namespace Banshee.Moblin
                     GLib.Markup.EscapeText (Catalog.GetString ("Most Recently Played")))
             }, false, false, 0);
             left.PackStart (new RecentAlbumsView (), false, false, 0);
-            
+
             var button = new Button (Catalog.GetString ("Music Library"));
             button.Clicked += (o, e) => {
                 ServiceManager.SourceManager.SetActiveSource (ServiceManager.SourceManager.MusicLibrary);
@@ -74,11 +74,11 @@ namespace Banshee.Moblin
 
             ShowAll ();
         }
-        
+
         protected override void OnParentSet (Widget previous)
         {
             base.OnParentSet (previous);
-            
+
             if (Parent != null) {
                 Parent.ModifyBg (StateType.Normal, Style.White);
             }
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinPanel.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinPanel.cs
index 77af3e0..106b581 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinPanel.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinPanel.cs
@@ -1,21 +1,21 @@
-// 
+//
 // MoblinPanel.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -36,10 +36,10 @@ namespace Banshee.Moblin
     public class MoblinPanel : IDisposable
     {
         public static MoblinPanel Instance { get; private set; }
-        
+
         public PanelGtk ToolbarPanel { get; private set; }
         public Container ParentContainer { get; private set; }
-        
+
         public uint ToolbarPanelWidth { get; private set; }
         public uint ToolbarPanelHeight { get; private set; }
 
@@ -48,17 +48,17 @@ namespace Banshee.Moblin
             if (Instance != null) {
                 throw new ApplicationException ("Only one MoblinPanel instance can exist");
             }
-            
+
             if (ApplicationContext.CommandLine.Contains ("mutter-panel")) {
                 BuildPanel ();
                 Instance = this;
             }
         }
-        
+
         public void Dispose ()
         {
         }
-        
+
         private void BuildPanel ()
         {
             try {
@@ -71,13 +71,13 @@ namespace Banshee.Moblin
                 };
             } catch (Exception e) {
                 Log.Exception ("Could not bind to Moblin panel", e);
-                
+
                 var window = new Gtk.Window ("Moblin Media Panel");
                 window.SetDefaultSize (1000, 500);
                 window.WindowPosition = Gtk.WindowPosition.Center;
                 ParentContainer = window;
             }
-            
+
             ParentContainer.ShowAll ();
         }
     }
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs
index f51ebd5..6933653 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinService.cs
@@ -49,24 +49,24 @@ namespace Banshee.Moblin
         private SourceManager source_manager;
         private PlayerEngineService player;
         private Banshee.Sources.Source now_playing;
-        
+
         public MoblinService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             elements_service = ServiceManager.Get<GtkElementsService> ();
             interface_action_service = ServiceManager.Get<InterfaceActionService> ();
             source_manager = ServiceManager.SourceManager;
             player = ServiceManager.PlayerEngine;
-        
+
             if (!ServiceStartup ()) {
                 ServiceManager.ServiceStarted += OnServiceStarted;
             }
         }
-        
-        private void OnServiceStarted (ServiceStartedArgs args) 
+
+        private void OnServiceStarted (ServiceStartedArgs args)
         {
             if (args.Service is Banshee.Gui.InterfaceActionService) {
                 interface_action_service = (InterfaceActionService)args.Service;
@@ -77,44 +77,44 @@ namespace Banshee.Moblin
             } else if (args.Service is PlayerEngineService) {
                 player = ServiceManager.PlayerEngine;
             }
-                    
+
             ServiceStartup ();
         }
-        
+
         private bool ServiceStartup ()
         {
             if (elements_service == null || interface_action_service == null || source_manager == null || player == null) {
                 return false;
             }
-            
+
             Initialize ();
-            
+
             ServiceManager.ServiceStarted -= OnServiceStarted;
-            
+
             return true;
         }
-        
+
         private void Initialize ()
         {
             ReflectionHackeryUpTheNereid ();
-            
+
             if (MoblinPanel.Instance == null) {
                 return;
             }
-            
+
             var container = MoblinPanel.Instance.ParentContainer;
             foreach (var child in container.Children) {
                 container.Remove (child);
             }
             container.Add (new MediaPanelContents ());
             container.ShowAll ();
-            
+
             if (MoblinPanel.Instance.ToolbarPanel != null) {
                 container.SetSizeRequest (
                     (int)MoblinPanel.Instance.ToolbarPanelWidth,
                     (int)MoblinPanel.Instance.ToolbarPanelHeight);
             }
-            
+
             // Since the Panel is running, we don't actually ever want to quit!
             Banshee.ServiceStack.Application.ShutdownRequested += () => {
                 elements_service.PrimaryWindow.Hide ();
@@ -124,12 +124,12 @@ namespace Banshee.Moblin
             FindNowPlaying ();
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerStateChanged, PlayerEvent.StateChange | PlayerEvent.StartOfStream);
         }
-        
+
         private void ReflectionHackeryUpTheNereid ()
         {
             // This is a horribly abusive method, but hey, this kind
             // of stuff is what Firefox extensions are made of!
-            
+
             // First grab the type and instance of the primary window
             // and make sure we're only hacking the Nereid UI
             var pwin = elements_service.PrimaryWindow;
@@ -137,22 +137,22 @@ namespace Banshee.Moblin
             if (pwin_type.FullName != "Nereid.PlayerInterface") {
                 return;
             }
-            
+
             // regular metacity does not seem to like this at all, crashing
-            // and complaining "Window manager warning: Buggy client sent a 
+            // and complaining "Window manager warning: Buggy client sent a
             // _NET_ACTIVE_WINDOW message with a timestamp of 0 for 0x2e00020"
             if (MoblinPanel.Instance != null) {
                 pwin.Decorated = false;
                 pwin.Maximize ();
             }
-            
+
             // Now we want to make the Toolbar work in the Moblin GTK theme
             var pwin_toolbar = (Toolbar)pwin_type.GetProperty ("HeaderToolbar").GetValue (pwin, null);
             var pwin_toolbar_align = (Alignment)pwin_toolbar.Parent;
             pwin_toolbar_align.TopPadding = 0;
             pwin_toolbar_align.BottomPadding = 6;
             pwin_type.GetMethod ("DisableHeaderToolbarExposeEvent").Invoke (pwin, null);
-                        
+
             // Remove the volume button since Moblin enforces the global volume
             foreach (var child in pwin_toolbar.Children) {
                 if (child.GetType ().FullName.StartsWith ("Banshee.Widgets.GenericToolItem")) {
@@ -163,7 +163,7 @@ namespace Banshee.Moblin
                     }
                 }
             }
-            
+
             // Incredibly ugly hack to pack in a close button in a separate
             // toolbar so that it may be aligned at the top right of the
             // window (appears to float in the menubar)
@@ -173,18 +173,18 @@ namespace Banshee.Moblin
             close_button.Image.Xpad = 1;
             close_button.Image.Ypad = 1;
             close_button.Clicked += (o, e) => Banshee.ServiceStack.Application.Shutdown ();
-            
+
             var close_toolbar = new Toolbar () {
                 ShowArrow = false,
                 ToolbarStyle = ToolbarStyle.Icons
             };
-            
+
             close_toolbar.Add (close_button);
             close_toolbar.ShowAll ();
 
-            pwin_header_table.Attach (close_toolbar, 1, 2, 0, 1, 
+            pwin_header_table.Attach (close_toolbar, 1, 2, 0, 1,
                 AttachOptions.Shrink, AttachOptions.Fill | AttachOptions.Expand, 0, 0);
-            
+
             // Set the internal engine volume to 100%
             // FIXME: We should have something like PlayerEngine.InternalVolumeEnabled = false
             ServiceManager.PlayerEngine.Volume = 100;
@@ -220,7 +220,7 @@ namespace Banshee.Moblin
                 }
             };
         }
-        
+
         public void PresentPrimaryInterface ()
         {
             elements_service.PrimaryWindow.Maximize ();
@@ -229,13 +229,13 @@ namespace Banshee.Moblin
                 MoblinPanel.Instance.ToolbarPanel.RequestHide ();
             }
         }
-        
+
         public void Dispose ()
         {
             if (MoblinPanel.Instance != null) {
                 MoblinPanel.Instance.Dispose ();
             }
-            
+
             interface_action_service = null;
             elements_service = null;
         }
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinTrackInfoDisplay.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinTrackInfoDisplay.cs
index 8dc9e6b..b39ddf1 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinTrackInfoDisplay.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/MoblinTrackInfoDisplay.cs
@@ -32,37 +32,37 @@ using System.Text.RegularExpressions;
 using Banshee.ServiceStack;
 
 namespace Banshee.Moblin
-{    
+{
     public class MoblinTrackInfoDisplay : Banshee.Gui.Widgets.ClassicTrackInfoDisplay
     {
         private Regex line_three_split;
-        
+
         public MoblinTrackInfoDisplay () : base ()
         {
         }
-        
+
         protected override string GetSecondLineText (Banshee.Collection.TrackInfo track)
         {
             if (line_three_split == null) {
                 line_three_split = new Regex (@"size=""small"">", RegexOptions.Compiled);
             }
-            
+
             var text = base.GetSecondLineText (track);
             var splits = line_three_split.Split (text);
             string new_text = String.Empty;
-            
+
             for (int i = 0; i < splits.Length; i++) {
                 if (i == 2) {
                     new_text += "\n";
                 }
-                
+
                 new_text += splits[i];
-                
+
                 if (i < 2) {
                     new_text += @"size=""small"">";
                 }
             }
-            
+
             return new_text;
         }
     }
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlayQueueBox.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlayQueueBox.cs
index 7a90402..4f8cf7f 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlayQueueBox.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlayQueueBox.cs
@@ -1,21 +1,21 @@
-// 
+//
 // PlayQueueBox.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -40,36 +40,36 @@ namespace Banshee.Moblin
     public class PlayQueueBox : VBox
     {
         private TerseTrackListView playqueue_view;
-        
+
         public PlayQueueBox ()
         {
             Spacing = 5;
-            
+
             FindPlayQueue ();
-            
+
             PackStart (new Label () {
-                Markup = String.Format ("<b><big>{0}</big></b>", 
+                Markup = String.Format ("<b><big>{0}</big></b>",
                     GLib.Markup.EscapeText (Catalog.GetString ("Play Queue"))),
                 Xalign = 0.0f
             }, false, false, 0);
-            
+
             PackStart (new PlaybackBox (), false, false, 0);
-            
+
             PackStart (new Hyena.Widgets.ScrolledWindow () {
                 (playqueue_view = new TerseTrackListView () {
                     HasFocus = true
                 })
             }, true, true, 0);
-            
+
             PackStart (new MoblinTrackInfoDisplay () {
                 HeightRequest = 64
             }, false, false, 10);
-            
+
             playqueue_view.ColumnController.Insert (new Column (null, "indicator",
                 new ColumnCellStatusIndicator (null), 0.05, true, 20, 20), 0);
             playqueue_view.ColumnController.Add (new Column ("Rating", new ColumnCellRating ("Rating", false), 0.15));
         }
-        
+
         private void FindPlayQueue ()
         {
             Banshee.ServiceStack.ServiceManager.SourceManager.SourceAdded += delegate (SourceAddedArgs args) {
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlaybackBox.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlaybackBox.cs
index c41560c..8eecd13 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlaybackBox.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/PlaybackBox.cs
@@ -1,21 +1,21 @@
-// 
+//
 // PlaybackBox.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -39,11 +39,11 @@ namespace Banshee.Moblin
         public PlaybackBox ()
         {
             var action_service = ServiceManager.Get<InterfaceActionService> ();
-        
+
             PackStart (action_service.PlaybackActions["PreviousAction"].CreateToolItem (), false, false, 0);
             PackStart (action_service.PlaybackActions["PlayPauseAction"].CreateToolItem (), false, false, 0);
             PackStart (new NextButton (action_service), false, false, 0);
-            
+
             var seek_slider = new ConnectedSeekSlider ();
             seek_slider.Show ();
             PackStart (seek_slider, false, false, 0);
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsList.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsList.cs
index a8d7b8a..55fb740 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsList.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsList.cs
@@ -1,21 +1,21 @@
-// 
+//
 // RecentAlbumsList.cs
-//  
+//
 // Author:
 //   Gabriel Burt <gburt novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -51,7 +51,7 @@ namespace Banshee.Moblin
 
             select_cmd = new HyenaSqliteCommand (@"
                 SELECT a.AlbumID, a.Title, a.ArtistName, a.IsCompilation, MAX(t.LastPlayedStamp) as MaxLastPlayed
-                    FROM CoreAlbums a, CoreTracks t 
+                    FROM CoreAlbums a, CoreTracks t
                     WHERE t.PrimarySourceID = ? AND a.AlbumID = t.AlbumID AND a.Title != ''
                     GROUP BY a.AlbumID
                     ORDER BY MaxLastPlayed DESC
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsView.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsView.cs
index 60b55af..6c3852d 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsView.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/RecentAlbumsView.cs
@@ -1,21 +1,21 @@
-// 
+//
 // RecentAlbumsView.cs
-//  
+//
 // Author:
 //   Gabriel Burt <gburt novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -42,19 +42,19 @@ namespace Banshee.Moblin
         const int icon_size = 98;
         const int cols = 5;
         const int rows = 3;
-        
+
         private class AlbumButton : Button
         {
             private Image image = new Image ();
             private AlbumInfo album;
-            
+
             public AlbumButton ()
             {
                 Relief = ReliefStyle.None;
                 Add (image);
                 image.Show ();
             }
-            
+
             protected override void OnClicked ()
             {
                 var source = ServiceManager.SourceManager.MusicLibrary;
@@ -78,12 +78,12 @@ namespace Banshee.Moblin
                     }
                 }
             }
-            
+
             public Gdk.Pixbuf Pixbuf {
                 get { return image.Pixbuf; }
                 set { image.Pixbuf = value; }
             }
-            
+
             public AlbumInfo Album {
                 get { return album; }
                 set {
@@ -106,7 +106,7 @@ namespace Banshee.Moblin
             recent = new RecentAlbumsList (cols * rows);
             recent.Changed += (o, a) => Reload ();
             Reload ();
-            
+
             NoShowAll = true;
         }
 
@@ -121,7 +121,7 @@ namespace Banshee.Moblin
                     Attach (button, i, i + 1, j, j + 1);
                 }
             }
-            
+
             Show ();
         }
 
@@ -134,7 +134,7 @@ namespace Banshee.Moblin
                     buttons[i].Hide ();
                     continue;
                 }
-                
+
                 var album = recent.Albums[i];
                 buttons[i].Album = album;
                 buttons[i].Pixbuf = artwork.LookupScalePixbuf (album.ArtworkId, icon_size);
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchEntry.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchEntry.cs
index 1b3f2fa..3146fbf 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchEntry.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchEntry.cs
@@ -1,21 +1,21 @@
-// 
+//
 // SearchEntry.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Aaron Bockover
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -40,7 +40,7 @@ namespace Banshee.Moblin
         public SearchEntry ()
         {
             BuildSearchEntry ();
-            
+
             InterfaceActionService uia = ServiceManager.Get<InterfaceActionService> ();
             if (uia != null) {
                 Gtk.Action action = uia.GlobalActions["WikiSearchHelpAction"];
@@ -48,27 +48,27 @@ namespace Banshee.Moblin
                     MenuItem item = new SeparatorMenuItem ();
                     item.Show ();
                     Menu.Append (item);
-                    
+
                     item = new ImageMenuItem (Stock.Help, null);
                     item.Activated += delegate { action.Activate (); };
                     item.Show ();
                     Menu.Append (item);
                 }
             }
-            
+
             SearchSensitive = true;
             Show ();
         }
-        
+
         private struct SearchFilter
         {
             public int Id;
             public string Field;
             public string Title;
         }
-        
+
         private Dictionary<int, SearchFilter> search_filters = new Dictionary<int, SearchFilter> ();
-        
+
         private void AddSearchFilter (TrackFilterType id, string field, string title)
         {
             SearchFilter filter = new SearchFilter ();
@@ -77,7 +77,7 @@ namespace Banshee.Moblin
             filter.Title = title;
             search_filters.Add (filter.Id, filter);
         }
-        
+
         private void BuildSearchEntry ()
         {
             AddSearchFilter (TrackFilterType.None, String.Empty, Catalog.GetString ("Artist, Album, or Title"));
@@ -120,12 +120,12 @@ namespace Banshee.Moblin
                 editable.Position = Query.Length;
             }
         }
-               
+
         public bool SearchSensitive {
             get { return Sensitive; }
             set { Sensitive = value; }
         }
-        
+
         public Banshee.Widgets.SearchEntry Entry {
             get { return this; }
         }
diff --git a/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchHeader.cs b/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchHeader.cs
index 8760d79..2cecc88 100644
--- a/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchHeader.cs
+++ b/src/Extensions/Banshee.Moblin/Banshee.Moblin/SearchHeader.cs
@@ -1,21 +1,21 @@
-// 
+//
 // SearchHeader.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -58,34 +58,34 @@ namespace Banshee.Moblin
             };
             PackStart (search, true, true, 0);
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (!Visible || !IsMapped) {
                 return true;
             }
-            
+
             RenderBackground (evnt.Window, evnt.Region);
             foreach (var child in Children) {
                 PropagateExpose (child, evnt);
             }
-            
+
             return true;
         }
-        
+
         private void RenderBackground (Gdk.Window window, Gdk.Region region)
-        {   
+        {
             Cairo.Context cr = Gdk.CairoHelper.Create (window);
-            
+
             cr.Color = new Cairo.Color (0xe7 / (double)0xff,
                 0xea / (double)0xff, 0xfd / (double)0xff);
-            
+
             CairoExtensions.RoundedRectangle (cr,
                 Allocation.X, Allocation.Y,
                 Allocation.Width, Allocation.Height, 5);
-            
+
             cr.Fill ();
-            
+
             CairoExtensions.DisposeContext (cr);
         }
     }
diff --git a/src/Extensions/Banshee.Moblin/Mutter/PanelClient.cs b/src/Extensions/Banshee.Moblin/Mutter/PanelClient.cs
index 5e86b83..596cc34 100644
--- a/src/Extensions/Banshee.Moblin/Mutter/PanelClient.cs
+++ b/src/Extensions/Banshee.Moblin/Mutter/PanelClient.cs
@@ -1,21 +1,21 @@
-// 
+//
 // PanelClient.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -33,132 +33,132 @@ namespace Mutter
     {
         [DllImport ("libmoblin-panel-gtk")]
         private static extern IntPtr mpl_panel_client_get_type ();
-    
+
         public static new GLib.GType GType {
             get { return new GLib.GType (mpl_panel_client_get_type ()); }
         }
-        
+
         protected PanelClient () : base (IntPtr.Zero)
         {
             CreateNativeObject (new string [0], new GLib.Value [0]);
         }
-    
+
         public PanelClient (IntPtr raw) : base (raw)
         {
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern void mpl_panel_client_request_show (IntPtr panel);
-    
+
         public void RequestShow ()
         {
             mpl_panel_client_request_show (Handle);
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern void mpl_panel_client_request_hide (IntPtr panel);
-    
+
         public void RequestHide ()
         {
             mpl_panel_client_request_hide (Handle);
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern void mpl_panel_client_request_focus (IntPtr panel);
-    
+
         public void RequestFocus ()
         {
             mpl_panel_client_request_focus (Handle);
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern void mpl_panel_client_set_height_request (IntPtr panel, uint height);
-        
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern uint mpl_panel_client_get_height_request (IntPtr panel);
-    
+
         public uint HeightRequest {
             get { return mpl_panel_client_get_height_request (Handle); }
             set { mpl_panel_client_set_height_request (Handle, value); }
         }
-        
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern void mpl_panel_client_request_button_style (IntPtr panel, string style);
-    
+
         public string ButtonStyleRequest {
             set { mpl_panel_client_request_button_style (Handle, value); }
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern void mpl_panel_client_request_tooltip (IntPtr panel, string tooltip);
-    
+
         public string TooltipRequest {
             set { mpl_panel_client_request_tooltip (Handle, value); }
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern uint mpl_panel_client_get_xid (IntPtr panel);
-    
+
         public uint Xid {
             get { return mpl_panel_client_get_xid (Handle); }
         }
-        
+
         [GLib.Signal ("set-size")]
         public event SetSizeHandler SetSizeEvent {
             add { GLib.Signal.Lookup (this, "set-size", typeof (SetSizeArgs)).AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "set-size", typeof (SetSizeArgs)).RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("show-begin")]
         public event EventHandler ShowBeginEvent {
             add { GLib.Signal.Lookup (this, "show-begin").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "show-begin").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("show-end")]
         public event EventHandler ShowEndEvent {
             add { GLib.Signal.Lookup (this, "show-end").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "show-end").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("hide-begin")]
         public event EventHandler HideBeginEvent {
             add { GLib.Signal.Lookup (this, "hide-begin").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "hide-begin").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("hide-end")]
         public event EventHandler HideEndEvent {
             add { GLib.Signal.Lookup (this, "hide-end").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "hide-end").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("request-show")]
         public event EventHandler RequestShowEvent {
             add { GLib.Signal.Lookup (this, "request-show").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "request-show").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("request-hide")]
         public event EventHandler RequestHideEvent {
             add { GLib.Signal.Lookup (this, "request-hide").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "request-hide").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("request-focus")]
         public event EventHandler RequestFocusEvent {
             add { GLib.Signal.Lookup (this, "request-focus").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "request-focus").RemoveDelegate (value); }
         }
-        
+
         // FIXME: need to define an delegate and args class
-        
+
         [GLib.Signal ("request-button-style")]
         public event EventHandler RequestButtonStyleEvent {
             add { GLib.Signal.Lookup (this, "request-button-style").AddDelegate (value); }
             remove { GLib.Signal.Lookup (this, "request-button-style").RemoveDelegate (value); }
         }
-        
+
         [GLib.Signal ("request-tooltip")]
         public event EventHandler RequestTooltipEvent {
             add { GLib.Signal.Lookup (this, "request-tooltip").AddDelegate (value); }
diff --git a/src/Extensions/Banshee.Moblin/Mutter/PanelGtk.cs b/src/Extensions/Banshee.Moblin/Mutter/PanelGtk.cs
index 51d7e71..4ae1f6f 100644
--- a/src/Extensions/Banshee.Moblin/Mutter/PanelGtk.cs
+++ b/src/Extensions/Banshee.Moblin/Mutter/PanelGtk.cs
@@ -1,21 +1,21 @@
-// 
+//
 // PanelGtk.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -35,28 +35,28 @@ namespace Mutter
     {
         [DllImport ("libmoblin-panel-gtk")]
         private static extern IntPtr mpl_panel_gtk_get_type ();
-    
+
         public static new GLib.GType GType {
             get { return new GLib.GType (mpl_panel_gtk_get_type ()); }
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern IntPtr mpl_panel_gtk_new (string name, string tooltip, string stylesheet,
             string button_style, bool with_toolbar_service);
-        
+
         public PanelGtk (string name, string tooltip, string stylesheet,
             string button_style, bool with_toolbar_service) : base (IntPtr.Zero)
         {
             Raw = mpl_panel_gtk_new (name, tooltip, stylesheet, button_style, with_toolbar_service);
         }
-    
+
         public PanelGtk (IntPtr raw) : base (raw)
         {
         }
-    
+
         [DllImport ("libmoblin-panel-gtk")]
         private static extern IntPtr mpl_panel_gtk_get_window (IntPtr panel);
-    
+
         private Container container_window;
         public Container Window {
             get { return container_window ?? (container_window = new Container (mpl_panel_gtk_get_window (Handle))); }
diff --git a/src/Extensions/Banshee.Moblin/Mutter/SetSizeHandler.cs b/src/Extensions/Banshee.Moblin/Mutter/SetSizeHandler.cs
index bc2b43b..a9c1159 100644
--- a/src/Extensions/Banshee.Moblin/Mutter/SetSizeHandler.cs
+++ b/src/Extensions/Banshee.Moblin/Mutter/SetSizeHandler.cs
@@ -1,21 +1,21 @@
-// 
+//
 // SetSizeHandler.cs
-//  
+//
 // Author:
 //   Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Novell, Inc.
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -34,7 +34,7 @@ namespace Mutter
         public uint Width {
             get { return (uint)Args[0]; }
         }
-        
+
         public uint Height {
             get { return (uint)Args[1]; }
         }
diff --git a/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys/MultimediaKeysService.cs b/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys/MultimediaKeysService.cs
index 739a5ef..555c63e 100644
--- a/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys/MultimediaKeysService.cs
+++ b/src/Extensions/Banshee.MultimediaKeys/Banshee.MultimediaKeys/MultimediaKeysService.cs
@@ -43,7 +43,7 @@ namespace Banshee.MultimediaKeys
     {
         private const string BusName = "org.gnome.SettingsDaemon";
         private const string ObjectPath = "/org/gnome/SettingsDaemon";
-        
+
         private delegate void MediaPlayerKeyPressedHandler (string application, string key);
 
         // GNOME 2.20
@@ -54,7 +54,7 @@ namespace Banshee.MultimediaKeys
             void ReleaseMediaPlayerKeys (string application);
             event MediaPlayerKeyPressedHandler MediaPlayerKeyPressed;
         }
-        
+
         // GNOME 2.22
         [Interface ("org.gnome.SettingsDaemon.MediaKeys")]
         private interface ISettingsDaemon222
@@ -63,23 +63,23 @@ namespace Banshee.MultimediaKeys
             void ReleaseMediaPlayerKeys (string application);
             event MediaPlayerKeyPressedHandler MediaPlayerKeyPressed;
         }
-        
+
         private ISettingsDaemon222 settings_daemon_222;
         private ISettingsDaemon220 settings_daemon_220;
-    
+
         public MultimediaKeysService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             // It's a common theme in GNOME for APIs to change every 6 months
-            // We are essentially an ISV, and actually care about backwards 
+            // We are essentially an ISV, and actually care about backwards
             // compatibility! Therefore, fall back to the interface for GNOME 2.20
             // if the GNOME 2.22 interface cannot be found.
             //
             // Additionally, there is a design limitation in Managed DBus that restricts
-            // it from flattening/following managed interfaces, therefore we must 
+            // it from flattening/following managed interfaces, therefore we must
             // explicitly handle two different GSD objects as if they had nothing in
             // common at this point. This at least will be fixed in Managed DBus.
             //
@@ -89,28 +89,28 @@ namespace Banshee.MultimediaKeys
             //    [Interface ("org.gnome.SettingsDaemon")] interface IGsd220 : IGsdBase { }
             //    [Interface ("org.gnome.SettingsDaemon.MediaKeys")] interface IGsd222 : IGsdBase { }
             //
-            //    IGsdBase gsd = bus.GetObject<IGsd222> (name, path_222) 
-            //    if (gsd == null) 
+            //    IGsdBase gsd = bus.GetObject<IGsd222> (name, path_222)
+            //    if (gsd == null)
             //        gsd = bus.GetObject<IGsd220> (name, path_220)
             //    gsd.Foo ();
             //
-            
+
             try {
-                settings_daemon_222 = Bus.Session.GetObject<ISettingsDaemon222> (BusName, 
+                settings_daemon_222 = Bus.Session.GetObject<ISettingsDaemon222> (BusName,
                     new ObjectPath (ObjectPath + "/MediaKeys"));
                 settings_daemon_222.GrabMediaPlayerKeys (Application.InternalName, 0);
                 settings_daemon_222.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed;
-                
+
                 Log.Debug ("Using GNOME 2.22 API for Multimedia Keys");
             } catch {
                 settings_daemon_222 = null;
-                
+
                 try {
-                    settings_daemon_220 = Bus.Session.GetObject<ISettingsDaemon220> (BusName, 
+                    settings_daemon_220 = Bus.Session.GetObject<ISettingsDaemon220> (BusName,
                         new ObjectPath (ObjectPath));
                     settings_daemon_220.GrabMediaPlayerKeys (Application.InternalName, 0);
                     settings_daemon_220.MediaPlayerKeyPressed += OnMediaPlayerKeyPressed;
-                
+
                     Log.Debug ("Using GNOME 2.20 API for Multimedia keys");
                 } catch {
                     settings_daemon_220 = null;
@@ -118,7 +118,7 @@ namespace Banshee.MultimediaKeys
                 }
             }
         }
-  
+
         public void Dispose ()
         {
             if (settings_daemon_222 != null) {
@@ -126,20 +126,20 @@ namespace Banshee.MultimediaKeys
                 settings_daemon_222.ReleaseMediaPlayerKeys (Application.InternalName);
                 settings_daemon_222 = null;
             }
-            
+
             if (settings_daemon_220 != null) {
                 settings_daemon_220.MediaPlayerKeyPressed -= OnMediaPlayerKeyPressed;
                 settings_daemon_220.ReleaseMediaPlayerKeys (Application.InternalName);
                 settings_daemon_220 = null;
             }
         }
-        
+
         private void OnMediaPlayerKeyPressed (string application, string key)
         {
             if (application != Application.InternalName) {
                 return;
             }
-            
+
             switch (key) {
                 case "Play":
                     ServiceManager.PlayerEngine.TogglePlaying ();
@@ -155,7 +155,7 @@ namespace Banshee.MultimediaKeys
                     break;
             }
         }
-        
+
         string IService.ServiceName {
             get { return "MultimediaKeysService"; }
         }
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/GtkNotificationAreaBox.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/GtkNotificationAreaBox.cs
index 2c385b6..fae76e4 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/GtkNotificationAreaBox.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/GtkNotificationAreaBox.cs
@@ -41,44 +41,44 @@ namespace Banshee.NotificationArea
     public class GtkNotificationAreaBox : StatusIcon, INotificationAreaBox
     {
         public event EventHandler Disconnected;
-        
+
         public event EventHandler Activated {
             add { base.Activate += value; }
             remove { base.Activate -= value; }
         }
-        
+
         public event PopupMenuHandler PopupMenuEvent {
             add { base.PopupMenu += value; }
             remove { base.PopupMenu -= value; }
         }
-        
+
         public Widget Widget {
             get { return null; }
         }
-        
+
         public GtkNotificationAreaBox (BaseClientWindow window)
         {
             Visible = false;
             IconName = Banshee.ServiceStack.Application.IconName;
-            
+
             Tooltip = window.Title;
             window.TitleChanged += delegate { Tooltip = window.Title; };
         }
-        
+
         public void PositionMenu (Menu menu, out int x, out int y, out bool push_in)
         {
             StatusIcon.PositionMenu (menu, out x, out y, out push_in, Handle);
         }
-        
+
         public void OnPlayerEvent (PlayerEventArgs args)
         {
         }
-        
+
         public void Show ()
         {
             Visible = true;
         }
-        
+
         public void Hide ()
         {
             Visible = false;
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/INotificationAreaBox.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/INotificationAreaBox.cs
index b089886..02e66f8 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/INotificationAreaBox.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/INotificationAreaBox.cs
@@ -38,12 +38,12 @@ namespace Banshee.NotificationArea
         event EventHandler Disconnected;
         event EventHandler Activated;
         event PopupMenuHandler PopupMenuEvent;
-        
+
         void PositionMenu (Menu menu, out int x, out int y, out bool push_in);
         void OnPlayerEvent (PlayerEventArgs args);
-        
+
         Widget Widget { get; }
-        
+
         void Show ();
         void Hide ();
     }
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs
index aa0c51c..4c34152 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs
@@ -46,7 +46,7 @@ using Banshee.MediaEngine;
 using Hyena.Gui;
 using Hyena.Widgets;
 
-namespace Banshee.NotificationArea 
+namespace Banshee.NotificationArea
 {
     public class NotificationAreaService : IExtensionService
     {
@@ -55,70 +55,70 @@ namespace Banshee.NotificationArea
         private InterfaceActionService interface_action_service;
         private ArtworkManager artwork_manager_service;
         private bool disposed;
-        
+
         private Menu menu;
         private RatingMenuItem rating_menu_item;
         private BansheeActionGroup actions;
         private bool? actions_supported;
-        
+
         private int ui_manager_id;
-        
+
         private bool show_notifications;
         private string notify_last_title;
         private string notify_last_artist;
         private TrackInfo current_track;
         private Notification current_nf;
-    
+
         public NotificationAreaService ()
         {
         }
-        
+
         void IExtensionService.Initialize ()
         {
             elements_service = ServiceManager.Get<GtkElementsService> ();
             interface_action_service = ServiceManager.Get<InterfaceActionService> ();
-        
+
             if (!ServiceStartup ()) {
                 ServiceManager.ServiceStarted += OnServiceStarted;
             }
         }
-        
-        private void OnServiceStarted (ServiceStartedArgs args) 
+
+        private void OnServiceStarted (ServiceStartedArgs args)
         {
             if (args.Service is Banshee.Gui.InterfaceActionService) {
                 interface_action_service = (InterfaceActionService)args.Service;
             } else if (args.Service is GtkElementsService) {
                 elements_service = (GtkElementsService)args.Service;
             }
-                    
+
             ServiceStartup ();
         }
-        
+
         private bool ServiceStartup ()
         {
             if (elements_service == null || interface_action_service == null) {
                 return false;
             }
-            
+
             Initialize ();
-            
+
             ServiceManager.ServiceStarted -= OnServiceStarted;
             if (!BuildNotificationArea ()) {
                 Hyena.Log.Warning ("No available notification area drivers could be found.", false);
                 Dispose ();
                 return false;
             }
-            
+
             GLib.Timeout.Add (1000, delegate {
                 if (notif_area != null) {
                     notif_area.Show ();
                 }
                 return false;
             });
-            
+
             return true;
         }
-        
+
         private void Initialize ()
         {
             interface_action_service.GlobalActions.Add (new ActionEntry [] {
@@ -126,63 +126,63 @@ namespace Banshee.NotificationArea
                     Catalog.GetString ("_Close"), "<Control>W",
                     Catalog.GetString ("Close"), CloseWindow)
             });
-            
+
             actions = new BansheeActionGroup (interface_action_service, "NotificationArea");
             actions.Add (new ToggleActionEntry [] {
                 new ToggleActionEntry ("ToggleNotificationsAction", null,
                     Catalog.GetString ("_Show Notifications"), null,
                     Catalog.GetString ("Show notifications when item changes"), ToggleNotifications, ShowNotifications)
             });
-            
+
             interface_action_service.AddActionGroup (actions);
             ui_manager_id = (int)interface_action_service.UIManager.AddUiFromResource ("NotificationAreaMenu.xml");
-            
+
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
                PlayerEvent.StartOfStream |
                PlayerEvent.EndOfStream |
                PlayerEvent.TrackInfoUpdated |
                PlayerEvent.StateChange);
-            
+
             // Forcefully load this
             show_notifications = ShowNotifications;
         }
-        
+
         public void Dispose ()
         {
             if (disposed) {
                 return;
             }
-            
+
             if (current_nf != null) {
                 try {
                     current_nf.Close ();
                 } catch {}
             }
-                
+
             if (notif_area != null) {
                 notif_area.Dispose ();
                 notif_area = null;
             }
-            
+
             ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
-            
+
             elements_service.PrimaryWindowClose = null;
-            
+
             Gtk.Action close_action = interface_action_service.GlobalActions["CloseAction"];
             if (close_action != null) {
                 interface_action_service.GlobalActions.Remove (close_action);
             }
-            
+
             if (ui_manager_id >= 0) {
                 interface_action_service.RemoveActionGroup ("NotificationArea");
                 interface_action_service.UIManager.RemoveUi ((uint)ui_manager_id);
                 ui_manager_id = -1;
             }
-            
+
             actions = null;
             elements_service = null;
             interface_action_service = null;
-            
+
             disposed = true;
         }
 
@@ -196,8 +196,8 @@ namespace Banshee.NotificationArea
                 return actions_supported.Value;
             }
         }
-        
-        private bool BuildNotificationArea () 
+
+        private bool BuildNotificationArea ()
         {
             if (Environment.OSVersion.Platform == PlatformID.Unix) {
                 try {
@@ -205,28 +205,28 @@ namespace Banshee.NotificationArea
                 } catch {
                 }
             }
-            
+
             if (notif_area == null) {
                 #if HAVE_GTK_2_10
                 notif_area = new GtkNotificationAreaBox (elements_service.PrimaryWindow);
                 #endif
             }
-            
+
             if (notif_area == null) {
                 return false;
             }
-            
+
             notif_area.Disconnected += OnNotificationAreaDisconnected;
             notif_area.Activated += OnNotificationAreaActivated;
             notif_area.PopupMenuEvent += OnNotificationAreaPopupMenuEvent;
-            
+
             if (!QuitOnCloseSchema.Get ()) {
                 RegisterCloseHandler ();
             }
-            
+
             return true;
         }
-        
+
         private void DisposeNotificationArea ()
         {
             if (notif_area != null) {
@@ -235,16 +235,16 @@ namespace Banshee.NotificationArea
                 notif_area.PopupMenuEvent -= OnNotificationAreaPopupMenuEvent;
             }
         }
-        
+
         private void BuildContextMenu ()
         {
             if (menu != null) {
                 return;
             }
-            
+
             menu = (Menu)interface_action_service.UIManager.GetWidget("/NotificationAreaIconMenu");
             menu.Show ();
-            
+
             for (int i = 0; i < menu.Children.Length; i++) {
                 if (menu.Children[i].Name == "Previous") {
                     int j = i;
@@ -253,17 +253,17 @@ namespace Banshee.NotificationArea
                     if (repeat_group != null) {
                         menu.Insert (repeat_group.CreateSubmenu (), i++ + 2);
                     }
-                    
+
                     PlaybackShuffleActions shuffle_group = interface_action_service.FindActionGroup ("PlaybackShuffle")
                          as PlaybackShuffleActions;
                     if (shuffle_group != null) {
                         menu.Insert (shuffle_group.CreateSubmenu (), i++ + 2);
                     }
-                    
+
                     if (j != i) {
                         menu.Insert (new SeparatorMenuItem (), i++ + 2);
                     }
-                    
+
                     rating_menu_item = new RatingMenuItem ();
                     rating_menu_item.Activated += OnRatingChanged;
                     ToggleRatingMenuSensitive ();
@@ -272,39 +272,39 @@ namespace Banshee.NotificationArea
                 }
             }
         }
-        
+
         private void RegisterCloseHandler ()
         {
             if (elements_service.PrimaryWindowClose == null) {
                 elements_service.PrimaryWindowClose = OnPrimaryWindowClose;
             }
         }
-        
+
         private void UnregisterCloseHandler ()
         {
             if (elements_service.PrimaryWindowClose != null) {
                 elements_service.PrimaryWindowClose = null;
             }
         }
-        
+
         private bool OnPrimaryWindowClose ()
         {
             CloseWindow (null, null);
             return true;
         }
-        
+
         private void OnNotificationAreaDisconnected (object o, EventArgs args)
         {
             // Ensure we don't keep the destroyed reference around
             DisposeNotificationArea ();
             BuildNotificationArea ();
         }
-        
+
         private void OnNotificationAreaActivated (object o, EventArgs args)
         {
             elements_service.PrimaryWindow.ToggleVisibility ();
         }
-        
+
         private void OnNotificationAreaPopupMenuEvent (object o, PopupMenuArgs args)
         {
             BuildContextMenu ();
@@ -321,7 +321,7 @@ namespace Banshee.NotificationArea
 
             menu.Popup (null, null, notif_area.PositionMenu, 3, Gtk.Global.CurrentEventTime);
         }
-        
+
         private void CloseWindow (object o, EventArgs args)
         {
             try {
@@ -330,16 +330,16 @@ namespace Banshee.NotificationArea
                     if (image != null) {
                         image = image.ScaleSimple (42, 42, Gdk.InterpType.Bilinear);
                     }
-                    
+
                     Notification nf = new Notification (
-                        Catalog.GetString ("Still Running"), 
-                        Catalog.GetString ("Banshee was closed to the notification area. " + 
+                        Catalog.GetString ("Still Running"),
+                        Catalog.GetString ("Banshee was closed to the notification area. " +
                             "Use the <i>Quit</i> option to end your session."),
                         image, notif_area.Widget);
                     nf.Urgency = Urgency.Low;
                     nf.Timeout = 4500;
                     nf.Show ();
-                    
+
                     NotifyOnCloseSchema.Set (false);
                 }
             } catch {
@@ -352,8 +352,8 @@ namespace Banshee.NotificationArea
         {
             ShowNotifications = ((ToggleAction)actions["ToggleNotificationsAction"]).Active;
         }
-        
-        private void OnPlayerEvent (PlayerEventArgs args) 
+
+        private void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
                 case PlayerEvent.StartOfStream:
@@ -367,10 +367,10 @@ namespace Banshee.NotificationArea
                     ToggleRatingMenuSensitive ();
                     break;
             }
-            
+
             notif_area.OnPlayerEvent (args);
         }
-        
+
         private void OnRatingChanged (object o, EventArgs args)
         {
             TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
@@ -386,13 +386,13 @@ namespace Banshee.NotificationArea
                 ServiceManager.PlayerEngine.TrackInfoUpdated ();
             }
         }
-        
-        private void ToggleRatingMenuSensitive () 
+
+        private void ToggleRatingMenuSensitive ()
         {
             if (rating_menu_item == null) {
                 return;
             }
-            
+
             if (ServiceManager.PlayerEngine.CurrentTrack is DatabaseTrackInfo) {
                 rating_menu_item.Show ();
             } else {
@@ -403,18 +403,18 @@ namespace Banshee.NotificationArea
         private void ShowTrackNotification ()
         {
             // This has to happen before the next if, otherwise the last_* members aren't set correctly.
-            if (current_track == null || (notify_last_title == current_track.DisplayTrackTitle 
+            if (current_track == null || (notify_last_title == current_track.DisplayTrackTitle
                 && notify_last_artist == current_track.DisplayArtistName)) {
                 return;
             }
-            
+
             notify_last_title = current_track.DisplayTrackTitle;
             notify_last_artist = current_track.DisplayArtistName;
-            
+
             if (!show_notifications) {
                 return;
             }
-            
+
             foreach (var window in elements_service.ContentWindows) {
                 if (window.HasToplevelFocus) {
                     return;
@@ -437,22 +437,22 @@ namespace Banshee.NotificationArea
             if (artwork_manager_service == null) {
                 artwork_manager_service = ServiceManager.Get<ArtworkManager> ();
             }
-            
+
             Gdk.Pixbuf image = null;
-            
+
             if (artwork_manager_service != null) {
                 image = is_notification_daemon
                     ? artwork_manager_service.LookupScalePixbuf (current_track.ArtworkId, 42)
                     : artwork_manager_service.LookupPixbuf (current_track.ArtworkId);
             }
-            
+
             if (image == null) {
                 image = IconThemeUtils.LoadIcon (48, "audio-x-generic");
                 if (image != null) {
                     image.ScaleSimple (42, 42, Gdk.InterpType.Bilinear);
                 }
             }
-            
+
             try {
                 if (current_nf == null) {
                     current_nf = new Notification (current_track.DisplayTrackTitle,
@@ -493,7 +493,7 @@ namespace Banshee.NotificationArea
 
             return String.Format (fmt, new_args);
         }
-        
+
         private string GetByFrom (string artist, string display_artist, string album, string display_album)
         {
             bool has_artist = !String.IsNullOrEmpty (artist);
@@ -523,24 +523,24 @@ namespace Banshee.NotificationArea
                 ServiceManager.PlaybackController.Next ();
             }
         }
-        
+
         public bool ShowNotifications {
-            get { 
-                show_notifications = ShowNotificationsSchema.Get (); 
+            get {
+                show_notifications = ShowNotificationsSchema.Get ();
                 return show_notifications;
             }
-            
-            set { 
+
+            set {
                 ShowNotificationsSchema.Set (value);
                 show_notifications = value;
             }
         }
-        
+
         public bool QuitOnClose {
             get {
                 return QuitOnCloseSchema.Get ();
             }
-            
+
             set {
                 QuitOnCloseSchema.Set (value);
                 if (value) {
@@ -550,32 +550,32 @@ namespace Banshee.NotificationArea
                 }
             }
         }
-    
+
         string IService.ServiceName {
             get { return "NotificationAreaService"; }
         }
-        
+
         public static readonly SchemaEntry<bool> EnabledSchema = new SchemaEntry<bool> (
             "plugins.notification_area", "enabled",
             true,
             "Plugin enabled",
             "Notification area plugin enabled"
         );
-                
+
         public static readonly SchemaEntry<bool> ShowNotificationsSchema = new SchemaEntry<bool> (
             "plugins.notification_area", "show_notifications",
             true,
             "Show notifications",
             "Show information notifications when item starts playing"
         );
-                
+
         public static readonly SchemaEntry<bool> NotifyOnCloseSchema = new SchemaEntry<bool> (
             "plugins.notification_area", "notify_on_close",
             true,
             "Show a notification when closing main window",
             "When the main window is closed, show a notification stating this has happened."
         );
-                
+
         public static readonly SchemaEntry<bool> QuitOnCloseSchema = new SchemaEntry<bool> (
             "plugins.notification_area", "quit_on_close",
             false,
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/TrackInfoPopup.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/TrackInfoPopup.cs
index 3dc1162..bee0ec9 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/TrackInfoPopup.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/TrackInfoPopup.cs
@@ -41,20 +41,20 @@ namespace Banshee.NotificationArea
     {
         private TrackInfoDisplay header;
         private ConnectedSeekSlider seek_slider;
-    
+
         public TrackInfoPopup () : base (Gtk.WindowType.Popup)
         {
             BorderWidth = 8;
             AppPaintable = true;
             Resizable = false;
             TypeHint = Gdk.WindowTypeHint.Notification;
-            
+
             VBox box = new VBox ();
             box.Spacing = 4;
 
             header = new ClassicTrackInfoDisplay ();
             header.SetSizeRequest (320, 64);
-            
+
             seek_slider = new ConnectedSeekSlider (SeekSliderLayout.Horizontal);
             seek_slider.StreamPositionLabel.FormatString = "<small>{0}</small>";
             seek_slider.LeftPadding = 0;
@@ -62,20 +62,20 @@ namespace Banshee.NotificationArea
 
             box.PackStart (header, true, true, 0);
             box.PackStart (seek_slider, false, false, 0);
-            
+
             Add (box);
             box.ShowAll ();
         }
-        
+
         public override void Dispose ()
         {
             header.Dispose ();
             base.Dispose ();
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
-            Gtk.Style.PaintFlatBox (Style, GdkWindow, StateType.Normal, ShadowType.Out, evnt.Area, this, "tooltip", 
+            Gtk.Style.PaintFlatBox (Style, GdkWindow, StateType.Normal, ShadowType.Out, evnt.Area, this, "tooltip",
                 0, 0, Allocation.Width, Allocation.Height);
             return base.OnExposeEvent (evnt);
         }
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs
index 1125119..fd2febf 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationArea.cs
@@ -31,7 +31,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-// NOTE: throughout IntPtr is used for the Xlib long type, as this tends to 
+// NOTE: throughout IntPtr is used for the Xlib long type, as this tends to
 // have the correct width and does not require any configure checks.
 
 using System;
@@ -94,7 +94,7 @@ public class X11NotificationArea : Plug
 			ev.window = (IntPtr) Id;
 			ev.format = 8;
 			ev.message_type = message_data_atom;
-       
+
 			int len = Math.Min (arr.Length - index, 20);
 			memcpy (ref ev.data, (IntPtr)((int)unmanaged_arr + index), (IntPtr)len);
 		
@@ -254,7 +254,7 @@ public class X11NotificationArea : Plug
 	private FilterReturn ManagerFilter (IntPtr xevent, Event evnt)
 	{
 		XAnyEvent xev = (XAnyEvent) Marshal.PtrToStructure (xevent, typeof(XAnyEvent));
-   
+
 		if (xev.type == XEventName.ClientMessage){
 			XClientMessageEvent xclient = (XClientMessageEvent) Marshal.PtrToStructure (xevent, typeof(XClientMessageEvent));
 
@@ -277,7 +277,7 @@ public class X11NotificationArea : Plug
 				ManagerWindowDestroyed();
 			}
 		}
-   
+
 		return FilterReturn.Continue;
 	}
 
@@ -285,11 +285,11 @@ public class X11NotificationArea : Plug
 	{
 		if (manager_window != IntPtr.Zero) {
 			Gdk.Window gdkwin = Gdk.Window.ForeignNewForDisplay (Display, (uint) manager_window);
-       
+
 			if (gdkwin != null) {
 				gdkwin.RemoveFilter (filter);
 			}
-       
+
 			manager_window = IntPtr.Zero;
 			UpdateManagerWindow (true);
 		}
@@ -309,14 +309,14 @@ public class X11NotificationArea : Plug
 		}
 
 		display = gdk_x11_display_get_xdisplay (Display.Handle);
-   
+
 		gdk_error_trap_push ();
 		type = IntPtr.Zero;
-   
-		result = XGetWindowProperty (display, manager_window, orientation_atom, (IntPtr) 0, 
-					     (IntPtr) System.Int32.MaxValue, false, (IntPtr) XAtom.Cardinal, out type, out format, 
+
+		result = XGetWindowProperty (display, manager_window, orientation_atom, (IntPtr) 0,
+					     (IntPtr) System.Int32.MaxValue, false, (IntPtr) XAtom.Cardinal, out type, out format,
 					     out nitems, out bytes_after, out prop_return);
-   
+
 		error = gdk_error_trap_pop ();
 
 		if (error != 0 || result != 0) {
@@ -324,8 +324,8 @@ public class X11NotificationArea : Plug
 		}
 
 		if (type == (IntPtr) XAtom.Cardinal) {
-			orientation = ((SystemTrayOrientation) Marshal.ReadInt32 (prop_return) == SystemTrayOrientation.Horz) 
-				? Orientation.Horizontal 
+			orientation = ((SystemTrayOrientation) Marshal.ReadInt32 (prop_return) == SystemTrayOrientation.Horz)
+				? Orientation.Horizontal
 				: Orientation.Vertical;
 		}
 
@@ -371,14 +371,14 @@ public class X11NotificationArea : Plug
 	private extern static IntPtr XSelectInput (IntPtr display, IntPtr window, IntPtr mask);
 
 	[DllImport ("libX11.so.6")]
-	private extern static int XSendEvent (IntPtr display, IntPtr window, bool propagate, IntPtr event_mask, 
+	private extern static int XSendEvent (IntPtr display, IntPtr window, bool propagate, IntPtr event_mask,
 					     ref XClientMessageEvent send_event);
 
 	[DllImport ("libX11.so.6")]
-	private extern static int XGetWindowProperty (IntPtr display, IntPtr w, IntPtr property, IntPtr long_offset, 
+	private extern static int XGetWindowProperty (IntPtr display, IntPtr w, IntPtr property, IntPtr long_offset,
 						     IntPtr long_length, bool deleteProp, IntPtr req_type,
-						     out IntPtr actual_type_return, out int actual_format_return, 
-						     out IntPtr nitems_return, out IntPtr bytes_after_return, 
+						     out IntPtr actual_type_return, out int actual_format_return,
+						     out IntPtr nitems_return, out IntPtr bytes_after_return,
 						     out IntPtr prop_return);
 
 	[Flags]
@@ -466,7 +466,7 @@ public class X11NotificationArea : Plug
 	}
 
 	[StructLayout(LayoutKind.Sequential)]
-	private struct XAnyEvent 
+	private struct XAnyEvent
 	{
 		internal XEventName    type;
 		internal IntPtr        serial;
@@ -476,7 +476,7 @@ public class X11NotificationArea : Plug
 	}
 
 	[StructLayout(LayoutKind.Sequential)]
-	private struct XPropertyEvent 
+	private struct XPropertyEvent
 	{
 		internal XEventName    type;
 		internal IntPtr        serial;
@@ -489,7 +489,7 @@ public class X11NotificationArea : Plug
 	}
 
 	[StructLayout(LayoutKind.Sequential)]
-	private struct XClientMessageEvent 
+	private struct XClientMessageEvent
 	{
 		internal XEventName     type;
 		internal IntPtr         serial;
@@ -498,9 +498,9 @@ public class X11NotificationArea : Plug
 		internal IntPtr         window;
 		internal IntPtr         message_type;
 		internal int            format;
-    
+
 		[StructLayout(LayoutKind.Sequential)]
-		internal struct DataUnion 
+		internal struct DataUnion
 		{
 			internal IntPtr ptr1;
 			internal IntPtr ptr2;
@@ -508,7 +508,7 @@ public class X11NotificationArea : Plug
 			internal IntPtr ptr4;
 			internal IntPtr ptr5;
 		}
-    
+
 		internal DataUnion      data;
 	}
 }
diff --git a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationAreaBox.cs b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationAreaBox.cs
index e51c28a..90f98ed 100644
--- a/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationAreaBox.cs
+++ b/src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationAreaBox.cs
@@ -40,88 +40,88 @@ namespace Banshee.NotificationArea
 {
     public class X11NotificationAreaBox : X11NotificationArea, INotificationAreaBox
     {
-        private enum PanelOrientation { 
-            Horizontal, 
-            Vertical 
+        private enum PanelOrientation {
+            Horizontal,
+            Vertical
         }
-    
+
         private EventBox event_box;
         private Image icon;
-        
+
         private TrackInfoPopup popup;
         private bool can_show_popup = false;
         private bool cursor_over_trayicon = false;
         private bool hide_delay_started = false;
         private int panel_size;
-        
+
         public event EventHandler Disconnected;
         public event EventHandler Activated;
         public event PopupMenuHandler PopupMenuEvent;
-        
+
         public Widget Widget {
             get { return event_box; }
         }
-        
+
         public X11NotificationAreaBox () : base (Catalog.GetString ("Banshee"))
         {
             event_box = new EventBox ();
             Add (event_box);
             icon = new Image ();
-            
+
             // Load a 16x16-sized icon to ensure we don't end up with a 1x1 pixel.
             panel_size = 16;
             event_box.Add (icon);
-            
+
             event_box.ButtonPressEvent += OnButtonPressEvent;
             event_box.EnterNotifyEvent += OnEnterNotifyEvent;
             event_box.LeaveNotifyEvent += OnLeaveNotifyEvent;
             event_box.ScrollEvent += OnMouseScroll;
-            
+
             event_box.ShowAll ();
         }
-        
+
         public override void Dispose ()
         {
             HidePopup ();
-        
+
             event_box.ButtonPressEvent -= OnButtonPressEvent;
             event_box.EnterNotifyEvent -= OnEnterNotifyEvent;
             event_box.LeaveNotifyEvent -= OnLeaveNotifyEvent;
             event_box.ScrollEvent -= OnMouseScroll;
-        
+
             Destroy ();
         }
-        
-        public void PositionMenu (Menu menu, out int x, out int y, out bool push_in) 
+
+        public void PositionMenu (Menu menu, out int x, out int y, out bool push_in)
         {
             PositionWidget (menu, out x, out y, 0);
             push_in = true;
         }
-        
-        private bool PositionWidget (Widget widget, out int x, out int y, int yPadding) 
+
+        private bool PositionWidget (Widget widget, out int x, out int y, int yPadding)
         {
             int button_y, panel_width, panel_height;
             Gtk.Requisition requisition = widget.SizeRequest ();
-            
+
             event_box.GdkWindow.GetOrigin (out x, out button_y);
             (event_box.Toplevel as Gtk.Window).GetSize (out panel_width, out panel_height);
-            
+
             bool on_bottom = button_y + panel_height + requisition.Height >= event_box.Screen.Height;
 
             y = on_bottom
                 ? button_y - requisition.Height - yPadding
                 : button_y + panel_height + yPadding;
-                
+
             return on_bottom;
         }
-        
+
 #region Panel Icon Sizing
 
-        // This code has been shamelessly ripped off from 
+        // This code has been shamelessly ripped off from
         // Tomboy, the wonderful life organizer!
-        
+
         private void ConfigureIconSize ()
-        {   
+        {
             // For some reason, the first time we ask for the allocation,
             // it's a 1x1 pixel.  Prevent against this by returning a
             // reasonable default.  Setting the icon causes OnSizeAllocated
@@ -130,7 +130,7 @@ namespace Banshee.NotificationArea
             if (icon_size < 16) {
                 icon_size = 16;
             }
-            
+
             // Control specifically which icon is used at the smaller sizes
             // so that no scaling occurs. See bug #403500 for more info (--Boyd)
             if (icon_size <= 21) {
@@ -140,7 +140,7 @@ namespace Banshee.NotificationArea
             } else if (icon_size <= 47) {
                 icon_size = 32;
             }
-            
+
             icon.IconName = Banshee.ServiceStack.Application.IconName;
             icon.PixelSize = icon_size;
         }
@@ -149,7 +149,7 @@ namespace Banshee.NotificationArea
         {
             // Determine whether the tray is inside a horizontal or vertical
             // panel so the size of the icon can adjust correctly.
-        
+
             if (event_box.ParentWindow == null) {
                 return PanelOrientation.Horizontal;
             }
@@ -160,7 +160,7 @@ namespace Banshee.NotificationArea
             if (rect.Width < rect.Height) {
                 return PanelOrientation.Vertical;
             }
-            
+
             return PanelOrientation.Horizontal;
         }
 
@@ -168,7 +168,7 @@ namespace Banshee.NotificationArea
 
         protected override void OnSizeAllocated (Gdk.Rectangle rect)
         {
-            // Ignore the first allocation dimensions (typically 200x200) and use only 
+            // Ignore the first allocation dimensions (typically 200x200) and use only
             // the allocation's position and the default icon size for dimension (16x16).
             // A proper size request will be queued later through ConfigureIconSize ().
             // Fix for BGO #540885
@@ -177,45 +177,45 @@ namespace Banshee.NotificationArea
                 first_alloc = false;
                 return;
             }
-            
+
             base.OnSizeAllocated (rect);
-            
+
             if (GetPanelOrientation () == PanelOrientation.Horizontal) {
                 if (panel_size == Allocation.Height) {
                     return;
                 }
-                
+
                 panel_size = Allocation.Height;
             } else {
                 if (panel_size == Allocation.Width) {
                     return;
                 }
-                
+
                 panel_size = Allocation.Width;
             }
 
             ConfigureIconSize ();
         }
-        
+
 #endregion
-        
-        private void HidePopup () 
+
+        private void HidePopup ()
         {
             if (popup == null) {
                 return;
             }
-            
+
             popup.Hide ();
             popup.Dispose ();
             popup = null;
         }
-        
-        private void ShowPopup () 
+
+        private void ShowPopup ()
         {
             if (popup != null) {
                 return;
             }
-            
+
             popup = new TrackInfoPopup ();
             popup.EnterNotifyEvent += delegate {
                 hide_delay_started = false;
@@ -231,15 +231,15 @@ namespace Banshee.NotificationArea
 
             popup.Show ();
         }
-        
-        private void PositionPopup () 
+
+        private void PositionPopup ()
         {
             int x, y;
             Gtk.Requisition event_box_req = event_box.SizeRequest ();
             Gtk.Requisition popup_req = popup.SizeRequest ();
-            
+
             PositionWidget (popup, out x, out y, 5);
-            
+
             int monitor = event_box.Screen.GetMonitorAtPoint (x, y);
             var monitor_rect = event_box.Screen.GetMonitorGeometry(monitor);
 
@@ -250,16 +250,16 @@ namespace Banshee.NotificationArea
             } else if (x < monitor_rect.Left + 5) {
                 x = monitor_rect.Left + 5;
             }
-            
+
             popup.Move (x, y);
         }
-        
+
         private void OnButtonPressEvent (object o, ButtonPressEventArgs args)
         {
             if (args.Event.Type != Gdk.EventType.ButtonPress) {
                 return;
             }
-        
+
             switch (args.Event.Button) {
                 case 1:
                     if ((args.Event.State & Gdk.ModifierType.ControlMask) != 0) {
@@ -280,7 +280,7 @@ namespace Banshee.NotificationArea
                     break;
             }
         }
-        
+
         private void OnMouseScroll (object o, ScrollEventArgs args)
         {
             switch (args.Event.Direction) {
@@ -293,7 +293,7 @@ namespace Banshee.NotificationArea
                         ServiceManager.PlaybackController.Next ();
                     }
                     break;
-                    
+
                 case Gdk.ScrollDirection.Down:
                     if ((args.Event.State & Gdk.ModifierType.ControlMask) != 0) {
                         if (ServiceManager.PlayerEngine.Volume < (ushort)PlayerEngine.VolumeDelta) {
@@ -309,8 +309,8 @@ namespace Banshee.NotificationArea
                     break;
             }
         }
-        
-        private void OnEnterNotifyEvent (object o, EnterNotifyEventArgs args) 
+
+        private void OnEnterNotifyEvent (object o, EnterNotifyEventArgs args)
         {
             hide_delay_started = false;
             cursor_over_trayicon = true;
@@ -325,8 +325,8 @@ namespace Banshee.NotificationArea
                 });
             }
         }
-        
-        private void OnLeaveNotifyEvent (object o, LeaveNotifyEventArgs args) 
+
+        private void OnLeaveNotifyEvent (object o, LeaveNotifyEventArgs args)
         {
             // Give the user half a second to move the mouse cursor to the popup.
             if (!hide_delay_started) {
@@ -341,14 +341,14 @@ namespace Banshee.NotificationArea
                 });
             }
         }
-        
+
         public void OnPlayerEvent (PlayerEventArgs args)
         {
             switch (args.Event) {
                 case PlayerEvent.StartOfStream:
                     can_show_popup = true;
                     break;
-                    
+
                 case PlayerEvent.EndOfStream:
                     // only hide the popup when we don't play again after 250ms
                     GLib.Timeout.Add (250, delegate {
@@ -361,7 +361,7 @@ namespace Banshee.NotificationArea
                     break;
             }
         }
-        
+
         protected virtual void OnActivated ()
         {
             EventHandler handler = Activated;
@@ -369,7 +369,7 @@ namespace Banshee.NotificationArea
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnPopupMenuEvent ()
         {
             PopupMenuHandler handler = PopupMenuEvent;
@@ -377,16 +377,16 @@ namespace Banshee.NotificationArea
                 handler (this, new PopupMenuArgs ());
             }
         }
-        
+
         protected override bool OnDestroyEvent (Gdk.Event evnt)
         {
             bool result = base.OnDestroyEvent (evnt);
-            
+
             EventHandler handler = Disconnected;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
-            
+
             return result;
         }
     }
diff --git a/src/Extensions/Banshee.NotificationArea/Notifications/Notification.cs b/src/Extensions/Banshee.NotificationArea/Notifications/Notification.cs
index 87852a0..9f9d3b3 100644
--- a/src/Extensions/Banshee.NotificationArea/Notifications/Notification.cs
+++ b/src/Extensions/Banshee.NotificationArea/Notifications/Notification.cs
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2006 Sebastian Dröge <slomo circular-chaos org>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
diff --git a/src/Extensions/Banshee.NotificationArea/Notifications/Notifications.cs b/src/Extensions/Banshee.NotificationArea/Notifications/Notifications.cs
index 25ac1e1..7c7b042 100644
--- a/src/Extensions/Banshee.NotificationArea/Notifications/Notifications.cs
+++ b/src/Extensions/Banshee.NotificationArea/Notifications/Notifications.cs
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2006 Sebastian Dröge <slomo circular-chaos org>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs
index de17bc5..63c5064 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs
@@ -39,7 +39,7 @@ namespace Banshee.NowPlaying
         private IFullscreenAdapter adapter;
         private bool probed = false;
         private bool first_fullscreen = false;
-        
+
         public void Fullscreen (Window window, bool fullscreen)
         {
             if (!first_fullscreen && !fullscreen) {
@@ -47,21 +47,21 @@ namespace Banshee.NowPlaying
             } else if (fullscreen) {
                 first_fullscreen = true;
             }
-        
+
             if (adapter != null) {
                 try {
                     adapter.Fullscreen (window, fullscreen);
                 } catch (Exception e) {
                     Log.Exception ("IFullscreenAdapter extension failed, so disabling", e);
                     DisposeAdapter ();
-                }   
-                
+                }
+
                 return;
             } else if (probed) {
                 DefaultFullscreen (window, fullscreen);
                 return;
             }
-            
+
             foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/NowPlaying/FullscreenAdapter")) {
                 try {
                     adapter = (IFullscreenAdapter)node.CreateInstance (typeof (IFullscreenAdapter));
@@ -71,17 +71,17 @@ namespace Banshee.NowPlaying
                     Log.Exception ("IFullscreenAdapter extension failed to load", e);
                 }
             }
-            
+
             probed = true;
             Fullscreen (window, fullscreen);
         }
-        
+
         public void Dispose ()
         {
             DisposeAdapter ();
             probed = false;
         }
-        
+
         private void DisposeAdapter ()
         {
             if (adapter != null) {
@@ -90,11 +90,11 @@ namespace Banshee.NowPlaying
                 } catch (Exception e) {
                     Log.Exception ("IFullscreenAdapter failed to dispose", e);
                 }
-                
+
                 adapter = null;
             }
         }
-        
+
         private void DefaultFullscreen (Window window, bool fullscreen)
         {
             if (fullscreen) {
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
index a39a064..425d5b8 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
@@ -1,4 +1,4 @@
-// 
+//
 // FullscreenControls.cs
 //
 // Authors:
@@ -40,32 +40,32 @@ namespace Banshee.NowPlaying
         private InterfaceActionService action_service;
         private ConnectedVolumeButton volume_button;
         private ConnectedSeekSlider slider;
-        
+
         public FullscreenControls (Window toplevel, InterfaceActionService actionService) : base (toplevel, 1)
         {
             action_service = actionService;
             AddAccelGroup (action_service.UIManager.AccelGroup);
             BuildInterface ();
         }
-        
+
         private void BuildInterface ()
         {
             HBox box = new HBox ();
-            
+
             volume_button = new ConnectedVolumeButton (true);
-            
+
             box.PackStart (action_service.PlaybackActions["PreviousAction"].CreateToolItem (), false, false, 0);
             box.PackStart (action_service.PlaybackActions["PlayPauseAction"].CreateToolItem (), false, false, 0);
             box.PackStart (new NextButton (action_service), false, false, 0);
             box.PackStart (new RepeatActionButton (true), false, false, 0);
             box.PackStart (slider = new ConnectedSeekSlider (SeekSliderLayout.Horizontal), true, true, 0);
             box.PackStart (volume_button, false, false, 0);
-            
+
             Button exit = new Button (Stock.LeaveFullscreen);
             exit.Relief = ReliefStyle.None;
             exit.Clicked += delegate { TransientFor.Hide (); };
             box.PackStart (exit, false, false, 0);
-            
+
             Add (box);
             box.ShowAll ();
         }
@@ -75,7 +75,7 @@ namespace Banshee.NowPlaying
             slider.Disconnect ();
             base.Destroy ();
         }
-        
+
         public bool Active {
             get { return volume_button.Active || IsActive; }
         }
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs
index 93dd048..f735ad6 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs
@@ -1,4 +1,4 @@
-// 
+//
 // FullScreenWindow.cs
 //
 // Authors:
@@ -42,38 +42,38 @@ namespace Banshee.NowPlaying
         private Gtk.Window parent;
         private FullscreenControls controls;
         private InterfaceActionService action_service;
-        
+
         public FullscreenWindow (Window parent) : base (WindowType.Toplevel)
         {
             Title = parent.Title;
             AppPaintable = true;
-            
+
             this.parent = parent;
             this.action_service = ServiceManager.Get<InterfaceActionService> ();
-            
+
             AddAccelGroup (action_service.UIManager.AccelGroup);
-            
+
             SetupWidget ();
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             evnt.Window.DrawRectangle (Style.BlackGC, true, Allocation);
             return base.OnExposeEvent (evnt);
         }
-        
+
         protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
         {
             PlayerEngineService player = ServiceManager.PlayerEngine;
-            
+
             bool control = (evnt.State & Gdk.ModifierType.ShiftMask) != 0;
             bool shift = (evnt.State & Gdk.ModifierType.ControlMask) != 0;
             bool mod = control || shift;
-            
+
             uint fixed_seek = 15000; // 15 seconds
             uint fast_seek = player.Length > 0 ? (uint)(player.Length * 0.15) : fixed_seek; // 15% or fixed
             uint slow_seek = player.Length > 0 ? (uint)(player.Length * 0.05) : fixed_seek; // 5% or fixed
-            
+
             switch (evnt.Key) {
                 case Gdk.Key.F11:
                 case Gdk.Key.Escape:
@@ -103,22 +103,22 @@ namespace Banshee.NowPlaying
                     ShowControls ();
                     break;
             }
-            
+
             return base.OnKeyPressEvent (evnt);
         }
-        
+
 #region Widgetry and show/hide logic
-        
+
         private void SetupWidget ()
         {
             Deletable = false;
             TransientFor = null;
             Decorated = false;
             CanFocus = true;
-            
+
             ConfigureWindow ();
         }
-        
+
         private void ConfigureWindow ()
         {
             Gdk.Screen screen = Screen;
@@ -127,52 +127,52 @@ namespace Banshee.NowPlaying
             Move (bounds.X, 0);
             SetDefaultSize (bounds.Width, bounds.Height);
         }
-        
+
         protected override void OnRealized ()
         {
             Events |= Gdk.EventMask.PointerMotionMask;
-            
+
             base.OnRealized ();
-            
+
             Screen.SizeChanged += OnScreenSizeChanged;
         }
-        
+
         protected override void OnUnrealized ()
         {
             base.OnUnrealized ();
             Screen.SizeChanged -= OnScreenSizeChanged;
         }
-        
+
         protected override bool OnDeleteEvent (Gdk.Event evnt)
         {
             Hide ();
             return true;
         }
-        
+
         protected override void OnShown ()
         {
             base.OnShown ();
             if (Child != null) {
                 Child.Show ();
             }
-            
+
             OnHideCursorTimeout ();
             ConfigureWindow ();
             HasFocus = true;
             parent.AddNotification ("is-active", ParentActiveNotification);
         }
-        
+
         protected override void OnHidden ()
         {
             base.OnHidden ();
             DestroyControls ();
         }
-        
+
         private void OnScreenSizeChanged (object o, EventArgs args)
         {
             ConfigureWindow ();
         }
-        
+
         private void ParentActiveNotification (object o, GLib.NotifyArgs args)
         {
             // If our parent window is ever somehow activated while we are
@@ -189,7 +189,7 @@ namespace Banshee.NowPlaying
         }
 
 #endregion
-                                
+
 #region Control Window
 
         private void ShowControls ()
@@ -197,10 +197,10 @@ namespace Banshee.NowPlaying
             if (controls == null) {
                 controls = new FullscreenControls (this, action_service);
             }
-            
+
             controls.Show ();
         }
-        
+
         private void HideControls ()
         {
             if (controls != null) {
@@ -208,7 +208,7 @@ namespace Banshee.NowPlaying
                 QueueDraw ();
             }
         }
-        
+
         private void DestroyControls ()
         {
             if (controls != null) {
@@ -216,7 +216,7 @@ namespace Banshee.NowPlaying
                 controls = null;
             }
         }
-        
+
         private bool ControlsActive {
             get {
                 if (controls == null || !controls.Visible) {
@@ -224,38 +224,38 @@ namespace Banshee.NowPlaying
                 } else if (controls.Active) {
                     return true;
                 }
-                
+
                 int cursor_x, cursor_y;
                 int window_x, window_y;
-                
+
                 controls.GdkWindow.Screen.Display.GetPointer (out cursor_x, out cursor_y);
                 controls.GetPosition (out window_x, out window_y);
-                
-                Gdk.Rectangle box = new Gdk.Rectangle (window_x, window_y, 
+
+                Gdk.Rectangle box = new Gdk.Rectangle (window_x, window_y,
                     controls.Allocation.Width, controls.Allocation.Height);
-                
+
                 return box.Contains (cursor_x, cursor_y);
             }
         }
-     
+
 #endregion
-        
+
 #region Mouse Cursor Logic
 
         private const int CursorUpdatePositionDelay = 500;   // How long (ms) before the cursor position is updated
         private const int CursorHideDelay = 5000;            // How long (ms) to remain stationary before it hides
         private const int CursorShowMovementThreshold = 150; // How far (px) to move before it shows again
-        
+
         private uint hide_cursor_timeout_id;
         private uint cursor_update_position_timeout_id;
         private int hide_cursor_x;
         private int hide_cursor_y;
         private bool cursor_is_hidden = false;
-        
+
         protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
         {
             if (cursor_is_hidden) {
-                if (Math.Abs (hide_cursor_x - evnt.X) > CursorShowMovementThreshold || 
+                if (Math.Abs (hide_cursor_x - evnt.X) > CursorShowMovementThreshold ||
                     Math.Abs (hide_cursor_y - evnt.Y) > CursorShowMovementThreshold) {
                     ShowCursor ();
                     ShowControls ();
@@ -263,73 +263,73 @@ namespace Banshee.NowPlaying
                     if (cursor_update_position_timeout_id > 0) {
                         GLib.Source.Remove (cursor_update_position_timeout_id);
                     }
-                    
-                    cursor_update_position_timeout_id = GLib.Timeout.Add (CursorUpdatePositionDelay, 
+
+                    cursor_update_position_timeout_id = GLib.Timeout.Add (CursorUpdatePositionDelay,
                         OnCursorUpdatePositionTimeout);
-                }        
+                }
             } else if (!ControlsActive) {
                 if (hide_cursor_timeout_id > 0) {
                     GLib.Source.Remove (hide_cursor_timeout_id);
                 }
-                
+
                 hide_cursor_timeout_id = GLib.Timeout.Add (CursorHideDelay, OnHideCursorTimeout);
             }
-            
+
             return base.OnMotionNotifyEvent (evnt);
         }
-        
+
         private bool OnCursorUpdatePositionTimeout ()
         {
             UpdateHiddenCursorPosition ();
             cursor_update_position_timeout_id = 0;
             return false;
         }
-        
+
         private bool OnHideCursorTimeout ()
         {
             if (!ControlsActive) {
                 HideCursor ();
                 HideControls ();
             }
-            
+
             hide_cursor_timeout_id = 0;
             return false;
         }
-        
+
         private void UpdateHiddenCursorPosition ()
         {
             GetPointer (out hide_cursor_x, out hide_cursor_y);
         }
-        
+
         private void ShowCursor ()
         {
             cursor_is_hidden = false;
             GdkWindow.Cursor = null;
         }
-        
+
         private void HideCursor ()
         {
             if (GdkWindow == null) {
                 return;
             }
-            
+
             Gdk.Pixmap pixmap = Gdk.Pixmap.CreateBitmapFromData (GdkWindow, "0x0", 1, 1);
             if (pixmap == null) {
                 return;
             }
-            
+
             UpdateHiddenCursorPosition ();
             cursor_is_hidden = true;
-            
+
             Gdk.Color color = new Gdk.Color (0, 0, 0);
             Gdk.Cursor cursor = new Gdk.Cursor (pixmap, pixmap, color, color, 0, 0);
-            
+
             GdkWindow.Cursor = cursor;
-            
+
             pixmap.Dispose ();
-            cursor.Dispose ();  
+            cursor.Dispose ();
         }
-        
+
 #endregion
 
     }
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingContents.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingContents.cs
index 32d6c1a..39e31a6 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingContents.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingContents.cs
@@ -37,66 +37,66 @@ namespace Banshee.NowPlaying
     {
         private Widget video_display;
         private bool video_display_initial_shown = false;
-        
+
         private TrackInfoDisplay track_info_display;
-    
+
         public NowPlayingContents () : base (1, 1, false)
         {
             NoShowAll = true;
-        
+
             video_display = new XOverlayVideoDisplay ();
 
             IVideoDisplay ivideo_display = video_display as IVideoDisplay;
             if (ivideo_display != null) {
                 ivideo_display.IdleStateChanged += OnVideoDisplayIdleStateChanged;
             }
-            
-            Attach (video_display, 0, 1, 0, 1, 
-                AttachOptions.Expand | AttachOptions.Fill, 
+
+            Attach (video_display, 0, 1, 0, 1,
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
-                
+
             track_info_display = new NowPlayingTrackInfoDisplay ();
-            Attach (track_info_display, 0, 1, 0, 1, 
-                AttachOptions.Expand | AttachOptions.Fill, 
+            Attach (track_info_display, 0, 1, 0, 1,
+                AttachOptions.Expand | AttachOptions.Fill,
                 AttachOptions.Expand | AttachOptions.Fill, 0, 0);
         }
-        
+
         public override void Dispose ()
         {
             IVideoDisplay ivideo_display = video_display as IVideoDisplay;
             if (ivideo_display != null) {
                 ivideo_display.IdleStateChanged -= OnVideoDisplayIdleStateChanged;
             }
-            
+
             if (video_display != null) {
                 video_display = null;
             }
-            
+
             base.Dispose ();
         }
-        
+
         protected override void OnShown ()
         {
             base.OnShown ();
-            
+
             // Ugly hack to ensure the video window is mapped/realized
             if (!video_display_initial_shown) {
                 video_display_initial_shown = true;
-                
+
                 if (video_display != null) {
                     video_display.Show ();
                 }
-                
-                GLib.Idle.Add (delegate { 
-                    CheckIdle (); 
+
+                GLib.Idle.Add (delegate {
+                    CheckIdle ();
                     return false;
                 });
                 return;
             }
-            
+
             CheckIdle ();
         }
-        
+
         protected override void OnHidden ()
         {
             base.OnHidden ();
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
index 2deaeac..99fe962 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
@@ -40,41 +40,41 @@ using Banshee.Sources.Gui;
 namespace Banshee.NowPlaying
 {
     public class NowPlayingInterface : VBox, ISourceContents
-    {   
+    {
         private NowPlayingSource source;
         private Hyena.Widgets.RoundedFrame frame;
         private Gtk.Window video_window;
         private FullscreenAdapter fullscreen_adapter;
         private ScreensaverManager screensaver;
         private NowPlayingContents contents;
-        
+
         public NowPlayingInterface ()
         {
             GtkElementsService service = ServiceManager.Get<GtkElementsService> ();
-            
+
             contents = new NowPlayingContents ();
-            
+
             // This is my really sweet hack - it's where the video widget
             // is sent when the source is not active. This keeps the video
             // widget from being completely destroyed, causing problems with
             // its internal windowing and GstXOverlay. It's also conveniently
-            // the window that is used to do fullscreen video. Sweeeeeeeeeet. 
+            // the window that is used to do fullscreen video. Sweeeeeeeeeet.
             video_window = new FullscreenWindow (service.PrimaryWindow);
             video_window.Hidden += OnFullscreenWindowHidden;
             video_window.Realize ();
             video_window.Add (contents);
-            
+
             frame = new Hyena.Widgets.RoundedFrame ();
             frame.SetFillColor (new Cairo.Color (0, 0, 0));
             frame.DrawBorder = false;
             frame.Show ();
-            
+
             PackStart (frame, true, true, 0);
-            
+
             fullscreen_adapter = new FullscreenAdapter ();
             screensaver = new ScreensaverManager ();
         }
-        
+
         public override void Dispose ()
         {
             base.Dispose ();
@@ -88,7 +88,7 @@ namespace Banshee.NowPlaying
                 contents.Reparent (video_window);
             }
         }
-        
+
         private void MoveVideoInternal ()
         {
             if (contents.Parent != frame) {
@@ -96,13 +96,13 @@ namespace Banshee.NowPlaying
                 contents.Show ();
             }
         }
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
             MoveVideoInternal ();
         }
-        
+
         protected override void OnUnrealized ()
         {
             MoveVideoExternal (false);
@@ -125,12 +125,12 @@ namespace Banshee.NowPlaying
         internal void OverrideFullscreen ()
         {
             FullscreenHandler (false);
-            
-            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> (); 
+
+            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> ();
             if (service == null || service.ViewActions == null) {
                 return;
             }
-            
+
             previous_fullscreen_handler = service.ViewActions.Fullscreen;
             service.ViewActions.Fullscreen = FullscreenHandler;
             DisableFullscreenAction ();
@@ -139,15 +139,15 @@ namespace Banshee.NowPlaying
         internal void RelinquishFullscreen ()
         {
             FullscreenHandler (false);
-            
-            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> (); 
+
+            InterfaceActionService service = ServiceManager.Get<InterfaceActionService> ();
             if (service == null || service.ViewActions == null) {
                 return;
             }
-            
+
             service.ViewActions.Fullscreen = previous_fullscreen_handler;
         }
-        
+
         private void OnFullscreenWindowHidden (object o, EventArgs args)
         {
             MoveVideoInternal ();
@@ -168,11 +168,11 @@ namespace Banshee.NowPlaying
                 video_window.Hide ();
             }
         }
-        
+
 #endregion
-        
+
 #region ISourceContents
-        
+
         public bool SetSource (ISource src)
         {
             this.source = source as NowPlayingSource;
@@ -191,7 +191,7 @@ namespace Banshee.NowPlaying
         public Widget Widget {
             get { return this; }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs
index e34ddfe..d95eb81 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs
@@ -44,23 +44,23 @@ namespace Banshee.NowPlaying
     {
         private TrackInfo transitioned_track;
         private NowPlayingInterface now_playing_interface;
-        
+
         public NowPlayingSource () : base ("now-playing", Catalog.GetString ("Now Playing"), 10, "now-playing")
         {
             now_playing_interface = new NowPlayingInterface ();
-        
+
             Properties.SetString ("Icon.Name", "applications-multimedia");
             Properties.Set<ISourceContents> ("Nereid.SourceContents", now_playing_interface);
             Properties.Set<bool> ("Nereid.SourceContents.HeaderVisible", false);
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
-            
+
             ServiceManager.SourceManager.AddSource (this);
-            
+
             ServiceManager.PlaybackController.Transition += OnPlaybackControllerTransition;
             ServiceManager.PlaybackController.TrackStarted += OnPlaybackControllerTrackStarted;
             ServiceManager.PlayerEngine.ConnectEvent (OnTrackInfoUpdated, PlayerEvent.TrackInfoUpdated);
         }
-        
+
         public void Dispose ()
         {
             ServiceManager.PlaybackController.Transition -= OnPlaybackControllerTransition;
@@ -73,26 +73,26 @@ namespace Banshee.NowPlaying
                 now_playing_interface = null;
             }
         }
-        
+
         private void OnTrackInfoUpdated (PlayerEventArgs args)
         {
             CheckForSwitch ();
         }
-        
+
         private void OnPlaybackControllerTrackStarted (object o, EventArgs args)
         {
             CheckForSwitch ();
         }
-        
+
         private void OnPlaybackControllerTransition (object o, EventArgs args)
         {
             transitioned_track = ServiceManager.PlaybackController.CurrentTrack;
         }
-        
+
         private void CheckForSwitch ()
         {
             TrackInfo current_track = ServiceManager.PlaybackController.CurrentTrack;
-            if (current_track != null && transitioned_track != current_track && 
+            if (current_track != null && transitioned_track != current_track &&
                 (current_track.MediaAttributes & TrackMediaAttributes.VideoStream) != 0) {
                 ServiceManager.SourceManager.SetActiveSource (this);
             }
@@ -101,7 +101,7 @@ namespace Banshee.NowPlaying
                 OnUserNotifyUpdated ();
             }
         }
-        
+
         public override void Activate ()
         {
             if (now_playing_interface != null) {
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingTrackInfoDisplay.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingTrackInfoDisplay.cs
index 92398b2..08bdd76 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingTrackInfoDisplay.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingTrackInfoDisplay.cs
@@ -41,15 +41,15 @@ namespace Banshee.NowPlaying
         private static Cairo.Color text_color = CairoExtensions.RgbToColor (0xffffff);
         private static Cairo.Color text_light_color = CairoExtensions.RgbToColor (0x777777);
         private static Gdk.Pixbuf idle_pixbuf;
-        
+
         public NowPlayingTrackInfoDisplay ()
         {
         }
-    
+
         protected NowPlayingTrackInfoDisplay (IntPtr native) : base (native)
         {
         }
-        
+
         protected override Cairo.Color BackgroundColor {
             get { return background_color; }
         }
@@ -61,23 +61,23 @@ namespace Banshee.NowPlaying
         protected override Cairo.Color TextLightColor {
             get { return text_light_color; }
         }
-        
+
         protected override bool CanRenderIdle {
             get { return true; }
         }
-        
+
         protected override void RenderIdle (Cairo.Context cr)
         {
             if (idle_pixbuf == null) {
                 idle_pixbuf = Gdk.Pixbuf.LoadFromResource ("idle-logo.png");
             }
-            
+
             if (idle_pixbuf == null) {
                 return;
             }
-            
+
             cr.Save ();
-            cr.Translate (Allocation.X + ((Allocation.Width - idle_pixbuf.Width) / 2), 
+            cr.Translate (Allocation.X + ((Allocation.Width - idle_pixbuf.Width) / 2),
                 Allocation.Y + ((Allocation.Height - idle_pixbuf.Height) / 2));
             Gdk.CairoHelper.SetSourcePixbuf (cr, idle_pixbuf, 0, 0);
             cr.Paint ();
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs
index 4f45e93..453588e 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs
@@ -1,4 +1,4 @@
-// 
+//
 // OverlayWindow.cs
 //
 // Authors:
@@ -37,50 +37,50 @@ namespace Banshee.NowPlaying
     public class OverlayWindow : Window
     {
         private Window toplevel;
-        
+
         private double x_align = 0.5;
         private double y_align = 1;
         private double width_scale;
         private bool composited;
-        
+
         public OverlayWindow (Window toplevel) : this (toplevel, 0.0)
         {
         }
-        
+
         public OverlayWindow (Window toplevel, double widthScale) : base (WindowType.Popup)
         {
             if (toplevel == null) {
                 throw new ArgumentNullException ("toplevel", "An overlay must have a parent window");
             }
-            
+
             if (width_scale < 0 || width_scale > 1) {
                 throw new ArgumentOutOfRangeException ("widthScale", "Must be between 0 and 1 inclusive");
             }
-        
+
             this.toplevel = toplevel;
             this.width_scale = widthScale;
-            
+
             Decorated = false;
             DestroyWithParent = true;
             AllowGrow = true;
             KeepAbove = true;
             TransientFor = toplevel;
-            
+
             toplevel.ConfigureEvent += OnToplevelConfigureEvent;
             toplevel.SizeAllocated += OnToplevelSizeAllocated;
         }
-        
+
         public bool CanHide {
             get { return false; }
         }
-        
+
         protected override void OnRealized ()
         {
             composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
             AppPaintable = composited;
-            
+
             base.OnRealized ();
-            
+
             ShapeWindow ();
             Relocate ();
         }
@@ -95,57 +95,57 @@ namespace Banshee.NowPlaying
         {
             return base.OnConfigureEvent (evnt);
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             if (Child != null) {
                 requisition = Child.SizeRequest ();
             }
-            
+
             if (width_scale > 0 && width_scale <= 1 && TransientFor != null) {
                 requisition.Width = (int)(TransientFor.Allocation.Width * width_scale);
             }
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
-            
+
             Relocate ();
             ShapeWindow ();
             QueueDraw ();
         }
-        
+
         private void OnToplevelConfigureEvent (object o, ConfigureEventArgs args)
         {
             Relocate ();
         }
-        
+
         private void OnToplevelSizeAllocated (object o, SizeAllocatedArgs args)
         {
             QueueResize ();
             Relocate ();
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (!composited || evnt.Window != GdkWindow) {
                 return base.OnExposeEvent (evnt);
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-            
+
             Gdk.Color color = Style.Background (State);
-            
+
             ShapeSurface (cr, new Cairo.Color (color.Red / (double) ushort.MaxValue,
-                color.Blue / (double) ushort.MaxValue, 
+                color.Blue / (double) ushort.MaxValue,
                 color.Green / (double) ushort.MaxValue,
                 0.85));
-            
+
             ((IDisposable)cr).Dispose ();
             return base.OnExposeEvent (evnt);
         }
-        
+
         protected virtual void ShapeSurface (Cairo.Context cr, Cairo.Color color)
         {
             cr.Operator = Cairo.Operator.Source;
@@ -158,29 +158,29 @@ namespace Banshee.NowPlaying
         private void ShapeWindow ()
         {
         }
-        
+
         private void Relocate ()
         {
             if (!IsRealized || !toplevel.IsRealized) {
                 return;
             }
-            
+
             int x, y;
-            
+
             toplevel.GdkWindow.GetOrigin (out x, out y);
-            
+
             int x_origin = x;
             int y_origin = y;
-            
+
             x += (int)(toplevel.Allocation.Width * x_align);
             y += (int)(toplevel.Allocation.Height * y_align);
-            
+
             x -= (int)(Allocation.Width * 0.5);
             y -= (int)(Allocation.Height * 0.5);
-            
+
             x = Math.Max (0, Math.Min (x, x_origin + toplevel.Allocation.Width - Allocation.Width));
             y = Math.Max (0, Math.Min (y, y_origin + toplevel.Allocation.Height - Allocation.Height));
-            
+
             Move (x, y);
         }
     }
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VideoDisplay.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VideoDisplay.cs
index 050d513..3c5e1c8 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VideoDisplay.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VideoDisplay.cs
@@ -34,13 +34,13 @@ using Banshee.ServiceStack;
 using Banshee.Collection;
 
 namespace Banshee.NowPlaying
-{   
+{
     public abstract class VideoDisplay : Gtk.Widget, IVideoDisplay
     {
         private bool is_idle = true;
-        
+
         public event EventHandler IdleStateChanged;
-        
+
         public bool IsIdle {
             get { return is_idle; }
         }
@@ -50,50 +50,50 @@ namespace Banshee.NowPlaying
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
                 PlayerEvent.StartOfStream |
                 PlayerEvent.EndOfStream);
-            
+
             ToggleIdleVisibility ();
         }
 
         protected abstract Gdk.Window RenderWindow { get; }
-        
+
         protected abstract void ExposeVideo (Gdk.EventExpose evnt);
-        
+
         protected override void OnDestroyed ()
         {
             base.OnDestroyed ();
             ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
-            RenderWindow.DrawRectangle (Style.BlackGC, true, 
+            RenderWindow.DrawRectangle (Style.BlackGC, true,
                 new Gdk.Rectangle (0, 0, Allocation.Width, Allocation.Height));
-            
+
             if (RenderWindow == null || !RenderWindow.IsVisible) {
                 return true;
             }
-            
+
             if (!is_idle && ServiceManager.PlayerEngine.VideoDisplayContextType != VideoDisplayContextType.Unsupported) {
                 ExposeVideo (evnt);
             }
-            
+
             return true;
         }
-        
+
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             ToggleIdleVisibility ();
         }
-        
+
         private void ToggleIdleVisibility ()
         {
             TrackInfo track = ServiceManager.PlayerEngine.CurrentTrack;
             is_idle = track == null || (track.MediaAttributes & TrackMediaAttributes.VideoStream) == 0;
             QueueDraw ();
-            
+
             OnIdleStateChanged ();
         }
-        
+
         protected virtual void OnIdleStateChanged ()
         {
             EventHandler handler = IdleStateChanged;
@@ -101,7 +101,7 @@ namespace Banshee.NowPlaying
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public new void QueueDraw ()
         {
             base.QueueDraw ();
diff --git a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/XOverlayVideoDisplay.cs b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/XOverlayVideoDisplay.cs
index 521bed4..b0a4a87 100644
--- a/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/XOverlayVideoDisplay.cs
+++ b/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/XOverlayVideoDisplay.cs
@@ -33,10 +33,10 @@ using Banshee.ServiceStack;
 using Banshee.MediaEngine;
 
 namespace Banshee.NowPlaying
-{   
+{
     public class XOverlayVideoDisplay : VideoDisplay
     {
-        private Gdk.Window video_window;                
+        private Gdk.Window video_window;
         protected override Gdk.Window RenderWindow {
             get { return video_window; }
         }
@@ -45,20 +45,20 @@ namespace Banshee.NowPlaying
         {
             WidgetFlags = WidgetFlags.NoWindow;
         }
-        
+
         protected override void OnRealized ()
         {
             WidgetFlags |= WidgetFlags.Realized;
-            
+
             GdkWindow = Parent.GdkWindow;
-            
+
             if (video_window != null) {
                 video_window.Reparent (GdkWindow, 0, 0);
                 video_window.MoveResize (Allocation.X, Allocation.Y, Allocation.Width, Allocation.Height);
                 video_window.ShowUnraised ();
                 return;
             }
-            
+
             Gdk.WindowAttr attributes = new Gdk.WindowAttr ();
             attributes.WindowType = Gdk.WindowType.Child;
             attributes.X = 0;
@@ -69,30 +69,30 @@ namespace Banshee.NowPlaying
             attributes.Wclass = Gdk.WindowClass.InputOutput;
             attributes.Colormap = Colormap;
             attributes.EventMask = (int)(Gdk.EventMask.ExposureMask | Gdk.EventMask.VisibilityNotifyMask);
-            
-            Gdk.WindowAttributesType attributes_mask = 
-                Gdk.WindowAttributesType.X | 
-                Gdk.WindowAttributesType.Y | 
-                Gdk.WindowAttributesType.Visual | 
+
+            Gdk.WindowAttributesType attributes_mask =
+                Gdk.WindowAttributesType.X |
+                Gdk.WindowAttributesType.Y |
+                Gdk.WindowAttributesType.Visual |
                 Gdk.WindowAttributesType.Colormap;
-                
+
             video_window = new Gdk.Window (GdkWindow, attributes, attributes_mask);
             video_window.UserData = Handle;
-                        
+
             video_window.SetBackPixmap (null, false);
-            
+
             if (ServiceManager.PlayerEngine.VideoDisplayContextType == VideoDisplayContextType.GdkWindow) {
                 ServiceManager.PlayerEngine.VideoDisplayContext = video_window.Handle;
             } else {
                 ServiceManager.PlayerEngine.VideoDisplayContext = IntPtr.Zero;
             }
         }
-        
+
         protected override void OnUnrealized ()
         {
             video_window.Hide ();
             video_window.Reparent (null, 0, 0);
-            
+
             base.OnUnrealized ();
         }
 
@@ -101,36 +101,36 @@ namespace Banshee.NowPlaying
             base.OnMapped ();
             video_window.ShowUnraised ();
         }
-        
+
         protected override void OnUnmapped ()
         {
             video_window.Hide ();
             base.OnUnmapped ();
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             if (!IsRealized) {
                 return;
             }
-            
+
             Gdk.Rectangle rect = new Gdk.Rectangle (allocation.X, allocation.Y, allocation.Width, allocation.Height);
             video_window.MoveResize (rect);
-            
+
             base.OnSizeAllocated (allocation);
-            
+
             QueueDraw ();
         }
-        
+
         protected override bool OnConfigureEvent (Gdk.EventConfigure evnt)
         {
             if (video_window != null && ServiceManager.PlayerEngine.VideoDisplayContextType == VideoDisplayContextType.GdkWindow) {
                 ServiceManager.PlayerEngine.VideoExpose (video_window.Handle, true);
             }
-            
+
             return false;
         }
-        
+
         protected override void ExposeVideo (Gdk.EventExpose evnt)
         {
             if (ServiceManager.PlayerEngine.VideoDisplayContextType == VideoDisplayContextType.GdkWindow) {
diff --git a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueActions.cs b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueActions.cs
index cac9f62..d806650 100644
--- a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueActions.cs
+++ b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueActions.cs
@@ -71,14 +71,14 @@ namespace Banshee.PlayQueue
                     Catalog.GetString ("Remove all tracks from the play queue"),
                     OnClearPlayQueue)
             );
-            
+
             Add (new ToggleActionEntry [] {
                 new ToggleActionEntry ("ClearPlayQueueOnQuitAction", null,
-                    Catalog.GetString ("Clear on Quit"), null, 
-                    Catalog.GetString ("Clear the play queue when quitting"), 
+                    Catalog.GetString ("Clear on Quit"), null,
+                    Catalog.GetString ("Clear the play queue when quitting"),
                     OnClearPlayQueueOnQuit, PlayQueueSource.ClearOnQuitSchema.Get ())
             });
-            
+
             AddUiFromFile ("GlobalUI.xml");
 
             playqueue.Updated += OnUpdated;
diff --git a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
index ee1f510..25b1687 100644
--- a/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
+++ b/src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs
@@ -74,14 +74,14 @@ namespace Banshee.PlayQueue
         private DatabaseSource populate_from = null;
         private int played_songs_number = PlayedSongsNumberSchema.Get ();
         private int upcoming_songs_number = UpcomingSongsNumberSchema.Get ();
-        
+
         public PlayQueueSource () : base (Catalog.GetString ("Play Queue"), null)
         {
             BindToDatabase ();
             TypeUniqueId = DbId.ToString ();
             Initialize ();
             AfterInitialized ();
-            
+
             Order = 20;
             Properties.SetString ("Icon.Name", "source-playlist");
             Properties.SetString ("RemoveTracksActionLabel", Catalog.GetString ("Remove From Play Queue"));
@@ -93,11 +93,11 @@ namespace Banshee.PlayQueue
             ServiceManager.PlaybackController.TrackStarted += OnTrackStarted;
 
             ServiceManager.SourceManager.AddSource (this);
-            
+
             // TODO change this Gtk.Action code so that the actions can be removed.  And so this
             // class doesn't depend on Gtk/ThickClient.
             actions = new PlayQueueActions (this);
-            
+
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
             Properties.SetString ("GtkActionPath", "/PlayQueueContextMenu");
 
@@ -106,7 +106,7 @@ namespace Banshee.PlayQueue
             ServiceManager.SourceManager.MusicLibrary.TracksDeleted += HandleTracksDeleted;
             ServiceManager.SourceManager.VideoLibrary.TracksChanged += HandleTracksChanged;
             ServiceManager.SourceManager.VideoLibrary.TracksDeleted += HandleTracksDeleted;
-            
+
             populate_from = ServiceManager.SourceManager.Sources.FirstOrDefault (
                 source => source.Name == populate_from_name) as DatabaseSource;
             if (populate_from != null) {
@@ -135,7 +135,7 @@ namespace Banshee.PlayQueue
 
             Properties.Set<Gtk.Widget> ("Nereid.SourceContents.HeaderWidget", header_widget);
         }
-        
+
         public HeaderWidget CreateHeaderWidget ()
         {
             var header_widget = new HeaderWidget (populate_mode, populate_from_name);
@@ -175,7 +175,7 @@ namespace Banshee.PlayQueue
         {
             EnqueueId (DatabaseTrackInfo.GetTrackIdForUri (uri), prepend, false);
         }
-        
+
         public void EnqueueTrack (TrackInfo track, bool prepend)
         {
             DatabaseTrackInfo db_track = track as DatabaseTrackInfo;
@@ -185,7 +185,7 @@ namespace Banshee.PlayQueue
                 EnqueueUri (track.Uri.AbsoluteUri, prepend);
             }
         }
-        
+
         private void EnqueueId (int trackId, bool prepend, bool generated)
         {
             if (trackId <= 0) {
@@ -237,11 +237,11 @@ namespace Banshee.PlayQueue
             OnTracksAdded ();
             NotifyUser ();
         }
-        
+
         IDBusExportable IDBusExportable.Parent {
             get { return ServiceManager.SourceManager; }
         }
-        
+
         string IService.ServiceName {
             get { return "PlayQueue"; }
         }
@@ -378,14 +378,14 @@ namespace Banshee.PlayQueue
                 Clear ();
             }
         }
-        
+
         private void BindToDatabase ()
         {
             int result = ServiceManager.DbConnection.Query<int> (
                 "SELECT PlaylistID FROM CorePlaylists WHERE Special = 1 AND Name = ? LIMIT 1",
                 special_playlist_name
             );
-            
+
             if (result != 0) {
                 DbId = result;
             } else {
@@ -520,7 +520,7 @@ namespace Banshee.PlayQueue
         {
             return ((IBasicPlaybackController)this).Next (false);
         }
-        
+
         bool IBasicPlaybackController.Next (bool restart)
         {
             if (current_track != null && ServiceManager.PlayerEngine.CurrentTrack == current_track) {
@@ -542,7 +542,7 @@ namespace Banshee.PlayQueue
             ServiceManager.PlayerEngine.OpenPlay (current_track);
             return true;
         }
-        
+
         bool IBasicPlaybackController.Previous (bool restart)
         {
             if (current_track != null && ServiceManager.PlayerEngine.CurrentTrack == current_track) {
@@ -554,7 +554,7 @@ namespace Banshee.PlayQueue
             }
             return true;
         }
-        
+
         private void UpdatePlayQueue ()
         {
             // Find the ViewOrder of the current_track.
diff --git a/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/AmarokPlayerImportSource.cs b/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/AmarokPlayerImportSource.cs
index 89c7e87..417fa20 100644
--- a/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/AmarokPlayerImportSource.cs
+++ b/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/AmarokPlayerImportSource.cs
@@ -58,7 +58,7 @@ namespace Banshee.PlayerMigration
                     "Unable to open Amarok database: {0}", e.Message));
                 return;
             }
-            
+
             int count = 0;
             try {
                 count = conn.Query<int> ("SELECT COUNT(*) FROM tags");
@@ -86,7 +86,7 @@ namespace Banshee.PlayerMigration
                        AND tags.genre = genre.id
                        AND tags.year = year.id"
                 );
-                
+
                 HyenaSqliteCommand stats_cmd = new HyenaSqliteCommand (@"
                                                      SELECT DISTINCT (rating+rating%2)/2, playcounter, createdate, accessdate
                                                      FROM   statistics
@@ -103,7 +103,7 @@ namespace Banshee.PlayerMigration
 
                      try {
                          string path = (string) reader[1];
-                         
+
                          SafeUri uri = null;
                          if (path.StartsWith ("./")) {
                              uri = new SafeUri (path.Substring (1));
@@ -116,7 +116,7 @@ namespace Banshee.PlayerMigration
                          string title = (string) reader[2];
                          string artist = (string) reader[3];
                          //Console.WriteLine ("Amarok import has {0}/{1} - {2}", artist, title, uri);
-                         
+
                          // the following fields are not critical and can be skipped if something goes wrong
                          int rating = 0, playcount = 0;
                          long created = 0, accessed = 0;
@@ -135,14 +135,14 @@ namespace Banshee.PlayerMigration
                          } catch (Exception) {}
 
                          UpdateUserJob (processed, count, artist, title);
-                     
+
                          try {
                              DatabaseTrackInfo track = import_manager.ImportTrack (uri);
-                            
+
                              if (track == null) {
                                  throw new Exception (String.Format (Catalog.GetString ("Unable to import track: {0}"), uri.AbsoluteUri));
                              }
-                            
+
                              if (rating > 0 || playcount > 0 || created > 0 || accessed > 0) {
                                  track.Rating = rating;
                                  track.PlayCount = playcount;
@@ -162,7 +162,7 @@ namespace Banshee.PlayerMigration
                  }
                  reader.Close ();
                  import_manager.NotifyAllSources ();
-                 
+
                  // TODO migrating more than the podcast subscriptions (eg whether to auto sync them etc) means 1) we need to have those features
                  // and 2) we need to depend on Migo and/or the Podcast extension
                  DBusCommandService cmd_service = ServiceManager.Get<DBusCommandService> ();
@@ -171,7 +171,7 @@ namespace Banshee.PlayerMigration
                          cmd_service.PushFile (podcast_url.Replace ("http:", "feed:"));
                      }
                  }
-                 
+
             } catch (Exception e) {
                 Hyena.Log.Exception (e);
                 LogError (amarok_db_path, Catalog.GetString ("Importing from Amarok failed"));
@@ -179,11 +179,11 @@ namespace Banshee.PlayerMigration
                 conn.Dispose ();
             }
         }
-        
+
         public override bool CanImport {
             get { return Banshee.IO.File.Exists (new SafeUri (amarok_db_path)); }
         }
-        
+
         public override string Name {
             get { return Catalog.GetString ("Amarok"); }
         }
@@ -191,7 +191,7 @@ namespace Banshee.PlayerMigration
         public override string [] IconNames {
             get { return new string [] { "system-search" }; }
         }
-        
+
         public override int SortOrder {
             get { return 40; }
         }
diff --git a/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/RhythmboxPlayerImportSource.cs b/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/RhythmboxPlayerImportSource.cs
index a3aecfa..6c5ee94 100644
--- a/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/RhythmboxPlayerImportSource.cs
+++ b/src/Extensions/Banshee.PlayerMigration/Banshee.PlayerMigration/RhythmboxPlayerImportSource.cs
@@ -83,7 +83,7 @@ namespace Banshee.PlayerMigration
                 LogError (SafeUri.UriToFilename (db_uri), "Unable to open Rhythmbox library.");
                 return;
             }
-            
+
             count = db_root.ChildNodes.Count;
             processed = 0;
 
@@ -106,7 +106,7 @@ namespace Banshee.PlayerMigration
             }
 
             XmlElement playlists_root = null;
-            
+
             if (playlists_available) {
                 if (IsValidXmlDocument (rhythmbox_playlists_uri)) {
                     Stream stream_playlists = Banshee.IO.File.OpenRead (rhythmbox_playlists_uri);
@@ -114,7 +114,7 @@ namespace Banshee.PlayerMigration
                     xml_doc_playlists.Load (stream_playlists);
                     playlists_root = xml_doc_playlists.DocumentElement;
                     stream_playlists.Close ();
- 
+
                     if (playlists_root == null || !playlists_root.HasChildNodes || playlists_root.Name != "rhythmdb-playlists") {
                         playlists_available = false;
                     } else {
@@ -129,7 +129,7 @@ namespace Banshee.PlayerMigration
             ImportSongs (import_manager, db_root.SelectNodes ("/rhythmdb/entry[ type='song']"));
 
             //ImportPodcasts (import_manager, db_root.SelectNodes ("/rhythmdb/entry[ type='podcast-post']"));
-            
+
             if (playlists_available) {
                 ImportStaticPlaylists(playlists_root.SelectNodes ("/rhythmdb-playlists/playlist[ type='static']"));
             }
@@ -162,7 +162,7 @@ namespace Banshee.PlayerMigration
                 }
 
                 processed++;
-                    
+
                 string title = String.Empty,
                        genre = String.Empty,
                        artist = String.Empty,
@@ -222,7 +222,7 @@ namespace Banshee.PlayerMigration
                         // parsing InnerText failed
                     }
                 }
-                
+
                 if (uri == null) {
                     continue;
                 }
@@ -231,7 +231,7 @@ namespace Banshee.PlayerMigration
 
                 try {
                     DatabaseTrackInfo track = manager.ImportTrack (uri);
-                    
+
                     if (track == null) {
                         LogError (SafeUri.UriToFilename (uri), Catalog.GetString ("Unable to import song."));
                         continue;
@@ -244,11 +244,11 @@ namespace Banshee.PlayerMigration
                     track.TrackNumber = track_number;
                     track.Year = year;
                     track.DateAdded = date_added;
-                    
+
                     track.Rating = (rating >= 0 && rating <= 5) ? rating : 0;
                     track.PlayCount = (play_count >= 0) ? play_count : 0;
                     track.LastPlayed = last_played;
-                    
+
                     track.Save (false);
                 } catch (Exception e) {
                     LogError (SafeUri.UriToFilename (uri), e);
@@ -267,7 +267,7 @@ namespace Banshee.PlayerMigration
                 }
 
                 processed++;
-                    
+
                 string title = String.Empty, feed = String.Empty;
                 SafeUri uri = null;
 
@@ -292,7 +292,7 @@ namespace Banshee.PlayerMigration
                         // parsing InnerText failed
                     }
                 }
-                
+
                 if (uri == null) {
                     continue;
                 }
@@ -301,16 +301,16 @@ namespace Banshee.PlayerMigration
 
                 try {
                     DatabaseTrackInfo track = manager.ImportTrack (uri);
-                    
+
                     if (track == null) {
                         LogError (SafeUri.UriToFilename (uri), Catalog.GetString ("Unable to import podcast."));
                         continue;
                     }
-                    
+
                     track.TrackTitle = title;
                     track.AlbumTitle = feed;
                     track.Genre = "Podcast";
-                    
+
                     track.Save (false);
                 } catch (Exception e) {
                     LogError (SafeUri.UriToFilename (uri), e);
@@ -326,34 +326,34 @@ namespace Banshee.PlayerMigration
                 }
 
                 processed++;
-                
+
                 try {
                     string title = String.Empty;
                     if (list.HasAttribute ("name")) {
                         title = list.GetAttribute ("name");
                     }
-                    
+
                     UpdateUserJob (processed, count, "", title);
-        
+
                     PlaylistSource playlist = new PlaylistSource (title, ServiceManager.SourceManager.MusicLibrary);
                     playlist.Save ();
                     ServiceManager.SourceManager.MusicLibrary.AddChildSource (playlist);
-        
-                    
+
+
                     HyenaSqliteCommand insert_command = new HyenaSqliteCommand (String.Format (
                         @"INSERT INTO CorePlaylistEntries (PlaylistID, TrackID) VALUES ({0}, ?)", playlist.DbId));
-        
+
                     foreach (XmlElement entry in list.ChildNodes) {
                         if (entry.Name != "location") {
                             continue;
                         }
-                        
+
                         int track_id = ServiceManager.SourceManager.MusicLibrary.GetTrackIdForUri (entry.InnerText);
                         if (track_id > 0) {
                             ServiceManager.DbConnection.Execute (insert_command, track_id);
                         }
                     }
-                            
+
                     playlist.Reload ();
                     playlist.NotifyUser ();
                 } catch (Exception e) {
@@ -361,11 +361,11 @@ namespace Banshee.PlayerMigration
                 }
             }
         }
-        
+
         public override bool CanImport {
             get { return Banshee.IO.File.Exists (rhythmbox_db_uri) || Banshee.IO.File.Exists (rhythmbox_db_uri_old); }
         }
-        
+
         public override string Name {
             get { return Catalog.GetString ("Rhythmbox Music Player"); }
         }
@@ -373,7 +373,7 @@ namespace Banshee.PlayerMigration
         public override string [] IconNames {
             get { return new string [] { "rhythmbox", "system-search" }; }
         }
-        
+
         public override int SortOrder {
             get { return 40; }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/DownloadStatusFilterModel.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/DownloadStatusFilterModel.cs
index dffd532..dd3135f 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/DownloadStatusFilterModel.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/DownloadStatusFilterModel.cs
@@ -56,17 +56,17 @@ namespace Banshee.Podcasting.Gui
             Selection.Clear (false);
             Selection.QuietSelect (0);
         }
-        
+
         public override void Reload (bool notify)
         {
             if (notify)
                 OnReloaded ();
         }
-        
+
         public override void Clear ()
         {
         }
-        
+
         public override DownloadedStatusFilter this [int index] {
             get {
                 switch (index) {
@@ -77,7 +77,7 @@ namespace Banshee.Podcasting.Gui
                 }
             }
         }
-        
+
         public override int Count {
             get { return 3; }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastFeedModel.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastFeedModel.cs
index d3d980e..2ce6110 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastFeedModel.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastFeedModel.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -43,27 +43,27 @@ namespace Banshee.Podcasting.Gui
 {
     public class PodcastFeedModel : DatabaseFilterListModel<Feed, Feed>
     {
-        public PodcastFeedModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, BansheeDbConnection connection, string uuid) 
+        public PodcastFeedModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel, BansheeDbConnection connection, string uuid)
             : base ("podcast", Catalog.GetString ("Podcast"), source, trackModel, connection, Feed.Provider, new Feed (null, FeedAutoDownload.None), uuid)
         {
             ReloadFragmentFormat = @"
                 FROM PodcastSyndications WHERE FeedID IN
                     (SELECT DISTINCT PodcastSyndications.FeedID FROM PodcastItems, CoreTracks, PodcastEnclosures, PodcastSyndications, CoreCache{0}
-                        WHERE PodcastSyndications.FeedID = PodcastItems.FeedID AND 
+                        WHERE PodcastSyndications.FeedID = PodcastItems.FeedID AND
                           PodcastItems.ItemID = CoreTracks.ExternalID AND PodcastEnclosures.ItemID = PodcastItems.ItemID AND
                           CoreCache.ModelID = {1} AND CoreCache.ItemId = {2} {3})
                     ORDER BY lower(Title)";
         }
-        
+
         public override string FilterColumn {
             get { return Feed.Provider.PrimaryKey; }
         }
-        
+
         protected override string ItemToFilterValue (object item)
         {
             return (item != select_all_item && item is Feed) ? (item as Feed).DbId.ToString () : null;
         }
-        
+
         public override void UpdateSelectAllItem (long count)
         {
             select_all_item.Title = String.Format (Catalog.GetString ("All Podcasts ({0})"), count);
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastSource.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastSource.cs
index e1c6f88..22a5e50 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastSource.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastSource.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -53,11 +53,11 @@ using Banshee.Podcasting.Data;
 using Migo.Syndication;
 
 namespace Banshee.Podcasting.Gui
-{ 
+{
     public class PodcastSource : Banshee.Library.LibrarySource
     {
         private PodcastFeedModel feed_model;
-        
+
         public override string DefaultBaseDirectory {
             get {
                 // HACK there isn't an XDG_PODCASTS_DIR; propose it?
@@ -105,16 +105,16 @@ namespace Banshee.Podcasting.Gui
             TrackModel.Reloaded += OnReloaded;
 
             Properties.SetString ("Icon.Name", "podcast");
-            
+
             Properties.SetString ("ActiveSourceUIResource", "ActiveSourceUI.xml");
             Properties.Set<bool> ("ActiveSourceUIResourcePropagate", true);
             Properties.Set<System.Reflection.Assembly> ("ActiveSourceUIResource.Assembly", typeof(PodcastSource).Assembly);
-            
+
             Properties.SetString ("GtkActionPath", "/PodcastSourcePopup");
 
             Properties.Set<ISourceContents> ("Nereid.SourceContents", new PodcastSourceContents ());
             Properties.Set<bool> ("Nereid.SourceContentsPropagate", true);
-            
+
             Properties.SetString ("TrackView.ColumnControllerXml", String.Format (@"
                     <column-controller>
                       <add-all-defaults />
@@ -163,7 +163,7 @@ namespace Banshee.Podcasting.Gui
                 Catalog.GetString ("Downloaded"), Catalog.GetString ("Description")
             ));
         }
-        
+
 #endregion
 
         private object GetPodcastInfoObject (DatabaseTrackInfo track)
@@ -175,7 +175,7 @@ namespace Banshee.Podcasting.Gui
         {
             return PodcastService.ArtworkIdFor (PodcastTrackInfo.From (track).Feed);
         }
-        
+
         protected override bool HasArtistAlbum {
             get { return false; }
         }
@@ -218,12 +218,12 @@ namespace Banshee.Podcasting.Gui
             if (episode != null) {
                 if (episode.Uri.IsFile)
                     base.DeleteTrack (track);
-                
+
                 episode.Delete ();
                 episode.Item.Delete (false);
             }
         }*/
-        
+
         /*protected override void AddTrack (DatabaseTrackInfo track)
         {
             // TODO
@@ -231,11 +231,11 @@ namespace Banshee.Podcasting.Gui
             // considered a Podcast item
             base.AddTrack (track);
         }*/
-        
+
         public override bool ShowBrowser {
             get { return true; }
         }
-        
+
         /*public override IEnumerable<SmartPlaylistDefinition> DefaultSmartPlaylists {
             get { return default_smart_playlists; }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackInfo.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackInfo.cs
index c20fabb..923f472 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackInfo.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackInfo.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  PodcastItem.cs
  *
  *  Copyright (C) 2008 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -43,13 +43,13 @@ using Banshee.Collection.Database;
 
 using Migo.Syndication;
 
-namespace Banshee.Podcasting.Data 
+namespace Banshee.Podcasting.Data
 {
     public enum PodcastItemActivity : int {
         Downloading = 0,
-        DownloadPending = 1,        
+        DownloadPending = 1,
         DownloadFailed = 2,
-        DownloadPaused = 3,        
+        DownloadPaused = 3,
         //NewPodcastItem = 4,
         //Video = 5,
         Downloaded = 6,
@@ -80,7 +80,7 @@ namespace Banshee.Podcasting.Data
                 }
             }
         }
-        
+
         private DatabaseTrackInfo track;
 
 #region Properties
@@ -92,7 +92,7 @@ namespace Banshee.Podcasting.Data
         public Feed Feed {
             get { return Item.Feed; }
         }
-        
+
         private FeedItem item;
         public FeedItem Item {
             get {
@@ -103,7 +103,7 @@ namespace Banshee.Podcasting.Data
             }
             set { item = value; track.ExternalId = value.DbId; }
         }
-        
+
         public DateTime PublishedDate {
             get { return Item.PubDate; }
         }
@@ -111,15 +111,15 @@ namespace Banshee.Podcasting.Data
         public string Description {
             get { return Item.StrippedDescription; }
         }
-        
+
         public bool IsNew {
             get { return !Item.IsRead; }
         }
-        
+
         public bool IsDownloaded {
             get { return !String.IsNullOrEmpty (Enclosure.LocalPath); }
         }
-        
+
         public DateTime ReleaseDate {
             get { return Item.PubDate; }
         }
@@ -133,21 +133,21 @@ namespace Banshee.Podcasting.Data
                 switch (Item.Enclosure.DownloadStatus) {
                 case FeedDownloadStatus.Downloaded:
                     return PodcastItemActivity.Downloaded;
-               
+
                 case FeedDownloadStatus.DownloadFailed:
                     return PodcastItemActivity.Downloaded;
-                    
+
                 case FeedDownloadStatus.Downloading:
                     return PodcastItemActivity.Downloading;
-                    
+
                 case FeedDownloadStatus.Pending:
                     return PodcastItemActivity.DownloadPending;
-                    
+
                 case FeedDownloadStatus.Paused:
                     return PodcastItemActivity.DownloadPaused;
 
                 default:
-                    return PodcastItemActivity.None;   
+                    return PodcastItemActivity.None;
                 }
             }
         }
@@ -155,12 +155,12 @@ namespace Banshee.Podcasting.Data
 #endregion
 
 #region Constructors
-    
+
         public PodcastTrackInfo (DatabaseTrackInfo track) : base ()
         {
             this.track = track;
         }
-        
+
         public PodcastTrackInfo (DatabaseTrackInfo track, FeedItem feed_item) : this (track)
         {
             Item = feed_item;
@@ -182,9 +182,9 @@ namespace Banshee.Podcasting.Data
                     pi.Item.IsRead = true;
                     pi.Item.Save ();
                 }
-            }   
+            }
         }
-        
+
         public void SyncWithFeedItem ()
         {
             //Console.WriteLine ("Syncing item, enclosure == null? {0}", Item.Enclosure == null);
@@ -200,7 +200,7 @@ namespace Banshee.Podcasting.Data
             track.FileSize = Item.Enclosure.FileSize;
             track.LicenseUri = Item.LicenseUri;
             track.Uri = new Banshee.Base.SafeUri (Item.Enclosure.LocalPath ?? Item.Enclosure.Url);
-            
+
             if (!String.IsNullOrEmpty (Item.Enclosure.LocalPath)) {
                 try {
                     TagLib.File file = Banshee.Streaming.StreamTagger.ProcessUri (track.Uri);
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs
index fc87e52..3884a50 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs
@@ -73,7 +73,7 @@ namespace Banshee.Podcasting.Gui
                 ? GetSort ("PublishedDate", false)
                 : GetSort (SortColumn.SortKey, SortColumn.SortType == Hyena.Data.SortType.Ascending);
         }
-        
+
         public override void UpdateUnfilteredAggregates ()
         {
             HyenaSqliteCommand count_command = new HyenaSqliteCommand (String.Format (
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastUnheardFilterModel.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastUnheardFilterModel.cs
index 47a2ace..895c9c2 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastUnheardFilterModel.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastUnheardFilterModel.cs
@@ -56,17 +56,17 @@ namespace Banshee.Podcasting.Gui
             Selection.Clear (false);
             Selection.QuietSelect (1);
         }
-        
+
         public override void Reload (bool notify)
         {
             if (notify)
                 OnReloaded ();
         }
-        
+
         public override void Clear ()
         {
         }
-        
+
         public override OldNewFilter this [int index] {
             get {
                 switch (index) {
@@ -77,7 +77,7 @@ namespace Banshee.Podcasting.Gui
                 }
             }
         }
-        
+
         public override int Count {
             get { return 3; }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellDownloadStatus.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellDownloadStatus.cs
index 8ad2648..562e7ba 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellDownloadStatus.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellDownloadStatus.cs
@@ -49,7 +49,7 @@ namespace Banshee.Podcasting.Gui
         public ColumnCellDownloadStatus () : base (null, true)
         {
         }
-    
+
         protected override string GetText (object obj)
         {
             DownloadedStatusFilter val = (DownloadedStatusFilter) obj;
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs
index af13ce2..169d8b1 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs
@@ -48,124 +48,124 @@ namespace Banshee.Podcasting.Gui
     {
         private static int image_spacing = 4;
         private static int image_size = 48;
-        
+
         // TODO replace this w/ new icon installation etc
-        private static ImageSurface default_cover_image 
+        private static ImageSurface default_cover_image
             = PixbufImageSurface.Create (IconThemeUtils.LoadIcon (image_size, "podcast"));
-        
+
         private ArtworkManager artwork_manager;
 
         public ColumnCellPodcast () : base (null, true)
         {
             artwork_manager = ServiceManager.Get<ArtworkManager> ();
         }
-    
+
         public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
         {
             if (BoundObject == null) {
                 return;
             }
-            
+
             if (!(BoundObject is Feed)) {
                 throw new InvalidCastException("ColumnCellPodcast can only bind to Feed objects");
             }
-            
+
             Feed feed = (Feed)BoundObject;
-            
+
             bool is_default = false;
-            ImageSurface image = artwork_manager == null ? null 
+            ImageSurface image = artwork_manager == null ? null
                 : artwork_manager.LookupScaleSurface (PodcastService.ArtworkIdFor (feed), image_size, true);
-            
+
             if (image == null) {
                 image = default_cover_image;
                 is_default = true;
             }
-            
+
             // int image_render_size = is_default ? image.Height : (int)cellHeight - 8;
             int image_render_size = image_size;
             int x = image_spacing;
             int y = ((int)cellHeight - image_render_size) / 2;
 
-            ArtworkRenderer.RenderThumbnail (context.Context, image, false, x, y, 
+            ArtworkRenderer.RenderThumbnail (context.Context, image, false, x, y,
                 image_render_size, image_render_size, !is_default, context.Theme.Context.Radius);
-                
+
             int fl_width = 0, fl_height = 0, sl_width = 0, sl_height = 0;
             Cairo.Color text_color = context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state);
             text_color.A = 0.75;
-            
+
             Pango.Layout layout = context.Layout;
             layout.Width = (int)((cellWidth - cellHeight - x - 10) * Pango.Scale.PangoScale);
             layout.Ellipsize = Pango.EllipsizeMode.End;
             layout.FontDescription.Weight = Pango.Weight.Bold;
-            
+
             // Compute the layout sizes for both lines for centering on the cell
             int old_size = layout.FontDescription.Size;
-            
+
             layout.SetText (feed.Title ?? String.Empty);
             layout.GetPixelSize (out fl_width, out fl_height);
-            
+
             if (feed.DbId > 0) {
                 layout.FontDescription.Weight = Pango.Weight.Normal;
                 layout.FontDescription.Size = (int)(old_size * Pango.Scale.Small);
                 layout.FontDescription.Style = Pango.Style.Italic;
-                
+
                 if (feed.LastDownloadTime == DateTime.MinValue) {
                     layout.SetText (Catalog.GetString ("Never updated"));
                 } else if (feed.LastDownloadTime.Date == DateTime.Now.Date) {
                     layout.SetText (String.Format (Catalog.GetString ("Updated at {0}"), feed.LastDownloadTime.ToShortTimeString ()));
                 } else {
                     layout.SetText (String.Format (Catalog.GetString ("Updated {0}"), Hyena.Query.RelativeTimeSpanQueryValue.RelativeToNow (feed.LastDownloadTime).ToUserQuery ()));
-                }    
+                }
                 layout.GetPixelSize (out sl_width, out sl_height);
             }
-            
+
             // Calculate the layout positioning
             x = ((int)cellHeight - x) + 10;
             y = (int)((cellHeight - (fl_height + sl_height)) / 2);
-            
+
             // Render the second line first since we have that state already
             if (feed.DbId > 0) {
                 context.Context.MoveTo (x, y + fl_height);
                 context.Context.Color = text_color;
                 PangoCairoHelper.ShowLayout (context.Context, layout);
             }
-            
+
             // Render the first line, resetting the state
             layout.SetText (feed.Title ?? String.Empty);
             layout.FontDescription.Weight = Pango.Weight.Bold;
             layout.FontDescription.Size = old_size;
             layout.FontDescription.Style = Pango.Style.Normal;
-            
+
             layout.SetText (feed.Title ?? String.Empty);
-            
+
             context.Context.MoveTo (x, y);
             text_color.A = 1;
             context.Context.Color = text_color;
             PangoCairoHelper.ShowLayout (context.Context, layout);
         }
-        
+
         public int ComputeRowHeight (Widget widget)
         {
             int height;
             int text_w, text_h;
-            
+
             Pango.Layout layout = new Pango.Layout (widget.PangoContext);
             layout.FontDescription = widget.PangoContext.FontDescription.Copy ();
-            
+
             layout.FontDescription.Weight = Pango.Weight.Bold;
             layout.SetText ("W");
             layout.GetPixelSize (out text_w, out text_h);
             height = text_h;
-            
+
             layout.FontDescription.Weight = Pango.Weight.Normal;
             layout.FontDescription.Size = (int)(layout.FontDescription.Size * Pango.Scale.Small);
             layout.FontDescription.Style = Pango.Style.Italic;
             layout.SetText ("W");
             layout.GetPixelSize (out text_w, out text_h);
             height += text_h;
-            
+
             layout.Dispose ();
-            
+
             return (height < image_size ? image_size : height) + 6;
         }
     }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcastStatusIndicator.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcastStatusIndicator.cs
index c636341..792fc48 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcastStatusIndicator.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcastStatusIndicator.cs
@@ -44,11 +44,11 @@ namespace Banshee.Podcasting.Gui
         public ColumnCellPodcastStatusIndicator (string property) : base (property)
         {
         }
-        
+
         public ColumnCellPodcastStatusIndicator (string property, bool expand) : base (property, expand)
         {
         }
-        
+
         protected override int PixbufCount {
             get { return base.PixbufCount + 2; }
         }
@@ -56,32 +56,32 @@ namespace Banshee.Podcasting.Gui
         protected override void LoadPixbufs ()
         {
             base.LoadPixbufs ();
-            
+
             // Downloading
             Pixbufs[base.PixbufCount + 0] = IconThemeUtils.LoadIcon (PixbufSize, "document-save", "go-bottom");
             StatusNames[base.PixbufCount + 0] = Catalog.GetString ("Downloading");
-            
+
             // Podcast is Downloaded
             Pixbufs[base.PixbufCount + 1] = IconThemeUtils.LoadIcon (PixbufSize, "podcast-new");
             StatusNames[base.PixbufCount + 1] = Catalog.GetString ("New");
         }
-        
+
         protected override int GetIconIndex (TrackInfo track)
         {
             PodcastTrackInfo podcast = PodcastTrackInfo.From (track);
             if (track == null) {
                 return -1;
             }
-            
+
             switch (podcast.Activity) {
                 case PodcastItemActivity.Downloading:
-                case PodcastItemActivity.DownloadPending: 
+                case PodcastItemActivity.DownloadPending:
                     return base.PixbufCount + 0;
                 default:
                     return podcast.IsDownloaded ? base.PixbufCount + 1 : -1;
             }
         }
-        
+
         public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
         {
             PodcastTrackInfo podcast = PodcastTrackInfo.From (BoundTrack);
@@ -90,7 +90,7 @@ namespace Banshee.Podcasting.Gui
                     context.Opaque = false;
                 }
             }
-            
+
             base.Render (context, state, cellWidth, cellHeight);
         }
     }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellUnheard.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellUnheard.cs
index a747b94..2c41d64 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellUnheard.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellUnheard.cs
@@ -49,7 +49,7 @@ namespace Banshee.Podcasting.Gui
         public ColumnCellUnheard () : base (null, true)
         {
         }
-    
+
         protected override string GetText (object obj)
         {
             OldNewFilter val = (OldNewFilter) obj;
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadManagerInterface.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadManagerInterface.cs
index 368b2e2..3265dad 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadManagerInterface.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadManagerInterface.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  DownloadManagerInterface.cs
  *
  *  Copyright (C) 2008 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -38,88 +38,88 @@ using System.Threading;
 
 namespace Banshee.Podcasting.Gui
 {
-    public class DownloadManagerInterface : IDisposable 
+    public class DownloadManagerInterface : IDisposable
     {
         private DownloadManager manager;
-        private DownloadUserJob downloadJob;        
-        //private DownloadManagerSource downloadSource;        
-        
-        private readonly object sync = new object ();        
-        
+        private DownloadUserJob downloadJob;
+        //private DownloadManagerSource downloadSource;
+
+        private readonly object sync = new object ();
+
         public DownloadManagerInterface (DownloadManager manager)
         {
             if (manager == null) {
                 throw new ArgumentNullException ("manager");
             }
-            
-            this.manager = manager;            
+
+            this.manager = manager;
         }
-        
+
         public void Dispose ()
         {
             lock (sync) {
                 if (manager != null) {
-                    manager.Group.Started -= OnManagerStartedHandler;   
-                    manager.Group.Stopped -= OnManagerStoppedHandler;  
+                    manager.Group.Started -= OnManagerStartedHandler;
+                    manager.Group.Stopped -= OnManagerStoppedHandler;
                     manager.Group.ProgressChanged -= OnManagerProgressChangedHandler;
-                    manager.Group.StatusChanged -= OnManagerStatusChangedHandler; 
-                    
+                    manager.Group.StatusChanged -= OnManagerStatusChangedHandler;
+
                     manager = null;
                 }
             }
 
-            Gtk.Application.Invoke (delegate {                                
+            Gtk.Application.Invoke (delegate {
                 lock (sync) {
                     if (downloadJob != null) {
                         downloadJob.CancelRequested -= OnCancelRequested;
                         downloadJob.Finish ();
-                        downloadJob = null;   
-                        //SourceManager.RemoveSource (downloadSource);   
-                        //downloadSource = null;                    
-                    }        
+                        downloadJob = null;
+                        //SourceManager.RemoveSource (downloadSource);
+                        //downloadSource = null;
+                    }
                 }
-            });            
+            });
         }
-        
+
         public void Initialize ()
         {
-            //downloadSource = new DownloadManagerSource (manager);                        
-            manager.Group.Started += OnManagerStartedHandler;   
-            manager.Group.Stopped += OnManagerStoppedHandler;  
+            //downloadSource = new DownloadManagerSource (manager);
+            manager.Group.Started += OnManagerStartedHandler;
+            manager.Group.Stopped += OnManagerStoppedHandler;
             manager.Group.ProgressChanged += OnManagerProgressChangedHandler;
             manager.Group.StatusChanged += OnManagerStatusChangedHandler;
         }
 
         private void OnManagerStartedHandler (object sender, EventArgs e)
         {
-            Gtk.Application.Invoke (delegate {                                
+            Gtk.Application.Invoke (delegate {
                 lock (sync) {
                     if (downloadJob == null) {
-                        //SourceManager.AddSource (downloadSource);                                       
-                        
+                        //SourceManager.AddSource (downloadSource);
+
                         downloadJob = new DownloadUserJob ();
-                        downloadJob.CancelRequested += OnCancelRequested;  
+                        downloadJob.CancelRequested += OnCancelRequested;
                         downloadJob.Register ();
-                    }        
+                    }
                 }
-            });                
-        }          
-        
+            });
+        }
+
         private void OnManagerStoppedHandler (object sender, EventArgs e)
         {
-            Gtk.Application.Invoke (delegate {            
+            Gtk.Application.Invoke (delegate {
                 lock (sync) {
-                    if (downloadJob != null) {                        
+                    if (downloadJob != null) {
                         downloadJob.CancelRequested -= OnCancelRequested;
                         downloadJob.Finish ();
-                        downloadJob = null;   
-                        //SourceManager.RemoveSource (downloadSource);                                                            
+                        downloadJob = null;
+                        //SourceManager.RemoveSource (downloadSource);
                     }
                 }
             });
-        } 
+        }
 
-        private void OnManagerProgressChangedHandler (object sender, 
+        private void OnManagerProgressChangedHandler (object sender,
                                                       ProgressChangedEventArgs e)
         {
             Application.Invoke (delegate {
@@ -128,26 +128,26 @@ namespace Banshee.Podcasting.Gui
                         downloadJob.UpdateProgress (e.ProgressPercentage);
                     }
                 }
-            });                                
-        }   
+            });
+        }
 
-        private void OnManagerStatusChangedHandler (object sender, 
+        private void OnManagerStatusChangedHandler (object sender,
                                                     GroupStatusChangedEventArgs e)
         {
             DownloadGroupStatusChangedEventArgs args = e as DownloadGroupStatusChangedEventArgs;
-            
-            Application.Invoke (delegate {            
+
+            Application.Invoke (delegate {
                 lock (sync) {
                     if (downloadJob != null) {
                         downloadJob.UpdateStatus (args.RunningTasks, args.RemainingTasks, args.CompletedTasks, args.BytesPerSecond);
                     }
-                }             
-            });            
-        }         
-        
+                }
+            });
+        }
+
         private void OnCancelRequested (object sender, EventArgs e)
         {
             manager.Group.CancelAsync ();
-        }          
-    }   
+        }
+    }
 }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadUserJob.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadUserJob.cs
index db1977e..4cc6013 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadUserJob.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/DownloadManager/DownloadUserJob.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -35,26 +35,26 @@ using Banshee.ServiceStack;
 
 namespace Banshee.Podcasting.Gui
 {
-    public class DownloadUserJob : UserJob 
+    public class DownloadUserJob : UserJob
     {
         private bool disposed = false;
         private bool canceled = false;
         private bool cancelRequested = false;
-        
+
         private readonly object sync = new object ();
 
         public DownloadUserJob () : base (Catalog.GetString ("Downloads"), String.Empty, String.Empty)
         {
             CancelRequested += OnCancelRequested;
-            
+
             Title = Catalog.GetString ("Downloading Podcast(s)");
-            Status = Catalog.GetString ("Initializing...");           
+            Status = Catalog.GetString ("Initializing...");
             CancelMessage = Catalog.GetString ("Cancel all podcast downloads?");
 
             this.IconNames = new string[1] {
                 Stock.Network
             };
-            
+
             CanCancel = true;
         }
 
@@ -66,24 +66,24 @@ namespace Banshee.Podcasting.Gui
                 } else if (cancelRequested) {
                     throw new InvalidOperationException ("Cannot dispose object while canceling.");
                 } else {
-                    disposed = true;   
+                    disposed = true;
                 }
-                
-                CancelRequested -= OnCancelRequested;                
+
+                CancelRequested -= OnCancelRequested;
             }
         }
-        
+
         private bool SetCanceled ()
         {
             bool ret = false;
-            
+
             lock (sync) {
                 if (!cancelRequested && !canceled && !disposed) {
                     CanCancel = false;
                     ret = cancelRequested = true;
                 }
             }
-            
+
             return ret;
         }
 
@@ -92,24 +92,24 @@ namespace Banshee.Podcasting.Gui
             if (progress < 0 || progress > 100) {
                 throw new ArgumentException ("progress:  Must be between 0 and 100.");
             }
-            
+
             lock (sync) {
                 if (canceled || cancelRequested || disposed) {
                     return;
                 }
-                
-                Progress = (double) progress / 100;                            
+
+                Progress = (double) progress / 100;
             }
         }
-        
+
         public void UpdateStatus (int downloading, int remaining, int completed, long bytesPerSecond)
         {
             if (downloading < 0) {
-                throw new ArgumentException ("downloading:  Must be positive.");                
+                throw new ArgumentException ("downloading:  Must be positive.");
             } else if (bytesPerSecond < 0) {
                 bytesPerSecond = 0;
             }
-            
+
             lock (sync) {
                 if (canceled || cancelRequested || disposed) {
                     return;
@@ -123,12 +123,12 @@ namespace Banshee.Podcasting.Gui
 
                 Status = String.Format (fmt, downloading, (bytesPerSecond / 1024), total);
             }
-        }   
-        
+        }
+
         private void OnCancelRequested (object sender, EventArgs e)
         {
             if (SetCanceled ()) {
-                lock (sync)  {            
+                lock (sync)  {
                     Progress = 0.0;
                     Title = Catalog.GetString ("Canceling Downloads");
                     Status = Catalog.GetString (
@@ -138,7 +138,7 @@ namespace Banshee.Podcasting.Gui
                     cancelRequested = false;
                     canceled = true;
                 }
-            }           
+            }
         }
     }
 }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/FilterableListModel.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/FilterableListModel.cs
index b0b11c1..b92ec9a 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/FilterableListModel.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/FilterableListModel.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Reflection;
 
@@ -36,11 +36,11 @@ using System.Collections.ObjectModel;
 using Hyena.Data;
 using Hyena.Collections;
 using Banshee.Collection;
- 
+
 namespace Banshee.Podcasting.Gui
-{           
-    // It would be cool to move the filtering functionality to an external class 
-    // that could be applied to models directly, or chained together before being applied. 
+{
+    // It would be cool to move the filtering functionality to an external class
+    // that could be applied to models directly, or chained together before being applied.
     /*public class FilterableListModel<T> : ListModel<T>
     {
         private Predicate<T> filter;
@@ -58,7 +58,7 @@ namespace Banshee.Podcasting.Gui
         protected override List<T> List {
             get { lock (SyncRoot) { return filteredList ?? base.List; } }
         }
-        
+
         public FilterableListModel ()
         {
         }
@@ -68,7 +68,7 @@ namespace Banshee.Podcasting.Gui
             lock (SyncRoot) {
                 base.List.Clear ();
                 filteredList = null;
-                
+
                 OnCleared ();
             }
         }
@@ -83,7 +83,7 @@ namespace Banshee.Podcasting.Gui
 
         public override void Add (IEnumerable<T> fe)
         {
-            lock (SyncRoot) {            
+            lock (SyncRoot) {
                 base.List.AddRange (fe);
                 UpdateFilter ();
             }
@@ -91,7 +91,7 @@ namespace Banshee.Podcasting.Gui
 
         public override bool Contains (T item)
         {
-            lock (SyncRoot) {        
+            lock (SyncRoot) {
                 return IndexOf (item) != -1;
             }
         }
@@ -100,19 +100,19 @@ namespace Banshee.Podcasting.Gui
         {
             lock (SyncRoot) {
                 if (filter != null) {
-                    filteredList = base.List.FindAll (filter);                   
+                    filteredList = base.List.FindAll (filter);
                 } else {
                     filteredList = null;
                 }
-                
+
                 Sort ();
-                Reload ();                   
-            }                    
+                Reload ();
+            }
         }
 
         public override void Remove (T item)
         {
-            lock (SyncRoot) {            
+            lock (SyncRoot) {
                 base.List.Remove (item);
                 UpdateFilter ();
             }
@@ -120,34 +120,34 @@ namespace Banshee.Podcasting.Gui
 
         public override void Remove (IEnumerable<T> fe)
         {
-            lock (SyncRoot) {        
+            lock (SyncRoot) {
                 foreach (T f in fe) {
                     base.List.Remove (f);
                 }
-                
+
                 UpdateFilter ();
             }
         }
 
         public override T this[int index] {
-            get { 
-                lock (SyncRoot) {                
+            get {
+                lock (SyncRoot) {
                     return (index < Count) ? List[index] : default (T);
                 }
             }
         }
 
-        public override int Count { 
-            get { 
-                lock (SyncRoot) { 
-                    return List.Count; 
+        public override int Count {
+            get {
+                lock (SyncRoot) {
+                    return List.Count;
                 }
             }
         }
-        
+
         public override int IndexOf (T item)
         {
-            lock (SyncRoot) {            
+            lock (SyncRoot) {
                 return List.IndexOf (item);
             }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/ListModel.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/ListModel.cs
index 66750a0..8897001 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/ListModel.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/Models/ListModel.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Reflection;
 
@@ -36,29 +36,29 @@ using System.Collections.ObjectModel;
 using Hyena.Data;
 using Hyena.Collections;
 using Banshee.Collection;
- 
+
 namespace Banshee.Podcasting.Gui
-{        
+{
     public abstract class SortTypeComparer<T> : IComparer<T>
     {
         private readonly SortType type;
-        
+
         public SortType SortType {
             get { return type; }
         }
-        
+
         public SortTypeComparer (SortType type)
         {
             this.type = type;
         }
-        
+
         public abstract int Compare (T lhs, T rhs);
     }
 
     /*public class ListModel<T> : BansheeListModel<T>, ISortable
     {
         private ISortableColumn sortColumn;
-        
+
         private List<T> list = new List<T> ();
         private readonly object sync;
 
@@ -69,7 +69,7 @@ namespace Banshee.Podcasting.Gui
         protected virtual List<T> List {
             get { return list; }
         }
-        
+
         public override Selection Selection {
             get { lock (sync) { return selection; } }
         }
@@ -80,13 +80,13 @@ namespace Banshee.Podcasting.Gui
 
         public virtual ISortableColumn SortColumn {
             get { return sortColumn; }
-            protected set { sortColumn = value; }            
-        }      
-        
+            protected set { sortColumn = value; }
+        }
+
         public ListModel ()
         {
             selection = new Selection ();
-            sync = ((ICollection)list).SyncRoot;    
+            sync = ((ICollection)list).SyncRoot;
         }
 
         public override void Clear ()
@@ -96,7 +96,7 @@ namespace Banshee.Podcasting.Gui
                 OnCleared ();
             }
         }
-        
+
         public override void Reload ()
         {
             OnReloaded ();
@@ -113,16 +113,16 @@ namespace Banshee.Podcasting.Gui
 
         public virtual void Add (IEnumerable<T> fe)
         {
-            lock (sync) {            
+            lock (sync) {
                 list.AddRange (fe);
-                Sort ();                
-                Reload ();         
+                Sort ();
+                Reload ();
             }
         }
 
         public virtual bool Contains (T item)
         {
-            lock (sync) {        
+            lock (sync) {
                 return IndexOf (item) != -1;
             }
         }
@@ -132,29 +132,29 @@ namespace Banshee.Podcasting.Gui
             lock (sync) { return new ReadOnlyCollection<T> (list); }
         }
 
-        public virtual ReadOnlyCollection<T> CopySelectedItems () 
+        public virtual ReadOnlyCollection<T> CopySelectedItems ()
         {
             List<T> items = null;
-            
+
             lock (sync) {
                 ModelSelection<T> selected = SelectedItems;
-                
+
                 if (selected.Count > 0) {
                     items = new List<T> (selected.Count);
-                    
+
                     foreach (T t in selected) {
-                        items.Add (t);   
+                        items.Add (t);
                     }
                 }
             }
 
-            return (items != null) ? 
+            return (items != null) ?
                 new ReadOnlyCollection<T> (items) : null;
         }
 
         public virtual void Remove (T item)
         {
-            lock (sync) {            
+            lock (sync) {
                 list.Remove (item);
                 Sort ();
                 Reload ();
@@ -163,46 +163,46 @@ namespace Banshee.Podcasting.Gui
 
         public virtual void Remove (IEnumerable<T> fe)
         {
-            lock (sync) {        
+            lock (sync) {
                 foreach (T f in fe) {
                     list.Remove (f);
                 }
-                
+
                 Sort ();
-                Reload ();      
+                Reload ();
             }
         }
 
         public override T this[int index] {
-            get { 
-                lock (sync) {                
+            get {
+                lock (sync) {
                     return (index < list.Count) ? list[index] : default (T);
                 }
             }
         }
 
-        public override int Count { 
-            get { 
-                lock (sync) { 
-                    return list.Count; 
+        public override int Count {
+            get {
+                lock (sync) {
+                    return list.Count;
                 }
             }
         }
-        
+
         public virtual int IndexOf (T item)
         {
-            lock (sync) {            
+            lock (sync) {
                 return list.IndexOf (item);
             }
         }
-        
+
         public virtual void Sort ()
-        {       
-        }        
-        
+        {
+        }
+
         public virtual void Sort (ISortableColumn column)
         {
-            lock (sync) {                
+            lock (sync) {
                 if (column == SortColumn) {
                     column.SortType = (column.SortType == SortType.Ascending) ?
                         SortType.Descending : SortType.Ascending;
@@ -211,7 +211,7 @@ namespace Banshee.Podcasting.Gui
                 }
 
                 Sort ();
-            }         
+            }
         }
     }*/
 }
\ No newline at end of file
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs
index 6e84c12..00fd7a3 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs
@@ -57,61 +57,61 @@ namespace Banshee.Podcasting.Gui
     {
         private uint actions_id;
         private DatabaseSource last_source;
-        
+
         public PodcastActions (PodcastSource source) : base (ServiceManager.Get<InterfaceActionService> (), "Podcast")
         {
             AddImportant (
                 new ActionEntry (
                     "PodcastUpdateAllAction", Stock.Refresh,
                      Catalog.GetString ("Check for New Episodes"), null,//"<control><shift>U",
-                     Catalog.GetString ("Refresh All Podcasts"), 
+                     Catalog.GetString ("Refresh All Podcasts"),
                      OnPodcastUpdateAll
                 ),
                 new ActionEntry (
                     "PodcastAddAction", Stock.Add,
-                     Catalog.GetString ("Subscribe to Podcast..."),"<control><shift>F", 
+                     Catalog.GetString ("Subscribe to Podcast..."),"<control><shift>F",
                      Catalog.GetString ("Subscribe to a new podcast"),
                      OnPodcastAdd
-                )         
+                )
             );
-            
+
             Add (
-                new ActionEntry("PodcastFeedPopupAction", null, 
+                new ActionEntry("PodcastFeedPopupAction", null,
                     String.Empty, null, null, OnFeedPopup),
-                    
+
                 new ActionEntry (
                     "PodcastDeleteAction", Stock.Delete,
                      Catalog.GetString ("Unsubscribe and Delete"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastDelete
                 ),
                 new ActionEntry (
                     "PodcastUpdateFeedAction", Stock.Refresh,
                      Catalog.GetString ("Check for New Episodes"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastUpdate
                 ),
                 new ActionEntry (
                     "PodcastDownloadAllAction", Stock.Save,
                      Catalog.GetString ("Download All Episodes"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastDownloadAllEpisodes
                 ),
                 new ActionEntry (
                     "PodcastHomepageAction", Stock.JumpTo,
                      Catalog.GetString ("Visit Podcast Homepage"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastHomepage
                 ),
                 new ActionEntry (
                     "PodcastPropertiesAction", Stock.Properties,
                      Catalog.GetString ("Properties"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastProperties
                 ),
                 new ActionEntry (
                     "PodcastItemMarkNewAction", null,
-                     Catalog.GetString ("Mark as New"), 
+                     Catalog.GetString ("Mark as New"),
                      null, String.Empty,
                      OnPodcastItemMarkNew
                 ),
@@ -124,37 +124,37 @@ namespace Banshee.Podcasting.Gui
                     "PodcastItemDownloadAction", Stock.Save,
                      /* Translators: this is a verb used as a button name, not a noun*/
                      Catalog.GetString ("Download Podcast(s)"),
-                     "<control><shift>D", String.Empty, 
+                     "<control><shift>D", String.Empty,
                      OnPodcastItemDownload
                 ),
                 new ActionEntry (
                     "PodcastItemCancelAction", Stock.Cancel,
                      Catalog.GetString ("Cancel Download"),
-                     "<control><shift>C", String.Empty, 
+                     "<control><shift>C", String.Empty,
                      OnPodcastItemCancel
                 ),
                 new ActionEntry (
                     "PodcastItemDeleteFileAction", Stock.Remove,
                      Catalog.GetString ("Remove Downloaded File(s)"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastItemDeleteFile
                 ),
                 new ActionEntry (
                     "PodcastItemLinkAction", Stock.JumpTo,
                      Catalog.GetString ("Visit Website"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastItemLink
                 ),
                 new ActionEntry (
                     "PodcastItemPropertiesAction", Stock.Properties,
                      Catalog.GetString ("Properties"),
-                     null, String.Empty, 
+                     null, String.Empty,
                      OnPodcastItemProperties
                 )
             );
 
             this["PodcastAddAction"].ShortLabel = Catalog.GetString ("Subscribe to Podcast");
-            
+
             actions_id = Actions.UIManager.AddUiFromResource ("GlobalUI.xml");
             Actions.AddActionGroup (this);
 
@@ -170,7 +170,7 @@ namespace Banshee.Podcasting.Gui
         }
 
 #region State Event Handlers
-        
+
         private void HandleActiveSourceChanged (SourceEventArgs args)
         {
             if (last_source != null) {
@@ -244,7 +244,7 @@ namespace Banshee.Podcasting.Gui
                 );
             }
         }
-        
+
         private void UpdateFeedActions ()
         {
             if (IsPodcastSource) {
@@ -263,7 +263,7 @@ namespace Banshee.Podcasting.Gui
                 );
             }
         }
-        
+
         private void SubscribeToPodcast (Uri uri, FeedAutoDownload syncPreference)
         {
             FeedsManager.Instance.FeedManager.CreateFeed (uri.ToString (), syncPreference);
@@ -276,7 +276,7 @@ namespace Banshee.Podcasting.Gui
 
 #endregion
 
-                
+
 #region Action Handlers
 
         private void OnFeedPopup (object o, EventArgs args)
@@ -289,24 +289,24 @@ namespace Banshee.Podcasting.Gui
         }
 
         private void RunSubscribeDialog ()
-        {        
+        {
             Uri feedUri = null;
             FeedAutoDownload syncPreference;
-            
+
             PodcastSubscribeDialog subscribeDialog = new PodcastSubscribeDialog ();
-            
+
             ResponseType response = (ResponseType) subscribeDialog.Run ();
             syncPreference = subscribeDialog.SyncPreference;
-            
+
             subscribeDialog.Destroy ();
 
             if (response == ResponseType.Ok) {
                 string url = subscribeDialog.Url.Trim ().Trim ('/');
-                
+
                 if (String.IsNullOrEmpty (subscribeDialog.Url)) {
                     return;
                 }
-                
+
 				if (!TryParseUrl (url, out feedUri)) {
                     HigMessageDialog.RunHigMessageDialog (
                         null,
@@ -317,19 +317,19 @@ namespace Banshee.Podcasting.Gui
                         Catalog.GetString ("Podcast URL is invalid.")
                     );
 				} else {
-				    SubscribeToPodcast (feedUri, syncPreference); 
+				    SubscribeToPodcast (feedUri, syncPreference);
 				}
-            }        
+            }
         }
-        
-        /*private void RunConfirmDeleteDialog (bool feed, 
-                                             int selCount, 
-                                             out bool delete, 
+
+        /*private void RunConfirmDeleteDialog (bool feed,
+                                             int selCount,
+                                             out bool delete,
                                              out bool deleteFiles)
         {
-            
+
             delete = false;
-            deleteFiles = false;        
+            deleteFiles = false;
             string header = null;
             int plural = (feed | (selCount > 1)) ? 2 : 1;
 
@@ -338,27 +338,27 @@ namespace Banshee.Podcasting.Gui
             } else {
                 header = Catalog.GetPluralString ("Delete episode?", "Delete episodes?", selCount);
             }
-                
+
             HigMessageDialog md = new HigMessageDialog (
                 ServiceManager.Get<GtkElementsService> ("GtkElementsService").PrimaryWindow,
-                DialogFlags.DestroyWithParent, 
+                DialogFlags.DestroyWithParent,
                 MessageType.Question,
-                ButtonsType.None, header, 
+                ButtonsType.None, header,
                 Catalog.GetPluralString (
                     "Would you like to delete the associated file?",
-                    "Would you like to delete the associated files?", plural                
+                    "Would you like to delete the associated files?", plural
                 )
             );
-            
+
             md.AddButton (Stock.Cancel, ResponseType.Cancel, true);
             md.AddButton (
                 Catalog.GetPluralString (
                     "Keep File", "Keep Files", plural
                 ), ResponseType.No, false
             );
-            
+
             md.AddButton (Stock.Delete, ResponseType.Yes, false);
-            
+
             try {
                 switch ((ResponseType)md.Run ()) {
                 case ResponseType.Yes:
@@ -367,12 +367,12 @@ namespace Banshee.Podcasting.Gui
                 case ResponseType.No:
                     delete = true;
                     break;
-                }                
+                }
             } finally {
                 md.Destroy ();
-            }       
+            }
         }*/
-        
+
 		private bool TryParseUrl (string url, out Uri uri)
 		{
 			uri = null;
@@ -381,35 +381,35 @@ namespace Banshee.Podcasting.Gui
             try {
                 uri = new Uri (url);
 				
-				if (uri.Scheme == Uri.UriSchemeHttp || 
+				if (uri.Scheme == Uri.UriSchemeHttp ||
 				    uri.Scheme == Uri.UriSchemeHttps) {
 					ret = true;
 				}
             } catch {}
-            
+
             return ret;			
 		}
 
         /*private void OnFeedSelectionChangedHandler (object sender, EventArgs e)
         {
             lock (sync) {
-                if (!disposed || disposing) {              
+                if (!disposed || disposing) {
                     if (source.FeedModel.SelectedItems.Count == 0) {
                         source.FeedModel.Selection.Select (0);
                     }
-                    
+
                     if (source.FeedModel.Selection.Contains (0)) {
                         itemModel.FilterOnFeed (Feed.All);
                     } else {
                         itemModel.FilterOnFeeds (source.FeedModel.CopySelectedItems ());
                     }
-                    
+
                     itemModel.Selection.Clear ();
                 }
             }
         }
-        
-        private void OnPodcastItemRowActivatedHandler (object sender, 
+
+        private void OnPodcastItemRowActivatedHandler (object sender,
                                                        RowActivatedArgs<PodcastItem> e)
         {
             lock (sync) {
@@ -426,21 +426,21 @@ namespace Banshee.Podcasting.Gui
         {
             RunSubscribeDialog ();
         }
-        
+
         private void OnPodcastUpdate (object sender, EventArgs e)
         {
             foreach (Feed feed in ActiveFeedModel.SelectedItems) {
                 feed.Update ();
             }
-        }        
-        
+        }
+
         private void OnPodcastUpdateAll (object sender, EventArgs e)
         {
             foreach (Feed feed in Feed.Provider.FetchAll ()) {
                 feed.Update ();
             }
-        }      
-        
+        }
+
         private void OnPodcastDelete (object sender, EventArgs e)
         {
             foreach (Feed feed in ActiveFeedModel.SelectedItems) {
@@ -449,7 +449,7 @@ namespace Banshee.Podcasting.Gui
                 }
             }
         }
-        
+
         private void OnPodcastDownloadAllEpisodes (object sender, EventArgs e)
         {
             foreach (Feed feed in ActiveFeedModel.SelectedItems) {
@@ -474,8 +474,8 @@ namespace Banshee.Podcasting.Gui
             Feed feed = ActiveFeedModel.FocusedItem;
             if (feed != null && !String.IsNullOrEmpty (feed.Link)) {
                 Banshee.Web.Browser.Open (feed.Link);
-            }   
-        }   
+            }
+        }
 
         private void OnPodcastProperties (object sender, EventArgs e)
         {
@@ -483,33 +483,33 @@ namespace Banshee.Podcasting.Gui
             if (feed != null) {
                 new PodcastFeedPropertiesDialog (feed).Run ();
             }
-        }  
+        }
 
         private void OnPodcastItemProperties (object sender, EventArgs e)
         {
                 /*ReadOnlyCollection<PodcastItem> items = itemModel.CopySelectedItems ();
-                
+
                 if (items != null && items.Count == 1) {
                     new PodcastPropertiesDialog (items[0]).Run ();
-                } */                
-        } 
+                } */
+        }
 
         private void OnPodcastItemMarkNew (object sender, EventArgs e)
         {
             MarkPodcastItemSelection (false);
         }
-        
+
         private void OnPodcastItemMarkOld (object sender, EventArgs e)
         {
             MarkPodcastItemSelection (true);
-        }     
-        
-        private void MarkPodcastItemSelection (bool markRead) 
+        }
+
+        private void MarkPodcastItemSelection (bool markRead)
         {
             TrackInfo new_selection_track = ActiveDbSource.TrackModel [ActiveDbSource.TrackModel.Selection.LastIndex + 1];
-            
+
             PodcastService.IgnoreItemChanges = true;
-            
+
             bool any = false;
             foreach (PodcastTrackInfo track in PodcastTrackInfo.From (GetSelectedItems ())) {
                 if (track.Item.IsRead != markRead) {
@@ -523,12 +523,12 @@ namespace Banshee.Podcasting.Gui
                     any = true;
                 }
             }
-            
+
             PodcastService.IgnoreItemChanges = false;
-            
+
             if (any) {
                 ActiveDbSource.Reload ();
-                
+
                 // If we just removed all of the selected items from our view, we should select the
                 // item after the last removed item
                 if (ActiveDbSource.TrackModel.Selection.Count == 0 && new_selection_track != null) {
@@ -541,28 +541,28 @@ namespace Banshee.Podcasting.Gui
                 }
             }
         }
-        
+
         private void OnPodcastItemCancel (object sender, EventArgs e)
         {
             /*
-                if (!disposed || disposing) {                    
+                if (!disposed || disposing) {
                     ReadOnlyCollection<PodcastItem> items = itemModel.CopySelectedItems ();
 
                     if (items != null) {
                         foreach (PodcastItem pi in items) {
                             pi.Enclosure.CancelAsyncDownload ();
                         }
-                    }                
+                    }
                 }*/
-        }        
-        
+        }
+
         private void OnPodcastItemDownload (object sender, EventArgs e)
         {
             foreach (PodcastTrackInfo pi in PodcastTrackInfo.From (GetSelectedItems ())) {
                 pi.Enclosure.AsyncDownload ();
             }
         }
-        
+
         private void OnPodcastItemLink (object sender, EventArgs e)
         {
             PodcastTrackInfo track = PodcastTrackInfo.From (ActiveDbSource.TrackModel.FocusedItem);
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastEpisodePage.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastEpisodePage.cs
index f2f3cd6..82574c9 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastEpisodePage.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastEpisodePage.cs
@@ -55,7 +55,7 @@ namespace Banshee.Podcasting.Gui
             ShadowType = ShadowType.None;
             HscrollbarPolicy = PolicyType.Never;
             VscrollbarPolicy = PolicyType.Automatic;
-            
+
             box = new VBox ();
             box.BorderWidth = 6;
             box.Spacing = 12;
@@ -64,15 +64,15 @@ namespace Banshee.Podcasting.Gui
             box.PackStart (author,      false, false, 0);
             box.PackStart (published,   false, false, 0);
             box.PackStart (description, true, true, 0);
-            
+
             AddWithViewport (box);
             ShowAll ();
         }
-        
+
         public void Initialize (TrackEditorDialog dialog)
         {
         }
-        
+
         public void LoadTrack (EditorTrackInfo track)
         {
             BorderWidth = 2;
@@ -100,23 +100,23 @@ namespace Banshee.Podcasting.Gui
                 GLib.Markup.EscapeText (info)
             );
         }
-        
+
         public int Order {
             get { return 40; }
         }
-        
+
         public string Title {
             get { return Catalog.GetString ("Episode Details"); }
         }
-        
-        public PageType PageType { 
+
+        public PageType PageType {
             get { return PageType.View; }
         }
-        
-        public Gtk.Widget TabWidget { 
+
+        public Gtk.Widget TabWidget {
             get { return null; }
         }
-        
+
         public Gtk.Widget Widget {
             get { return this; }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastFeedView.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastFeedView.cs
index 6455c1b..9ef40e7 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastFeedView.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastFeedView.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections.ObjectModel;
 
@@ -54,11 +54,11 @@ namespace Banshee.Podcasting.Gui
             ColumnCellPodcast renderer = new ColumnCellPodcast ();
             column_controller.Add (new Column ("Podcast", renderer, 1.0));
             //column_controller.Add (new Column (null, "Activity", new FeedActivityColumnCell ("Activity"), 0.00, true, 26, 26));
-            
+
             ColumnController = column_controller;
             RowHeightProvider = renderer.ComputeRowHeight;
         }
-        
+
         protected override bool OnPopupMenu ()
         {
             ServiceManager.Get<InterfaceActionService> ().FindAction ("Podcast.PodcastFeedPopupAction").Activate ();
@@ -69,55 +69,55 @@ namespace Banshee.Podcasting.Gui
     /*public class PodcastFeedView : ListView<Feed>
     {
         private ColumnController columnController;
-        
+
         public PodcastFeedView () : base ()
         {
             columnController = new ColumnController ();
-            
+
             SortableColumn podcastFeedTitleColumn = new SortableColumn (
-                    Catalog.GetString ("Podcasts"), 
-                    new ColumnCellText ("Title", true), 0.97, 
+                    Catalog.GetString ("Podcasts"),
+                    new ColumnCellText ("Title", true), 0.97,
                     PodcastSortKeys.Title, true
-            );         
+            );
 
             columnController.AddRange (
                 new Column (null, "Activity", new FeedActivityColumnCell ("Activity"), 0.00, true, 26, 26),
-                podcastFeedTitleColumn                
+                podcastFeedTitleColumn
             );
-            
+
             RulesHint = true;
             podcastFeedTitleColumn.SortType = Hyena.Data.SortType.Descending;
-            columnController.DefaultSortColumn = podcastFeedTitleColumn;            
+            columnController.DefaultSortColumn = podcastFeedTitleColumn;
             ColumnController = columnController;
-        }    
-        
+        }
+
         private Menu allPopup;
         private Menu popupMenu;
         private MenuItem homepageItem;
         private MenuItem propertiesItem;
         private MenuItem updateAllItem;
-        
+
         protected override bool OnPopupMenu ()
         {
             if (popupMenu == null) {
                 UIManager uiManager = ServiceManager.Get<InterfaceActionService> ().UIManager;
-                
+
                 allPopup = uiManager.GetWidget ("/PodcastSourcePopup") as Menu;
                 popupMenu = uiManager.GetWidget ("/PodcastFeedViewPopup") as Menu;
-                
+
                 updateAllItem = uiManager.GetWidget ("/PodcastFeedViewPopup/PodcastUpdateAll") as MenuItem;
                 propertiesItem = uiManager.GetWidget ("/PodcastFeedViewPopup/PodcastProperties") as MenuItem;
                 homepageItem = uiManager.GetWidget ("/PodcastFeedViewPopup/PodcastHomepage") as MenuItem;
             }
-            
+
             Menu popup;
             PodcastFeedModel model = Model as PodcastFeedModel;
-            
+
             ReadOnlyCollection<Feed> feeds = model.CopySelectedItems ();
-            
+
             if (feeds.Count == 0) {
-                popup = allPopup;         
-            } else { 
+                popup = allPopup;
+            } else {
                 if (feeds.Count > 1) {
                     homepageItem.Hide ();
                     propertiesItem.Hide ();
@@ -125,7 +125,7 @@ namespace Banshee.Podcasting.Gui
                     homepageItem.Show ();
                     propertiesItem.Show ();
                 }
-                
+
                 popup = popupMenu;
             }
 
@@ -133,6 +133,6 @@ namespace Banshee.Podcasting.Gui
 
             popup.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
             return true;
-        } 
+        }
     }*/
 }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastItemView.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastItemView.cs
index 6825962..175db08 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastItemView.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastItemView.cs
@@ -5,33 +5,33 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections.ObjectModel;
 
 using Gtk;
 using Mono.Unix;
- 
+
 using Hyena.Data;
 using Hyena.Data.Gui;
 
@@ -50,92 +50,92 @@ namespace Banshee.Podcasting.Gui
     /*public class PodcastItemView : ListView<TrackInfo>
     {
         private PersistentColumnController columnController;
-        
+
         public PodcastItemView () : base ()
         {
             columnController = new PersistentColumnController ("plugins.podcasting.item_view_columns");
-            
+
             SortableColumn podcastTitleSortColumn = new SortableColumn (
-                Catalog.GetString ("Podcast"), 
-                new ColumnCellText ("AlbumTitle", true), 0.35, 
+                Catalog.GetString ("Podcast"),
+                new ColumnCellText ("AlbumTitle", true), 0.35,
                 PodcastItemSortKeys.PodcastTitle, true
             );
-            
+
             columnController.AddRange (
-                new Column (null, Catalog.GetString ("Activity"), new PodcastItemActivityColumn ("Activity"), 0.00, true, 26, 26),            
+                new Column (null, Catalog.GetString ("Activity"), new PodcastItemActivityColumn ("Activity"), 0.00, true, 26, 26),
                 new SortableColumn (Catalog.GetString ("Title"), new ColumnCellText ("TrackTitle", true), 0.30, PodcastItemSortKeys.Title, true),
                 podcastTitleSortColumn,
                 new SortableColumn (Catalog.GetString ("Date"), new ColumnCellDateTime ("ReleaseDate", false), 0.5, PodcastItemSortKeys.PubDate, true)
             );
-            
+
             podcastTitleSortColumn.SortType = Hyena.Data.SortType.Descending;
             columnController.DefaultSortColumn = podcastTitleSortColumn;
-            
+
             ColumnController = columnController;
             columnController.Load ();
-            
+
             RulesHint = true;
-        }  
-        
+        }
+
         private Menu popupMenu;
-        private MenuItem cancelItem;       
-        private MenuItem downloadItem;       
-        private MenuItem linkItem;            
+        private MenuItem cancelItem;
+        private MenuItem downloadItem;
+        private MenuItem linkItem;
         private MenuItem propertiesItem;
-        
+
         private MenuItem markNewItem;
         private MenuItem markOldItem;
-        
+
         protected override bool OnPopupMenu ()
         {
             if (popupMenu == null) {
                 UIManager uiManager = ServiceManager.Get<InterfaceActionService> ().UIManager;
-                
+
                 popupMenu = uiManager.GetWidget ("/PodcastItemViewPopup") as Menu;
-                
+
                 cancelItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemCancel") as MenuItem;
-                downloadItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemDownload") as MenuItem; 
-                
+                downloadItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemDownload") as MenuItem;
+
                 propertiesItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemProperties") as MenuItem;
-                linkItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemLink") as MenuItem;                
-            
+                linkItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemLink") as MenuItem;
+
                 markNewItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemMarkNew") as MenuItem;
-                markOldItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemMarkOld") as MenuItem;              
+                markOldItem = uiManager.GetWidget ("/PodcastItemViewPopup/PodcastItemMarkOld") as MenuItem;
             }
-            
+
             DatabaseTrackListModel model = Model as DatabaseTrackListModel;
-            
-            bool showCancel = false;            
+
+            bool showCancel = false;
             bool showDownload = false;
-            
+
             bool showMarkNew = false;
             bool showMarkOld = false;
-            
+
             ModelSelection<Banshee.Collection.TrackInfo> items = model.SelectedItems;
-            
+
             foreach (PodcastTrackInfo i in items) {
                 if (showCancel && showDownload && showMarkNew && showMarkOld) {
                     break;
                 } else if (!showDownload &&
                     i.Activity == PodcastItemActivity.None ||
-                    i.Activity == PodcastItemActivity.DownloadFailed                     
+                    i.Activity == PodcastItemActivity.DownloadFailed
                 ) {
                     showDownload = true;
                 } else if (!showCancel &&
                     i.Activity == PodcastItemActivity.Downloading ||
                     i.Activity == PodcastItemActivity.DownloadPending ||
-                    i.Activity == PodcastItemActivity.DownloadPaused                     
+                    i.Activity == PodcastItemActivity.DownloadPaused
                 ) {
                     showCancel = true;
                 }/* else if ((!showMarkNew || !showMarkOld)) {
                     if (i.New) {
                         showMarkOld = true;
-                    } else { 
+                    } else {
                         showMarkNew = true;
                     }
                 }*/
             /*}
-            
+
             if (items.Count > 1) {
                 linkItem.Hide ();
                 propertiesItem.Hide ();
@@ -143,15 +143,15 @@ namespace Banshee.Podcasting.Gui
                 linkItem.Show ();
                 propertiesItem.Show ();
             }
-            
+
             if (showCancel) {
                 cancelItem.Show ();
             } else {
                 cancelItem.Hide ();
-            }            
-            
+            }
+
             if (showDownload) {
-                downloadItem.Show ();   
+                downloadItem.Show ();
             } else {
                 downloadItem.Hide ();
             }
@@ -159,17 +159,17 @@ namespace Banshee.Podcasting.Gui
             if (showMarkNew) {
                 markNewItem.Show ();
             } else {
-                markNewItem.Hide ();            
+                markNewItem.Hide ();
             }
 
             if (showMarkOld) {
                 markOldItem.Show ();
             } else {
-                markOldItem.Hide ();            
+                markOldItem.Hide ();
             }
 
             popupMenu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
-            
+
             return true;
         }
     }*/
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastFeedPropertiesDialog.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastFeedPropertiesDialog.cs
index 1d168b5..3a30d04 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastFeedPropertiesDialog.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastFeedPropertiesDialog.cs
@@ -7,21 +7,21 @@
 /*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastPropertiesDialog.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastPropertiesDialog.cs
index 81e0672..823b7be 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastPropertiesDialog.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastPropertiesDialog.cs
@@ -7,21 +7,21 @@
 /*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -49,9 +49,9 @@ namespace Banshee.Podcasting.Gui
             {
                 throw new ArgumentNullException ("pi");
             }
-            
-            this.pi = pi;            
-            
+
+            this.pi = pi;
+
             Title = track.TrackTitle;
             BuildWindow ();
             //IconThemeUtils.SetWindowIcon (this);
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs
index afecbce..02ef1e6 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -46,7 +46,7 @@ namespace Banshee.Podcasting.Gui
     {
         private Entry url_entry;
         private Gtk.AccelGroup accelGroup;
-        private SyncPreferenceComboBox syncCombo;        
+        private SyncPreferenceComboBox syncCombo;
 
         public string Url {
             get { return url_entry.Text; }
@@ -78,11 +78,11 @@ namespace Banshee.Podcasting.Gui
             box.Spacing = 12;
 
             Image image = new Image (IconThemeUtils.LoadIcon (48, "podcast"));
-            
+
             image.Yalign = 0.0f;
-            
+
             box.PackStart(image, false, true, 0);
-            
+
             VBox contentBox = new VBox();
             contentBox.Spacing = 12;
 
@@ -91,7 +91,7 @@ namespace Banshee.Podcasting.Gui
                 "<big><b>{0}</b></big>",
                 GLib.Markup.EscapeText (Catalog.GetString ("Subscribe to New Podcast"))
             );
-            
+
             header.Justify = Justification.Left;
             header.SetAlignment (0.0f, 0.0f);
 
@@ -99,7 +99,7 @@ namespace Banshee.Podcasting.Gui
             message.Markup = Catalog.GetString (
                 "Please enter the URL of the podcast to which you would like to subscribe."
             );
-            
+
             message.Wrap = true;
 
             VBox sync_vbox = new VBox ();
@@ -111,7 +111,7 @@ namespace Banshee.Podcasting.Gui
             Label sync_text = new Label (
                 Catalog.GetString ("When new episodes are available:  ")
             );
-            
+
             sync_text.SetAlignment (0.0f, 0.0f);
             sync_text.Justify = Justification.Left;
 
@@ -142,7 +142,7 @@ namespace Banshee.Podcasting.Gui
             table.RowSpacing = 6;
             table.ColumnSpacing = 12;
 
-            table.Attach ( 
+            table.Attach (
                 new Label (Catalog.GetString ("URL:")), 0, 1, 0, 1,
                 AttachOptions.Shrink, AttachOptions.Shrink, 0, 0
             );
@@ -150,7 +150,7 @@ namespace Banshee.Podcasting.Gui
             table.Attach (
                 url_entry, 1, 2, 0, 1,
                 AttachOptions.Expand | AttachOptions.Fill,
-                AttachOptions.Shrink, 0, 0            
+                AttachOptions.Shrink, 0, 0
             );
 
             table.Attach (
@@ -168,7 +168,7 @@ namespace Banshee.Podcasting.Gui
 
             AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel, true);
             AddButton (Catalog.GetString ("Subscribe"), ResponseType.Ok, true);
-            
+
             box.ShowAll ();
             VBox.Add (box);
         }
@@ -185,7 +185,7 @@ namespace Banshee.Podcasting.Gui
                 DefaultResponse = response;
 
                 button.AddAccelerator (
-                    "activate", accelGroup, 
+                    "activate", accelGroup,
                     (uint) Gdk.Key.Escape, 0, Gtk.AccelFlags.Visible
                 );
             }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/SyncPreferenceComboBox.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/SyncPreferenceComboBox.cs
index 3a3c4b6..7d8bc8d 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/SyncPreferenceComboBox.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/SyncPreferenceComboBox.cs
@@ -8,24 +8,24 @@
 /*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using Gtk;
 using System;
 using Mono.Unix;
@@ -43,7 +43,7 @@ namespace Banshee.Podcasting.Gui
             Catalog.GetString ("Let me decide which episodes to download")
         };
 
-        public FeedAutoDownload ActiveSyncPreference 
+        public FeedAutoDownload ActiveSyncPreference
         {
             get { return (FeedAutoDownload) Active; }
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastSourceContents.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastSourceContents.cs
index 66a6a60..813b44d 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastSourceContents.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastSourceContents.cs
@@ -5,32 +5,32 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
-using Gtk; 
- 
-using Hyena.Data; 
+using Gtk;
+
+using Hyena.Data;
 using Hyena.Data.Gui;
 
 using Migo.Syndication;
@@ -57,7 +57,7 @@ namespace Banshee.Podcasting.Gui
         private PodcastFeedView feed_view;
         private PodcastUnheardFilterView unheard_view;
         private DownloadStatusFilterView download_view;
-        
+
         public PodcastSourceContents () : base ("podcast")
         {
         }
@@ -69,7 +69,7 @@ namespace Banshee.Podcasting.Gui
             SetupFilterView (download_view = new DownloadStatusFilterView ());
             SetupFilterView (feed_view = new PodcastFeedView ());
         }
-        
+
         protected override void ClearFilterSelections ()
         {
             if (feed_view.Model != null) {
@@ -95,11 +95,11 @@ namespace Banshee.Podcasting.Gui
             if (track_source == null) {
                 return false;
             }
-            
+
             this.source = source;
-            
+
             SetModel (track_view, track_source.TrackModel);
-            
+
             foreach (IListModel model in track_source.CurrentFilters) {
                 if (model is PodcastFeedModel)
                     SetModel (feed_view, (model as IListModel<Feed>));
@@ -110,7 +110,7 @@ namespace Banshee.Podcasting.Gui
                 else
                     Hyena.Log.DebugFormat ("PodcastContents got non-feed filter model: {0}", model);
             }
-            
+
             track_view.HeaderVisible = true;
             //Console.WriteLine ("PSC.set_source 2");
             return true;
@@ -130,16 +130,16 @@ namespace Banshee.Podcasting.Gui
 
         #endregion
 
-        #region ITrackModelSourceContents implementation 
-        
+        #region ITrackModelSourceContents implementation
+
         public IListView<TrackInfo> TrackView {
             get { return track_view; }
         }
-        
-        #endregion 
+
+        #endregion
 
         public static readonly SchemaEntry<int> VPanedPositionSchema = new SchemaEntry<int> (
             "plugins.podcasting", "vpaned_position", 120, "VPaned Position", ""
-        );     
+        );
     }
 }
\ No newline at end of file
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/ItmsPodcast.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/ItmsPodcast.cs
index 2831e27..29a85a7 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/ItmsPodcast.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/ItmsPodcast.cs
@@ -34,7 +34,7 @@ using Banshee.Web;
 namespace Banshee.Podcasting
 {
     public class ItmsPodcast
-    {  
+    {
         private string itms_uri;
         private string feed_url;
         private string xml;
@@ -44,7 +44,7 @@ namespace Banshee.Podcasting
             Fetch (itmsUri, 2);
 
             feed_url = GetString ("feedURL");
-            
+
             // <key>podcastName</key>
             // <string>This Week in Django - MP3 Edition</string>
         }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImageFetchJob.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImageFetchJob.cs
index d1408bf..c1242d3 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImageFetchJob.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImageFetchJob.cs
@@ -52,25 +52,25 @@ namespace Banshee.Podcasting
     public class PodcastImageFetchJob : MetadataServiceJob
     {
         private Feed feed;
-        
+
         public PodcastImageFetchJob (Feed feed) : base ()
         {
             this.feed = feed;
         }
-        
+
         public override void Run()
         {
             Fetch ();
         }
-        
+
         public void Fetch ()
         {
             if (feed.ImageUrl == null) {
                 return;
             }
-            
+
             string cover_art_id = PodcastService.ArtworkIdFor (feed);
-            
+
             if (cover_art_id == null) {
                 return;
             } else if (CoverArtSpec.CoverExists (cover_art_id)) {
@@ -78,7 +78,7 @@ namespace Banshee.Podcasting
             } else if (!InternetConnected) {
                 return;
             }
-            
+
             if (SaveHttpStreamCover (new Uri (feed.ImageUrl), cover_art_id, null)) {
                 Banshee.Sources.Source src = ServiceManager.SourceManager.ActiveSource;
                 if (src != null && (src is PodcastSource || src.Parent is PodcastSource)) {
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImportManager.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImportManager.cs
index 716622e..d928526 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImportManager.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImportManager.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  PodcastImportManager.cs
  *
  *  Copyright (C) 2008 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -42,15 +42,15 @@ namespace Banshee.Podcasting
         {
             ForceCopy = false;
         }
-        
+
         public DatabaseTrackInfo ImportPodcast (string uri)
         {
             DatabaseTrackInfo track = null;
 
             track = ImportTrack (uri);
-            
+
             if (track != null) {
-                track.MediaAttributes |= TrackMediaAttributes.Podcast; 
+                track.MediaAttributes |= TrackMediaAttributes.Podcast;
                 track.Save ();
             }
 
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs
index 2e64e2d..2092f22 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs
@@ -53,20 +53,20 @@ using Banshee.Configuration;
 namespace Banshee.Podcasting
 {
     public partial class PodcastService : IExtensionService, IDisposable, IDelayedInitializeService
-    {  
+    {
         private readonly string tmp_download_path = Paths.Combine (Paths.ExtensionCacheRoot, "podcasting", "partial-downloads");
         private uint refresh_timeout_id = 0;
-            
+
         private bool disposed;
-        
+
         private DownloadManager download_manager;
         private DownloadManagerInterface download_manager_iface;
-        
+
         private FeedsManager feeds_manager;
-        
+
         private PodcastSource source;
         //private PodcastImportManager import_manager;
-        
+
         private readonly object sync = new object ();
 
         public PodcastService ()
@@ -83,7 +83,7 @@ namespace Banshee.Podcasting
                     ServiceManager.DbConnection.Execute(@"
                         INSERT INTO PodcastSyndications (FeedID, Title, Url, Link,
                             Description, ImageUrl, LastBuildDate, AutoDownload, IsSubscribed)
-                            SELECT 
+                            SELECT
                                 PodcastFeedID,
                                 Title,
                                 FeedUrl,
@@ -99,7 +99,7 @@ namespace Banshee.Podcasting
                     ServiceManager.DbConnection.Execute(@"
                         INSERT INTO PodcastItems (ItemID, FeedID, Title, Link, PubDate,
                             Description, Author, Active, Guid)
-                            SELECT 
+                            SELECT
                                 PodcastID,
                                 PodcastFeedID,
                                 Title,
@@ -115,7 +115,7 @@ namespace Banshee.Podcasting
                     // Note: downloaded*3 is because the value was 0 or 1, but is now 0 or 3 (FeedDownloadStatus.None/Downloaded)
                     ServiceManager.DbConnection.Execute(@"
                         INSERT INTO PodcastEnclosures (ItemID, LocalPath, Url, MimeType, FileSize, DownloadStatus)
-                            SELECT 
+                            SELECT
                                 PodcastID,
                                 LocalPath,
                                 Url,
@@ -187,7 +187,7 @@ namespace Banshee.Podcasting
                 DatabaseConfigurationClient.Client.Set<int> ("Podcast", "Version", 6);
             }
         }
-        
+
         private void MigrateDownloadCache ()
         {
             string old_download_dir = Path.Combine (Paths.ApplicationData, "downloads");
@@ -200,7 +200,7 @@ namespace Banshee.Podcasting
                 Directory.Delete (old_download_dir);
             }
         }
-        
+
         private void ReplaceNewlines (string table, string column)
         {
             string cmd = String.Format ("UPDATE {0} SET {1}=replace({1}, ?, ?)", table, column);
@@ -208,17 +208,17 @@ namespace Banshee.Podcasting
             ServiceManager.DbConnection.Execute (cmd, "\n", String.Empty);
             ServiceManager.DbConnection.Execute (cmd, "\r", String.Empty);
         }
-        
+
         public void Initialize ()
         {
         }
-        
+
         public void DelayedInitialize ()
         {
             download_manager = new DownloadManager (2, tmp_download_path);
             download_manager_iface = new DownloadManagerInterface (download_manager);
-            download_manager_iface.Initialize ();    
-            
+            download_manager_iface.Initialize ();
+
             feeds_manager = new FeedsManager (ServiceManager.DbConnection, download_manager, null);
 
             // Migrate data from 0.13.2 podcast tables, if they exist
@@ -268,43 +268,43 @@ namespace Banshee.Podcasting
             // Every 10 minutes try to refresh again
             refresh_timeout_id = Application.RunTimeout (1000 * 60 * 10, RefreshFeeds);
         }
-        
+
         bool disposing;
         public void Dispose ()
-        {                        
+        {
             lock (sync) {
                 if (disposing | disposed) {
                     return;
                 } else {
-                    disposing = true;               
+                    disposing = true;
                 }
             }
 
             Application.IdleTimeoutRemove (refresh_timeout_id);
             refresh_timeout_id = 0;
-            
+
             ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
             ServiceManager.Get<DBusCommandService> ().ArgumentPushed -= OnCommandLineArgument;
 
             if (download_manager_iface != null) {
-                download_manager_iface.Dispose ();                
+                download_manager_iface.Dispose ();
                 download_manager_iface = null;
-            }                
-           
-            if (feeds_manager != null) {   
+            }
+
+            if (feeds_manager != null) {
                 feeds_manager.Dispose ();
                 feeds_manager = null;
             }
 
-            if (download_manager != null) {            
+            if (download_manager != null) {
                 download_manager.Dispose ();
                 download_manager = null;
             }
-            
-            DisposeInterface ();            
-            
+
+            DisposeInterface ();
+
             lock (sync) {
-                disposing = false;            
+                disposing = false;
                 disposed = true;
             }
         }
@@ -323,13 +323,13 @@ namespace Banshee.Podcasting
             }));
             return true;
         }
-        
+
         private void OnCommandLineArgument (string uri, object value, bool isFile)
         {
             if (!isFile || String.IsNullOrEmpty (uri)) {
                 return;
             }
-            
+
             // Handle OPML files
             if (uri.Contains ("opml") || uri.EndsWith (".miro") || uri.EndsWith (".democracy")) {
                 try {
@@ -366,7 +366,7 @@ namespace Banshee.Podcasting
                 });
             }
         }
-        
+
         private void RefreshArtworkFor (Feed feed)
         {
             if (feed.LastDownloadTime != DateTime.MinValue && !CoverArtSpec.CoverExists (PodcastService.ArtworkIdFor (feed))) {
@@ -378,7 +378,7 @@ namespace Banshee.Podcasting
         {
             return DatabaseTrackInfo.Provider.FetchFirstMatching ("PrimarySourceID = ? AND ExternalID = ?", source.DbId, item_id);
         }
-        
+
         private void OnItemAdded (FeedItem item)
         {
             if (item.Enclosure != null) {
@@ -393,7 +393,7 @@ namespace Banshee.Podcasting
                 item.Delete (false);
             }
         }
-        
+
         private void OnItemRemoved (FeedItem item)
         {
             DatabaseTrackInfo track = GetTrackByItemId (item.DbId);
@@ -401,9 +401,9 @@ namespace Banshee.Podcasting
                 DatabaseTrackInfo.Provider.Delete (track);
             }
         }
-        
+
         internal static bool IgnoreItemChanges = false;
-        
+
         private void OnItemChanged (FeedItem item)
         {
             if (IgnoreItemChanges) {
@@ -419,7 +419,7 @@ namespace Banshee.Podcasting
                 }
             }
         }
-        
+
         private void OnFeedsChanged (object o, EventArgs args)
         {
             source.Reload ();
@@ -431,14 +431,14 @@ namespace Banshee.Podcasting
                 source.FeedModel.Add (args.Feed);
             }
         }
-        
+
         private void OnFeedRemovedHandler (object sender, FeedEventArgs args)
         {
             lock (sync) {
                 source.FeedModel.Remove (args.Feed);
                 args.Feed.Delete ();
             }
-        }        
+        }
 
         private void OnFeedRenamedHandler (object sender, FeedEventArgs args)
         {
@@ -448,7 +448,7 @@ namespace Banshee.Podcasting
         }
 
         private void OnFeedUpdatingHandler (object sender, FeedEventArgs args)
-        {   
+        {
             lock (sync) {
                 source.FeedModel.Reload ();
             }
@@ -457,11 +457,11 @@ namespace Banshee.Podcasting
         private void OnFeedDownloadCountChangedHandler (object sender, FeedDownloadCountChangedEventArgs args)
         {
             lock (sync) {
-                source.FeedModel.Reload ();                
+                source.FeedModel.Reload ();
             }
         }*/
 
-        /*private void OnFeedItemAddedHandler (object sender, FeedItemEventArgs args) 
+        /*private void OnFeedItemAddedHandler (object sender, FeedItemEventArgs args)
         {
             lock (sync) {
                 if (args.Item != null) {
@@ -473,7 +473,7 @@ namespace Banshee.Podcasting
                 }
             }
         }*/
-        
+
         public void AddFeedItem (FeedItem item)
         {
             if (item.Enclosure != null) {
@@ -482,11 +482,11 @@ namespace Banshee.Podcasting
                 pi.Track.Save (true);
                 source.NotifyUser ();
             } else {
-                item.Delete (false);                      
+                item.Delete (false);
             }
         }
 
-        /*private void OnFeedItemRemovedHandler (object sender, FeedItemEventArgs e) 
+        /*private void OnFeedItemRemovedHandler (object sender, FeedItemEventArgs e)
         {
             lock (sync) {
                 if (e.Item != null) {
@@ -496,35 +496,35 @@ namespace Banshee.Podcasting
                         PodcastItem.DeleteWithFeedId (fi.DbId);
                     }
                 }
-                
+
                 source.Reload ();
             }
-        } 
+        }
 
-        private void OnFeedItemCountChanged (object sender, 
+        private void OnFeedItemCountChanged (object sender,
                                              FeedItemCountChangedEventArgs e)
         {
             //UpdateCount ();
         }*/
 
-        /*private void OnFeedDownloadCompletedHandler (object sender, 
-                                                     FeedDownloadCompletedEventArgs e) 
+        /*private void OnFeedDownloadCompletedHandler (object sender,
+                                                     FeedDownloadCompletedEventArgs e)
         {
             lock (sync) {
-                Feed f = feedDict[e.Feed.DbId]; 
-                
+                Feed f = feedDict[e.Feed.DbId];
+
                 if (e.Error == FeedDownloadError.None) {
                     if (String.IsNullOrEmpty(e.Feed.LocalEnclosurePath)) {
                         e.Feed.LocalEnclosurePath = Path.Combine (
                             tmp_enclosure_path, SanitizeName (e.Feed.Name)
                         );
-                    }                    
-                
+                    }
+
                     if (f.AutoDownload != FeedAutoDownload.None) {
                         ReadOnlyCollection<FeedItem> items = e.Feed.Items;
-                        
+
                         if (items != null) {
-                            if (f.AutoDownload == FeedAutoDownload.One && 
+                            if (f.AutoDownload == FeedAutoDownload.One &&
                                 items.Count > 0) {
                                 items[0].Enclosure.AsyncDownload ();
                             } else {
@@ -535,73 +535,73 @@ namespace Banshee.Podcasting
                         }
                     }
                 }
-                
-                source.Reload ();                
+
+                source.Reload ();
             }
         }*/
-        
+
         /*private void OnTaskAssociated (object sender, EventArgs e)
         {
             lock (sync) {
                 source.Reload ();
             }
-        }        
-        
-        private void OnTaskStatusChanged (object sender, 
+        }
+
+        private void OnTaskStatusChanged (object sender,
         								  TaskStatusChangedEventArgs e)
         {
             lock (sync) {
                 source.Reload ();
             }
-        }        
-        
-        private void TaskStartedHandler (object sender, 
+        }
+
+        private void TaskStartedHandler (object sender,
                                          TaskEventArgs<HttpFileDownloadTask> e)
         {
             lock (sync) {
                 source.Reload ();
             }
-        }        
-        
-        private void OnTaskStoppedHandler (object sender, 
+        }
+
+        private void OnTaskStoppedHandler (object sender,
                                            TaskEventArgs<HttpFileDownloadTask> e)
         {
             // TODO merge
             lock (sync) {
                 if (e.Task != null && e.Task.Status == TaskStatus.Succeeded) {
                     FeedEnclosure enc = e.Task.UserState as FeedEnclosure;
-                
+
                     if (enc != null) {
                         FeedItem item = enc.Item;
                         DatabaseTrackInfo track = null;
-                        
-                        
-                        
+
+
+
                         if (itemDict.ContainsKey (item.DbId)) {
                             PodcastItem pi = itemDict[item.DbId];
-                            track = import_manager.ImportPodcast (enc.LocalPath);                            
+                            track = import_manager.ImportPodcast (enc.LocalPath);
 
                             if (track != null) {
                                 pi.Track = track;
                                 pi.New = true;
                                 pi.Save ();
                             }
-                            
-                            item.IsRead = true;                            
+
+                            item.IsRead = true;
                         }
-                    }                    
+                    }
                 }
-                
+
                 source.Reload ();
             }
-        }*/    
+        }*/
 
         private void OnPlayerEvent (PlayerEventArgs args)
         {
             lock (sync) {
                 //source.Reload ();
             }
-        }          
+        }
 
         public static string ArtworkIdFor (Feed feed)
         {
@@ -613,10 +613,10 @@ namespace Banshee.Podcasting
         {
             // remove /, : and \ from names
             return s.Replace ('/', '_').Replace ('\\', '_').Replace (':', '_').Replace (' ', '_');
-        }*/   
-        
+        }*/
+
         public string ServiceName {
-            get { return "PodcastService"; } 
+            get { return "PodcastService"; }
         }
     }
 }
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService_Interface.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService_Interface.cs
index b54d588..8248da0 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService_Interface.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService_Interface.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  PodcastService_Interface.cs
  *
  *  Copyright (C) 2008 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -54,9 +54,9 @@ using Banshee.Podcasting.Data;
 namespace Banshee.Podcasting
 {
     public partial class PodcastService
-    {                 
+    {
         private PodcastActions actions = null;
-         
+
         private void InitializeInterface ()
         {
             source = new PodcastSource ();
@@ -64,14 +64,14 @@ namespace Banshee.Podcasting
             ServiceManager.SourceManager.AddSource (source);
             actions = new PodcastActions (source);
         }
-        
+
         private void DisposeInterface ()
         {
             if (source != null) {
                 ServiceManager.SourceManager.RemoveSource (source);
                 source = null;
             }
-            
+
             if (actions != null) {
                 actions.Dispose ();
                 actions = null;
diff --git a/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteAudioService.cs b/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteAudioService.cs
index f8b7347..1ac9dc6 100644
--- a/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteAudioService.cs
+++ b/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteAudioService.cs
@@ -56,7 +56,7 @@ namespace Banshee.RemoteAudio
         public ReadOnlyCollection<RemoteSpeaker> Speakers {
             get { lock (speakers) { return speakers.AsReadOnly (); } }
         }
-        
+
         void IExtensionService.Initialize ()
         {
             Network network = ServiceManager.Get<Network> ();
@@ -70,14 +70,14 @@ namespace Banshee.RemoteAudio
             RemoteAudioActions a = new RemoteAudioActions ();
             a.Register ();
         }
-  
+
         public void Dispose ()
         {
             if (browser != null) {
                 browser.Dispose ();
             }
         }
-        
+
         string Banshee.ServiceStack.IService.ServiceName {
             get { return "RemoteAudioService"; }
         }
@@ -89,7 +89,7 @@ namespace Banshee.RemoteAudio
             browser.ServiceRemoved += OnServiceRemoved;
             browser.Browse (0, AddressProtocol.Any, RAOP_MDNS_TYPE, "local");
         }
-        
+
         private void OnNetworkStateChanged (object o, NetworkStateChangedArgs args)
         {
             if (!args.Connected) {
@@ -119,7 +119,7 @@ namespace Banshee.RemoteAudio
             if (service == null) {
                 return;
             }
-    
+
             Log.DebugFormat ("Resolved RAOP service at {0}", service.HostEntry.AddressList[0]);
 
             ITxtRecord record = service.TxtRecord;
diff --git a/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteSpeaker.cs b/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteSpeaker.cs
index f94d39f..857c478 100644
--- a/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteSpeaker.cs
+++ b/src/Extensions/Banshee.RemoteAudio/Banshee.RemoteAudio/RemoteSpeaker.cs
@@ -37,7 +37,7 @@ namespace Banshee.RemoteAudio
         public string Name {
             get { return name; }
         }
-        
+
         private IPAddress host;
         public IPAddress Host {
             get { return host; }
diff --git a/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSource.cs b/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSource.cs
index 6e67cc2..0cce6c9 100644
--- a/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSource.cs
+++ b/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSource.cs
@@ -40,11 +40,11 @@ namespace Banshee.Sample
         public SampleSource () : base ("sample", Catalog.GetString ("Sample"), 1000)
         {
             TypeUniqueId = "sample";
-            
+
             Properties.SetString ("Icon.Name", "face-kiss");
             Properties.Set<ISourceContents> ("Nereid.SourceContents", new SampleSourceInterface (this));
             Properties.Set<bool> ("Nereid.SourceContents.HeaderVisible", false);
-            
+
             ServiceManager.SourceManager.AddSource (this);
         }
     }
diff --git a/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSourceInterface.cs b/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSourceInterface.cs
index 04f6f71..3a15bc0 100644
--- a/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSourceInterface.cs
+++ b/src/Extensions/Banshee.Sample/Banshee.Sample/SampleSourceInterface.cs
@@ -41,38 +41,38 @@ using Banshee.Sources.Gui;
 namespace Banshee.Sample
 {
     public class SampleSourceInterface : VBox, ISourceContents
-    {   
+    {
         private SampleSource source;
-        
+
         public SampleSourceInterface (SampleSource source)
         {
             this.source = source;
-            
+
             Button button = new Button ("Waiting...");
             button.Show ();
-            
+
             PackStart (button, true, true, 0);
-            
+
             ServiceManager.PlayerEngine.TrackIntercept += delegate (TrackInfo track) {
                 if (System.IO.Path.GetExtension (track.Uri.LocalPath) != ".wmv") {
                     // We don't care about non wmv URIs, so let the engine take care of it
                     return false;
                 }
-                
+
                 // Stop the engine if playing
                 ServiceManager.PlayerEngine.Close ();
-                
+
                 // Update our UI and switch to our source
                 button.Label = track.ToString ();
                 ServiceManager.SourceManager.SetActiveSource (source);
-                
+
                 // Tell the engine that we've handled this track
                 return true;
             };
         }
-        
+
 #region ISourceContents
-        
+
         public bool SetSource (ISource src)
         {
             return source is SampleSource;
@@ -89,7 +89,7 @@ namespace Banshee.Sample
         public Widget Widget {
             get { return this; }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole/SqlActions.cs b/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole/SqlActions.cs
index 99ed2c9..33ba26a 100644
--- a/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole/SqlActions.cs
+++ b/src/Extensions/Banshee.SqlDebugConsole/Banshee.SqlDebugConsole/SqlActions.cs
@@ -84,7 +84,7 @@ namespace Banshee.SqlDebugConsole
             base.Dispose ();
         }
 
-#region Action Handlers 
+#region Action Handlers
 
         private void OnShowConsole (object sender, EventArgs args)
         {
diff --git a/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentFileDownloadTask.cs b/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentFileDownloadTask.cs
index b47489d..f76183e 100644
--- a/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentFileDownloadTask.cs
+++ b/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentFileDownloadTask.cs
@@ -37,26 +37,26 @@ namespace Banshee.Torrent
     {
         private MonoTorrent.DBus.IDownloader downloader;
         private MonoTorrent.DBus.ITorrent torrent;
-        
+
         public TorrentFileDownloadTask (string remoteUri, string localPath, object userState)
             : base (remoteUri, localPath.Substring (0, localPath.Length - 8), userState)
         {
         }
-        
+
         public override long BytesReceived {
             get {
                 if (downloader == null)
                     return 0;
-                
-                return (long)(downloader.GetProgress () / 100.0 * torrent.GetSize ()); 
+
+                return (long)(downloader.GetProgress () / 100.0 * torrent.GetSize ());
             }
         }
-        
+
         public override void CancelAsync ()
         {
             if (downloader == null)
                 return;
-            
+
             downloader.Stop ();
             SetStatus (TaskStatus.Cancelled);
             OnTaskCompleted (null, true);
@@ -68,9 +68,9 @@ namespace Banshee.Torrent
             TorrentService s = Banshee.ServiceStack.ServiceManager.Get<TorrentService> ();
             downloader = s.Download (RemoteUri.ToString (), Path.GetDirectoryName (LocalPath));
             torrent = TorrentService.Bus.GetObject <ITorrent> (TorrentService.BusName, downloader.GetTorrent ());
-            
+
             downloader.StateChanged += OnDownloaderStateChanged;
-            
+
             // There are no events on the torrent IDownloader to indicate when the stats have updated
             // Manually ping the SetProgress event, otherwise migo never notices progress changing
             System.Threading.ThreadPool.QueueUserWorkItem (UpdateProgress);
@@ -80,16 +80,16 @@ namespace Banshee.Torrent
         {
             if (downloader == null)
                 return;
-            
+
             SetStatus (TaskStatus.Paused);
             downloader.Pause ();
         }
-        
+
         public override void Resume ()
         {
             if (downloader == null)
                 return;
-            
+
             SetStatus (TaskStatus.Running);
             downloader.Stop ();
         }
@@ -98,7 +98,7 @@ namespace Banshee.Torrent
         {
             if (downloader == null)
                 return;
-            
+
             SetStatus (TaskStatus.Stopped);
             OnTaskCompleted (null, false);
             downloader.Stop ();
@@ -115,7 +115,7 @@ namespace Banshee.Torrent
 
         private void UpdateProgress (object o)
         {
-            while (Progress != 100 && 
+            while (Progress != 100 &&
                    (Status == TaskStatus.Running || Status == TaskStatus.Paused || Status == TaskStatus.Running)) {
                 System.Threading.Thread.Sleep (2000);
                 SetProgress ((int)downloader.GetProgress ());
diff --git a/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentService.cs b/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentService.cs
index e59a21a..0d6380b 100644
--- a/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentService.cs
+++ b/src/Extensions/Banshee.Torrent/Banshee.Torrent/TorrentService.cs
@@ -46,17 +46,17 @@ namespace Banshee.Torrent
         public static readonly string BusName = "org.monotorrent.dbus";
         public static readonly string EngineName = "banshee";
         public static readonly ObjectPath ServicePath = new ObjectPath ("/org/monotorrent/service");
-        
+
         private Bus bus;
         private IEngine engine;
         private ITorrentService service;
         /*private IEngineSettings settings;
-        
+
         public int MaxDownloadSpeed {
             get { return settings.GetGlobalMaxDownloadSpeed (); }
             set { settings.SetGlobalMaxDownloadSpeed (value); }
         }
-        
+
         public int MaxUploadSpeed {
             get { return settings.GetGlobalMaxUploadSpeed (); }
             set { settings.SetGlobalMaxUploadSpeed (value); }
@@ -65,17 +65,17 @@ namespace Banshee.Torrent
         public string ServiceName {
             get { return "TorrentService"; }
         }
-        
+
         public TorrentService ()
         {
         }
-        
+
         public IDownloader Download (string torrentUri, string savePath)
         {
             // Get the associated downloader
             ObjectPath path = engine.RegisterTorrent (torrentUri, savePath);
             IDownloader downloader = bus.GetObject <IDownloader> (BusName, path);
-            
+
             if (downloader.GetState () == TorrentState.Stopped) {
                 downloader.Start ();
                 Console.WriteLine ("Started: {0}", downloader.GetPath ());
@@ -84,7 +84,7 @@ namespace Banshee.Torrent
             }
             return downloader;
         }
-        
+
         public void Dispose ()
         {
             if (service != null) {
@@ -119,18 +119,18 @@ namespace Banshee.Torrent
                     return;
                 }
             }
-            
+
             // Register with Migo so we can handle .torrent downloads
             if (!RegisteredInMigo)
                 Migo.DownloadCore.DownloadManager.Register ("torrent", typeof (TorrentFileDownloadTask));
             RegisteredInMigo = true;
-            
+
             // Get the engine from DBus which we will use to download torrents with
             // and load the details for any existing downloads
             engine = bus.GetObject <IEngine> (BusName, service.GetEngine (EngineName));
             CheckExistingDownloads ();
         }
-        
+
         private void CheckExistingDownloads ()
         {
             //UserJobManager manager = (UserJobManager)ServiceManager.Get ("UserJobManager");
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/CellContext.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/CellContext.cs
index bd4a625..f25ec0d 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/CellContext.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/CellContext.cs
@@ -43,7 +43,7 @@ namespace Hyena.Data.Gui
         private Gdk.Rectangle clip;
         private bool text_as_foreground = false;
         private bool opaque = true;
-        
+
         public Cairo.Context Context {
             get { return context; }
             set { context = value; }
@@ -73,12 +73,12 @@ namespace Hyena.Data.Gui
             get { return area; }
             set { area = value; }
         }
-        
+
         public Gdk.Rectangle Clip {
             get { return clip; }
             set { clip = value; }
         }
-        
+
         public bool TextAsForeground {
             get { return text_as_foreground; }
             set { text_as_foreground = value; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/Column.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/Column.cs
index fd84faa..5840764 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/Column.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/Column.cs
@@ -40,40 +40,40 @@ namespace Hyena.Data.Gui
     {
         private ColumnCell header_cell;
         private List<ColumnCell> cells = new List<ColumnCell> ();
-        
+
         private int min_width = 0;
         private int max_width = Int32.MaxValue;
-        
+
         public Column (ColumnDescription description) :
             this (description, new ColumnCellText (description.Property, true))
         {
         }
-        
+
         public Column (ColumnDescription description, ColumnCell cell) :
             this (description.Title, cell, description.Width, description.Visible)
         {
         }
-        
+
         public Column (string title, ColumnCell cell, double width)
             : this (title, cell, width, true)
         {
         }
-        
-        public Column (string title, ColumnCell cell, double width, bool visible) 
+
+        public Column (string title, ColumnCell cell, double width, bool visible)
             : this (null, title, cell, width, visible)
         {
         }
-        
+
         public Column (ColumnCell headerCell, string title, ColumnCell cell, double width)
             : this (headerCell, title, cell, width, true)
         {
         }
-        
+
         public Column (ColumnCell headerCell, string title, ColumnCell cell, double width, bool visible)
             : this (headerCell, title, cell, width, visible, 0, Int32.MaxValue)
         {
         }
-        
+
         public Column (ColumnCell headerCell, string title, ColumnCell cell, double width, bool visible, int minWidth, int maxWidth)
             : base (cell.Property, title, width, visible)
         {
@@ -89,47 +89,47 @@ namespace Hyena.Data.Gui
 
             PackStart (cell);
         }
-        
+
         private Column HeaderCellDataHandler ()
         {
             return this;
         }
-        
+
         public void PackStart (ColumnCell cell)
         {
             cells.Insert (0, cell);
         }
-        
+
         public void PackEnd (ColumnCell cell)
         {
             cells.Add (cell);
         }
-        
-        public ColumnCell GetCell (int index) 
+
+        public ColumnCell GetCell (int index)
         {
             return cells[index];
         }
-        
+
         public void RemoveCell (int index)
         {
             cells.RemoveAt (index);
         }
-        
+
         public void ClearCells ()
         {
             cells.Clear ();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return cells.GetEnumerator ();
         }
-        
+
         IEnumerator<ColumnCell> IEnumerable<ColumnCell>.GetEnumerator ()
         {
             return cells.GetEnumerator ();
         }
-        
+
         public ColumnCell HeaderCell {
             get { return header_cell; }
             set { header_cell = value; }
@@ -170,7 +170,7 @@ namespace Hyena.Data.Gui
                 }
             }
         }
-        
+
         public int MinWidth {
             get { return min_width; }
             set {
@@ -180,7 +180,7 @@ namespace Hyena.Data.Gui
                 }
             }
         }
-        
+
         public int MaxWidth {
             get { return max_width; }
             set {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs
index 237fb23..65b3904 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs
@@ -66,9 +66,9 @@ namespace Hyena.Data.Gui
                 bound_object = null;
                 return;
             }
-            
+
             bound_object_parent = item;
-            
+
             if (property != null) {
                 EnsurePropertyInfo ();
                 bound_object = property_info.GetValue (bound_object_parent, null);
@@ -86,7 +86,7 @@ namespace Hyena.Data.Gui
         {
             EnsurePropertyInfo (property, ref property_info, bound_object_parent);
         }
-        
+
         private void EnsurePropertyInfo (string name, ref PropertyInfo prop, object obj)
         {
             if (prop == null || prop.ReflectedType != obj.GetType ()) {
@@ -99,15 +99,15 @@ namespace Hyena.Data.Gui
                 }
             }
         }
-        
+
         public virtual void NotifyThemeChange ()
         {
         }
-        
+
         protected Type BoundType {
             get { return bound_object.GetType (); }
         }
-        
+
         protected object BoundObject {
             get { return bound_object; }
             set {
@@ -117,18 +117,18 @@ namespace Hyena.Data.Gui
                 }
             }
         }
-        
+
         protected object BoundObjectParent {
             get { return bound_object_parent; }
         }
-        
+
         public abstract void Render (CellContext context, StateType state, double cellWidth, double cellHeight);
-        
+
         public bool Expand {
             get { return expand; }
             set { expand = value; }
         }
-        
+
         public string Property {
             get { return property; }
             set {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs
index 80539bd..bfed4bd 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs
@@ -30,91 +30,91 @@ using System;
 using Gtk;
 
 namespace Hyena.Data.Gui
-{    
+{
     public class ColumnCellCheckBox : ColumnCell, IInteractiveCell, ISizeRequestCell
-    {   
+    {
         public ColumnCellCheckBox (string property, bool expand) : base (property, expand)
         {
         }
-            
+
         public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
         {
             int cell_width = context.Area.Width - 2 * Xpad;
             int cell_height = context.Area.Height - 2 * Ypad;
             int x = context.Area.X + xpad + ((cell_width - Size) / 2);
             int y = context.Area.Y + ypad + ((cell_height - Size) / 2);
-            
+
             if (state == StateType.Normal && last_hover_bound == BoundObjectParent) {
                 state = StateType.Prelight;
             }
-            
-            Style.PaintCheck (context.Widget.Style, context.Drawable, state, 
-                Value ? ShadowType.In : ShadowType.Out, 
+
+            Style.PaintCheck (context.Widget.Style, context.Drawable, state,
+                Value ? ShadowType.In : ShadowType.Out,
                 context.Clip, context.Widget, "cellcheck", x, y, Size, Size);
         }
-        
+
         private object last_pressed_bound;
         private object last_hover_bound;
-        
+
         public bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt)
         {
             if (pressed) {
                 last_pressed_bound = BoundObjectParent;
                 return false;
             }
-            
+
             if (last_pressed_bound != null && last_pressed_bound.Equals (BoundObjectParent)) {
                 Value = !Value;
                 last_pressed_bound = null;
             }
-            
+
             return true;
         }
-        
+
         public bool MotionEvent (int x, int y, Gdk.EventMotion evnt)
         {
             if (last_hover_bound == BoundObjectParent) {
                 return false;
             }
-            
+
             last_hover_bound = BoundObjectParent;
             return true;
         }
-        
+
         public bool PointerLeaveEvent ()
         {
             last_hover_bound = null;
             return true;
         }
-        
+
         public void GetWidthRange (Pango.Layout layout, out int min, out int max)
         {
             min = max = 2 * Xpad + Size;
         }
-        
+
         private bool restrict_size = true;
         public bool RestrictSize {
             get { return restrict_size; }
             set { restrict_size = value; }
         }
-        
+
         private bool Value {
             get { return (bool)BoundObject; }
             set { BoundObject = value; }
         }
-        
+
         private int size = 13;
         public int Size {
             get { return size; }
             set { size = value; }
         }
-        
+
         private int xpad = 2;
         public int Xpad {
             get { return xpad; }
             set { xpad = value; }
         }
-        
+
         public int ypad = 2;
         public int Ypad {
             get { return ypad; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs
index 4675c69..e1efeb2 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs
@@ -33,38 +33,38 @@ using Hyena.Gui;
 using Hyena.Gui.Theming;
 
 namespace Hyena.Data.Gui
-{    
+{
     public class ColumnCellRating : ColumnCell, IInteractiveCell, ISizeRequestCell
-    {   
+    {
         private object last_pressed_bound;
         private object hover_bound;
         private int hover_value;
         private Gdk.Rectangle actual_area_hack;
         private RatingRenderer renderer = new RatingRenderer ();
-        
+
         public ColumnCellRating (string property, bool expand) : base (property, expand)
         {
             Xpad = 0;
         }
-            
+
         public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
         {
             Gdk.Rectangle area = new Gdk.Rectangle (0, 0, context.Area.Width, context.Area.Height);
-            
+
             // FIXME: Compute font height and set to renderer.Size
 
             renderer.Value = Value;
             bool is_hovering = hover_bound == BoundObjectParent && hover_bound != null;
-            renderer.Render (context.Context, area, context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state), 
+            renderer.Render (context.Context, area, context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state),
                 is_hovering, is_hovering, hover_value, 0.8, 0.45, 0.35);
-            
+
             // FIXME: Something is hosed in the view when computing cell dimensions
             // The cell width request is always smaller than the actual cell, so
-            // this value is preserved once we compute it from rendering so the 
+            // this value is preserved once we compute it from rendering so the
             // input stuff can do its necessary calculations
             actual_area_hack = area;
         }
-        
+
         public bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt)
         {
             if (ReadOnly) {
@@ -75,15 +75,15 @@ namespace Hyena.Data.Gui
                 last_pressed_bound = BoundObjectParent;
                 return false;
             }
-            
+
             if (last_pressed_bound == BoundObjectParent) {
                 Value = RatingFromPosition (x);
                 last_pressed_bound = null;
             }
-            
+
             return true;
         }
-        
+
         public bool MotionEvent (int x, int y, Gdk.EventMotion evnt)
         {
             if (ReadOnly) {
@@ -91,63 +91,63 @@ namespace Hyena.Data.Gui
             }
 
             int value = RatingFromPosition (x);
-        
+
             if (hover_bound == BoundObjectParent && value == hover_value) {
                 return false;
             }
-            
+
             hover_bound = BoundObjectParent;
             hover_value = value;
             return true;
         }
-        
+
         public bool PointerLeaveEvent ()
         {
             hover_bound = null;
             hover_value = MinRating - 1;
             return true;
         }
-        
+
         public void GetWidthRange (Pango.Layout layout, out int min, out int max)
         {
             min = max = renderer.Width;
         }
-        
+
         private int RatingFromPosition (double x)
         {
             return renderer.RatingFromPosition (actual_area_hack, x);
         }
-        
+
         private bool restrict_size = true;
         public bool RestrictSize {
             get { return restrict_size; }
             set { restrict_size = value; }
         }
-        
+
         private int Value {
             get { return BoundObject == null ? MinRating : renderer.ClampValue ((int)BoundObject); }
             set { BoundObject = renderer.ClampValue (value); }
         }
-        
+
         public int MaxRating {
             get { return renderer.MaxRating; }
             set { renderer.MaxRating = value; }
         }
-        
+
         public int MinRating {
             get { return renderer.MinRating; }
             set { renderer.MinRating = value; }
         }
-        
+
         public int RatingLevels {
             get { return renderer.RatingLevels; }
         }
-        
+
         public int Xpad {
             get { return renderer.Xpad; }
             set { renderer.Xpad = value; }
         }
-        
+
         public int Ypad {
             get { return renderer.Ypad; }
             set { renderer.Ypad = value; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs
index 5819189..0a2c126 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs
@@ -41,7 +41,7 @@ namespace Hyena.Data.Gui
         internal const int Spacing = 4;
 
         public delegate string DataHandler ();
-    
+
         private Pango.Weight font_weight = Pango.Weight.Normal;
         private Pango.EllipsizeMode ellipsize_mode = Pango.EllipsizeMode.End;
         private Pango.Alignment alignment = Pango.Alignment.Left;
@@ -51,7 +51,7 @@ namespace Hyena.Data.Gui
         protected string MinString, MaxString;
         private string last_text = null;
         private bool use_markup;
-        
+
         public ColumnCellText (string property, bool expand) : base (property, expand)
         {
         }
@@ -70,7 +70,7 @@ namespace Hyena.Data.Gui
         {
             SetMinMaxStrings (min_max, min_max);
         }
-        
+
         public void SetMinMaxStrings (object min, object max)
         {
             // Set the min/max strings from the min/max objects
@@ -78,14 +78,14 @@ namespace Hyena.Data.Gui
             MaxString = GetText (max);
             RestrictSize = true;
         }
-    
+
         public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
         {
             UpdateText (context, cellWidth);
             if (String.IsNullOrEmpty (last_text)) {
                 return;
             }
-            
+
             context.Context.Rectangle (0, 0, cellWidth, cellHeight);
             context.Context.Clip ();
             context.Context.MoveTo (Spacing, ((int)cellHeight - text_height) / 2);
@@ -135,7 +135,7 @@ namespace Hyena.Data.Gui
             UpdateText (cellContext, columnWidth);
             return IsEllipsized ? GLib.Markup.EscapeText (Text) : null;
         }
-        
+
         protected virtual string GetText (object obj)
         {
             return obj == null ? String.Empty : obj.ToString ();
@@ -157,11 +157,11 @@ namespace Hyena.Data.Gui
         public string Text {
             get { return last_text; }
         }
-        
+
         protected int TextWidth {
             get { return text_width; }
         }
-        
+
         protected int TextHeight {
             get { return text_height; }
         }
@@ -170,22 +170,22 @@ namespace Hyena.Data.Gui
             get { return text_format; }
             set { text_format = value; }
         }
-        
+
         public Pango.Alignment Alignment {
             get { return alignment; }
             set { alignment = value; }
         }
-        
+
         public virtual Pango.Weight FontWeight {
             get { return font_weight; }
             set { font_weight = value; }
         }
-        
+
         public virtual Pango.EllipsizeMode EllipsizeMode {
             get { return ellipsize_mode; }
             set { ellipsize_mode = value; }
         }
-        
+
         internal static int ComputeRowHeight (Widget widget)
         {
             int w_width, row_height;
@@ -196,13 +196,13 @@ namespace Hyena.Data.Gui
             return row_height + 8;
         }
 
-        #region ISizeRequestCell implementation 
-        
+        #region ISizeRequestCell implementation
+
         public void GetWidthRange (Pango.Layout layout, out int min, out int max)
         {
             int height;
             min = max = -1;
-            
+
             if (!String.IsNullOrEmpty (MinString)) {
                 UpdateLayout (layout, MinString);
                 layout.GetPixelSize (out min, out height);
@@ -217,7 +217,7 @@ namespace Hyena.Data.Gui
                 //Console.WriteLine ("for {0} got max {1} for {2}", this, max, MaxString);
             }
         }
-        
+
         private bool restrict_size = false;
         public bool RestrictSize {
             get { return restrict_size; }
@@ -228,7 +228,7 @@ namespace Hyena.Data.Gui
             get { return use_markup; }
             set { use_markup = value; }
         }
-        
+
         #endregion
     }
 }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs
index 723e673..1ebb336 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs
@@ -31,28 +31,28 @@ using System.Collections;
 using System.Collections.Generic;
 
 namespace Hyena.Data.Gui
-{    
+{
     public class ColumnController : IEnumerable<Column>
     {
         private List<Column> columns = new List<Column> ();
         private ISortableColumn default_sort_column;
         private ISortableColumn sort_column;
-        
+
         protected List<Column> Columns {
             get { return columns; }
         }
-        
+
         public event EventHandler Updated;
-        
+
         protected virtual void OnVisibilitiesChanged ()
         {
             OnUpdated ();
         }
-        
+
         protected virtual void OnWidthsChanged ()
         {
         }
-        
+
         protected void OnUpdated ()
         {
             EventHandler handler = Updated;
@@ -60,7 +60,7 @@ namespace Hyena.Data.Gui
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void Clear ()
         {
             lock (this) {
@@ -70,7 +70,7 @@ namespace Hyena.Data.Gui
                 }
                 columns.Clear ();
             }
-            
+
             OnUpdated ();
         }
 
@@ -94,10 +94,10 @@ namespace Hyena.Data.Gui
                 column.WidthChanged += OnColumnWidthChanged;
                 columns.Add (column);
             }
-            
+
             OnUpdated ();
         }
-        
+
         public void Insert (Column column, int index)
         {
             lock (this) {
@@ -105,10 +105,10 @@ namespace Hyena.Data.Gui
                 column.WidthChanged += OnColumnWidthChanged;
                 columns.Insert (index, column);
             }
-            
+
             OnUpdated ();
         }
-        
+
         public void Remove (Column column)
         {
             lock (this) {
@@ -116,10 +116,10 @@ namespace Hyena.Data.Gui
                 column.WidthChanged -= OnColumnWidthChanged;
                 columns.Remove (column);
             }
-            
+
             OnUpdated ();
         }
-        
+
         public void Remove (int index)
         {
             lock (this) {
@@ -128,10 +128,10 @@ namespace Hyena.Data.Gui
                 column.WidthChanged -= OnColumnWidthChanged;
                 columns.RemoveAt (index);
             }
-            
+
             OnUpdated ();
         }
-        
+
         public void Reorder (int index, int newIndex)
         {
             lock (this) {
@@ -139,42 +139,42 @@ namespace Hyena.Data.Gui
                 columns.RemoveAt (index);
                 columns.Insert (newIndex, column);
             }
-            
+
             OnUpdated ();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return columns.GetEnumerator ();
         }
-        
+
         IEnumerator<Column> IEnumerable<Column>.GetEnumerator ()
         {
             return columns.GetEnumerator ();
         }
-        
+
         public int IndexOf (Column column)
         {
             lock (this) {
                 return columns.IndexOf (column);
             }
         }
-        
+
         public Column [] ToArray ()
         {
             return columns.ToArray ();
         }
-        
+
         private void OnColumnVisibilityChanged (object o, EventArgs args)
         {
             OnVisibilitiesChanged ();
         }
-        
+
         private void OnColumnWidthChanged (object o, EventArgs args)
         {
             OnWidthsChanged ();
         }
-        
+
         public Column this[int index] {
             get { return columns[index]; }
         }
@@ -188,11 +188,11 @@ namespace Hyena.Data.Gui
             get { return sort_column; }
             set { sort_column = value;}
         }
-        
+
         public int Count {
             get { return columns.Count; }
         }
-        
+
         public virtual bool EnableColumnMenu {
             get { return false; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
index f396666..a5d17b6 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
@@ -37,7 +37,7 @@ namespace Hyena.Data.Gui
     public class ColumnHeaderCellText : ColumnCellText, IHeaderCell
     {
         public delegate Column DataHandler ();
-        
+
         private DataHandler data_handler;
         private bool has_sort;
 
@@ -56,7 +56,7 @@ namespace Hyena.Data.Gui
             if (data_handler == null) {
                 return;
             }
-            
+
             if (!has_sort) {
                 base.Render (context, state, cellWidth, cellHeight);
                 return;
@@ -78,17 +78,17 @@ namespace Hyena.Data.Gui
                 context.Theme.DrawArrow (context.Context, arrow_alloc, sort_type);
             }
         }
-        
+
         protected override string GetText (object obj)
         {
             return data_handler ().Title;
         }
-        
+
         public bool HasSort {
             get { return has_sort; }
             set { has_sort = value; }
         }
-        
+
         public static int GetArrowWidth (int headerHeight)
         {
             return (int)(headerHeight / 3.0) + Spacing;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/IListView.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/IListView.cs
index 18167d5..ac5fab7 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/IListView.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/IListView.cs
@@ -32,13 +32,13 @@ namespace Hyena.Data.Gui
     {
         Hyena.Collections.SelectionProxy SelectionProxy { get; }
         Hyena.Collections.Selection Selection { get; }
-        
+
         void ScrollTo (int index);
         void CenterOn (int index);
         void GrabFocus ();
         ColumnController ColumnController { get; set; }
     }
-    
+
     public interface IListView<T> : IListView
     {
         void SetModel (IListModel<T> model);
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs
index 97fd59b..473bd2a 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs
@@ -30,7 +30,7 @@
 using System;
 
 namespace Hyena.Data.Gui
-{   
+{
     public interface ISizeRequestCell
     {
         bool RestrictSize { get; set; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs
index 7b447ad..ca541cd 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs
@@ -30,7 +30,7 @@
 using System;
 
 namespace Hyena.Data.Gui
-{   
+{
     public interface ITextCell
     {
         Pango.Weight FontWeight { get; set; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs
index e6d61eb..5d02fcc 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs
@@ -48,7 +48,7 @@ namespace Hyena.Data.Gui
                 ITooltipCell cell;
                 Column column;
                 int row_index;
-                
+
                 if (GetEventCell<ITooltipCell> (args.X, args.Y, out cell, out column, out row_index)) {
                     CachedColumn cached_column = GetCachedColumnForColumn (column);
 
@@ -72,7 +72,7 @@ namespace Hyena.Data.Gui
 
                         // TODO not right - could be smaller if at the top/bottom and only partially showing
                         rect.Height = RowHeight;
-                        
+
                         args.Tooltip.Markup = markup;
                         args.Tooltip.TipArea = rect;
                         args.RetVal = true;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs
index 1f5980a..9b5cfb5 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs
@@ -30,25 +30,25 @@ using System;
 using Gtk;
 
 namespace Hyena.Data.Gui
-{    
+{
     public static class ListViewDragDropTarget
     {
         public enum TargetType
         {
             ModelSelection
         }
-        
+
         public static readonly TargetEntry ModelSelection =
             new TargetEntry ("application/x-hyena-data-model-selection", TargetFlags.App,
                 (uint)TargetType.ModelSelection);
     }
-    
+
     public partial class ListView<T> : ListViewBase
     {
         private static TargetEntry [] drag_drop_dest_entries = new TargetEntry [] {
             ListViewDragDropTarget.ModelSelection
         };
-        
+
         protected virtual TargetEntry [] DragDropDestEntries {
             get { return drag_drop_dest_entries; }
         }
@@ -56,7 +56,7 @@ namespace Hyena.Data.Gui
         protected virtual TargetEntry [] DragDropSourceEntries {
             get { return drag_drop_dest_entries; }
         }
-        
+
         private bool is_reorderable = false;
         public bool IsReorderable {
             get { return is_reorderable && IsEverReorderable; }
@@ -76,7 +76,7 @@ namespace Hyena.Data.Gui
                 OnDragDestSet ();
             }
         }
-        
+
         private bool force_drag_source_set = false;
         protected bool ForceDragSourceSet {
             get { return force_drag_source_set; }
@@ -85,7 +85,7 @@ namespace Hyena.Data.Gui
                 OnDragSourceSet ();
             }
         }
-        
+
         private bool force_drag_dest_set = false;
         protected bool ForceDragDestSet {
             get { return force_drag_dest_set; }
@@ -94,7 +94,7 @@ namespace Hyena.Data.Gui
                 OnDragDestSet ();
             }
         }
-        
+
         protected virtual void OnDragDestSet ()
         {
             if (ForceDragDestSet || IsReorderable) {
@@ -103,34 +103,34 @@ namespace Hyena.Data.Gui
                 Gtk.Drag.DestUnset (this);
             }
         }
-        
+
         protected virtual void OnDragSourceSet ()
         {
             if (ForceDragSourceSet || IsReorderable) {
-                Gtk.Drag.SourceSet (this, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask, 
+                Gtk.Drag.SourceSet (this, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
                     DragDropSourceEntries, Gdk.DragAction.Copy | Gdk.DragAction.Move);
             } else {
                 Gtk.Drag.SourceUnset (this);
             }
         }
-        
+
         private uint drag_scroll_timeout_id;
         private uint drag_scroll_timeout_duration = 50;
         private double drag_scroll_velocity;
         private double drag_scroll_velocity_max = 100.0;
         private int drag_reorder_row_index = -1;
         private int drag_reorder_motion_y = -1;
-        
+
         private void StopDragScroll ()
         {
             drag_scroll_velocity = 0.0;
-            
+
             if (drag_scroll_timeout_id > 0) {
                 GLib.Source.Remove (drag_scroll_timeout_id);
                 drag_scroll_timeout_id = 0;
             }
         }
-        
+
         private void OnDragScroll (GLib.TimeoutHandler handler, double threshold, int total, int position)
         {
             if (position < threshold) {
@@ -141,12 +141,12 @@ namespace Hyena.Data.Gui
                 StopDragScroll ();
                 return;
             }
-            
+
             if (drag_scroll_timeout_id == 0) {
                 drag_scroll_timeout_id = GLib.Timeout.Add (drag_scroll_timeout_duration, handler);
             }
         }
-        
+
         protected override bool OnDragMotion (Gdk.DragContext context, int x, int y, uint time)
         {
             if (!IsReorderable) {
@@ -156,20 +156,20 @@ namespace Hyena.Data.Gui
                 InvalidateList ();
                 return false;
             }
-            
+
             drag_reorder_motion_y = y;
             DragReorderUpdateRow ();
-            
+
             OnDragScroll (OnDragVScrollTimeout, Allocation.Height * 0.3, Allocation.Height, y);
-            
+
             return true;
         }
-        
+
         protected override void OnDragLeave (Gdk.DragContext context, uint time)
         {
             StopDragScroll ();
         }
-        
+
         protected override void OnDragEnd (Gdk.DragContext context)
         {
             StopDragScroll ();
@@ -177,28 +177,28 @@ namespace Hyena.Data.Gui
             drag_reorder_motion_y = -1;
             InvalidateList ();
         }
-        
+
         private bool OnDragVScrollTimeout ()
         {
             ScrollTo (VadjustmentValue + (drag_scroll_velocity * drag_scroll_velocity_max));
             DragReorderUpdateRow ();
             return true;
         }
-        
+
         private void DragReorderUpdateRow ()
         {
             int row = GetDragRow (drag_reorder_motion_y);
             if (row != drag_reorder_row_index) {
                 drag_reorder_row_index = row;
                 InvalidateList ();
-            }   
+            }
         }
-        
+
         protected int GetDragRow (int y)
         {
             y = TranslateToListY (y);
             int row = GetRowAtY (y);
-            
+
             if (row == -1) {
                 return -1;
             }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
index a85279a..f9aae51 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
@@ -51,7 +51,7 @@ namespace Hyena.Data.Gui
             public double ElasticWidth;
             public double ElasticPercent;
         }
-        
+
         private static Gdk.Cursor resize_x_cursor = new Gdk.Cursor (Gdk.CursorType.SbHDoubleArrow);
         private static Gdk.Cursor drag_cursor = new Gdk.Cursor (Gdk.CursorType.Fleur);
 
@@ -68,9 +68,9 @@ namespace Hyena.Data.Gui
         private int pressed_column_x_start_hadjustment = -1;
         private bool pressed_column_is_dragging = false;
         private bool pressed_column_drag_started = false;
-        
+
         private Pango.Layout column_layout;
-        
+
         private CachedColumn [] column_cache;
         private List<int> elastic_columns;
 
@@ -81,57 +81,57 @@ namespace Hyena.Data.Gui
         public int MaxWidth {
             get { return (int)max_width + Theme.TotalBorderWidth*2; }
         }
-        
+
 #region Columns
-        
+
         private void InvalidateColumnCache ()
         {
             column_cache = null;
         }
-        
+
         private void GenerateColumnCache ()
         {
             column_cache = new CachedColumn[column_controller.Count];
-            
+
             int i = 0;
             double total = 0.0;
-            
+
             foreach (Column column in column_controller) {
                 if (!column.Visible) {
                     continue;
                 }
-                
+
                 // If we don't already have a MinWidth set, use the width of our Title text
                 column.CalculateWidths (column_layout, HeaderVisible, HeaderHeight);
                 column_cache[i] = new CachedColumn ();
                 column_cache[i].Column = column;
                 column_cache[i].Index = i;
-                
+
                 total += column.Width;
                 i++;
             }
-            
+
             Array.Resize (ref column_cache, i);
-            
+
             double scale_factor = 1.0 / total;
-            
+
             for (i = 0; i < column_cache.Length; i++) {
                 column_cache[i].Column.Width *= scale_factor;
             }
-            
+
             RecalculateColumnSizes ();
         }
-        
+
         private void RegenerateColumnCache ()
         {
             if (column_controller == null) {
                 return;
             }
-            
+
             if (column_cache == null) {
                 GenerateColumnCache ();
             }
-            
+
             for (int i = 0; i < column_cache.Length; i++) {
                 // Calculate this column's proportional share of the width, and set positions (X1/X2)
                 column_cache[i].Width = (int)Math.Round (((double)header_width * column_cache[i].Column.Width));
@@ -140,7 +140,7 @@ namespace Hyena.Data.Gui
                 column_cache[i].ResizeX1 = column_cache[i].X2;
                 column_cache[i].ResizeX2 = column_cache[i].ResizeX1 + 2;
             }
-            
+
             // TODO handle max width
             int index = column_cache.Length - 1;
             if (index >= 0) {
@@ -148,13 +148,13 @@ namespace Hyena.Data.Gui
                 column_cache[index].Width = column_cache[index].X2 - column_cache[index].X1;
             }
         }
-        
+
         private void RecalculateColumnSizes ()
         {
             if (column_cache == null) {
                 return;
             }
-            
+
             ISortable sortable = Model as ISortable;
             sort_column_index = -1;
             int min_header_width = 0;
@@ -187,7 +187,7 @@ namespace Hyena.Data.Gui
             } else {
                 header_width = header_interaction_alloc.Width;
                 resizable = true;
-                
+
                 if (elastic_columns == null) {
                     elastic_columns = new List<int> (column_cache.Length);
                 }
@@ -197,9 +197,9 @@ namespace Hyena.Data.Gui
                     column_cache[i].ElasticWidth = 0.0;
                     column_cache[i].ElasticPercent = column_cache[i].Column.Width * header_width;
                 }
-                
+
                 double remaining_width = RecalculateColumnSizes (header_width, header_width);
-                
+
                 while (Math.Round (remaining_width) != 0.0 && elastic_columns.Count > 0) {
                     double total_elastic_width = 0.0;
                     foreach (int i in elastic_columns) {
@@ -207,7 +207,7 @@ namespace Hyena.Data.Gui
                     }
                     remaining_width = RecalculateColumnSizes (remaining_width, total_elastic_width);
                 }
-                
+
                 for (int i = 0; i < column_cache.Length; i++) {
                     column_cache[i].Column.Width = column_cache[i].ElasticWidth / (double)header_width;
                 }
@@ -222,16 +222,16 @@ namespace Hyena.Data.Gui
             list_width = tmp_width;
             max_width = tmp_max;
         }
-        
+
         private double RecalculateColumnSizes (double total_width, double total_elastic_width)
         {
             double remaining_width = total_width;
-            
+
             for (int index = 0; index < elastic_columns.Count; index++) {
                 int i = elastic_columns[index];
                 double percent = column_cache[i].ElasticPercent / total_elastic_width;
                 double delta = total_width * percent;
-                
+
                 // TODO handle max widths
                 double width = column_cache[i].ElasticWidth + delta;
                 if (width < column_cache[i].MinWidth) {
@@ -243,11 +243,11 @@ namespace Hyena.Data.Gui
                     elastic_columns.RemoveAt (index);
                     index--;
                 }
-                
+
                 remaining_width -= delta;
                 column_cache[i].ElasticWidth += delta;
             }
-            
+
             if (Math.Abs (total_width - remaining_width) < 1.0 || remaining_width == Double.NaN) {
                 Hyena.Log.Warning ("Forcefully breaking out of RCS loop b/c change in total_width less than 1.0");
                 return 0;
@@ -255,7 +255,7 @@ namespace Hyena.Data.Gui
 
             return Math.Round (remaining_width);
         }
-        
+
         protected virtual void OnColumnControllerUpdated ()
         {
             InvalidateColumnCache ();
@@ -294,7 +294,7 @@ namespace Hyena.Data.Gui
                 InvalidateHeader ();
             }
         }
-        
+
         protected virtual void OnColumnRightClicked (Column clickedColumn, int x, int y)
         {
             Column [] columns = ColumnController.ToArray ();
@@ -302,60 +302,60 @@ namespace Hyena.Data.Gui
                 // Fully qualified type name to avoid Mono 1.2.4 bug
                 return System.String.Compare (a.Title, b.Title);
             });
-            
+
             uint items = 0;
-            
+
             for (int i = 0; i < columns.Length; i++) {
                 if (columns[i].Id != null) {
                     items++;
                 }
             }
-            
+
             uint max_items_per_column = 15;
             if (items >= max_items_per_column * 2) {
                 max_items_per_column = (uint)Math.Ceiling (items / 3.0);
             } else if (items >= max_items_per_column) {
                 max_items_per_column = (uint)Math.Ceiling (items / 2.0);
             }
-            
+
             uint column_count = (uint)Math.Ceiling (items / (double)max_items_per_column);
-            
+
             Menu menu = new Menu ();
             uint row_offset = 2;
-            
+
             if (clickedColumn.Id != null) { // FIXME: Also restrict if the column vis can't be changed
                 menu.Attach (new ColumnHideMenuItem (clickedColumn), 0, column_count, 0, 1);
                 menu.Attach (new SeparatorMenuItem (), 0, column_count, 1, 2);
             }
-            
+
             items = 0;
-            
+
             for (uint i = 0, n = (uint)columns.Length, column = 0, row = 0; i < n; i++) {
                 if (columns[i].Id == null) {
                     continue;
                 }
-                
+
                 row = items++ % max_items_per_column;
-                
-                menu.Attach (new ColumnToggleMenuItem (columns[i]), 
+
+                menu.Attach (new ColumnToggleMenuItem (columns[i]),
                     column, column + 1, row + row_offset, row + 1 + row_offset);
-                
+
                 if (row == max_items_per_column - 1) {
                     column++;
                 }
             }
-            
+
             menu.ShowAll ();
             menu.Popup (null, null, delegate (Menu popup, out int pos_x, out int pos_y, out bool push_in) {
                 int win_x, win_y;
                 GdkWindow.GetOrigin (out win_x, out win_y);
-                
+
                 pos_x = win_x + x;
                 pos_y = win_y + y;
                 push_in = true;
             }, 3, Gtk.Global.CurrentEventTime);
         }
-        
+
         private void ResizeColumn (double x)
         {
             CachedColumn resizing_column = column_cache[resizing_column_index];
@@ -379,50 +379,50 @@ namespace Hyena.Data.Gui
             if (resizing_column.Width + resize_delta > resizing_column.MaxWidth) {
                 resize_delta = resizing_column.MaxWidth - resizing_column.Width;
             }
-            
+
             if (resize_delta == 0) {
                 return;
             }
-            
+
             int sign = Math.Sign (resize_delta);
             resize_delta = Math.Abs (resize_delta);
             double total_elastic_width = 0.0;
-            
+
             for (int i = real_resizing_column_index + 1; i < column_cache.Length; i++) {
                 total_elastic_width += column_cache[i].ElasticWidth = sign == 1
                     ? column_cache[i].Width - column_cache[i].MinWidth
                     : column_cache[i].MaxWidth - column_cache[i].Width;
             }
-            
+
             if (total_elastic_width == 0) {
                 return;
             }
-            
+
             if (resize_delta > total_elastic_width) {
                 resize_delta = total_elastic_width;
             }
 
             // Convert to a proprotional width
             resize_delta = sign * resize_delta / (double)header_width;
-            
+
             for (int i = real_resizing_column_index + 1; i < column_cache.Length; i++) {
                 column_cache[i].Column.Width += -resize_delta * (column_cache[i].ElasticWidth / total_elastic_width);
             }
-            
+
             resizing_column.Column.Width += resize_delta;
 
             RegenerateColumnCache ();
             QueueDraw ();
         }
-        
+
         private Column GetColumnForResizeHandle (int x)
         {
             if (column_cache == null || !resizable) {
                 return null;
             }
-            
+
             x += HadjustmentValue;
-            
+
             for (int i = 0; i < column_cache.Length - 1; i++) {
                 if (x < column_cache[i].ResizeX1 - 2) {
                     // No point in checking other columns since their ResizeX1 are even larger
@@ -465,24 +465,24 @@ namespace Hyena.Data.Gui
 
             return false;
         }
-        
+
         private Column GetColumnAt (int x)
         {
             if (column_cache == null) {
                 return null;
             }
-            
+
             x += HadjustmentValue;
-            
+
             foreach (CachedColumn column in column_cache) {
                 if (x >= column.X1 && x <= column.X2) {
                     return column.Column;
                 }
             }
-            
+
             return null;
         }
-        
+
         private CachedColumn GetCachedColumnForColumn (Column col)
         {
             foreach (CachedColumn ca_col in column_cache) {
@@ -490,10 +490,10 @@ namespace Hyena.Data.Gui
                     return ca_col;
                 }
             }
-            
+
             return CachedColumn.Zero;
         }
-                
+
         private ColumnController column_controller;
         public ColumnController ColumnController {
             get { return column_controller; }
@@ -505,17 +505,17 @@ namespace Hyena.Data.Gui
                 if (column_controller != null) {
                     column_controller.Updated -= OnColumnControllerUpdatedHandler;
                 }
-                
+
                 column_controller = value;
-                
+
                 OnColumnControllerUpdated ();
-                
+
                 if (column_controller != null) {
                     column_controller.Updated += OnColumnControllerUpdatedHandler;
                 }
             }
         }
-        
+
 #endregion
 
 #region Header
@@ -526,7 +526,7 @@ namespace Hyena.Data.Gui
                 if (!header_visible) {
                     return 0;
                 }
-                
+
                 if (header_height == 0) {
                     int w;
                     int h;
@@ -535,20 +535,20 @@ namespace Hyena.Data.Gui
                     header_height = h;
                     header_height += 10;
                 }
-                
+
                 return header_height;
             }
         }
-        
+
         private bool header_visible = true;
         public bool HeaderVisible {
             get { return header_visible; }
-            set { 
+            set {
                 header_visible = value;
                 MoveResize (Allocation);
             }
         }
-        
+
 #endregion
 
 #region Gtk.MenuItem Wrappers for the column context menu
@@ -558,64 +558,64 @@ namespace Hyena.Data.Gui
             private Column column;
             private bool ready = false;
             private Label label;
-            
+
             public ColumnToggleMenuItem (Column column) : base ()
             {
                 this.column = column;
-                Active = column.Visible; 
+                Active = column.Visible;
                 ready = true;
-                
+
                 label = new Label ();
                 label.Xalign = 0.0f;
                 label.Text = column.LongTitle ?? String.Empty;
                 label.Show ();
-                
+
                 Add (label);
             }
-                        
+
             protected override void OnStyleSet (Style previousStyle)
             {
                 base.OnStyleSet (previousStyle);
                 label.ModifyFg (StateType.Prelight, Style.Foreground (StateType.Selected));
             }
-            
+
             protected override void OnActivated ()
             {
                 base.OnActivated ();
-                
+
                 if (!ready) {
                     return;
                 }
-                
+
                 column.Visible = Active;
             }
         }
-        
+
         private class ColumnHideMenuItem : ImageMenuItem
         {
             private Column column;
             private Label label;
-            
+
             public ColumnHideMenuItem (Column column) : base ()
             {
                 this.column = column;
                 this.Image = new Image (Stock.Remove, IconSize.Menu);
-                
+
                 label = new Label ();
                 label.Xalign = 0.0f;
-                label.Markup = String.Format (Catalog.GetString ("Hide <i>{0}</i>"), 
+                label.Markup = String.Format (Catalog.GetString ("Hide <i>{0}</i>"),
                     GLib.Markup.EscapeText (column.LongTitle));
                 label.Show ();
-                
+
                 Add (label);
             }
-            
+
             protected override void OnStyleSet (Style previousStyle)
             {
                 base.OnStyleSet (previousStyle);
                 label.ModifyFg (StateType.Prelight, Style.Foreground (StateType.Selected));
             }
-            
+
             protected override void OnActivated ()
             {
                 column.Visible = false;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
index 1978e72..02a05de 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
@@ -69,12 +69,12 @@ namespace Hyena.Data.Gui
         public Adjustment Vadjustment {
             get { return vadjustment; }
         }
-        
+
         private Adjustment hadjustment;
         public Adjustment Hadjustment {
             get { return hadjustment; }
         }
-        
+
         private SelectionProxy selection_proxy = new SelectionProxy ();
         public SelectionProxy SelectionProxy {
             get { return selection_proxy; }
@@ -83,17 +83,17 @@ namespace Hyena.Data.Gui
         public Selection Selection {
             get { return model.Selection; }
         }
-        
+
         private int HadjustmentValue {
             get { return hadjustment == null ? 0 : (int)hadjustment.Value; }
         }
-        
+
         private int VadjustmentValue {
             get { return vadjustment == null ? 0 : (int)vadjustment.Value; }
         }
-        
+
         public event RowActivatedHandler<T> RowActivated;
-        
+
 #region Row/Selection, Keyboard/Mouse Interaction
 
         private bool KeyboardScroll (Gdk.ModifierType modifier, int relative_row, bool align_y)
@@ -107,7 +107,7 @@ namespace Hyena.Data.Gui
                 if (Selection.FocusedIndex == -1) {
                     return false;
                 }
-                
+
                 row_limit = 0;
             } else {
                 row_limit = Model.Count - 1;
@@ -116,7 +116,7 @@ namespace Hyena.Data.Gui
             if (Selection.FocusedIndex == row_limit) {
                 return true;
             }
-            
+
             int row_index = Math.Min (Model.Count - 1, Math.Max (0, Selection.FocusedIndex + relative_row));
 
             if (Selection != null) {
@@ -139,7 +139,7 @@ namespace Hyena.Data.Gui
                     Selection.Select (row_index);
                 }
             }
-            
+
             // Scroll if needed
             double y_at_row = GetYAtRow (row_index);
             if (align_y) {
@@ -156,7 +156,7 @@ namespace Hyena.Data.Gui
             InvalidateList ();
             return true;
         }
-        
+
         protected override bool OnKeyPressEvent (Gdk.EventKey press)
         {
             bool handled = false;
@@ -277,10 +277,10 @@ namespace Hyena.Data.Gui
             if (handled) {
                 return true;
             }
-            
+
             return base.OnKeyPressEvent (press);
         }
-        
+
         protected bool ActivateSelection ()
         {
             if (Selection != null && Selection.FocusedIndex != -1) {
@@ -291,32 +291,32 @@ namespace Hyena.Data.Gui
             }
             return false;
         }
-        
-#region Cell Event Proxy        
-        
+
+#region Cell Event Proxy
+
         private IInteractiveCell last_icell;
         private Gdk.Rectangle last_icell_area = Gdk.Rectangle.Zero;
-        
+
         private void ProxyEventToCell (Gdk.Event evnt, bool press)
         {
             IInteractiveCell icell;
             Gdk.Rectangle icell_area;
             bool redraw = ProxyEventToCell (evnt, press, out icell, out icell_area);
-            
+
             int xoffset = HadjustmentValue;
             int yoffset = VadjustmentValue;
-            
+
             if (last_icell_area != icell_area) {
                 if (last_icell != null && last_icell.PointerLeaveEvent ()) {
-                    QueueDrawArea (last_icell_area.X - xoffset, last_icell_area.Y - yoffset, 
+                    QueueDrawArea (last_icell_area.X - xoffset, last_icell_area.Y - yoffset,
                         last_icell_area.Width, last_icell_area.Height);
                 }
                 last_icell = icell;
                 last_icell_area = icell_area;
             }
-            
+
             if (redraw) {
-                QueueDrawArea (icell_area.X - xoffset, icell_area.Y - yoffset, 
+                QueueDrawArea (icell_area.X - xoffset, icell_area.Y - yoffset,
                     icell_area.Width, icell_area.Height);
             }
         }
@@ -329,10 +329,10 @@ namespace Hyena.Data.Gui
             int evnt_x, evnt_y;
             int x, y, row_index;
             x = y = row_index = 0;
-            
+
             Gdk.EventButton evnt_button = evnt as Gdk.EventButton;
             Gdk.EventMotion evnt_motion = evnt as Gdk.EventMotion;
-            
+
             if (evnt_motion != null) {
                 evnt_x = (int)evnt_motion.X;
                 evnt_y = (int)evnt_motion.Y;
@@ -391,27 +391,27 @@ namespace Hyena.Data.Gui
             if (row_index < 0 || row_index >= Model.Count) {
                 return false;
             }
-            
+
             column = GetColumnAt (x);
             if (column == null) {
                 return false;
             }
-            
+
             ColumnCell cell = column.GetCell (0);
             icell = cell as G;
             if (icell == null) {
                 return false;
             }
-            
+
             // Bind the row to the cell
             cell.BindListItem (model[row_index]);
             return true;
         }
 
         #pragma warning restore 0169
-        
+
 #endregion
-        
+
 #region OnButtonPress
 
         protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
@@ -426,12 +426,12 @@ namespace Hyena.Data.Gui
             }
             return true;
         }
-        
+
         private bool OnHeaderButtonPressEvent (Gdk.EventButton evnt)
         {
             int x = (int)evnt.X - header_interaction_alloc.X;
             int y = (int)evnt.Y - header_interaction_alloc.Y;
-            
+
             if (evnt.Button == 3 && ColumnController.EnableColumnMenu) {
                 Column menu_column = GetColumnAt (x);
                 if (menu_column != null) {
@@ -441,7 +441,7 @@ namespace Hyena.Data.Gui
             } else if (evnt.Button != 1) {
                 return true;
             }
-            
+
             Gtk.Drag.SourceUnset (this);
 
             Column column = GetColumnForResizeHandle (x);
@@ -457,29 +457,29 @@ namespace Hyena.Data.Gui
                     pressed_column_x_start_hadjustment = HadjustmentValue;
                 }
             }
-            
+
             return true;
         }
-        
+
         private bool OnListButtonPressEvent (Gdk.EventButton evnt)
         {
             if (Model == null) {
                 return true;
             }
-            
+
             int y = (int)evnt.Y - list_interaction_alloc.Y;
-            
+
             GrabFocus ();
-            
+
             int row_index = GetRowAtY (y);
 
             if (row_index < 0 || row_index >= Model.Count) {
                 Gtk.Drag.SourceUnset (this);
                 return true;
             }
-            
+
             ProxyEventToCell (evnt, true);
-            
+
             object item = model[row_index];
             if (item == null) {
                 return true;
@@ -527,20 +527,20 @@ namespace Hyena.Data.Gui
                     OnPopupMenu ();
                 }
             }
-            
+
             InvalidateList ();
             return true;
         }
-        
+
 #endregion
 
 #region OnButtonRelease
-        
+
         protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
         {
             OnDragSourceSet ();
             StopDragScroll ();
-            
+
             if (resizing_column_index >= 0) {
                 pressed_column_index = -1;
                 resizing_column_index = -1;
@@ -553,7 +553,7 @@ namespace Hyena.Data.Gui
                 pressed_column_drag_started = false;
                 return true;
             }
-            
+
             if (header_visible && header_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y)) {
                 return OnHeaderButtonRelease (evnt);
             } else if (list_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y) && model != null &&
@@ -572,24 +572,24 @@ namespace Hyena.Data.Gui
                 ActiveColumn = pressed_column_index;
                 if (column != null)
                     OnColumnLeftClicked (column);
-                
+
                 pressed_column_index = -1;
                 return true;
             } else {
                 return false;
             }
         }
-        
+
         private bool OnListButtonRelease (Gdk.EventButton evnt)
         {
             if (Model == null) {
                 return true;
             }
-        
+
             int y = (int)evnt.Y - list_interaction_alloc.Y;
-            
+
             GrabFocus ();
-            
+
             int row_index = GetRowAtY (y);
 
             if (row_index >= Model.Count) {
@@ -600,81 +600,81 @@ namespace Hyena.Data.Gui
             if (item == null) {
                 return true;
             }
-            
+
             //if (Selection != null && Selection.Contains (row_index) && Selection.Count > 1) {
             if (Selection != null && evnt.Button == 1 && Hyena.Gui.GtkUtilities.NoImportantModifiersAreSet ()) {
                 if (Selection.Count > 1) {
                     Selection.Clear (false);
                     Selection.Select (row_index);
                     FocusRow (row_index);
-                    InvalidateList ();    
+                    InvalidateList ();
                 }
             }
-            
+
             return true;
         }
-        
+
 #endregion
-        
+
         protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
         {
             int x = (int)evnt.X - header_interaction_alloc.X;
-            
-            if (pressed_column_index >= 0 && !pressed_column_is_dragging && 
+
+            if (pressed_column_index >= 0 && !pressed_column_is_dragging &&
                 Gtk.Drag.CheckThreshold (this, pressed_column_x_start, 0, x, 0)) {
                 pressed_column_is_dragging = true;
                 pressed_column_drag_started = true;
                 InvalidateHeader ();
                 InvalidateList ();
             }
-            
+
             pressed_column_x = x;
-            
+
             if (OnMotionNotifyEvent (x)) {
                 return true;
             }
 
-            GdkWindow.Cursor = header_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y) && 
+            GdkWindow.Cursor = header_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y) &&
                 (resizing_column_index >= 0 || GetColumnForResizeHandle (x) != null)
-                ? resize_x_cursor 
+                ? resize_x_cursor
                 : null;
-            
+
             if (resizing_column_index >= 0) {
                 ResizeColumn (x);
             }
-            
+
             ProxyEventToCell (evnt, false);
-            
+
             return true;
         }
-        
+
         private bool OnMotionNotifyEvent (int x)
         {
             if (!pressed_column_is_dragging) {
                 return false;
             }
-            
+
             OnDragScroll (OnDragHScrollTimeout, header_interaction_alloc.Width * 0.1, header_interaction_alloc.Width, x);
-            
+
             GdkWindow.Cursor = drag_cursor;
-            
+
             Column swap_column = GetColumnAt (x);
-            
+
             if (swap_column != null) {
                 CachedColumn swap_column_c = GetCachedColumnForColumn (swap_column);
                 bool reorder = false;
-                
+
                 if (swap_column_c.Index < pressed_column_index) {
                     // Moving from right to left
                     reorder = pressed_column_x_drag <= swap_column_c.X1 + swap_column_c.Width / 2;
                 } else if (swap_column_c.Index > pressed_column_index) {
                     if (column_cache.Length > pressed_column_index && pressed_column_index >= 0) {
                         // Moving from left to right
-                        reorder = pressed_column_x_drag + column_cache[pressed_column_index].Width >= 
+                        reorder = pressed_column_x_drag + column_cache[pressed_column_index].Width >=
                             swap_column_c.X1 + swap_column_c.Width / 2;
                     }
                 }
-                
+
                 if (reorder) {
                     int actual_pressed_index = ColumnController.IndexOf (column_cache[pressed_column_index].Column);
                     int actual_swap_index = ColumnController.IndexOf (swap_column_c.Column);
@@ -683,20 +683,20 @@ namespace Hyena.Data.Gui
                     RegenerateColumnCache ();
                 }
             }
-            
+
             pressed_column_x_drag = x - pressed_column_x_offset - (pressed_column_x_start_hadjustment - HadjustmentValue);
-            
+
             QueueDraw ();
             return true;
         }
-        
+
         private bool OnDragHScrollTimeout ()
         {
             ScrollTo (hadjustment, HadjustmentValue + (drag_scroll_velocity * drag_scroll_velocity_max));
             OnMotionNotifyEvent (pressed_column_x);
             return true;
         }
-        
+
         protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
         {
             if (evnt.Mode == Gdk.CrossingMode.Normal) {
@@ -705,7 +705,7 @@ namespace Hyena.Data.Gui
             }
             return base.OnLeaveNotifyEvent (evnt);
         }
-        
+
         protected override bool OnFocused (Gtk.DirectionType directionType)
         {
             if (!HeaderVisible)
@@ -729,7 +729,7 @@ namespace Hyena.Data.Gui
                 return base.OnFocused (directionType);
             }
         }
-        
+
         protected virtual void OnRowActivated ()
         {
             if (Selection.FocusedIndex != -1) {
@@ -751,17 +751,17 @@ namespace Hyena.Data.Gui
             }
             return false;
         }
-        
+
         protected int GetRowAtY (int y)
         {
             if (y < 0) {
                 return -1;
             }
-            
+
             int page_offset = VadjustmentValue % RowHeight;
             int first_row = VadjustmentValue / RowHeight;
             int row_offset = (y + page_offset) / RowHeight;
-            
+
             return first_row + row_offset;
         }
 
@@ -779,22 +779,22 @@ namespace Hyena.Data.Gui
 #endregion
 
 #region Adjustments & Scrolling
-        
+
         private void UpdateAdjustments ()
         {
             UpdateAdjustments (null, null);
         }
-        
+
         private void UpdateAdjustments (Adjustment hadj, Adjustment vadj)
         {
             if (hadj != null) {
                 hadjustment = hadj;
             }
-            
+
             if (vadj != null) {
                 vadjustment = vadj;
             }
-            
+
             if (hadjustment != null) {
                 hadjustment.Upper = header_width;
                 hadjustment.StepIncrement = 10.0;
@@ -802,7 +802,7 @@ namespace Hyena.Data.Gui
                     hadjustment.Value = hadjustment.Upper - hadjustment.PageSize;
                 }
             }
-            
+
             if (vadjustment != null && model != null) {
                 vadjustment.Upper = (RowHeight * (model.Count));
                 vadjustment.StepIncrement = RowHeight;
@@ -810,7 +810,7 @@ namespace Hyena.Data.Gui
                     vadjustment.Value = vadjustment.Upper - vadjustment.PageSize;
                 }
             }
-            
+
             if (hadjustment != null) {
                 hadjustment.Change ();
             }
@@ -819,23 +819,23 @@ namespace Hyena.Data.Gui
                 vadjustment.Change ();
             }
         }
-        
+
         private void OnHadjustmentChanged (object o, EventArgs args)
         {
             InvalidateHeader ();
             InvalidateList ();
         }
-        
+
         private void OnVadjustmentChanged (object o, EventArgs args)
         {
             InvalidateList ();
         }
-        
+
         public void ScrollTo (double val)
         {
             ScrollTo (vadjustment, val);
         }
-        
+
         private void ScrollTo (Adjustment adjustment, double val)
         {
             if (adjustment != null) {
@@ -882,14 +882,14 @@ namespace Hyena.Data.Gui
             if (hadj == null || vadj == null) {
                 return;
             }
-            
+
             hadj.ValueChanged += OnHadjustmentChanged;
             vadj.ValueChanged += OnVadjustmentChanged;
-            
+
             UpdateAdjustments (hadj, vadj);
         }
 
 #endregion
-        
+
     }
 }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
index e91accd..8663161 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
@@ -54,7 +54,7 @@ namespace Hyena.Data.Gui
                 model.Cleared -= OnModelClearedHandler;
                 model.Reloaded -= OnModelReloadedHandler;
             }
-            
+
             model = value;
 
             if (model != null) {
@@ -75,7 +75,7 @@ namespace Hyena.Data.Gui
                     IsReorderable = sortable.SortColumn == null || sortable.SortColumn.SortType == SortType.None;
                 }
             }
-            
+
             RefreshViewForModel (vpos);
 
             var handler = ModelChanged;
@@ -101,11 +101,11 @@ namespace Hyena.Data.Gui
             } else if (vadjustment != null) {
                 ScrollTo (vadjustment.Value);
             }
-            
+
             if (Model != null && Selection != null) {
                 Selection.MaxIndex = Model.Count - 1;
             }
-            
+
             if (Parent is ScrolledWindow) {
                 Parent.QueueDraw ();
             }
@@ -115,7 +115,7 @@ namespace Hyena.Data.Gui
         {
             OnModelCleared ();
         }
-        
+
         private void OnModelReloadedHandler (object o, EventArgs args)
         {
             OnModelReloaded ();
@@ -130,12 +130,12 @@ namespace Hyena.Data.Gui
         {
             RefreshViewForModel (null);
         }
-        
+
         protected virtual void OnModelReloaded ()
         {
             RefreshViewForModel (null);
         }
-        
+
         private IListModel<T> model;
         public virtual IListModel<T> Model {
             get { return model; }
@@ -177,32 +177,32 @@ namespace Hyena.Data.Gui
 
             return (bool)row_opaque_property_info.GetValue (item, null);
         }
-        
+
         private string row_bold_property_name = "IsBold";
         private PropertyInfo row_bold_property_info;
         bool row_bold_property_invalid = false;
-        
+
         public string RowBoldPropertyName {
             get { return row_bold_property_name; }
-            set { 
+            set {
                 if (value == row_bold_property_name) {
                     return;
                 }
-                
+
                 row_bold_property_name = value;
                 row_bold_property_info = null;
                 row_bold_property_invalid = false;
-                
+
                 InvalidateList ();
             }
         }
-        
+
         private bool IsRowBold (object item)
         {
             if (item == null || row_bold_property_invalid) {
                 return false;
             }
-         
+
             if (row_bold_property_info == null || row_bold_property_info.ReflectedType != item.GetType ()) {
                 row_bold_property_info = item.GetType ().GetProperty (row_bold_property_name);
                 if (row_bold_property_info == null || row_bold_property_info.PropertyType != typeof (bool)) {
@@ -211,7 +211,7 @@ namespace Hyena.Data.Gui
                     return false;
                 }
             }
-            
+
             return (bool)row_bold_property_info.GetValue (item, null);
         }
     }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs
index 697f2d3..075e9a9 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs
@@ -45,33 +45,33 @@ namespace Hyena.Data.Gui
         private Cairo.Context cairo_context;
         private CellContext cell_context;
         private Pango.Layout pango_layout;
-        
+
         private List<int> selected_rows = new List<int> ();
-        
+
         private Theme theme;
         protected Theme Theme {
             get { return theme; }
         }
-        
+
         private bool changing_style = false;
-        
+
         protected override void OnStyleSet (Style old_style)
         {
             if (changing_style) {
                 return;
             }
-            
+
             changing_style = true;
             GtkUtilities.AdaptGtkRcStyle (this, typeof (TreeView));
             changing_style = false;
-            
+
             base.OnStyleSet (old_style);
             RecomputeRowHeight = true;
             theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme (this);
 
             // Save the drawable so we can reuse it
             Gdk.Drawable drawable = cell_context != null ? cell_context.Drawable : null;
-            
+
             if (pango_layout != null) {
                 pango_layout.Dispose ();
                 pango_layout = null;
@@ -82,22 +82,22 @@ namespace Hyena.Data.Gui
             cell_context.Widget = this;
             cell_context.Drawable = drawable;
         }
-         
+
         protected override bool OnExposeEvent (EventExpose evnt)
         {
             Rectangle damage = new Rectangle ();
             foreach (Rectangle rect in evnt.Region.GetRectangles ()) {
                 damage = damage.Union (rect);
             }
-            
+
             cairo_context = CairoHelper.Create (evnt.Window);
             if (pango_layout == null) {
                 pango_layout = CairoExtensions.CreateLayout (this, cairo_context);
             }
-            
+
             cell_context.Context = cairo_context;
             cell_context.Layout = pango_layout;
-            
+
             Theme.DrawFrameBackground (cairo_context, Allocation, true);
             if (header_visible && column_controller != null) {
                 PaintHeader (damage);
@@ -111,15 +111,15 @@ namespace Hyena.Data.Gui
             if (Model != null) {
                 PaintRows (damage);
             }
-            
+
             PaintDraggingColumn (damage);
-            
+
             ((IDisposable)cairo_context.Target).Dispose ();
             ((IDisposable)cairo_context).Dispose ();
-            
+
             return true;
         }
-        
+
         private void PaintHeader (Rectangle clip)
         {
             Rectangle rect = header_rendering_alloc;
@@ -127,13 +127,13 @@ namespace Hyena.Data.Gui
             clip.Intersect (rect);
             cairo_context.Rectangle (clip.X, clip.Y, clip.Width, clip.Height);
             cairo_context.Clip ();
-            
+
             Theme.DrawHeaderBackground (cairo_context, header_rendering_alloc);
-            
+
             Rectangle cell_area = new Rectangle ();
             cell_area.Y = header_rendering_alloc.Y;
             cell_area.Height = header_rendering_alloc.Height;
-            
+
             cell_context.Clip = clip;
             cell_context.Opaque = true;
             cell_context.TextAsForeground = true;
@@ -144,21 +144,21 @@ namespace Hyena.Data.Gui
                 if (pressed_column_is_dragging && pressed_column_index == ci) {
                     continue;
                 }
-                
+
                 cell_area.X = column_cache[ci].X1 + Theme.TotalBorderWidth + header_rendering_alloc.X - HadjustmentValue;
                 cell_area.Width = column_cache[ci].Width;
                 PaintHeaderCell (cell_area, ci, false, ref have_drawn_separator);
             }
-            
+
             if (pressed_column_is_dragging && pressed_column_index >= 0) {
                 cell_area.X = pressed_column_x_drag + Allocation.X - HadjustmentValue;
                 cell_area.Width = column_cache[pressed_column_index].Width;
                 PaintHeaderCell (cell_area, pressed_column_index, true, ref have_drawn_separator);
             }
-            
+
             cairo_context.ResetClip ();
         }
-        
+
         private void PaintHeaderCell (Rectangle area, int ci, bool dragging, ref bool have_drawn_separator)
         {
             if (ci < 0 || column_cache.Length <= ci)
@@ -169,13 +169,13 @@ namespace Hyena.Data.Gui
             }
 
             if (dragging) {
-                Theme.DrawColumnHighlight (cairo_context, area, 
+                Theme.DrawColumnHighlight (cairo_context, area,
                     CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (GtkColorClass.Dark, StateType.Normal), 0.9));
-                    
+
                 Cairo.Color stroke_color = CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (
                     GtkColorClass.Base, StateType.Normal), 0.0);
                 stroke_color.A = 0.3;
-                
+
                 cairo_context.Color = stroke_color;
                 cairo_context.MoveTo (area.X + 0.5, area.Y + 1.0);
                 cairo_context.LineTo (area.X + 0.5, area.Bottom);
@@ -185,7 +185,7 @@ namespace Hyena.Data.Gui
             }
 
             ColumnCell cell = column_cache[ci].Column.HeaderCell;
-            
+
             if (cell != null) {
                 cairo_context.Save ();
                 cairo_context.Translate (area.X, area.Y);
@@ -193,14 +193,14 @@ namespace Hyena.Data.Gui
                 cell.Render (cell_context, StateType.Normal, area.Width, area.Height);
                 cairo_context.Restore ();
             }
-            
-            if (!dragging && ci < column_cache.Length - 1 && (have_drawn_separator || 
+
+            if (!dragging && ci < column_cache.Length - 1 && (have_drawn_separator ||
                 column_cache[ci].MaxWidth != column_cache[ci].MinWidth)) {
                 have_drawn_separator = true;
                 Theme.DrawHeaderSeparator (cairo_context, area, area.Right);
             }
         }
-        
+
         private void PaintRows (Rectangle clip)
         {
             // TODO factor this out?
@@ -212,27 +212,27 @@ namespace Hyena.Data.Gui
                     header_rendering_alloc.Bottom + Theme.BorderWidth,
                     col.Width, list_rendering_alloc.Height + Theme.InnerBorderWidth * 2);
             }
-            
+
             clip.Intersect (list_rendering_alloc);
             cairo_context.Rectangle (clip.X, clip.Y, clip.Width, clip.Height);
             cairo_context.Clip ();
-            
+
             cell_context.Clip = clip;
             cell_context.TextAsForeground = false;
-            
+
             int vadjustment_value = VadjustmentValue;
             int first_row = vadjustment_value / RowHeight;
             int last_row = Math.Min (model.Count, first_row + RowsInView);
             int offset = list_rendering_alloc.Y - vadjustment_value % RowHeight;
-            
+
             Rectangle selected_focus_alloc = Rectangle.Zero;
             Rectangle single_list_alloc = new Rectangle ();
-            
+
             single_list_alloc.X = list_rendering_alloc.X - HadjustmentValue;
             single_list_alloc.Y = offset;
             single_list_alloc.Width = list_rendering_alloc.Width + HadjustmentValue;
             single_list_alloc.Height = RowHeight;
-            
+
             int selection_height = 0;
             int selection_y = 0;
             selected_rows.Clear ();
@@ -242,28 +242,28 @@ namespace Hyena.Data.Gui
                     if (selection_height == 0) {
                         selection_y = single_list_alloc.Y;
                     }
-                    
+
                     selection_height += single_list_alloc.Height;
                     selected_rows.Add (ri);
-                    
+
                     if (Selection.FocusedIndex == ri) {
                         selected_focus_alloc = single_list_alloc;
                     }
                 } else {
                     if (rules_hint && ri % 2 != 0) {
-                        Theme.DrawRowRule (cairo_context, single_list_alloc.X, single_list_alloc.Y, 
+                        Theme.DrawRowRule (cairo_context, single_list_alloc.X, single_list_alloc.Y,
                             single_list_alloc.Width, single_list_alloc.Height);
                     }
-                    
+
                     PaintReorderLine (ri, single_list_alloc);
-                    
+
                     if (Selection != null && Selection.FocusedIndex == ri && !Selection.Contains (ri) && HasFocus) {
                         CairoCorners corners = CairoCorners.All;
-                        
+
                         if (Selection.Contains (ri - 1)) {
                             corners &= ~(CairoCorners.TopLeft | CairoCorners.TopRight);
                         }
-                        
+
                         if (Selection.Contains (ri + 1)) {
                             corners &= ~(CairoCorners.BottomLeft | CairoCorners.BottomRight);
                         }
@@ -273,7 +273,7 @@ namespace Hyena.Data.Gui
                                                  single_list_alloc.Width, single_list_alloc.Height,
                                                  CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected), 0.85));
                     }
-                    
+
                     if (selection_height > 0) {
                         Cairo.Color selection_color = Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
                         if (!HasFocus || HeaderFocused)
@@ -283,37 +283,37 @@ namespace Hyena.Data.Gui
                                                 true, true, selection_color, CairoCorners.All);
                         selection_height = 0;
                     }
-                    
+
                     PaintRow (ri, single_list_alloc, StateType.Normal);
                 }
-                
+
                 single_list_alloc.Y += single_list_alloc.Height;
             }
-            
+
             // In case the user is dragging to the end of the list
             PaintReorderLine (last_row, single_list_alloc);
-            
+
             if (selection_height > 0) {
-                Theme.DrawRowSelection (cairo_context, list_rendering_alloc.X, selection_y, 
+                Theme.DrawRowSelection (cairo_context, list_rendering_alloc.X, selection_y,
                     list_rendering_alloc.Width, selection_height);
             }
-            
-            if (Selection != null && Selection.Count > 1 && 
+
+            if (Selection != null && Selection.Count > 1 &&
                 !selected_focus_alloc.Equals (Rectangle.Zero) &&
                 HasFocus && !HeaderFocused) { // Cursor inside selection.
                 Theme.DrawRowCursor (cairo_context, selected_focus_alloc.X, selected_focus_alloc.Y,
                     selected_focus_alloc.Width, selected_focus_alloc.Height,
                     Theme.Colors.GetWidgetColor (GtkColorClass.Text, StateType.Selected));
             }
-            
+
             foreach (int ri in selected_rows) {
                 single_list_alloc.Y = offset + ((ri - first_row) * single_list_alloc.Height);
                 PaintRow (ri, single_list_alloc, StateType.Selected);
             }
-            
+
             cairo_context.ResetClip ();
         }
-        
+
         private void PaintReorderLine (int row_index, Rectangle single_list_alloc)
         {
             if (row_index == drag_reorder_row_index && IsReorderable) {
@@ -333,25 +333,25 @@ namespace Hyena.Data.Gui
             if (column_cache == null) {
                 return;
             }
-            
+
             object item = model[row_index];
             bool opaque = IsRowOpaque (item);
             bool bold = IsRowBold (item);
-            
+
             Rectangle cell_area = new Rectangle ();
             cell_area.Height = RowHeight;
             cell_area.Y = area.Y;
-            
+
             for (int ci = 0; ci < column_cache.Length; ci++) {
                 if (pressed_column_is_dragging && pressed_column_index == ci) {
                     continue;
                 }
-                
+
                 cell_area.Width = column_cache[ci].Width;
                 cell_area.X = column_cache[ci].X1 + area.X;
                 PaintCell (item, ci, row_index, cell_area, opaque, bold, state, false);
             }
-            
+
             if (pressed_column_is_dragging && pressed_column_index >= 0) {
                 cell_area.Width = column_cache[pressed_column_index].Width;
                 cell_area.X = pressed_column_x_drag + list_rendering_alloc.X -
@@ -359,19 +359,19 @@ namespace Hyena.Data.Gui
                 PaintCell (item, pressed_column_index, row_index, cell_area, opaque, bold, state, true);
             }
         }
-        
+
         private void PaintCell (object item, int column_index, int row_index, Rectangle area, bool opaque, bool bold,
             StateType state, bool dragging)
         {
             ColumnCell cell = column_cache[column_index].Column.GetCell (0);
             cell.BindListItem (item);
             ColumnCellDataProvider (cell, item);
-            
+
             ITextCell text_cell = cell as ITextCell;
             if (text_cell != null) {
                 text_cell.FontWeight = bold ? Pango.Weight.Bold : Pango.Weight.Normal;
             }
-            
+
             if (dragging) {
                 Cairo.Color fill_color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
                 fill_color.A = 0.5;
@@ -379,7 +379,7 @@ namespace Hyena.Data.Gui
                 cairo_context.Rectangle (area.X, area.Y, area.Width, area.Height);
                 cairo_context.Fill ();
             }
-            
+
             cairo_context.Save ();
             cairo_context.Translate (area.X, area.Y);
             cell_context.Area = area;
@@ -389,66 +389,66 @@ namespace Hyena.Data.Gui
 
             AccessibleCellRedrawn (column_index, row_index);
         }
-        
+
         private void PaintDraggingColumn (Rectangle clip)
         {
             if (!pressed_column_is_dragging || pressed_column_index < 0) {
                 return;
             }
-            
+
             CachedColumn column = column_cache[pressed_column_index];
-            
+
             int x = pressed_column_x_drag + Allocation.X + 1 - HadjustmentValue;
-            
+
             Cairo.Color fill_color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
             fill_color.A = 0.45;
-            
+
             Cairo.Color stroke_color = CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (
                 GtkColorClass.Base, StateType.Normal), 0.0);
             stroke_color.A = 0.3;
-            
+
             cairo_context.Rectangle (x, header_rendering_alloc.Bottom + 1, column.Width - 2,
                 list_rendering_alloc.Bottom - header_rendering_alloc.Bottom - 1);
             cairo_context.Color = fill_color;
             cairo_context.Fill ();
-            
+
             cairo_context.MoveTo (x - 0.5, header_rendering_alloc.Bottom + 0.5);
             cairo_context.LineTo (x - 0.5, list_rendering_alloc.Bottom + 0.5);
             cairo_context.LineTo (x + column.Width - 1.5, list_rendering_alloc.Bottom + 0.5);
             cairo_context.LineTo (x + column.Width - 1.5, header_rendering_alloc.Bottom + 0.5);
-            
+
             cairo_context.Color = stroke_color;
             cairo_context.LineWidth = 1.0;
             cairo_context.Stroke ();
         }
-        
+
         private void InvalidateList ()
         {
             if (IsRealized) {
                 QueueDrawArea (list_rendering_alloc.X, list_rendering_alloc.Y, list_rendering_alloc.Width, list_rendering_alloc.Height);
             }
         }
-        
+
         private void InvalidateHeader ()
         {
             if (IsRealized) {
                 QueueDrawArea (header_rendering_alloc.X, header_rendering_alloc.Y, header_rendering_alloc.Width, header_rendering_alloc.Height);
             }
         }
-        
+
         protected virtual void ColumnCellDataProvider (ColumnCell cell, object boundItem)
         {
         }
-        
+
         private bool rules_hint = false;
         public bool RulesHint {
             get { return rules_hint; }
-            set { 
-                rules_hint = value; 
+            set {
+                rules_hint = value;
                 InvalidateList ();
             }
         }
-        
+
         private ListViewRowHeightHandler row_height_handler;
         public virtual ListViewRowHeightHandler RowHeightProvider {
             get { return row_height_handler; }
@@ -459,32 +459,32 @@ namespace Hyena.Data.Gui
                 }
             }
         }
-        
+
         private bool recompute_row_height = true;
         protected bool RecomputeRowHeight {
             get { return recompute_row_height; }
-            set { 
+            set {
                 recompute_row_height = value;
                 if (value && IsMapped && IsRealized) {
                     QueueDraw ();
                 }
             }
         }
-        
+
         private int row_height = 32;
         public int RowHeight {
             get {
                 if (RecomputeRowHeight) {
-                    row_height = RowHeightProvider != null 
-                        ? RowHeightProvider (this) 
+                    row_height = RowHeightProvider != null
+                        ? RowHeightProvider (this)
                         : ColumnCellText.ComputeRowHeight (this);
-                    
+
                     header_height = 0;
                     MoveResize (Allocation);
-                    
+
                     RecomputeRowHeight = false;
                 }
-                
+
                 return row_height;
             }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
index c9b3c0b..99ca456 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
@@ -40,20 +40,20 @@ namespace Hyena.Data.Gui
         private Rectangle header_rendering_alloc;
         private Rectangle list_interaction_alloc;
         private Rectangle header_interaction_alloc;
-        
+
         private Gdk.Window event_window;
-        
+
         protected Rectangle ListAllocation {
             get { return list_rendering_alloc; }
         }
-        
+
         protected override void OnRealized ()
         {
             WidgetFlags |= WidgetFlags.Realized | WidgetFlags.NoWindow;
-            
+
             GdkWindow = Parent.GdkWindow;
             cell_context.Drawable = GdkWindow;
-            
+
             WindowAttr attributes = new WindowAttr ();
             attributes.WindowType = Gdk.WindowType.Child;
             attributes.X = Allocation.X;
@@ -69,74 +69,74 @@ namespace Hyena.Data.Gui
                 EventMask.ButtonReleaseMask |
                 EventMask.LeaveNotifyMask |
                 EventMask.ExposureMask);
-            
+
             WindowAttributesType attributes_mask =
                 WindowAttributesType.X | WindowAttributesType.Y | WindowAttributesType.Wmclass;
-            
+
             event_window = new Gdk.Window (GdkWindow, attributes, attributes_mask);
             event_window.UserData = Handle;
-            
+
             OnDragSourceSet ();
             MoveResize (Allocation);
-            
+
             base.OnRealized ();
         }
-        
+
         protected override void OnUnrealized ()
         {
             WidgetFlags &= ~WidgetFlags.Realized;
-            
+
             event_window.UserData = IntPtr.Zero;
             Hyena.Gui.GtkWorkarounds.WindowDestroy (event_window);
             event_window = null;
-            
+
             base.OnUnrealized ();
         }
-        
+
         protected override void OnMapped ()
         {
             WidgetFlags |= WidgetFlags.Mapped;
             event_window.Show ();
         }
-        
+
         protected override void OnUnmapped ()
         {
             WidgetFlags &= ~WidgetFlags.Mapped;
             event_window.Hide ();
         }
-        
+
         protected int TranslateToListY (int y)
         {
             return y - list_interaction_alloc.Y;
         }
-        
+
         private void MoveResize (Rectangle allocation)
         {
             if (Theme == null) {
                 return;
             }
-            
+
             header_rendering_alloc = allocation;
             header_rendering_alloc.Height = HeaderHeight;
-            
+
             list_rendering_alloc.X = header_rendering_alloc.X + Theme.TotalBorderWidth;
             list_rendering_alloc.Y = header_rendering_alloc.Bottom + Theme.TotalBorderWidth;
             list_rendering_alloc.Width = allocation.Width - Theme.TotalBorderWidth * 2;
             list_rendering_alloc.Height = allocation.Height - (list_rendering_alloc.Y - allocation.Y) -
                 Theme.TotalBorderWidth;
-            
+
             header_interaction_alloc = header_rendering_alloc;
             header_interaction_alloc.X = list_rendering_alloc.X;
             header_interaction_alloc.Width = list_rendering_alloc.Width;
             header_interaction_alloc.Height += Theme.BorderWidth;
             header_interaction_alloc.Offset (-allocation.X, -allocation.Y);
-            
+
             list_interaction_alloc = list_rendering_alloc;
             list_interaction_alloc.Offset (-allocation.X, -allocation.Y);
-            
+
             header_width = header_interaction_alloc.Width;
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             // TODO give the minimum height of the header
@@ -146,19 +146,19 @@ namespace Hyena.Data.Gui
             requisition.Width = Theme.TotalBorderWidth * 2;
             requisition.Height = HeaderHeight + Theme.TotalBorderWidth * 2;
         }
-        
+
         protected override void OnSizeAllocated (Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
-            
+
             if (IsRealized) {
                 event_window.MoveResize (allocation);
             }
-            
+
             MoveResize (allocation);
             RecalculateColumnSizes ();
             RegenerateColumnCache ();
-           
+
             if (vadjustment != null) {
                 hadjustment.PageSize = header_interaction_alloc.Width;
                 hadjustment.PageIncrement = header_interaction_alloc.Width;
@@ -166,15 +166,15 @@ namespace Hyena.Data.Gui
                 vadjustment.PageIncrement = list_rendering_alloc.Height;
                 UpdateAdjustments ();
             }
-            
+
             ICareAboutView model = Model as ICareAboutView;
             if (model != null) {
                 model.RowsInView = RowsInView;
             }
-            
+
             InvalidateList ();
         }
-        
+
         protected int RowsInView {
             get { return (int) Math.Ceiling ((list_rendering_alloc.Height + RowHeight) / (double) RowHeight); }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs
index f31047b..148fc13 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs
@@ -43,26 +43,26 @@ namespace Hyena.Data.Gui
     {
         private View view;
         private Model model;
-        
+
         public ListViewTestModule () : base ("ListView")
         {
             WindowPosition = WindowPosition.Center;
             SetDefaultSize (800, 600);
-            
+
             ScrolledWindow scroll = new ScrolledWindow ();
             scroll.HscrollbarPolicy = PolicyType.Automatic;
             scroll.VscrollbarPolicy = PolicyType.Automatic;
-            
+
             view = new View ();
             model = new Model ();
-            
+
             scroll.Add (view);
             Add (scroll);
             ShowAll ();
-            
+
             view.SetModel (model);
         }
-        
+
         private class View : ListView<ModelItem>
         {
             public View ()
@@ -79,15 +79,15 @@ namespace Hyena.Data.Gui
                 );
             }
         }
-        
+
         private class Model : IListModel<ModelItem>
         {
             private List<ModelItem> store = new List<ModelItem> ();
             private Selection selection = new Selection ();
-            
+
             public event EventHandler Cleared;
             public event EventHandler Reloaded;
-            
+
             public Model ()
             {
                 Random random = new Random (0);
@@ -95,15 +95,15 @@ namespace Hyena.Data.Gui
                     store.Add (new ModelItem (i, random));
                 }
             }
-            
+
             public void Clear ()
             {
             }
-            
+
             public void Reload ()
             {
             }
-            
+
             public int Count {
                 get { return store.Count; }
             }
@@ -111,17 +111,17 @@ namespace Hyena.Data.Gui
             public bool CanReorder {
                 get { return false; }
             }
-            
+
             public ModelItem this[int index] {
                 get { return store[index]; }
             }
-            
+
             public Selection Selection {
                 get { return selection; }
             }
         }
-        
-        private class ModelItem 
+
+        private class ModelItem
         {
             public ModelItem (int i, Random rand)
             {
@@ -133,7 +133,7 @@ namespace Hyena.Data.Gui
                 f = rand.Next (0, 1) == 1;
                 g = rand.Next (0, 5);
             }
-        
+
             string a; public string A { get { return a; } }
             int b;    public int    B { get { return b; } }
             double c; public double C { get { return c; } }
@@ -142,16 +142,16 @@ namespace Hyena.Data.Gui
             bool f; public bool F { get { return f; } set { f = value; } }
             int g; public int G { get { return g; } set { g = value; } }
         }
-        
+
         private class ColumnCellDoodle : ColumnCell, IInteractiveCell
         {
             private Random random = new Random ();
             private bool red = false;
-            
+
             public ColumnCellDoodle (string property, bool expand) : base (property, expand)
             {
             }
-            
+
             public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
             {
                 red = !red;
@@ -159,7 +159,7 @@ namespace Hyena.Data.Gui
                 cr.Rectangle (0, 0, cellWidth, cellHeight);
                 cr.Color = CairoExtensions.RgbaToColor (red ? 0xff000099 : 0x00000099);
                 cr.Fill ();
-                
+
                 List<Gdk.Point> points = Points;
                 for (int i = 0, n = points.Count; i < n; i++) {
                     if (i == 0) {
@@ -168,42 +168,42 @@ namespace Hyena.Data.Gui
                         cr.LineTo (points[i].X, points[i].Y);
                     }
                 }
-                
+
                 cr.Color = CairoExtensions.RgbToColor ((uint)random.Next (0xffffff));
                 cr.LineWidth = 1;
                 cr.Stroke ();
             }
-            
+
             private object last_pressed_bound;
-            
+
             public bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt)
             {
                 if (!pressed) {
                     last_pressed_bound = null;
                     return false;
                 }
-                
+
                 last_pressed_bound = BoundObject;
                 Points.Add (new Gdk.Point (x, y));
                 return true;
             }
-            
+
             public bool MotionEvent (int x, int y, Gdk.EventMotion evnt)
             {
                 if (last_pressed_bound == BoundObject) {
                     Points.Add (new Gdk.Point (x, y));
                     return true;
                 }
-                
+
                 return false;
             }
-            
+
             public bool PointerLeaveEvent ()
             {
                 last_pressed_bound = null;
                 return true;
             }
-            
+
             private List<Gdk.Point> Points {
                 get { return (List<Gdk.Point>)BoundObject; }
             }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs
index a17040e..b2525b4 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs
@@ -31,12 +31,12 @@ using System;
 namespace Hyena.Data.Gui
 {
     public class ObjectListView : ListView<object>
-    {   
+    {
         public ObjectListView () : base ()
         {
             ColumnController = new ColumnController();
         }
-        
+
         protected override void OnModelReloaded ()
         {
             ColumnController.Clear ();
@@ -44,7 +44,7 @@ namespace Hyena.Data.Gui
                 ColumnController.Add (new Column (column_description));
             }
         }
-        
+
         public new IObjectListModel Model {
             get { return (IObjectListModel)base.Model; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs
index 6d5f4c4..66dd52d 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs
@@ -31,12 +31,12 @@ using System;
 namespace Hyena.Data.Gui
 {
     public delegate void RowActivatedHandler<T> (object o, RowActivatedArgs<T> args);
-    
+
     public class RowActivatedArgs<T> : EventArgs
     {
         private int row;
         private T row_value;
-        
+
         public RowActivatedArgs (int row, T rowValue)
         {
             this.row = row;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs
index 86d7723..ebd2a45 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs
@@ -38,24 +38,24 @@ namespace Hyena.Data.Gui
         private string sort_key;
         private SortType sort_type = SortType.Ascending;
         private Hyena.Query.QueryField field;
-        
-        public SortableColumn(string title, ColumnCell cell, double width, string sort_key, bool visible) : 
+
+        public SortableColumn(string title, ColumnCell cell, double width, string sort_key, bool visible) :
             base(title, cell, width, visible)
         {
             this.sort_key = sort_key;
         }
-        
+
         public SortableColumn(ColumnCell header_cell, string title, ColumnCell cell, double width, string sort_key, bool visible) :
             base(header_cell, title, cell, width, visible)
         {
             this.sort_key = sort_key;
         }
-        
+
         public string SortKey {
             get { return sort_key; }
             set { sort_key = value; }
         }
-        
+
         public SortType SortType {
             get { return sort_type; }
             set { sort_type = value; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
index 1ed8114..b185cea 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
@@ -41,26 +41,26 @@ namespace Hyena.Gui.Dialogs
     {
         private AccelGroup accel_group;
         private string debugInfo;
-        
+
         public ExceptionDialog(Exception e) : base()
         {
             debugInfo = BuildExceptionMessage(e);
-           
+
             HasSeparator = false;
             BorderWidth = 5;
             Resizable = false;
             Title = Catalog.GetString("Banshee Encountered a Fatal Error");
-            
+
             VBox.Spacing = 12;
             ActionArea.Layout = ButtonBoxStyle.End;
 
             accel_group = new AccelGroup();
 		    AddAccelGroup(accel_group);
-        
+
             HBox hbox = new HBox(false, 12);
             hbox.BorderWidth = 5;
             VBox.PackStart(hbox, false, false, 0);
-        
+
             Image image = new Image(Stock.DialogError, IconSize.Dialog);
             image.Yalign = 0.0f;
             hbox.PackStart(image, true, true, 0);
@@ -77,7 +77,7 @@ namespace Hyena.Gui.Dialogs
             label_vbox.PackStart(label, false, false, 0);
 
             label = new Label(e.Message);
-                
+
             label.UseMarkup = true;
             label.UseUnderline = false;
             label.Justify = Gtk.Justification.Left;
@@ -86,7 +86,7 @@ namespace Hyena.Gui.Dialogs
             label.SetAlignment(0.0f, 0.5f);
             label_vbox.PackStart(label, false, false, 0);
 
-            Label details_label = new Label(String.Format("<b>{0}</b>", 
+            Label details_label = new Label(String.Format("<b>{0}</b>",
                 GLib.Markup.EscapeText(Catalog.GetString("Error Details"))));
             details_label.UseMarkup = true;
             Expander details_expander = new Expander("Details");
@@ -95,11 +95,11 @@ namespace Hyena.Gui.Dialogs
 
             ScrolledWindow scroll = new ScrolledWindow();
             TextView view = new TextView();
-            
+
             scroll.HscrollbarPolicy = PolicyType.Automatic;
             scroll.VscrollbarPolicy = PolicyType.Automatic;
             scroll.AddWithViewport(view);
-            
+
             scroll.SetSizeRequest(450, 250);
 			
 			view.Editable = false;
@@ -122,34 +122,34 @@ namespace Hyena.Gui.Dialogs
 
             if(is_default) {
                 DefaultResponse = response;
-                button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return, 
+                button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return,
                     0, AccelFlags.Visible);
             }
         }
-        
+
         private string BuildExceptionMessage(Exception e)
         {
             System.Text.StringBuilder msg = new System.Text.StringBuilder();
-            
+
             msg.Append(Catalog.GetString("An unhandled exception was thrown: "));
-            
+
             Stack<Exception> exception_chain = new Stack<Exception> ();
 
             while (e != null) {
                 exception_chain.Push (e);
                 e = e.InnerException;
             }
-            
+
             while (exception_chain.Count > 0) {
                 e = exception_chain.Pop ();
                 msg.AppendFormat ("{0}\n\n{1}\n", e.Message, e.StackTrace);
             };
-            
+
             msg.Append("\n");
             msg.AppendFormat(".NET Version: {0}\n", Environment.Version);
             msg.AppendFormat("OS Version: {0}\n", Environment.OSVersion);
             msg.Append("\nAssembly Version Information:\n\n");
-            
+
             foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
 				AssemblyName name = asm.GetName();
                 msg.AppendFormat("{0} ({1})\n", name.Name, name.Version);
@@ -161,21 +161,21 @@ namespace Hyena.Gui.Dialogs
 			
 			try {
                 msg.AppendFormat("\nPlatform Information: {0}", BuildPlatformString());
-                
+
                 msg.Append("\n\nDisribution Information:\n\n");
-                
+
                 Dictionary<string, string> lsb = LsbVersionInfo.Harvest;
-                
+
                 foreach(string lsbfile in lsb.Keys) {
                     msg.AppendFormat("[{0}]\n", lsbfile);
                     msg.AppendFormat("{0}\n", lsb[lsbfile]);
                 }
             } catch {
             }
-            
+
             return msg.ToString();
         }
-        
+
         private string BuildPlatformString()
         {
             ProcessStartInfo startInfo = new ProcessStartInfo();
@@ -183,8 +183,8 @@ namespace Hyena.Gui.Dialogs
             startInfo.RedirectStandardOutput = true;
             startInfo.RedirectStandardError = true;
             startInfo.UseShellExecute = false;
-            
-            foreach(string unameprog in new string [] { 
+
+            foreach(string unameprog in new string [] {
                 "/usr/bin/uname", "/bin/uname", "/usr/local/bin/uname",
                 "/sbin/uname", "/usr/sbin/uname", "/usr/local/sbin/uname"}) {
                 try {
@@ -195,10 +195,10 @@ namespace Hyena.Gui.Dialogs
                     continue;
                 }
             }
-            
+
             return null;
         }
-        
+
         private class LsbVersionInfo
         {
             private string [] filesToCheck = {
@@ -206,9 +206,9 @@ namespace Hyena.Gui.Dialogs
                 "slackware-version",
                 "debian_version"
             };
-            
-            private Dictionary<string, string> harvest = new Dictionary<string, string>(); 
-            
+
+            private Dictionary<string, string> harvest = new Dictionary<string, string>();
+
             public LsbVersionInfo()
             {
                 foreach(string pattern in filesToCheck) {
@@ -219,11 +219,11 @@ namespace Hyena.Gui.Dialogs
                     }
                 }
             }
-            
+
             public Dictionary<string, string> Findings {
                 get { return harvest; }
             }
-            
+
             public static Dictionary<string, string> Harvest {
                 get { return (new LsbVersionInfo()).Findings; }
             }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs
index faaca1a..484dc0a 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs
@@ -38,78 +38,78 @@ namespace Hyena.Gui.Dialogs
         private Label path_label;
         private TreeView version_tree;
         private TreeStore version_store;
-        
+
         public VersionInformationDialog() : base()
         {
             AccelGroup accel_group = new AccelGroup();
-            AddAccelGroup(accel_group);       
+            AddAccelGroup(accel_group);
             Modal = true;
-            
+
             Button button = new Button("gtk-close");
             button.CanDefault = true;
             button.UseStock = true;
             button.Show();
             DefaultResponse = ResponseType.Close;
-            button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Escape, 
+            button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Escape,
                 0, Gtk.AccelFlags.Visible);
-        
+
             AddActionWidget(button, ResponseType.Close);
-            
+
             Title = Catalog.GetString("Assembly Version Information");
             BorderWidth = 10;
-            
+
             version_tree = new TreeView();
-            
+
             version_tree.RulesHint = true;
             version_tree.AppendColumn(Catalog.GetString("Assembly Name"),
                 new CellRendererText(), "text", 0);
             version_tree.AppendColumn(Catalog.GetString("Version"),
                 new CellRendererText(), "text", 1);
-                                
+
             version_tree.Model = FillStore();
             version_tree.CursorChanged += OnCursorChanged;
-         
+
             ScrolledWindow scroll = new ScrolledWindow();
             scroll.Add(version_tree);
             scroll.ShadowType = ShadowType.In;
             scroll.SetSizeRequest(420, 200);
-            
+
             VBox.PackStart(scroll, true, true, 0);
             VBox.Spacing = 5;
-            
+
             path_label = new Label();
             path_label.Ellipsize = Pango.EllipsizeMode.End;
             path_label.Hide();
             path_label.Xalign = 0.0f;
             path_label.Yalign = 1.0f;
             VBox.PackStart(path_label, false, true, 0);
-            
+
             scroll.ShowAll();
         }
-        
+
         private void OnCursorChanged(object o, EventArgs args)
         {
             TreeIter iter;
-            
+
             if(!version_tree.Selection.GetSelected(out iter)) {
                 path_label.Hide();
                 return;
             }
-            
+
             object path = version_store.GetValue(iter, 2);
-            
+
             if(path == null) {
                 path_label.Hide();
                 return;
             }
-            
+
             path_label.Text = path as string;
             path_label.Show();
         }
-        
+
         private TreeStore FillStore()
         {
-            version_store = new TreeStore(typeof(string), 
+            version_store = new TreeStore(typeof(string),
                 typeof(string), typeof(string));
 
             foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs
index 95c28ed..bf5e8a2 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs
@@ -33,25 +33,25 @@ namespace Hyena.Gui.Theatrics
     public class Actor<T>
     {
         private T target;
-        
+
         private DateTime start_time;
         private uint duration;
         private double frames;
         private double percent;
         private bool can_expire = true;
-    
+
         public Actor (T target, uint duration)
         {
             this.target = target;
             this.duration = duration;
             Reset ();
         }
-        
+
         public void Reset ()
         {
             Reset (duration);
         }
-        
+
         public void Reset (uint duration)
         {
             start_time = DateTime.Now;
@@ -59,13 +59,13 @@ namespace Hyena.Gui.Theatrics
             percent = 0.0;
             this.duration = duration;
         }
-        
+
         public virtual void Step ()
         {
             if (!CanExpire && percent >= 1.0) {
                 Reset ();
             }
-            
+
             percent = (DateTime.Now - start_time).TotalMilliseconds / duration;
             frames++;
         }
@@ -73,32 +73,32 @@ namespace Hyena.Gui.Theatrics
         public bool Expired {
             get { return CanExpire && percent >= 1.0; }
         }
-        
+
         public bool CanExpire {
             get { return can_expire; }
             set { can_expire = value; }
         }
-        
+
         public T Target {
             get { return target; }
         }
-        
+
         public double Duration {
             get { return duration; }
         }
-        
+
         public DateTime StartTime {
             get { return start_time; }
         }
-        
+
         public double Frames {
             get { return frames; }
         }
-        
+
         public double FramesPerSecond {
             get { return frames / ((double)duration / 1000.0); }
         }
-        
+
         public double Percent {
             get { return Math.Max (0.0, Math.Min (1.0, percent)); }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs
index 17151ee..98a510f 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs
@@ -51,53 +51,53 @@ namespace Hyena.Gui.Theatrics
         ExponentialInOut,
         Sine,
     }
-    
+
     public static class Choreographer
     {
         public static int PixelCompose (double percent, int size, Easing easing)
         {
             return (int)Math.Round (Compose (percent, size, easing));
         }
-        
+
         public static double Compose (double percent, double scale, Easing easing)
         {
             return scale * Compose (percent, easing);
         }
-        
+
         public static double Compose (double percent, Easing easing)
         {
             if (percent < 0.0 || percent > 1.0) {
                 throw new ArgumentOutOfRangeException ("percent", "must be between 0 and 1 inclusive");
             }
-        
+
             switch (easing) {
                 case Easing.QuadraticIn:
                     return percent * percent;
-                
+
                 case Easing.QuadraticOut:
                     return -1.0 * percent * (percent - 2.0);
-                
+
                 case Easing.QuadraticInOut:
                     percent *= 2.0;
                     return percent < 1.0
                         ? percent * percent * 0.5
                         : -0.5 * (--percent * (percent - 2.0) - 1.0);
-                
+
                 case Easing.ExponentialIn:
                     return Math.Pow (2.0, 10.0 * (percent - 1.0));
-                
+
                 case Easing.ExponentialOut:
                     return -Math.Pow (2.0, -10.0 * percent) + 1.0;
-                
+
                 case Easing.ExponentialInOut:
                     percent *= 2.0;
                     return percent < 1.0
                         ? 0.5 * Math.Pow (2.0, 10.0 * (percent - 1.0))
                         : 0.5 * (-Math.Pow (2.0, -10.0 * --percent) + 2.0);
-                
+
                 case Easing.Sine:
                     return Math.Sin (percent * Math.PI);
-                
+
                 case Easing.Linear:
                 default:
                     return percent;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs
index 91d74c0..6531e62 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs
@@ -35,80 +35,80 @@ namespace Hyena.Gui.Theatrics
         private Stage<T> stage;
         public Stage<T> Stage {
             get { return stage; }
-            set { 
+            set {
                 if (stage == value) {
                     return;
                 }
-                
+
                 if (stage != null) {
                     stage.ActorStep -= OnActorStep;
                 }
-                
+
                 stage = value;
-                
+
                 if (stage != null) {
                     stage.ActorStep += OnActorStep;
                 }
             }
         }
-        
+
         private T target;
         public T Target {
             get { return target; }
             set { target = value; }
         }
-        
+
         public double Percent {
             get { return IsPulsing ? stage[Target].Percent : 0; }
         }
-        
+
         public bool IsPulsing {
             get { return stage != null && stage.Contains (Target); }
         }
-        
+
         public bool Stopping {
             get { return !IsPulsing ? true : stage[Target].CanExpire; }
         }
-        
+
         #pragma warning disable 0067
         // FIXME: This is to mute gmcs: https://bugzilla.novell.com/show_bug.cgi?id=360455
         public event EventHandler Pulse;
         #pragma warning restore 0067
-        
+
         public Pulsator ()
         {
         }
-        
-        public Pulsator (Stage<T> stage) 
+
+        public Pulsator (Stage<T> stage)
         {
             Stage = stage;
         }
-        
+
         public void StartPulsing ()
         {
             if (!Stage.Contains (Target)) {
                 Stage.Add (Target);
             }
-            
+
             Stage[Target].CanExpire = false;
         }
-        
+
         public void StopPulsing ()
         {
             if (Stage.Contains (Target)) {
                 Stage[Target].CanExpire = true;
             }
         }
-        
+
         private bool OnActorStep (Actor<T> actor)
         {
             if (actor.Target == target) {
                 OnPulse ();
             }
-            
+
             return true;
         }
-        
+
         protected virtual void OnPulse ()
         {
             EventHandler handler = Pulse;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs
index faddf76..04acc2c 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs
@@ -33,30 +33,30 @@ namespace Hyena.Gui.Theatrics
     public class SingleActorStage : Stage<object>
     {
         private object target = new object ();
-        
+
         public SingleActorStage () : base ()
         {
         }
-        
+
         public SingleActorStage (uint actorDuration) : base (actorDuration)
         {
         }
-        
+
         protected override bool OnActorStep (Actor<object> actor)
         {
             return true;
         }
-        
+
         public void Reset ()
         {
             AddOrReset (target);
         }
-        
+
         public void Reset (uint duration)
         {
             AddOrReset (target, duration);
         }
-        
+
         public Actor<object> Actor {
             get { return this[target]; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
index 8f0cc98..f60985d 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
@@ -32,128 +32,128 @@ using System.Collections.Generic;
 namespace Hyena.Gui.Theatrics
 {
     public class Stage<T>
-    {   
+    {
         public delegate bool ActorStepHandler (Actor<T> actor);
-    
+
         private Dictionary<T, Actor<T>> actors = new Dictionary<T, Actor<T>> ();
         private uint timeout_id;
-        
+
         private uint update_frequency = 30;
         private uint default_duration = 1000;
         private bool playing = true;
-        
+
         public event ActorStepHandler ActorStep;
-        
+
         #pragma warning disable 0067
         // FIXME: This is to mute gmcs: https://bugzilla.novell.com/show_bug.cgi?id=360455
         public event EventHandler Iteration;
         #pragma warning restore 0067
-        
+
         public Stage ()
         {
         }
-        
+
         public Stage (uint actorDuration)
         {
             default_duration = actorDuration;
         }
-        
+
         public Actor<T> this[T target] {
             get {
                 if (actors.ContainsKey (target)) {
                     return actors[target];
                 }
-                
+
                 return null;
             }
         }
-        
+
         public bool Contains (T target)
         {
             return actors.ContainsKey (target);
         }
-        
+
         public Actor<T> Add (T target)
         {
             lock (this) {
                 return Add (target, default_duration);
             }
         }
-        
+
         public Actor<T> Add (T target, uint duration)
         {
             lock (this) {
                 if (Contains (target)) {
                     throw new InvalidOperationException ("Stage already contains this actor");
                 }
-                
+
                 Actor<T> actor = new Actor<T> (target, duration);
                 actors.Add (target, actor);
-                
+
                 CheckTimeout ();
-                
+
                 return actor;
             }
         }
-        
+
         public Actor<T> AddOrReset (T target)
         {
             lock (this) {
                 return AddOrResetCore (target, null);
             }
         }
-        
+
         public Actor<T> AddOrReset (T target, uint duration)
         {
             lock (this) {
                 return AddOrResetCore (target, duration);
             }
         }
-        
+
         private Actor<T> AddOrResetCore (T target, uint? duration)
         {
             lock (this) {
                 if (Contains (target)) {
                     Actor<T> actor = this[target];
-                    
+
                     if (duration == null) {
                         actor.Reset ();
                     } else {
                         actor.Reset (duration.Value);
                     }
-                    
+
                     CheckTimeout ();
-                    
+
                     return actor;
                 }
-                
+
                 return Add (target);
             }
         }
-        
+
         public void Reset (T target)
         {
             lock (this) {
                 ResetCore (target, null);
             }
         }
-        
+
         public void Reset (T target, uint duration)
         {
             lock (this) {
                 ResetCore (target, duration);
             }
         }
-        
+
         private void ResetCore (T target, uint? duration)
         {
             lock (this) {
                 if (!Contains (target)) {
                     throw new InvalidOperationException ("Stage does not contain this actor");
                 }
-                
+
                 CheckTimeout ();
-                
+
                 if (duration == null) {
                     this [target].Reset ();
                 } else {
@@ -161,7 +161,7 @@ namespace Hyena.Gui.Theatrics
                 }
             }
         }
-        
+
         private void CheckTimeout ()
         {
             if ((!Playing || actors.Count == 0) && timeout_id > 0) {
@@ -173,29 +173,29 @@ namespace Hyena.Gui.Theatrics
                 return;
             }
         }
-        
+
         private bool OnTimeout ()
         {
             if (!Playing || this.actors.Count == 0) {
                 timeout_id = 0;
                 return false;
             }
-            
+
             Queue<Actor<T>> actors = new Queue<Actor<T>> (this.actors.Values);
             while (actors.Count > 0) {
                 Actor<T> actor = actors.Dequeue ();
                 actor.Step ();
-                
+
                 if (!OnActorStep (actor) || actor.Expired) {
                     this.actors.Remove (actor.Target);
                 }
             }
-            
+
             OnIteration ();
-            
+
             return true;
         }
-        
+
         protected virtual bool OnActorStep (Actor<T> actor)
         {
             ActorStepHandler handler = ActorStep;
@@ -208,7 +208,7 @@ namespace Hyena.Gui.Theatrics
             }
             return false;
         }
-        
+
         protected virtual void OnIteration ()
         {
             EventHandler handler = Iteration;
@@ -216,21 +216,21 @@ namespace Hyena.Gui.Theatrics
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void Play ()
         {
             lock (this) {
                 Playing = true;
             }
         }
-        
+
         public void Pause ()
         {
             lock (this) {
                 Playing = false;
             }
         }
-        
+
         public void Exeunt ()
         {
             lock (this) {
@@ -238,12 +238,12 @@ namespace Hyena.Gui.Theatrics
                 CheckTimeout ();
             }
         }
-        
+
         public uint DefaultActorDuration {
             get { return default_duration; }
             set { lock (this) { default_duration = value; } }
         }
-        
+
         public bool Playing {
             get { return playing; }
             set {
@@ -251,13 +251,13 @@ namespace Hyena.Gui.Theatrics
                     if (playing == value) {
                         return;
                     }
-                
-                    playing = value; 
+
+                    playing = value;
                     CheckTimeout ();
                 }
             }
         }
-        
+
         public uint UpdateFrequency {
             get { return update_frequency; }
             set {
@@ -268,7 +268,7 @@ namespace Hyena.Gui.Theatrics
                 }
             }
         }
-        
+
         public int ActorCount {
             get { return actors.Count; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs
index d63911a..5447fca 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs
@@ -33,7 +33,7 @@ using NUnit.Framework;
 
 using Hyena;
 using Hyena.Gui.Theatrics;
-    
+
 namespace Hyena.Gui.Theatrics.Tests
 {
     [TestFixture]
@@ -46,67 +46,67 @@ namespace Hyena.Gui.Theatrics.Tests
                 Assert.AreEqual (values[(int)j], value);
             }
         }
-    
+
         [Test]
         public void QuadraticInCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 0, 1, 2, 4, 6, 9, 12, 16, 20, 25, 30, 36, 42, 49, 56, 64, 72, 81, 90, 100
             }, Easing.QuadraticIn);
         }
-           
+
         [Test]
         public void QuadraticOutCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 10, 19, 28, 36, 44, 51, 58, 64, 70, 75, 80, 84, 88, 91, 94, 96, 98, 99, 100, 100
             }, Easing.QuadraticOut);
         }
-           
+
         [Test]
         public void QuadraticInOutCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 1, 2, 4, 8, 12, 18, 24, 32, 40, 50, 60, 68, 76, 82, 88, 92, 96, 98, 100, 100
             }, Easing.QuadraticInOut);
         }
-           
+
         [Test]
         public void ExponentialInCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 6, 9, 12, 18, 25, 35, 50, 71, 100
             }, Easing.ExponentialIn);
         }
-           
+
         [Test]
         public void ExponentialOutCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 29, 50, 65, 75, 82, 88, 91, 94, 96, 97, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100
             }, Easing.ExponentialOut);
         }
-           
+
         [Test]
         public void ExponentialInOutCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 0, 0, 0, 1, 2, 3, 6, 13, 25, 50, 75, 88, 94, 97, 98, 99, 100, 100, 100, 100
             }, Easing.ExponentialInOut);
         }
-           
+
         [Test]
         public void LinearCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
             }, Easing.Linear);
         }
-          
+
         [Test]
         public void SineCompose ()
         {
-            _TestComposeRange (new int [] { 
+            _TestComposeRange (new int [] {
                 0, 16, 31, 45, 59, 71, 81, 89, 95, 99, 100, 99, 95, 89, 81, 71, 59, 45, 31, 16, 0
             }, Easing.Sine);
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs
index f67b5ef..4e73dec 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs
@@ -32,7 +32,7 @@ using Gtk;
 
 namespace Hyena.Gui.Theming
 {
-    public enum GtkColorClass 
+    public enum GtkColorClass
     {
         Light,
         Mid,
@@ -53,7 +53,7 @@ namespace Hyena.Gui.Theming
 
         public Widget Widget {
             get { return widget; }
-            set { 
+            set {
                 if (widget == value) {
                     return;
                 } else if (widget != null) {
@@ -85,35 +85,35 @@ namespace Hyena.Gui.Theming
         {
             RefreshColors ();
         }
-        
+
         public Cairo.Color GetWidgetColor (GtkColorClass @class, StateType state)
         {
             if (gtk_colors == null) {
                 RefreshColors ();
             }
-            
+
             return gtk_colors[(int)@class * ((int)StateType.Insensitive + 1) + (int)state];
         }
-        
+
         public void RefreshColors ()
         {
             if (refreshing) {
                 return;
             }
-            
+
             refreshing = true;
-            
+
             int sn = (int)StateType.Insensitive + 1;
             int cn = (int)GtkColorClass.Foreground + 1;
-            
+
             if (gtk_colors == null) {
                 gtk_colors = new Cairo.Color[sn * cn];
             }
-                
+
             for (int c = 0, i = 0; c < cn; c++) {
                 for (int s = 0; s < sn; s++, i++) {
                     Gdk.Color color = Gdk.Color.Zero;
-                    
+
                     if (widget != null && widget.IsRealized) {
                         switch ((GtkColorClass)c) {
                             case GtkColorClass.Light:      color = widget.Style.LightColors[s]; break;
@@ -127,13 +127,13 @@ namespace Hyena.Gui.Theming
                     } else {
                         color = new Gdk.Color (0, 0, 0);
                     }
-                    
+
                     gtk_colors[c * sn + s] = CairoExtensions.GdkColorToCairoColor (color);
                 }
             }
 
             OnRefreshed ();
-            
+
             refreshing = false;
         }
 
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
index 7c70b46..e67768a 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
@@ -40,14 +40,14 @@ namespace Hyena.Gui.Theming
         public GtkTheme (Widget widget) : base (widget)
         {
         }
-        
+
         public static Cairo.Color GetCairoTextMidColor (Widget widget)
         {
             Cairo.Color text_color = CairoExtensions.GdkColorToCairoColor (widget.Style.Foreground (StateType.Normal));
             Cairo.Color background_color = CairoExtensions.GdkColorToCairoColor (widget.Style.Background (StateType.Normal));
             return CairoExtensions.AlphaBlend (text_color, background_color, 0.5);
         }
-        
+
         public static Gdk.Color GetGdkTextMidColor (Widget widget)
         {
             Cairo.Color color = GetCairoTextMidColor (widget);
@@ -83,7 +83,7 @@ namespace Hyena.Gui.Theming
             Color color_a = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
             Color color_b = CairoExtensions.ColorShade (color_a, 1.4);
 
-            RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0, 
+            RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0,
                 Context.X, Context.Y, 2.0 * Context.Radius);
             fill.AddColorStop (0, color_a);
             fill.AddColorStop (1, color_b);
@@ -97,7 +97,7 @@ namespace Hyena.Gui.Theming
             Context.Cairo.LineWidth = Context.LineWidth;
             Context.Cairo.Stroke ();
         }
-        
+
         public override void DrawArrow (Context cr, Gdk.Rectangle alloc, Hyena.Data.SortType type)
         {
             cr.LineWidth = 1;
@@ -107,7 +107,7 @@ namespace Hyena.Gui.Theming
             double x2 = x3 + (x3 - x1);
             double y1 = alloc.Y;
             double y2 = alloc.Bottom;
-            
+
             if (type == Hyena.Data.SortType.Ascending) {
                 cr.MoveTo (x1, y1);
                 cr.LineTo (x2, y1);
@@ -119,7 +119,7 @@ namespace Hyena.Gui.Theming
                 cr.LineTo (x1, y2);
                 cr.LineTo (x3, y1);
             }
-            
+
             cr.Color = Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
             cr.FillPreserve ();
             cr.Color = Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal);
@@ -138,7 +138,7 @@ namespace Hyena.Gui.Theming
             CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, CairoCorners.All);
             cr.Fill ();
         }
-        
+
         public override void DrawFrameBorder (Cairo.Context cr, Gdk.Rectangle alloc)
         {
             cr.LineWidth = BorderWidth;
@@ -158,16 +158,16 @@ namespace Hyena.Gui.Theming
                 alloc.Width - cr.LineWidth, alloc.Height - cr.LineWidth, Context.Radius, CairoCorners.All);
             cr.Stroke ();
         }
-        
+
         public override void DrawColumnHighlight (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color)
         {
             Cairo.Color light_color = CairoExtensions.ColorShade (color, 1.6);
             Cairo.Color dark_color = CairoExtensions.ColorShade (color, 1.3);
-            
+
             LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom - 1);
             grad.AddColorStop (0, light_color);
             grad.AddColorStop (1, dark_color);
-            
+
             cr.Pattern = grad;
             cr.Rectangle (alloc.X + 1.5, alloc.Y + 1.5, alloc.Width - 3, alloc.Height - 2);
             cr.Fill ();
@@ -179,18 +179,18 @@ namespace Hyena.Gui.Theming
             Cairo.Color gtk_background_color = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal);
             Cairo.Color light_color = CairoExtensions.ColorShade (gtk_background_color, 1.1);
             Cairo.Color dark_color = CairoExtensions.ColorShade (gtk_background_color, 0.95);
-            
+
             CairoCorners corners = CairoCorners.TopLeft | CairoCorners.TopRight;
 
             LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom);
             grad.AddColorStop (0, light_color);
             grad.AddColorStop (0.75, dark_color);
             grad.AddColorStop (0, light_color);
-        
+
             cr.Pattern = grad;
             CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, corners);
             cr.Fill ();
-            
+
             cr.Color = border_color;
             cr.Rectangle (alloc.X, alloc.Bottom, alloc.Width, BorderWidth);
             cr.Fill ();
@@ -237,26 +237,26 @@ namespace Hyena.Gui.Theming
             Cairo.Color gtk_background_color = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal);
             Cairo.Color dark_color = CairoExtensions.ColorShade (gtk_background_color, 0.80);
             Cairo.Color light_color = CairoExtensions.ColorShade (gtk_background_color, 1.1);
-            
+
             int y_1 = alloc.Top + 4;
             int y_2 = alloc.Bottom - 3;
-            
+
             cr.LineWidth = 1;
             cr.Antialias = Cairo.Antialias.None;
-            
+
             cr.Color = dark_color;
             cr.MoveTo (x, y_1);
             cr.LineTo (x, y_2);
             cr.Stroke ();
-            
+
             cr.Color = light_color;
             cr.MoveTo (x + 1, y_1);
             cr.LineTo (x + 1, y_2);
             cr.Stroke ();
-            
+
             cr.Antialias = Cairo.Antialias.Default;
         }
-        
+
         public override void DrawListBackground (Context cr, Gdk.Rectangle alloc, Color color)
         {
             color.A = Context.FillAlpha;
@@ -283,19 +283,19 @@ namespace Hyena.Gui.Theming
             Cairo.Color selection_stroke = CairoExtensions.ColorShade (selection_color, 0.85);
             selection_highlight.A = 0.5;
             selection_stroke.A = color.A;
-            
+
             if (filled) {
                 Cairo.Color selection_fill_light = CairoExtensions.ColorShade (selection_color, 1.12);
                 Cairo.Color selection_fill_dark = selection_color;
-                
+
                 selection_fill_light.A = color.A;
                 selection_fill_dark.A = color.A;
-                
+
                 LinearGradient grad = new LinearGradient (x, y, x, y + height);
                 grad.AddColorStop (0, selection_fill_light);
                 grad.AddColorStop (0.4, selection_fill_dark);
                 grad.AddColorStop (1, selection_fill_light);
-                
+
                 cr.Pattern = grad;
                 CairoExtensions.RoundedRectangle (cr, x, y, width, height, Context.Radius, corners, true);
                 cr.Fill ();
@@ -313,12 +313,12 @@ namespace Hyena.Gui.Theming
             if (stroked) {
                 cr.LineWidth = 1.0;
                 cr.Color = selection_stroke;
-                CairoExtensions.RoundedRectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1, 
+                CairoExtensions.RoundedRectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1,
                     Context.Radius, corners, true);
                 cr.Stroke ();
             }
         }
-        
+
         public override void DrawRowRule (Cairo.Context cr, int x, int y, int width, int height)
         {
             cr.Color = new Cairo.Color (rule_color.R, rule_color.G, rule_color.B, Context.FillAlpha);
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
index 42cf7cf..5d093c1 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
@@ -44,7 +44,7 @@ namespace Hyena.Gui.Theming
 
         private Cairo.Color selection_fill;
         private Cairo.Color selection_stroke;
-        
+
         private Cairo.Color view_fill;
         private Cairo.Color view_fill_transparent;
 
@@ -69,7 +69,7 @@ namespace Hyena.Gui.Theming
         {
             selection_fill = colors.GetWidgetColor (GtkColorClass.Dark, StateType.Active);
             selection_stroke = colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
-            
+
             view_fill = colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
             view_fill_transparent = view_fill;
             view_fill_transparent.A = 0;
@@ -78,59 +78,59 @@ namespace Hyena.Gui.Theming
 #region Drawing
 
         public abstract void DrawPie (double fraction);
-        
+
         public abstract void DrawArrow (Cairo.Context cr, Gdk.Rectangle alloc, Hyena.Data.SortType type);
-        
+
         public void DrawFrame (Cairo.Context cr, Gdk.Rectangle alloc, bool baseColor)
         {
             DrawFrameBackground (cr, alloc, baseColor);
             DrawFrameBorder (cr, alloc);
         }
-        
+
         public void DrawFrame (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color)
         {
             DrawFrameBackground (cr, alloc, color);
             DrawFrameBorder (cr, alloc);
         }
-        
+
         public void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, bool baseColor)
         {
-            DrawFrameBackground (cr, alloc,  baseColor 
+            DrawFrameBackground (cr, alloc,  baseColor
                 ? colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal)
                 : colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal));
         }
-        
+
         public void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color)
         {
             DrawFrameBackground (cr, alloc, color, null);
         }
-        
+
         public void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Pattern pattern)
         {
             DrawFrameBackground (cr, alloc, black , pattern);
         }
-        
+
         public abstract void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color, Cairo.Pattern pattern);
-        
+
         public abstract void DrawFrameBorder (Cairo.Context cr, Gdk.Rectangle alloc);
-        
+
         public abstract void DrawFrameBorderFocused (Cairo.Context cr, Gdk.Rectangle alloc);
 
         public abstract void DrawHeaderBackground (Cairo.Context cr, Gdk.Rectangle alloc);
 
         public abstract void DrawColumnHeaderFocus (Cairo.Context cr, Gdk.Rectangle alloc);
-        
+
         public abstract void DrawHeaderSeparator (Cairo.Context cr, Gdk.Rectangle alloc, int x);
-        
+
         public void DrawListBackground (Cairo.Context cr, Gdk.Rectangle alloc, bool baseColor)
         {
-            DrawListBackground (cr, alloc,  baseColor 
+            DrawListBackground (cr, alloc,  baseColor
                 ? colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal)
                 : colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal));
         }
-        
+
         public abstract void DrawListBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color);
-        
+
         public void DrawColumnHighlight (Cairo.Context cr, double cellWidth, double cellHeight)
         {
             Gdk.Rectangle alloc = new Gdk.Rectangle ();
@@ -138,25 +138,25 @@ namespace Hyena.Gui.Theming
             alloc.Height = (int)cellHeight;
             DrawColumnHighlight (cr, alloc);
         }
-        
+
         public void DrawColumnHighlight (Cairo.Context cr, Gdk.Rectangle alloc)
         {
             DrawColumnHighlight (cr, alloc, colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected));
         }
-        
+
         public abstract void DrawColumnHighlight (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color);
-        
+
         public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height)
         {
             DrawRowSelection (cr, x, y, width, height, true);
         }
-        
+
         public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height, bool filled)
         {
-            DrawRowSelection (cr, x, y, width, height, filled, true, 
+            DrawRowSelection (cr, x, y, width, height, filled, true,
                 colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected), CairoCorners.All);
         }
-        
+
         public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height,
             bool filled, bool stroked, Cairo.Color color)
         {
@@ -177,33 +177,33 @@ namespace Hyena.Gui.Theming
 
         public abstract void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height,
             bool filled, bool stroked, Cairo.Color color, CairoCorners corners);
-        
+
         public abstract void DrawRowRule (Cairo.Context cr, int x, int y, int width, int height);
 
         public Cairo.Color ViewFill {
             get { return view_fill; }
         }
-        
+
         public Cairo.Color ViewFillTransparent {
             get { return view_fill_transparent; }
         }
-        
+
         public Cairo.Color SelectionFill {
             get { return selection_fill; }
         }
-        
+
         public Cairo.Color SelectionStroke {
             get { return selection_stroke; }
         }
-        
+
         public virtual int BorderWidth {
             get { return 1; }
         }
-        
+
         public virtual int InnerBorderWidth {
             get { return 4; }
         }
-        
+
         public int TotalBorderWidth {
             get { return BorderWidth + InnerBorderWidth; }
         }
@@ -223,7 +223,7 @@ namespace Hyena.Gui.Theming
                 contexts.Push (context);
             }
         }
-        
+
         public ThemeContext PopContext ()
         {
             lock (this) {
@@ -241,7 +241,7 @@ namespace Hyena.Gui.Theming
 
         public static double Clamp (double min, double max, double value)
         {
-             return Math.Max (min, Math.Min (max, value)); 
+             return Math.Max (min, Math.Min (max, value));
         }
 
 #endregion
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs
index 9a0e8ac..ef3f3bc 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs
@@ -1,21 +1,21 @@
-// 
+//
 // ThemeEngine.cs
-//  
+//
 // Author:
 //     Aaron Bockover <abockover novell com>
-// 
+//
 // Copyright 2009 Aaron Bockover
-// 
+//
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs
index fc663d9..80c1b67 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs
@@ -45,26 +45,26 @@ namespace Hyena.Gui
         BottomRight = 8,
         All = 15
     }
-    
+
     public static class CairoExtensions
     {
         public static Pango.Layout CreateLayout (Gtk.Widget widget, Cairo.Context cairo_context)
         {
             Pango.Layout layout = PangoCairoHelper.CreateLayout (cairo_context);
             layout.FontDescription = widget.PangoContext.FontDescription.Copy ();
-            
+
             double resolution = widget.Screen.Resolution;
             if (resolution != -1) {
                 Pango.Context context = PangoCairoHelper.LayoutGetContext (layout);
                 PangoCairoHelper.ContextSetResolution (context, resolution);
                 context.Dispose ();
             }
-            
+
             Log.Debug ("Creating Pango.Layout, configuring Cairo.Context");
-            
+
             return layout;
         }
-        
+
         public static Surface CreateSurfaceForPixbuf (Cairo.Context cr, Gdk.Pixbuf pixbuf)
         {
             Surface surface = cr.Target.CreateSimilar (cr.Target.Content, pixbuf.Width, pixbuf.Height);
@@ -74,7 +74,7 @@ namespace Hyena.Gui
             ((IDisposable)surface_cr).Dispose ();
             return surface;
         }
-        
+
         public static Cairo.Color AlphaBlend (Cairo.Color ca, Cairo.Color cb, double alpha)
         {
             return new Cairo.Color (
@@ -82,12 +82,12 @@ namespace Hyena.Gui
                 (1.0 - alpha) * ca.G + alpha * cb.G,
                 (1.0 - alpha) * ca.B + alpha * cb.B);
         }
-        
+
         public static Cairo.Color GdkColorToCairoColor(Gdk.Color color)
         {
             return GdkColorToCairoColor(color, 1.0);
         }
-        
+
         public static Cairo.Color GdkColorToCairoColor(Gdk.Color color, double alpha)
         {
             return new Cairo.Color(
@@ -96,40 +96,40 @@ namespace Hyena.Gui
                 (double)(color.Blue >> 8) / 255.0,
                 alpha);
         }
-        
+
         public static Cairo.Color RgbToColor (uint rgbColor)
         {
             return RgbaToColor ((rgbColor << 8) | 0x000000ff);
         }
-        
+
         public static Cairo.Color RgbaToColor (uint rgbaColor)
         {
             return new Cairo.Color (
-                (byte)(rgbaColor >> 24) / 255.0, 
-                (byte)(rgbaColor >> 16) / 255.0, 
-                (byte)(rgbaColor >> 8) / 255.0, 
+                (byte)(rgbaColor >> 24) / 255.0,
+                (byte)(rgbaColor >> 16) / 255.0,
+                (byte)(rgbaColor >> 8) / 255.0,
                 (byte)(rgbaColor & 0x000000ff) / 255.0);
         }
-        
+
         public static bool ColorIsDark (Cairo.Color color)
         {
             double h, s, b;
             HsbFromColor (color, out h, out s, out b);
             return b < 0.5;
         }
-        
-        public static void HsbFromColor(Cairo.Color color, out double hue, 
+
+        public static void HsbFromColor(Cairo.Color color, out double hue,
             out double saturation, out double brightness)
         {
             double min, max, delta;
             double red = color.R;
             double green = color.G;
             double blue = color.B;
-            
+
             hue = 0;
             saturation = 0;
             brightness = 0;
-            
+
             if(red > green) {
                 max = Math.Max(red, blue);
                 min = Math.Min(green, blue);
@@ -137,9 +137,9 @@ namespace Hyena.Gui
                 max = Math.Max(green, blue);
                 min = Math.Min(red, blue);
             }
-            
+
             brightness = (max + min) / 2;
-            
+
             if(Math.Abs(max - min) < 0.0001) {
                 hue = 0;
                 saturation = 0;
@@ -147,9 +147,9 @@ namespace Hyena.Gui
                 saturation = brightness <= 0.5
                     ? (max - min) / (max + min)
                     : (max - min) / (2 - max - min);
-               
+
                 delta = max - min;
-                
+
                 if(red == max) {
                     hue = (green - blue) / delta;
                 } else if(green == max) {
@@ -157,49 +157,49 @@ namespace Hyena.Gui
                 } else if(blue == max) {
                     hue = 4 + (red - green) / delta;
                 }
-                
+
                 hue *= 60;
                 if(hue < 0) {
                     hue += 360;
                 }
             }
         }
-        
+
         private static double Modula(double number, double divisor)
         {
             return ((int)number % divisor) + (number - (int)number);
         }
-        
+
         public static Cairo.Color ColorFromHsb(double hue, double saturation, double brightness)
         {
             int i;
             double [] hue_shift = { 0, 0, 0 };
             double [] color_shift = { 0, 0, 0 };
             double m1, m2, m3;
-            
+
             m2 = brightness <= 0.5
                 ? brightness * (1 + saturation)
                 : brightness + saturation - brightness * saturation;
-            
+
             m1 = 2 * brightness - m2;
-            
+
             hue_shift[0] = hue + 120;
             hue_shift[1] = hue;
             hue_shift[2] = hue - 120;
-            
+
             color_shift[0] = color_shift[1] = color_shift[2] = brightness;
-            
+
             i = saturation == 0 ? 3 : 0;
-            
+
             for(; i < 3; i++) {
                 m3 = hue_shift[i];
-                
+
                 if(m3 > 360) {
                     m3 = Modula(m3, 360);
                 } else if(m3 < 0) {
                     m3 = 360 - Modula(Math.Abs(m3), 360);
                 }
-                
+
                 if(m3 < 60) {
                     color_shift[i] = m1 + (m2 - m1) * m3 / 60;
                 } else if(m3 < 180) {
@@ -208,26 +208,26 @@ namespace Hyena.Gui
                     color_shift[i] = m1 + (m2 - m1) * (240 - m3) / 60;
                 } else {
                     color_shift[i] = m1;
-                }       
+                }
             }
-            
+
             return new Cairo.Color(color_shift[0], color_shift[1], color_shift[2]);
         }
-        
+
         public static Cairo.Color ColorShade (Cairo.Color @base, double ratio)
         {
             double h, s, b;
-            
+
             HsbFromColor (@base, out h, out s, out b);
-            
+
             b = Math.Max (Math.Min (b * ratio, 1), 0);
             s = Math.Max (Math.Min (s * ratio, 1), 0);
-            
+
             Cairo.Color color = ColorFromHsb (h, s, b);
             color.A = @base.A;
             return color;
         }
-        
+
         public static Cairo.Color ColorAdjustBrightness(Cairo.Color @base, double br)
         {
             double h, s, b;
@@ -235,14 +235,14 @@ namespace Hyena.Gui
             b = Math.Max(Math.Min(br, 1), 0);
             return ColorFromHsb(h, s, b);
         }
-        
+
         public static string ColorGetHex (Cairo.Color color, bool withAlpha)
         {
             if (withAlpha) {
-                return String.Format("#{0:x2}{1:x2}{2:x2}{3:x2}", (byte)(color.R * 255), (byte)(color.G * 255), 
+                return String.Format("#{0:x2}{1:x2}{2:x2}{3:x2}", (byte)(color.R * 255), (byte)(color.G * 255),
                     (byte)(color.B * 255), (byte)(color.A * 255));
             } else {
-                return String.Format("#{0:x2}{1:x2}{2:x2}", (byte)(color.R * 255), (byte)(color.G * 255), 
+                return String.Format("#{0:x2}{1:x2}{2:x2}", (byte)(color.R * 255), (byte)(color.G * 255),
                     (byte)(color.B * 255));
             }
         }
@@ -251,13 +251,13 @@ namespace Hyena.Gui
         {
             RoundedRectangle(cr, x, y, w, h, r, CairoCorners.All, false);
         }
-        
+
         public static void RoundedRectangle(Cairo.Context cr, double x, double y, double w, double h,
             double r, CairoCorners corners)
         {
             RoundedRectangle(cr, x, y, w, h, r, corners, false);
         }
-        
+
         public static void RoundedRectangle(Cairo.Context cr, double x, double y, double w, double h,
             double r, CairoCorners corners, bool topBottomFallsThrough)
         {
@@ -271,7 +271,7 @@ namespace Hyena.Gui
                 cr.Rectangle(x, y, w, h);
                 return;
             }
-            
+
             if((corners & (CairoCorners.TopLeft | CairoCorners.TopRight)) == 0 && topBottomFallsThrough) {
                 y -= r;
                 h += r;
@@ -282,14 +282,14 @@ namespace Hyena.Gui
                 } else {
                     cr.MoveTo(x, y);
                 }
-            
+
                 if((corners & CairoCorners.TopRight) != 0) {
                     cr.Arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
                 } else {
                     cr.LineTo(x + w, y);
                 }
             }
-            
+
             if((corners & (CairoCorners.BottomLeft | CairoCorners.BottomRight)) == 0 && topBottomFallsThrough) {
                 h += r;
                 cr.LineTo(x + w, y + h);
@@ -302,13 +302,13 @@ namespace Hyena.Gui
                 } else {
                     cr.LineTo(x + w, y + h);
                 }
-                
+
                 if((corners & CairoCorners.BottomLeft) != 0) {
                     cr.Arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
                 } else {
                     cr.LineTo(x, y + h);
                 }
-                
+
                 if((corners & CairoCorners.TopLeft) != 0) {
                     cr.Arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
                 } else {
@@ -322,13 +322,13 @@ namespace Hyena.Gui
             ((IDisposable)cr.Target).Dispose ();
             ((IDisposable)cr).Dispose ();
         }
-        
+
         private struct CairoInteropCall
         {
             public string Name;
             public MethodInfo ManagedMethod;
             public bool CallNative;
-            
+
             public CairoInteropCall (string name)
             {
                 Name = name;
@@ -336,40 +336,40 @@ namespace Hyena.Gui
                 CallNative = false;
             }
         }
-        
+
         private static bool CallCairoMethod (Cairo.Context cr, ref CairoInteropCall call)
         {
             if (call.ManagedMethod == null && !call.CallNative) {
-                MemberInfo [] members = typeof (Cairo.Context).GetMember (call.Name, MemberTypes.Method, 
+                MemberInfo [] members = typeof (Cairo.Context).GetMember (call.Name, MemberTypes.Method,
                     BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public);
-                
+
                 if (members != null && members.Length > 0 && members[0] is MethodInfo) {
                     call.ManagedMethod = (MethodInfo)members[0];
                 } else {
                     call.CallNative = true;
                 }
             }
-            
+
             if (call.ManagedMethod != null) {
                 call.ManagedMethod.Invoke (cr, null);
                 return true;
             }
-            
+
             return false;
         }
-        
+
         private static bool native_push_pop_exists = true;
-        
+
         [DllImport ("libcairo-2.dll")]
         private static extern void cairo_push_group (IntPtr ptr);
         private static CairoInteropCall cairo_push_group_call = new CairoInteropCall ("PushGroup");
-        
+
         public static void PushGroup (Cairo.Context cr)
         {
             if (!native_push_pop_exists) {
                 return;
             }
-            
+
             try {
                 if (!CallCairoMethod (cr, ref cairo_push_group_call)) {
                     cairo_push_group (cr.Handle);
@@ -378,17 +378,17 @@ namespace Hyena.Gui
                 native_push_pop_exists = false;
             }
         }
-        
+
         [DllImport ("libcairo-2.dll")]
         private static extern void cairo_pop_group_to_source (IntPtr ptr);
         private static CairoInteropCall cairo_pop_group_to_source_call = new CairoInteropCall ("PopGroupToSource");
-        
+
         public static void PopGroupToSource (Cairo.Context cr)
         {
             if (!native_push_pop_exists) {
                 return;
             }
-            
+
             try {
                 if (!CallCairoMethod (cr, ref cairo_pop_group_to_source_call)) {
                     cairo_pop_group_to_source (cr.Handle);
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs
index c50d02e..9f96b51 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs
@@ -33,29 +33,29 @@ namespace Hyena.Gui
     public static class CleanRoomStartup
     {
         public delegate void StartupInvocationHandler();
-        
+
         public static void Startup(StartupInvocationHandler startup)
         {
             bool disable_clean_room = false;
-            
+
             foreach(string arg in Environment.GetCommandLineArgs ()) {
                 if(arg == "--disable-clean-room") {
                     disable_clean_room = true;
                     break;
                 }
             }
-            
+
             if(disable_clean_room) {
                 startup();
                 return;
             }
-            
+
             try {
                 startup();
             } catch(Exception e) {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e);
-            
+
                 Gtk.Application.Init();
                 Hyena.Gui.Dialogs.ExceptionDialog dialog = new Hyena.Gui.Dialogs.ExceptionDialog(e);
                 dialog.Run();
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
index 1b0c0d9..4d93bb8 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
@@ -33,18 +33,18 @@ using Gtk;
 
 namespace Hyena.Gui
 {
-    public static class CompositeUtils 
+    public static class CompositeUtils
     {
         [DllImport ("libgdk-win32-2.0-0.dll")]
         private static extern IntPtr gdk_screen_get_rgba_visual (IntPtr screen);
 
         [DllImport ("libgtk-win32-2.0-0.dll")]
-        private static extern void gtk_widget_input_shape_combine_mask (IntPtr raw, IntPtr shape_mask, 
+        private static extern void gtk_widget_input_shape_combine_mask (IntPtr raw, IntPtr shape_mask,
             int offset_x, int offset_y);
 
         [DllImport ("libgdk-win32-2.0-0.dll")]
         private static extern IntPtr gdk_screen_get_rgba_colormap (IntPtr screen);
-        
+
         public static Colormap GetRgbaColormap (Screen screen)
         {
             try {
@@ -58,10 +58,10 @@ namespace Hyena.Gui
                     return cmap;
                 }
             }
-            
+
             return null;
         }
-        
+
         public static bool SetRgbaColormap (Widget w)
         {
             Gdk.Colormap cmap = GetRgbaColormap (w.Screen);
@@ -73,7 +73,7 @@ namespace Hyena.Gui
 
             return false;
         }
-        
+
         public static Visual GetRgbaVisual (Screen screen)
         {
             try {
@@ -90,13 +90,13 @@ namespace Hyena.Gui
         }
 
         [DllImport ("libgdk-win32-2.0-0.dll")]
-        private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type, 
+        private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type,
             int format, int mode, uint [] data, int nelements);
 
         [DllImport ("libgdk-win32-2.0-0.dll")]
-        private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type, 
+        private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type,
             int format, int mode, byte [] data, int nelements);
-      
+
         public static void ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, uint [] data)
         {
             gdk_property_change (win.Handle, property.Handle, type.Handle, 32, (int)mode,  data, data.Length * 4);
@@ -123,7 +123,7 @@ namespace Hyena.Gui
         [DllImport ("libgdk-win32-2.0-0.dll")]
         private static extern bool gdk_screen_is_composited (IntPtr screen);
 
-        public static bool IsComposited (Screen screen) 
+        public static bool IsComposited (Screen screen)
         {
             bool composited;
             try {
@@ -138,13 +138,13 @@ namespace Hyena.Gui
             if (!composited) {
                 composited = CompositeUtils.SupportsHint (screen, "_NET_WM_WINDOW_OPACITY");
             }
-            
+
             return composited;
         }
-        
+
         public static void SetWinOpacity (Gtk.Window win, double opacity)
         {
-            CompositeUtils.ChangeProperty (win.GdkWindow, 
+            CompositeUtils.ChangeProperty (win.GdkWindow,
                 Atom.Intern ("_NET_WM_WINDOW_OPACITY", false),
                 Atom.Intern ("CARDINAL", false),
                 PropMode.Replace,
@@ -154,7 +154,7 @@ namespace Hyena.Gui
 
         public static void InputShapeCombineMask (Widget w, Pixmap shape_mask, int offset_x, int offset_y)
         {
-            gtk_widget_input_shape_combine_mask (w.Handle, shape_mask == null ? IntPtr.Zero : shape_mask.Handle, 
+            gtk_widget_input_shape_combine_mask (w.Handle, shape_mask == null ? IntPtr.Zero : shape_mask.Handle,
                 offset_x, offset_y);
         }
     }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/Contrast.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/Contrast.cs
index 831eabd..3b86921 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/Contrast.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/Contrast.cs
@@ -37,7 +37,7 @@ namespace Hyena.Gui
      * but set the enum value to be at the end of the color_regions table
      * in contrast.c to maintain binary compatibility
      */
-    
+
     public enum ContrastPaletteColor
     {
         Aqua        =  0,
@@ -65,12 +65,12 @@ namespace Hyena.Gui
         Yellow      = 22,
         Last        = 23
     };
-    
+
     public static class Contrast
     {
-    
+
         /* Data for color palette optimization.
-         * 
+         *
          * These numbers are completely arbitrary decisions, uninformed by the experts
          * at crayola.  These colors are defined as boxes within the CIE L*a*b* color
          * space -- while they're not fully inclusive, they are "safe" in that anywhere
@@ -115,7 +115,7 @@ namespace Hyena.Gui
             const float a     = 0.055f;
             const float gamma = 2.4f;
 
-            
+
             if (K > 0.04045f)
                 return (float) Math.Pow((K + a) / (1 + a), gamma);
             else
@@ -133,23 +133,23 @@ namespace Hyena.Gui
         private static void rgb_to_lab(ushort R, ushort G, ushort B, out float L, out float a, out float b)
         {
             float x, y, z, gr, gg, gb, fy;
-            
+
             /* This is the reference white point.  Since we're treating "RGB" as
              * sRGB, this is the D65 point.
              */
-            
+
             const float Xn = 0.93819f;
             const float Yn = 0.98705f;
             const float Zn = 1.07475f;
-            
+
             gr = srgb_to_xyz_g(R / 65535.0f);
             gg = srgb_to_xyz_g(G / 65535.0f);
             gb = srgb_to_xyz_g(B / 65535.0f);
-            
+
             x = 0.412424f * gr + 0.357579f * gg + 0.180464f * gb;
             y = 0.212656f * gr + 0.715158f * gg + 0.072186f * gb;
             z = 0.019332f * gr + 0.119193f * gg + 0.950444f * gb;
-            
+
             fy = xyz_to_lab_f(y / Yn);
 
             L = 116.0f * fy - 16.0f;
@@ -162,7 +162,7 @@ namespace Hyena.Gui
             const float a     = 0.055f;
             const float gamma = 2.4f;
 
-            
+
             if (K > 0.00304f)
                 return (1.0f + a) * ((float) Math.Pow(K, (1.0f / gamma))) - a;
             else
@@ -170,19 +170,19 @@ namespace Hyena.Gui
         }
 
         private static void lab_to_rgb(float L, float a, float b, out ushort R, out ushort G, out ushort B)
-        {        
+        {
             float x, y, z, fy, fx, fz, delta, delta2, rs, gs, bs;
 
             const float Xn = 0.93819f;
             const float Yn = 0.98705f;
             const float Zn = 1.07475f;
-            
+
             fy = (L + 16.0f) / 116.0f;
             fx = fy + a / 500.0f;
             fz = fy - b / 200.0f;
             delta = 6.0f / 29.0f;
             delta2 = (float) Math.Pow(delta, 2.0f);
-            
+
             if (fx > delta)
                 x = Xn * ((float) Math.Pow(fx, 3.0f));
             else
@@ -193,13 +193,13 @@ namespace Hyena.Gui
             else
                 y = (fy - 16.0f/116.0f) * 3.0f * delta2 * Yn;
 
-            
+
             if (fz > delta)
                 z = Zn * ((float) Math.Pow(fz, 3.0f));
             else
                 z = (fz - 16.0f/116.0f) * 3.0f * delta2 * Zn;
 
-            
+
             rs =  3.2410f * x - 1.5374f * y - 0.4986f * z;
             gs = -0.9692f * x + 1.8760f * y + 0.0416f * z;
             bs =  0.0556f * x - 0.2040f * y + 1.0570f * z;
@@ -212,7 +212,7 @@ namespace Hyena.Gui
                 R = 65535;
             else
                 R = (ushort) tmp;
-            
+
             tmp = (float) Math.Floor(xyz_to_srgb_C(gs) * 65535.0f + 0.5f);
             if (tmp < 0.0f)
                 G = 0;
@@ -244,7 +244,7 @@ namespace Hyena.Gui
         /* Creates a specific color value for a foreground color, optimizing for
          * maximum readability against the background.
          */
-        
+
         public static Color RenderForegroundColor(Color background, ContrastPaletteColor color)
         {
             float L, a, b;
@@ -253,18 +253,18 @@ namespace Hyena.Gui
             float[,] points = new float[8,3];
             float ld, cd;
             int i;
-            
-            rgb_to_lab((ushort)(background.R * 255), (ushort)(background.G * 255), 
+
+            rgb_to_lab((ushort)(background.R * 255), (ushort)(background.G * 255),
                 (ushort)(background.B * 255), out L, out a, out b);
-            
+
             points[0,0] = color_regions[(int)color,0];
             points[0,1] = color_regions[(int)color,2];
             points[0,2] = color_regions[(int)color,4];
-            
+
             points[1,0] = color_regions[(int)color,0];
             points[1,1] = color_regions[(int)color,2];
             points[1,2] = color_regions[(int)color,5];
-            
+
             points[2,0] = color_regions[(int)color,0];
             points[2,1] = color_regions[(int)color,3];
             points[2,2] = color_regions[(int)color,4];
@@ -284,17 +284,17 @@ namespace Hyena.Gui
             points[6,0] = color_regions[(int)color,1];
             points[6,1] = color_regions[(int)color,3];
             points[6,2] = color_regions[(int)color,4];
-            
+
             points[7,0] = color_regions[(int)color,1];
             points[7,1] = color_regions[(int)color,3];
             points[7,2] = color_regions[(int)color,5];
-            
+
             max_dist = 0;
             max_color = 0;
-            
+
             for (i = 0; i < 8; i++) {
                 float dist = lab_distance(L, a, b, points[i,0], points[i,1], points[i,2]);
-                
+
                 if (dist > max_dist) {
                     max_dist = dist;
                     max_color = i;
@@ -306,13 +306,13 @@ namespace Hyena.Gui
              * is specified in, but it keeps things readable when the background and
              * foreground are really close.
              */
-            
+
             ld = Math.Abs(L - points[max_color,0]);
             cd = (float) Math.Sqrt (Math.Pow (Math.Abs (a - points[max_color,1]), 2.0f) + Math.Pow (Math.Abs (b - points[max_color,2]), 2.0f));
-            
+
             if ((ld < 10.0f) && (cd < 60.0f)) {
                 float dL, da, db;
-                
+
                 dL = points[max_color,0] - L;
                 da = points[max_color,1] - a;
                 db = points[max_color,2] - b;
@@ -322,9 +322,9 @@ namespace Hyena.Gui
             }
 
             ushort red, green, blue;
-            
+
             lab_to_rgb(points[max_color,0], points[max_color,1], points[max_color,2], out red, out green, out blue);
-            
+
             return new Color (red / 255.0, green / 255.0, blue / 255.0);
         }
     }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs
index 36008fe..e2883d4 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs
@@ -77,7 +77,7 @@ namespace Hyena.Gui
             }
         }
 
-        public bool CanMerge (IUndoAction action) 
+        public bool CanMerge (IUndoAction action)
         {
             EditableEraseAction erase = action as EditableEraseAction;
             if (erase == null) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs
index b39688f..d19a4e3 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs
@@ -66,7 +66,7 @@ namespace Hyena.Gui
             text += ((EditableInsertAction)action).text;
         }
 
-        public bool CanMerge (IUndoAction action) 
+        public bool CanMerge (IUndoAction action)
         {
             EditableInsertAction insert = action as EditableInsertAction;
             if (insert == null || String.IsNullOrEmpty (text)) {
@@ -78,7 +78,7 @@ namespace Hyena.Gui
                insert.index != index + text.Length ||          // Must meet eachother
                text[0] == '\n' ||                              // Don't group more than one line (inclusive)
                insert.text[0] == ' ' || insert.text[0] == '\t' // Don't group more than one word (exclusive)
-            ); 
+            );
         }
 
         public override string ToString ()
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs
index eeca006..fdd171d 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs
@@ -50,7 +50,7 @@ namespace Hyena.Gui
                 populate_popup_handler = new PopulatePopupHandler (OnPopulatePopup);
             }
         }
-        
+
         public void Connect ()
         {
             editable.KeyPressEvent += OnKeyPressEvent;
@@ -58,7 +58,7 @@ namespace Hyena.Gui
             editable.TextInserted += OnTextInserted;
             TogglePopupConnection (true);
         }
-        
+
         public void Disconnect ()
         {
             editable.KeyPressEvent -= OnKeyPressEvent;
@@ -66,7 +66,7 @@ namespace Hyena.Gui
             editable.TextInserted -= OnTextInserted;
             TogglePopupConnection (false);
         }
-        
+
         private void TogglePopupConnection (bool connect)
         {
             // Ugh, stupid Gtk+/Gtk# and lack of interfaces
@@ -124,8 +124,8 @@ namespace Hyena.Gui
             item = new ImageMenuItem (Stock.Redo, null);
             item.Sensitive = undo_manager.CanRedo;
             item.Activated += delegate { undo_manager.Redo (); };
-            item.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.z, 
-                Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask, 
+            item.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.z,
+                Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask,
                 AccelFlags.Visible);
             item.Show ();
             menu.Prepend (item);
@@ -133,12 +133,12 @@ namespace Hyena.Gui
             item = new ImageMenuItem (Stock.Undo, null);
             item.Sensitive = undo_manager.CanUndo;
             item.Activated += delegate { undo_manager.Undo (); };
-            item.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.z, 
+            item.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.z,
                 Gdk.ModifierType.ControlMask, AccelFlags.Visible);
             item.Show ();
             menu.Prepend (item);
         }
-        
+
         public UndoManager UndoManager {
             get { return undo_manager; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
index 4b94c42..1fc246a 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
@@ -1,4 +1,4 @@
-// 
+//
 // GtkUtilities.cs
 //
 // Author:
@@ -32,23 +32,23 @@ using Gtk;
 namespace Hyena.Gui
 {
     public delegate void WidgetAction<T> (T widget) where T : class;
-    
+
     public static class GtkUtilities
     {
         private static Gdk.ModifierType [] important_modifiers = new Gdk.ModifierType [] {
             Gdk.ModifierType.ControlMask,
             Gdk.ModifierType.ShiftMask
         };
-        
+
         public static bool NoImportantModifiersAreSet ()
         {
             return NoImportantModifiersAreSet (important_modifiers);
         }
-            
+
         public static bool NoImportantModifiersAreSet (params Gdk.ModifierType [] modifiers)
         {
             Gdk.ModifierType state;
-            
+
             if (Global.CurrentEvent is Gdk.EventKey) {
                 state = ((Gdk.EventKey)Global.CurrentEvent).State;
             } else if (Global.CurrentEvent is Gdk.EventButton) {
@@ -56,16 +56,16 @@ namespace Hyena.Gui
             } else {
                 return false;
             }
-            
+
             foreach (Gdk.ModifierType modifier in modifiers) {
                 if ((state & modifier) == modifier) {
                     return false;
                 }
             }
-            
+
             return true;
         }
-        
+
         public static FileFilter GetFileFilter (string name, System.Collections.Generic.IEnumerable<string> extensions)
         {
             FileFilter filter = new FileFilter ();
@@ -76,7 +76,7 @@ namespace Hyena.Gui
             }
             return filter;
         }
-        
+
         public static void SetChooserShortcuts (Gtk.FileChooserDialog chooser, params string [] shortcuts)
         {
             foreach (string shortcut in shortcuts) {
@@ -85,7 +85,7 @@ namespace Hyena.Gui
                 } catch {}
             }
         }
-        
+
         public static Gdk.Color ColorBlend (Gdk.Color a, Gdk.Color b)
         {
             // at some point, might be nice to allow any blend?
@@ -94,7 +94,7 @@ namespace Hyena.Gui
             if (blend < 0.0 || blend > 1.0) {
                 throw new ApplicationException ("blend < 0.0 || blend > 1.0");
             }
-            
+
             double blendRatio = 1.0 - blend;
 
             int aR = a.Red >> 8;
@@ -117,21 +117,21 @@ namespace Hyena.Gui
             Gdk.Colormap.System.AllocColor (ref color, true, true);
             return color;
         }
-        
-        public static void AdaptGtkRcStyle (Widget adaptee, Type adapter) 
+
+        public static void AdaptGtkRcStyle (Widget adaptee, Type adapter)
         {
             GLib.GType type = (GLib.GType)adapter;
             string path = String.Format ("*.{0}", type);
             AdaptGtkRcStyle (adaptee, type, path, path);
         }
-        
+
         public static void AdaptGtkRcStyle (Widget adaptee, GLib.GType adapter, string widgetPath, string classPath)
         {
             Style style = Gtk.Rc.GetStyleByPaths (adaptee.Settings, widgetPath, classPath, adapter);
             if (style == null) {
                 return;
             }
-            
+
             foreach (StateType state in Enum.GetValues (typeof (StateType))) {
                 adaptee.ModifyBase (state, style.Base (state));
                 adaptee.ModifyBg (state, style.Background (state));
@@ -139,19 +139,19 @@ namespace Hyena.Gui
                 adaptee.ModifyText (state, style.Text (state));
             }
         }
-        
+
         public static T StyleGetProperty<T> (Widget widget, string property, T default_value)
         {
             object result = widget.StyleGetProperty (property);
             return result != null && result.GetType () == typeof (T) ? (T)result : default_value;
         }
-        
+
         public static void ForeachWidget<T> (Container container, WidgetAction<T> action) where T : class
         {
             if (container == null) {
                 return;
             }
-            
+
             foreach (Widget child in container.Children) {
                 T widget = child as T;
                 if (widget != null) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs
index ddb055a..fc2b1a0 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs
@@ -37,55 +37,55 @@ namespace Hyena.Gui
         private static MethodInfo g_object_ref;
         private static MethodInfo gdk_window_destroy;
         private static object [] invoke_args;
-    
+
         static GtkWorkarounds ()
         {
             if (!(toggle_ref_supported = Assembly.GetAssembly (typeof (GLib.Object)).GetType (
                 "GLib.ToggleRef") != null)) {
                 return;
             }
-            
+
             // Find the P/Invoke signatures we need so we can avoid a dllmap
-            g_object_ref = typeof (GLib.Object).GetMethod ("g_object_ref", 
+            g_object_ref = typeof (GLib.Object).GetMethod ("g_object_ref",
                 BindingFlags.NonPublic | BindingFlags.Static);
-            
-            gdk_window_destroy = typeof (Gdk.Window).GetMethod ("gdk_window_destroy", 
+
+            gdk_window_destroy = typeof (Gdk.Window).GetMethod ("gdk_window_destroy",
                 BindingFlags.NonPublic | BindingFlags.Static);
         }
-        
+
         public static void WindowDestroy (Gdk.Window window)
         {
             // There is a bug in GDK, and subsequently in Gdk# 2.8.5 through 2.12.1
             // where the managed Gdk.Window.Destroy function does not obtain a
-            // normal reference (non-toggle) on the GdkWindow before calling 
+            // normal reference (non-toggle) on the GdkWindow before calling
             // _destroy on it, which the native function apparently expects.
-            
+
             // https://bugzilla.novell.com/show_bug.cgi?id=382186
             // http://anonsvn.mono-project.com/viewcvs/trunk/gtk-sharp/gdk/Window.custom?rev=101734&r1=42529&r2=101734
-        
+
             if (window == null) {
                 return;
-            } 
-            
+            }
+
             if (!toggle_ref_supported) {
                 window.Destroy ();
                 return;
             }
-            
+
             // If this ever happens I will move out west and start farming...
             if (g_object_ref == null || gdk_window_destroy == null) {
                 window.Destroy ();
                 return;
             }
-            
+
             if (invoke_args == null) {
                 invoke_args = new object[1];
             }
-            
+
             invoke_args[0] = window.Handle;
             g_object_ref.Invoke (null, invoke_args);
             gdk_window_destroy.Invoke (null, invoke_args);
-            
+
             window.Dispose ();
         }
     }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs
index 232d5ba..0de07ad 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs
@@ -35,43 +35,43 @@ namespace Hyena.Gui
     {
         [DllImport ("libpangocairo-1.0-0.dll")]
         private static extern void pango_cairo_show_layout (IntPtr cr, IntPtr layout);
-        
+
         public static void ShowLayout (Cairo.Context cr, Pango.Layout layout)
         {
-            pango_cairo_show_layout (cr == null ? IntPtr.Zero : cr.Handle, 
+            pango_cairo_show_layout (cr == null ? IntPtr.Zero : cr.Handle,
                 layout == null ? IntPtr.Zero : layout.Handle);
         }
-        
+
         [DllImport ("libpangocairo-1.0-0.dll")]
         private static extern IntPtr pango_cairo_create_layout (IntPtr cr);
 
-        public static Pango.Layout CreateLayout (Cairo.Context cr) 
+        public static Pango.Layout CreateLayout (Cairo.Context cr)
         {
             IntPtr raw_ret = pango_cairo_create_layout (cr == null ? IntPtr.Zero : cr.Handle);
             return GLib.Object.GetObject (raw_ret) as Pango.Layout;
         }
-        
+
         [DllImport ("libpangocairo-1.0-0.dll")]
         private static extern void pango_cairo_layout_path (IntPtr cr, IntPtr layout);
 
-        public static void LayoutPath (Cairo.Context cr, Pango.Layout layout, 
-            bool iUnderstandThePerformanceImplications) 
+        public static void LayoutPath (Cairo.Context cr, Pango.Layout layout,
+            bool iUnderstandThePerformanceImplications)
         {
-            pango_cairo_layout_path (cr == null ? IntPtr.Zero : cr.Handle, 
+            pango_cairo_layout_path (cr == null ? IntPtr.Zero : cr.Handle,
                 layout == null ? IntPtr.Zero : layout.Handle);
         }
-        
+
         [DllImport ("libpangocairo-1.0-0.dll")]
         private static extern void pango_cairo_context_set_resolution (IntPtr pango_context, double dpi);
-        
+
         public static void ContextSetResolution (Pango.Context context, double dpi)
         {
             pango_cairo_context_set_resolution (context == null ? IntPtr.Zero : context.Handle, dpi);
         }
-        
+
         [DllImport ("libpangocairo-1.0-0.dll")]
         private static extern IntPtr pango_layout_get_context (IntPtr layout);
-        
+
         public static Pango.Context LayoutGetContext (Pango.Layout layout)
         {
             IntPtr handle = pango_layout_get_context (layout.Handle);
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs
index 22311e3..09c13ac 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs
@@ -36,16 +36,16 @@ namespace Hyena.Gui
     public class PixbufImageSurface : ImageSurface, IDisposable
     {
         private delegate void cairo_destroy_func_t (IntPtr userdata);
-    
+
         private static bool is_le = BitConverter.IsLittleEndian;
         private static int user_data_key = 0;
         private static cairo_destroy_func_t destroy_func;
-               
+
         private static void DestroyPixelData (IntPtr data)
         {
             Marshal.FreeHGlobal (data);
         }
-        
+
         static PixbufImageSurface ()
         {
             destroy_func = new cairo_destroy_func_t (DestroyPixelData);
@@ -87,46 +87,46 @@ namespace Hyena.Gui
                 return target;
             }
         }
-        
+
         private IntPtr data;
-        
+
         public PixbufImageSurface (Gdk.Pixbuf pixbuf) : this (pixbuf, false)
         {
         }
-        
-        public PixbufImageSurface (Gdk.Pixbuf pixbuf, bool disposePixbuf) : this (disposePixbuf ? pixbuf : null, 
+
+        public PixbufImageSurface (Gdk.Pixbuf pixbuf, bool disposePixbuf) : this (disposePixbuf ? pixbuf : null,
             pixbuf.Width, pixbuf.Height, pixbuf.NChannels, pixbuf.Rowstride, pixbuf.Pixels)
         {
         }
-        
+
         // This ctor is to avoid multiple queries against the GdkPixbuf for width/height
-        private PixbufImageSurface (Gdk.Pixbuf pixbuf, int width, int height, int channels, int rowstride, IntPtr pixels) 
+        private PixbufImageSurface (Gdk.Pixbuf pixbuf, int width, int height, int channels, int rowstride, IntPtr pixels)
             : this (pixbuf, Marshal.AllocHGlobal (width * height * 4), width, height, channels, rowstride, pixels)
         {
         }
-        
-        private PixbufImageSurface (Gdk.Pixbuf pixbuf, IntPtr data, int width, int height, int channels, int rowstride, IntPtr pixels) 
+
+        private PixbufImageSurface (Gdk.Pixbuf pixbuf, IntPtr data, int width, int height, int channels, int rowstride, IntPtr pixels)
             : base (data, channels == 3 ? Format.Rgb24 : Format.Argb32, width, height, width * 4)
         {
             this.data = data;
-            
+
             CreateSurface (width, height, channels, rowstride, pixels);
             SetDestroyFunc ();
-            
+
             if (pixbuf != null && pixbuf.Handle != IntPtr.Zero) {
                 pixbuf.Dispose ();
             }
         }
-        
+
         private unsafe void CreateSurface (int width, int height, int channels, int gdk_rowstride, IntPtr pixels)
         {
             byte *gdk_pixels = (byte *)pixels;
             byte *cairo_pixels = (byte *)data;
-            
+
             for (int i = height; i > 0; i--) {
                 byte *p = gdk_pixels;
                 byte *q = cairo_pixels;
-                
+
                 if (channels == 3) {
                     byte *end = p + 3 * width;
                     while (p < end) {
@@ -139,7 +139,7 @@ namespace Hyena.Gui
                             q[2] = p[1];
                             q[3] = p[2];
                         }
-                    
+
                         p += 3;
                         q += 4;
                     }
@@ -157,27 +157,27 @@ namespace Hyena.Gui
                             q[2] = Mult (p[1], p[3]);
                             q[3] = Mult (p[2], p[3]);
                         }
-                        
+
                         p += 4;
                         q += 4;
                     }
                 }
-                
+
                 gdk_pixels += gdk_rowstride;
                 cairo_pixels += 4 * width;
             }
         }
-        
+
         private static byte Mult (byte c, byte a)
         {
-            int t = c * a + 0x7f; 
+            int t = c * a + 0x7f;
             return (byte)(((t >> 8) + t) >> 8);
         }
-        
+
         [DllImport ("libcairo-2.dll")]
-        private static extern Cairo.Status cairo_surface_set_user_data (IntPtr surface, 
+        private static extern Cairo.Status cairo_surface_set_user_data (IntPtr surface,
             ref int key, IntPtr userdata, cairo_destroy_func_t destroy);
-            
+
         private void SetDestroyFunc ()
         {
             try {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/RatingRenderer.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/RatingRenderer.cs
index 3e8dca5..8ee9ad6 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/RatingRenderer.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/RatingRenderer.cs
@@ -34,7 +34,7 @@ namespace Hyena.Gui
 {
     public class RatingRenderer
     {
-        private static double [,] star_plot = new double[,] { 
+        private static double [,] star_plot = new double[,] {
             { 0, 0.425 },
             { 0.375, 0.375 },
             { 0.5, 0.05 },
@@ -51,33 +51,33 @@ namespace Hyena.Gui
         public RatingRenderer ()
         {
         }
-        
+
         public virtual void Render (Context cr, Gdk.Rectangle area, Color color, bool showEmptyStars, bool isHovering,
             int hoverValue, double fillOpacity, double hoverFillOpacity, double strokeOpacity)
         {
             if (Value == MinRating && !isHovering && !showEmptyStars) {
                 return;
             }
-            
+
             Cairo.Color fill_color = color;
             fill_color.A = fillOpacity;
             Cairo.Color stroke_color = fill_color;
             stroke_color.A = strokeOpacity;
             Cairo.Color hover_fill_color = fill_color;
             hover_fill_color.A = hoverFillOpacity;
-                
+
             double x, y;
             ComputePosition (area, out x, out y);
-            
+
             cr.LineWidth = 1.0;
             cr.Translate (0.5, 0.5);
-                    
+
             for (int i = MinRating + 1, s = isHovering || showEmptyStars ? MaxRating : Value; i <= s; i++, x += Size) {
                 bool fill = i <= Value && Value > MinRating;
                 bool hover_fill = i <= hoverValue && hoverValue > MinRating;
                 double scale = fill || hover_fill ? Size : Size - 2;
                 double ofs = fill || hover_fill ? 0 : 1;
-                    
+
                 for (int p = 0, n = star_plot.GetLength (0); p < n; p++) {
                     double px = x + ofs + star_plot[p, 0] * scale;
                     double py = y + ofs + star_plot[p, 1] * scale;
@@ -88,7 +88,7 @@ namespace Hyena.Gui
                     }
                 }
                 cr.ClosePath ();
-                
+
                 if (fill || hover_fill) {
                     if (!isHovering || hoverValue >= Value) {
                         cr.Color = fill ? fill_color : hover_fill_color;
@@ -102,80 +102,80 @@ namespace Hyena.Gui
                 }
             }
         }
-        
+
         private void ComputePosition (Gdk.Rectangle area, out double x, out double y)
         {
             double cell_width = area.Width - 2 * Xpad;
             double cell_height = area.Height - 2 * Ypad;
-            
+
             double stars_width = MaxRating * Size;
             double stars_height = Size;
-            
+
             x = area.X + Xpad + (cell_width - stars_width) / 2.0;
             y = area.Y + Ypad + (cell_height - stars_height) / 2.0;
         }
-        
+
         public int RatingFromPosition (Gdk.Rectangle area, double x)
         {
             double r_x, r_y;
             ComputePosition (area, out r_x, out r_y);
             return x <= r_x ? 0 : Clamp (MinRating, MaxRating, (int)Math.Ceiling ((x - r_x) / Size) + MinRating);
         }
-        
+
         private static int Clamp (int min, int max, int value)
         {
             return Math.Max (min, Math.Min (max, value));
         }
-        
+
         public int ClampValue (int value)
         {
             return Clamp (MinRating, MaxRating, value);
         }
-        
+
         private int value;
         public int Value {
             get { return ClampValue (this.value); }
             set { this.value = ClampValue (value); }
         }
-        
+
         private int size = 14;
         public int Size {
             get { return size; }
             set { size = value; }
         }
-        
+
         private int min_rating = 0;
         public int MinRating {
             get { return min_rating; }
             set { min_rating = value; }
         }
-        
+
         private int max_rating = 5;
         public int MaxRating {
             get { return max_rating; }
             set { max_rating = value; }
         }
-        
+
         public int RatingLevels {
             get { return MaxRating - MinRating + 1; }
         }
-        
+
         private int xpad = 2;
         public int Xpad {
             get { return xpad; }
             set { xpad = value; }
         }
-        
+
         public int ypad = 2;
         public int Ypad {
             get { return ypad; }
             set { ypad = value; }
         }
-        
+
         public int Width {
             get { return Xpad * 2 + RatingLevels * Size; }
         }
-        
+
         public int Height {
             get { return Ypad * 2 + Size; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs
index a4429c6..d82d67b 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs
@@ -34,38 +34,38 @@ namespace Hyena.Gui
     public class ShadingTestWindow : Window
     {
         private int steps = 16;
-    
+
         public ShadingTestWindow () : base ("Shading Test")
         {
             SetSizeRequest (512, 512);
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-            
+
             double step_width = Allocation.Width / (double)steps;
             double step_height = Allocation.Height / (double)steps;
             double h = 1.0;
             double s = 0.0;
-            
+
             for (int xi = 0, i = 0; xi < steps; xi++) {
                 for (int yi = 0; yi < steps; yi++, i++) {
                     double bg_b = (double)(i / 255.0);
                     double fg_b = 1.0 - bg_b;
-                    
+
                     double x = Allocation.X + xi * step_width;
                     double y = Allocation.Y + yi * step_height;
-                
+
                     cr.Rectangle (x, y, step_width, step_height);
                     cr.Color = CairoExtensions.ColorFromHsb (h, s, bg_b);
                     cr.Fill ();
-                    
+
                     int tw, th;
                     Pango.Layout layout = new Pango.Layout (PangoContext);
                     layout.SetText (((int)(bg_b * 255.0)).ToString ());
                     layout.GetPixelSize (out tw, out th);
-                    
+
                     cr.Translate (0.5, 0.5);
                     cr.MoveTo (x + (step_width - tw) / 2.0, y + (step_height - th) / 2.0);
                     cr.Color = CairoExtensions.ColorFromHsb (h, s, fg_b);
@@ -73,7 +73,7 @@ namespace Hyena.Gui
                     cr.Translate (-0.5, -0.5);
                 }
             }
-            
+
             CairoExtensions.DisposeContext (cr);
             return true;
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs
index cc04904..6b24d9b 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs
@@ -33,12 +33,12 @@ namespace Hyena.Gui
     internal class TestModuleAttribute : Attribute
     {
         private string name;
-        public string Name {    
+        public string Name {
             get { return name; }
             set { name = value; }
         }
-        
-        public TestModuleAttribute (string name) 
+
+        public TestModuleAttribute (string name)
         {
             this.name = name;
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs
index ad63679..35c1cbc 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs
@@ -42,37 +42,37 @@ namespace Hyena.Gui
             runner.ShowAll ();
             Application.Run ();
         }
-    
+
         private TreeStore store;
-    
+
         public TestModuleRunner () : base ("Hyena.Gui Module Tester")
         {
             SetSizeRequest (-1, 300);
             Move (100, 100);
-            
+
             BuildModuleList ();
             BuildView ();
         }
-        
+
         private void BuildModuleList ()
         {
             store = new TreeStore (typeof (string), typeof (Type));
-            
+
             foreach (Type type in Assembly.GetExecutingAssembly ().GetTypes ()) {
                 foreach (TestModuleAttribute attr in type.GetCustomAttributes (typeof (TestModuleAttribute), false)) {
                     store.AppendValues (attr.Name, type);
                 }
             }
         }
-        
+
         private void BuildView ()
         {
             VBox box = new VBox ();
             Add (box);
-            
+
             ScrolledWindow sw = new ScrolledWindow ();
             sw.HscrollbarPolicy = PolicyType.Never;
-            
+
             TreeView view = new TreeView ();
             view.RowActivated += delegate (object o, RowActivatedArgs args) {
                 TreeIter iter;
@@ -86,15 +86,15 @@ namespace Hyena.Gui
             };
             view.Model = store;
             view.AppendColumn ("Module", new CellRendererText (), "text", 0);
-            
+
             sw.Add (view);
             box.PackStart (sw, true, true, 0);
             sw.ShowAll ();
-            
+
             Button button = new Button (Stock.Quit);
             button.Clicked += delegate { Destroy (); Application.Quit (); };
             box.PackStart (button, false, false, 0);
-            
+
             box.ShowAll ();
         }
     }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/TooltipSetter.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/TooltipSetter.cs
index 915f78d..48323e7 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/TooltipSetter.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/TooltipSetter.cs
@@ -39,15 +39,15 @@ namespace Hyena.Gui
         private static MethodInfo host_set_tip_method;
         private static PropertyInfo tooltip_text_property;
         private static bool reflected;
-    
+
         public static object CreateHost ()
         {
             if (tooltip_text_property != null) {
                 return null;
-            } 
-            
+            }
+
             Type type = reflected ? null : typeof (Widget);
-            
+
             if (type != null) {
                 tooltip_text_property = type.GetProperty ("TooltipText", BindingFlags.Instance | BindingFlags.Public);
                 if (tooltip_text_property != null) {
@@ -55,24 +55,24 @@ namespace Hyena.Gui
                     return null;
                 }
             }
-            
+
             if (host_set_tip_method == null && !reflected) {
                 reflected = true;
                 host_type = Type.GetType (String.Format ("Gtk.Tooltips, {0}", type.Assembly.FullName));
                 if (type == null) {
                     return null;
                 }
-                
-                host_set_tip_method = host_type.GetMethod ("SetTip", BindingFlags.Instance | 
+
+                host_set_tip_method = host_type.GetMethod ("SetTip", BindingFlags.Instance |
                     BindingFlags.Public | BindingFlags.InvokeMethod);
                 if (host_set_tip_method == null) {
                     return null;
                 }
             }
-            
+
             return host_set_tip_method != null ? Activator.CreateInstance (host_type) : null;
         }
-        
+
         public static void Set (object host, Widget widget, string textTip)
         {
             if (tooltip_text_property != null) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
index f03f79c..ba9ea15 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
@@ -71,7 +71,7 @@ namespace Hyena.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 spin_button.ValueChanged -= HandleValueChanged;
                 combo.Changed -= HandleValueChanged;
                 query_value = value as FileSizeQueryValue;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs
index 95560f3..f4ed1a9 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs
@@ -50,7 +50,7 @@ namespace Hyena.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 spin_button.ValueChanged -= HandleValueChanged;
                 query_value = value as IntegerQueryValue;
                 spin_button.SetRange (query_value.MinValue, query_value.MaxValue);
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs
index 207fa14..0fe4562 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs
@@ -75,7 +75,7 @@ namespace Hyena.Query.Gui
             Alignment matchesAlignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
             matchesAlignment.SetPadding (5, 5, 5, 5);
             matchesAlignment.Add (terms_box);
-        
+
             matchesFrame = new Frame (null);
             matchesFrame.Add (matchesAlignment);
             matchesFrame.LabelWidget = BuildMatchHeader ();
@@ -100,27 +100,27 @@ namespace Hyena.Query.Gui
         {
             HBox header = new HBox ();
             header.Show ();
-            
+
             terms_enabled_checkbox = new CheckButton (Catalog.GetString ("_Match"));
             terms_enabled_checkbox.Show ();
             terms_enabled_checkbox.Active = true;
             terms_enabled_checkbox.Toggled += OnMatchCheckBoxToggled;
             header.PackStart (terms_enabled_checkbox, false, false, 0);
-            
+
             terms_logic_combo = ComboBox.NewText ();
             terms_logic_combo.AppendText (Catalog.GetString ("all"));
             terms_logic_combo.AppendText (Catalog.GetString ("any"));
             terms_logic_combo.Show ();
             terms_logic_combo.Active = 0;
             header.PackStart (terms_logic_combo, false, false, 0);
-            
+
             terms_label = new Label (Catalog.GetString ("of the following:"));
             terms_label.Show ();
             terms_label.Xalign = 0.0f;
             header.PackStart (terms_label, true, true, 0);
-            
+
             header.Spacing = 5;
-            
+
             return header;
         }
 
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs
index d2643b1..df8060e 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs
@@ -43,13 +43,13 @@ namespace Hyena.Query.Gui
         private TextView input;
         private TextView sql;
         private TextView xml;
-        
+
         private QueryFieldSet query_field_set;
-    
+
         public QueryDebugger () : base ("Hyena.Query Debugger")
         {
             SetDefaultSize (800, 600);
-            
+
             VBox input_box = new VBox ();
             input_box.Spacing = 8;
             ScrolledWindow sw = new ScrolledWindow ();
@@ -71,7 +71,7 @@ namespace Hyena.Query.Gui
             parse.Clicked += OnParseUserQuery;
             button_box.PackStart (parse, false, false, 0);
             input_box.PackStart (button_box, false, false, 0);
-            
+
             HBox output_box = new HBox ();
             output_box.Spacing = 8;
             sw = new ScrolledWindow ();
@@ -88,20 +88,20 @@ namespace Hyena.Query.Gui
             xml.WrapMode = WrapMode.Word;
             sw.Add (xml);
             output_box.PackStart (sw, true, true, 0);
-            
+
             VPaned pane = new VPaned ();
             pane.Add1 (input_box);
             pane.Add2 (output_box);
             pane.Position = 100;
-            
+
             Add (pane);
             pane.ShowAll ();
-            
+
             input.HasFocus = true;
-            
+
             LoadQueryFieldSet ();
         }
-        
+
         private void LoadQueryFieldSet ()
         {
             Assembly asm = Assembly.LoadFile ("Banshee.Services.dll");
@@ -109,23 +109,23 @@ namespace Hyena.Query.Gui
             FieldInfo f = t.GetField ("FieldSet", BindingFlags.Public | BindingFlags.Static);
             query_field_set = (QueryFieldSet)f.GetValue (null);
         }
-        
+
         private StreamReader StringToStream (string s)
         {
             return new StreamReader (new MemoryStream (System.Text.Encoding.UTF8.GetBytes (s)));
         }
-        
+
         private void OnParseUserQuery (object o, EventArgs args)
         {
             UserQueryParser parser = new UserQueryParser ();
             parser.InputReader = StringToStream (input.Buffer.Text);
             QueryNode node = parser.BuildTree (query_field_set);
-            
+
             sql.Buffer.Text = node.ToSql (query_field_set) ?? String.Empty;
-            
+
             XmlDocument doc = new XmlDocument ();
             doc.LoadXml (node.ToXml (query_field_set));
-            
+
             MemoryStream s = new MemoryStream ();
             XmlTextWriter w = new XmlTextWriter (s, System.Text.Encoding.UTF8);
             w.Formatting = Formatting.Indented;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs
index 6a1814a..545b9e3 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs
@@ -54,21 +54,21 @@ namespace Hyena.Query.Gui
             this.limits = limits;
 
             Spacing = 5;
-            
+
             enabled_checkbox = new CheckButton (Catalog.GetString ("_Limit to"));
             enabled_checkbox.Toggled += OnEnabledToggled;
-            
+
             count_spin = new SpinButton (0, Double.MaxValue, 1);
             count_spin.Numeric = true;
             count_spin.Digits = 0;
             count_spin.Value = 25;
             count_spin.SetSizeRequest (60, -1);
-            
+
             limit_combo = ComboBox.NewText ();
             foreach (QueryLimit limit in limits) {
                 limit_combo.AppendText (limit.Label);
             }
-                
+
             order_combo = ComboBox.NewText ();
             order_combo.RowSeparatorFunc = IsRowSeparator;
             foreach (QueryOrder order in orders) {
@@ -84,7 +84,7 @@ namespace Hyena.Query.Gui
             PackStart (limit_combo, false, false, 0);
             PackStart (new Label (Catalog.GetString ("selected by")), false, false, 0);
             PackStart (order_combo, false, false, 0);
-                
+
             enabled_checkbox.Active = false;
             limit_combo.Active = 0;
             order_combo.Active = 0;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs
index 917b620..f5413d7 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs
@@ -84,17 +84,17 @@ namespace Hyena.Query.Gui
         {
             field_chooser = ComboBox.NewText ();
             field_chooser.Changed += HandleFieldChanged;
-            
+
             op_chooser = ComboBox.NewText ();
             op_chooser.RowSeparatorFunc = IsRowSeparator;
             op_chooser.Changed += HandleOperatorChanged;
-            
+
             value_box = new HBox ();
 
             remove_button = new Button (new Image ("gtk-remove", IconSize.Button));
             remove_button.Relief = ReliefStyle.None;
             remove_button.Clicked += OnButtonRemoveClicked;
-            
+
             add_button = new Button (new Image ("gtk-add", IconSize.Button));
             add_button.Relief = ReliefStyle.None;
             add_button.Clicked += OnButtonAddClicked;
@@ -123,7 +123,7 @@ namespace Hyena.Query.Gui
             value_box.ShowAll ();
             button_box.ShowAll ();
         }
-        
+
         private bool first = true;
         private void SetValueEntry (QueryValueEntry entry)
         {
@@ -187,7 +187,7 @@ namespace Hyena.Query.Gui
             op_chooser.Changed += HandleOperatorChanged;
             op_chooser.Active = 0;
         }
-        
+
         private void HandleOperatorChanged (object o, EventArgs args)
         {
             if (op_chooser.Active < 0 || op_chooser.Active >= operators.Count) {
@@ -201,26 +201,26 @@ namespace Hyena.Query.Gui
 
             //value_entry = new QueryValueEntry <field.ValueType> ();
         }
-        
+
         private void OnButtonAddClicked (object o, EventArgs args)
         {
             EventHandler handler = AddRequest;
             if (handler != null)
                 handler (this, new EventArgs ());
         }
-        
+
         private void OnButtonRemoveClicked (object o, EventArgs args)
         {
             EventHandler handler = RemoveRequest;
             if (handler != null)
                 handler (this, new EventArgs ());
         }
-        
+
         public bool CanDelete {
             get { return remove_button.Sensitive; }
             set { remove_button.Sensitive = value; }
         }
-        
+
         public QueryTermNode QueryNode {
             get {
                 QueryTermNode node = new QueryTermNode ();
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs
index c75be37..5a9949d 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs
@@ -48,7 +48,7 @@ namespace Hyena.Query.Gui
         public QueryTermBox FirstRow {
             get { return terms.Count > 0 ? terms[0] : null; }
         }
-        
+
         public QueryTermsBox (QueryFieldSet fieldSet) : base (1, 4, false)
         {
             // Sort the fields alphabetically by their label
@@ -117,13 +117,13 @@ namespace Hyena.Query.Gui
 
             return row;
         }
-        
+
         protected void OnRowAddRequest (object o, EventArgs args)
         {
             CreateRow (true);
             UpdateCanDelete ();
         }
-        
+
         protected void OnRowRemoveRequest (object o, EventArgs args)
         {
             RemoveRow (terms.IndexOf (o as QueryTermBox));
@@ -162,7 +162,7 @@ namespace Hyena.Query.Gui
             terms.Remove (row);
             UpdateCanDelete ();
         }
-        
+
         protected void UpdateCanDelete ()
         {
             if (FirstRow != null) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs
index d07b438..f3bd1c7 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs
@@ -48,7 +48,7 @@ namespace Hyena.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 entry.Changed -= HandleChanged;
                 query_value = value as StringQueryValue;
                 entry.Text = (query_value.Value as string) ?? String.Empty;
diff --git a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
index e543b72..0158ad1 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
@@ -72,7 +72,7 @@ namespace Hyena.Query.Gui
 
         public override QueryValue QueryValue {
             get { return query_value; }
-            set { 
+            set {
                 spin_button.ValueChanged -= HandleValueChanged;
                 combo.Changed -= HandleValueChanged;
 
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/AccordionPane.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/AccordionPane.cs
index 9810f24..9cc6894 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/AccordionPane.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/AccordionPane.cs
@@ -36,14 +36,14 @@ namespace Hyena.Widgets
     public class AccordionPane : Bin
     {
         private List<Gtk.Paned> panes = new List<Paned> ();
-        
-        private Box 
-        
+
+        private Box
+
         public AccordionPane () : base ()
         {
         }
     }
-    
+
 #region Test Module
 
     [Hyena.Gui.TestModule ("Accordion Pane")]
@@ -53,7 +53,7 @@ namespace Hyena.Widgets
         {
             VBox pbox = new VBox ();
             Add (pbox);
-            
+
             Menu m = new Menu ();
             MenuBar b = new MenuBar ();
             MenuItem item = new MenuItem ("Rate Me!");
@@ -65,29 +65,29 @@ namespace Hyena.Widgets
             m.Append (new ImageMenuItem ("gtk-remove", null));
             m.ShowAll ();
             pbox.PackStart (b, false, false, 0);
-            
+
             VBox box = new VBox ();
             box.BorderWidth = 10;
             box.Spacing = 10;
             pbox.PackStart (box, true, true, 0);
-            
+
             RatingEntry entry1 = new RatingEntry ();
             box.PackStart (entry1, true, true, 0);
-            
+
             RatingEntry entry2 = new RatingEntry ();
             box.PackStart (entry2, false, false, 0);
-            
+
             box.PackStart (new Entry ("Normal GtkEntry"), false, false, 0);
-            
+
             RatingEntry entry3 = new RatingEntry ();
             Pango.FontDescription fd = entry3.PangoContext.FontDescription.Copy ();
             fd.Size = (int)(fd.Size * Pango.Scale.XXLarge);
             entry3.ModifyFont (fd);
             box.PackStart (entry3, true, true, 0);
-            
+
             pbox.ShowAll ();
         }
     }
-    
+
 #endregion
 }
\ No newline at end of file
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs
index 1b4f7bd..da888ad 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs
@@ -42,7 +42,7 @@ namespace Hyena.Widgets
         private readonly LinkedList<AnimatedWidget> children = new LinkedList<AnimatedWidget> ();
         private readonly SingleActorStage border_stage = new Hyena.Gui.Theatrics.SingleActorStage ();
         private readonly bool horizontal;
-        
+
         private uint duration = 500;
         private Easing easing = Easing.Linear;
         private Blocking blocking = Blocking.Upstage;
@@ -52,13 +52,13 @@ namespace Hyena.Widgets
         private int start_spacing;
         private int end_spacing;
         private int active_count;
-        
+
         private int start_border;
         private int end_border;
         private double border_bias;
         private Easing border_easing;
         private AnimationState border_state;
-        
+
         protected AnimatedBox (bool horizontal)
         {
             WidgetFlags |= WidgetFlags.NoWindow;
@@ -66,13 +66,13 @@ namespace Hyena.Widgets
             stage.ActorStep += OnActorStep;
             border_stage.Iteration += OnBorderIteration;
         }
-        
+
 #region Private
-        
+
         private double Percent {
             get { return border_stage.Actor.Percent * border_bias + (1.0 - border_bias); }
         }
-        
+
         private bool OnActorStep (Actor<AnimatedWidget> actor)
         {
             switch (actor.Target.AnimationState) {
@@ -98,10 +98,10 @@ namespace Hyena.Widgets
                 }
                 break;
             }
-            
+
             return true;
         }
-        
+
         private void OnBorderIteration (object sender, EventArgs args)
         {
             if (border_stage.Actor == null) {
@@ -119,16 +119,16 @@ namespace Hyena.Widgets
             }
             QueueResizeNoRedraw ();
         }
-        
+
         private void OnWidgetDestroyed (object sender, EventArgs args)
         {
             RemoveCore ((AnimatedWidget)sender);
         }
-        
+
         private void RecalculateSpacings ()
         {
             int skip_count = 0;
-            
+
             foreach (AnimatedWidget animated_widget in Widgets) {
                 animated_widget.QueueResizeNoRedraw ();
                 if (skip_count > 1) {
@@ -136,14 +136,14 @@ namespace Hyena.Widgets
                     continue;
                 }
                 AnimatedWidget widget = animated_widget;
-                
+
                 if (skip_count == 0) {
                     widget.StartPadding = start_spacing;
                 } else {
                     skip_count--;
                 }
                 widget.EndPadding = end_spacing;
-                
+
                 if (widget.Node.Previous == null) {
                     while (true) {
                         widget.StartPadding = 0;
@@ -156,7 +156,7 @@ namespace Hyena.Widgets
                         skip_count++;
                     }
                 }
-                
+
                 if (widget.Node.Next == null) {
                     while (true) {
                         widget.EndPadding = 0;
@@ -170,27 +170,27 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
 #endregion
-        
+
 #region Protected Overrides
-        
+
         protected override void OnAdded (Widget widget)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             int width = 0;
             int height = 0;
-            
+
             if (horizontal) {
                 width = start_border + end_border;
             } else {
                 height = start_border + end_border;
             }
-            
+
             foreach (AnimatedWidget widget in Widgets) {
                 Requisition req = widget.SizeRequest ();
                 if (horizontal) {
@@ -201,7 +201,7 @@ namespace Hyena.Widgets
                     height += req.Height;
                 }
             }
-            
+
             requisition.Width = width;
             requisition.Height = height;
         }
@@ -218,7 +218,7 @@ namespace Hyena.Widgets
                 allocation.Y += start_border;
                 allocation.Width -= (int)BorderWidth * 2;
             }
-            
+
             foreach (AnimatedWidget widget in Widgets) {
                 if (horizontal) {
                     allocation.Width = widget.Width;
@@ -231,35 +231,35 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         protected override void ForAll (bool include_internals, Callback callback)
         {
             foreach (AnimatedWidget child in Widgets) {
                 callback (child);
             }
         }
-        
+
 #endregion
-        
+
 #region Public
-                
+
 #region Properties
-        
+
         public uint Duration {
             get { return duration; }
             set { duration = value; }
         }
-        
+
         public Easing Easing {
             get { return easing; }
             set { easing = value; }
         }
-        
+
         public Blocking Blocking {
             get { return blocking; }
             set { blocking = value; }
         }
-        
+
         public int Spacing {
             get { return spacing; }
             set {
@@ -269,17 +269,17 @@ namespace Hyena.Widgets
                 end_spacing = (int)Math.Floor (half);
             }
         }
-        
+
         public int StartPadding {
             get { return start_padding - (int)BorderWidth; }
             set { start_padding = value + (int)BorderWidth; }
         }
-        
+
         public int EndPadding {
             get { return end_padding - (int)BorderWidth; }
             set { end_padding = value + (int)BorderWidth; }
         }
-        
+
         internal IEnumerable<AnimatedWidget> Widgets {
             get {
                 foreach (AnimatedWidget child in children) {
@@ -287,105 +287,105 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
 #endregion
-    
+
 #region Pack Methods
-        
+
         public void PackStart (Widget widget)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, uint duration)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, Easing easing)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, uint duration, Easing easing)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, Blocking blocking)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, uint duration, Blocking blocking)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, Easing easing, Blocking blocking)
         {
             PackStart (widget, duration, easing, blocking);
         }
-        
+
         public void PackStart (Widget widget, uint duration, Easing easing, Blocking blocking)
         {
             Pack (widget, duration, easing, blocking, false);
         }
-        
+
         public void PackEnd (Widget widget)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, uint duration)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, Easing easing)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, uint duration, Easing easing)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, Blocking blocking)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, uint duration, Blocking blocking)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, Easing easing, Blocking blocking)
         {
             PackEnd (widget, duration, easing, blocking);
         }
-        
+
         public void PackEnd (Widget widget, uint duration, Easing easing, Blocking blocking)
         {
             Pack (widget, duration, easing, blocking, true);
         }
-        
+
         private void Pack (Widget widget, uint duration, Easing easing, Blocking blocking, bool end)
         {
             if (widget == null) {
                 throw new ArgumentNullException ("widget");
             }
-            
+
             AnimatedWidget animated_widget = new AnimatedWidget (widget, duration, easing, blocking, horizontal);
             animated_widget.Parent = this;
             animated_widget.WidgetDestroyed += OnWidgetDestroyed;
             stage.Add (animated_widget, duration);
-            animated_widget.Node = end 
+            animated_widget.Node = end
                 ? children.AddLast (animated_widget)
                 : children.AddFirst (animated_widget);
-            
+
             RecalculateSpacings ();
             if (active_count == 0) {
                 if (border_state == AnimationState.Going) {
@@ -399,57 +399,57 @@ namespace Hyena.Widgets
             }
             active_count++;
         }
-        
+
 #endregion
-        
+
 #region Remove Methods
-        
+
         public new void Remove (Widget widget)
         {
             RemoveCore (widget, 0, 0, 0, false, false);
         }
-        
+
         public void Remove (Widget widget, uint duration)
         {
             RemoveCore (widget, duration, 0, 0, false, false);
         }
-        
+
         public void Remove (Widget widget, Easing easing)
         {
             RemoveCore (widget, 0, easing, 0, true, false);
         }
-        
+
         public void Remove (Widget widget, uint duration, Easing easing)
         {
             RemoveCore (widget, duration, easing, 0, true, false);
         }
-        
+
         public void Remove (Widget widget, Blocking blocking)
         {
             RemoveCore (widget, 0, 0, blocking, false, true);
         }
-        
+
         public void Remove (Widget widget, uint duration, Blocking blocking)
         {
             RemoveCore (widget, duration, 0, blocking, false, true);
         }
-        
+
         public void Remove (Widget widget, Easing easing, Blocking blocking)
         {
             RemoveCore (widget, 0, easing, blocking, true, true);
         }
-        
+
         public void Remove (Widget widget, uint duration, Easing easing, Blocking blocking)
         {
             RemoveCore (widget, duration, easing, blocking, true, true);
         }
-        
+
         private void RemoveCore (Widget widget, uint duration, Easing easing, Blocking blocking, bool use_easing, bool use_blocking)
         {
             if (widget == null) {
                 throw new ArgumentNullException ("widget");
             }
-            
+
             AnimatedWidget animated_widget = null;
             foreach (AnimatedWidget child in Widgets) {
                 if (child.Widget == widget) {
@@ -457,34 +457,34 @@ namespace Hyena.Widgets
                     break;
                 }
             }
-            
+
             if (animated_widget == null) {
                 throw new ArgumentException ("Cannot remove the specified widget because it has not been added to this container or it has already been removed.", "widget");
             }
-            
+
             RemoveCore (animated_widget, duration, easing, blocking, use_easing, use_blocking);
             RecalculateSpacings ();
         }
-        
+
         private void RemoveCore (AnimatedWidget widget)
         {
             RemoveCore (widget, widget.Duration, 0, 0, false, false);
         }
-        
+
         private void RemoveCore (AnimatedWidget widget, uint duration, Easing easing, Blocking blocking, bool use_easing, bool use_blocking)
         {
             if (duration > 0) {
                 widget.Duration = duration;
             }
-            
+
             if (use_easing) {
                 widget.Easing = easing;
             }
-            
+
             if (use_blocking) {
                 widget.Blocking = blocking;
             }
-        
+
             if (widget.AnimationState == AnimationState.Coming) {
                 widget.AnimationState = AnimationState.IntendingToGo;
             } else {
@@ -500,10 +500,10 @@ namespace Hyena.Widgets
                 widget.AnimationState = AnimationState.Going;
                 stage.Add (widget, widget.Duration);
             }
-            
+
             duration = widget.Duration;
             easing = widget.Easing;
-            
+
             active_count--;
             if (active_count == 0) {
                 if (border_state == AnimationState.Coming) {
@@ -516,7 +516,7 @@ namespace Hyena.Widgets
                 border_stage.Reset ((uint)(duration * border_bias));
             }
         }
-        
+
         public void RemoveAll ()
         {
             foreach (AnimatedWidget child in Widgets) {
@@ -526,9 +526,9 @@ namespace Hyena.Widgets
             }
             RecalculateSpacings ();
         }
-        
+
 #endregion
-        
+
         public bool Contains (Widget widget)
         {
             foreach (AnimatedWidget child in Widgets) {
@@ -538,8 +538,8 @@ namespace Hyena.Widgets
             }
             return false;
         }
-        
+
 #endregion
-        
+
     }
 }
\ No newline at end of file
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs
index 027e273..fe31d4c 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs
@@ -43,68 +43,68 @@ namespace Hyena.Widgets
         private int frame_height;
         private int max_frames;
         private bool active_frozen;
-        
+
         private SingleActorStage stage = new SingleActorStage ();
-        
+
         public AnimatedImage ()
         {
             stage.Iteration += OnIteration;
             stage.Reset ();
             stage.Actor.CanExpire = false;
         }
-        
+
         protected override void OnShown ()
         {
             base.OnShown ();
-            
+
             if (active_frozen && !stage.Playing) {
                 stage.Play ();
             }
         }
-        
+
         protected override void OnHidden ()
         {
             base.OnHidden ();
-            
+
             active_frozen = Active;
             if (stage.Playing) {
                 stage.Pause ();
             }
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             if (allocation != Allocation) {
                 base.OnSizeAllocated (allocation);
             }
         }
-        
+
         public void Load ()
         {
             ExtractFrames ();
             base.Pixbuf = frames[0];
         }
-        
+
         private void OnIteration (object o, EventArgs args)
         {
             if (!Visible) {
                 return;
             }
-            
+
             if (frames == null || frames.Length == 0) {
                 return;
             } else if (frames.Length == 1) {
                 base.Pixbuf = frames[0];
                 return;
             }
-            
+
             // The first frame is the idle frame, so skip it when animating
             int index = (int)Math.Round ((double)(frames.Length - 2) * stage.Actor.Percent) + 1;
             if (base.Pixbuf != frames[index]) {
                 base.Pixbuf = frames[index];
             }
         }
-        
+
         private void ExtractFrames ()
         {
             if (pixbuf == null) {
@@ -112,28 +112,28 @@ namespace Hyena.Widgets
             } else if (pixbuf.Width % frame_width != 0 || pixbuf.Height % frame_height != 0) {
                 throw new ApplicationException ("Invalid frame dimensions");
             }
-            
+
             int rows = pixbuf.Height / frame_height;
             int cols = pixbuf.Width / frame_width;
             int frame_count = rows * cols;
-            
+
             frames = new Gdk.Pixbuf[max_frames > 0 ? max_frames : frame_count];
-            
+
             for (int y = 0, n = 0; y < rows; y++) {
                 for (int x = 0; x < cols; x++, n++) {
-                    frames[n] = new Gdk.Pixbuf (pixbuf, x * frame_width, y * frame_height, 
+                    frames[n] = new Gdk.Pixbuf (pixbuf, x * frame_width, y * frame_height,
                         frame_width, frame_height);
-                    
+
                     if (max_frames > 0 && n >= max_frames - 1) {
                         return;
                     }
                 }
             }
         }
-        
+
         public bool Active {
             get { return !Visible ? active_frozen : stage.Playing; }
-            set { 
+            set {
                 if (value) {
                     active_frozen = true;
                     if (Visible) {
@@ -144,7 +144,7 @@ namespace Hyena.Widgets
                     if (stage.Playing) {
                         stage.Pause ();
                     }
-                    
+
                     if (inactive_pixbuf != null) {
                         base.Pixbuf = inactive_pixbuf;
                     } else if (frames != null && frames.Length > 1) {
@@ -155,27 +155,27 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         public int FrameWidth {
             get { return frame_width; }
             set { frame_width = value; }
         }
-        
+
         public int FrameHeight {
             get { return frame_height; }
             set { frame_height = value; }
         }
-        
+
         public int MaxFrames {
             get { return max_frames; }
             set { max_frames = value; }
         }
-        
+
         public new Gdk.Pixbuf Pixbuf {
             get { return pixbuf; }
             set { pixbuf = value; }
         }
-        
+
         public Gdk.Pixbuf InactivePixbuf {
             get { return inactive_pixbuf; }
             set {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs
index 5b33fd4..a77eadf 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs
@@ -42,11 +42,11 @@ namespace Hyena.Widgets
         IntendingToGo,
         Going
     }
-    
+
     internal class AnimatedWidget : Container
     {
         public event EventHandler WidgetDestroyed;
-        
+
         public Widget Widget;
         public Easing Easing;
         public Blocking Blocking;
@@ -58,12 +58,12 @@ namespace Hyena.Widgets
         public int StartPadding;
         public int EndPadding;
         public LinkedListNode <AnimatedWidget> Node;
-        
+
         private readonly bool horizontal;
         private double percent;
         private Rectangle widget_alloc;
         private Pixmap canvas;
-        
+
         public AnimatedWidget (Widget widget, uint duration, Easing easing, Blocking blocking, bool horizontal)
         {
             this.horizontal = horizontal;
@@ -77,11 +77,11 @@ namespace Hyena.Widgets
             Widget.Destroyed += OnWidgetDestroyed;
             ShowAll ();
         }
-        
+
         protected AnimatedWidget (IntPtr raw) : base (raw)
         {
         }
-        
+
         public double Percent {
             get { return percent; }
             set {
@@ -89,24 +89,24 @@ namespace Hyena.Widgets
                 QueueResizeNoRedraw ();
             }
         }
-        
+
         private void OnWidgetDestroyed (object sender, EventArgs args)
         {
             if (!IsRealized) {
                 return;
             }
-            
+
             canvas = new Pixmap (GdkWindow, widget_alloc.Width, widget_alloc.Height);
             canvas.DrawDrawable (Style.BackgroundGC (State), GdkWindow,
                 widget_alloc.X, widget_alloc.Y, 0, 0, widget_alloc.Width, widget_alloc.Height);
-            
+
             if (AnimationState != AnimationState.Going) {
                 WidgetDestroyed (this, args);
             }
         }
-        
+
 #region Overrides
-        
+
         protected override void OnRemoved (Widget widget)
         {
             if (widget == Widget) {
@@ -114,22 +114,22 @@ namespace Hyena.Widgets
                 Widget = null;
             }
         }
-        
+
         protected override void OnRealized ()
         {
             WidgetFlags |= WidgetFlags.Realized;
-            
+
             Gdk.WindowAttr attributes = new Gdk.WindowAttr ();
             attributes.WindowType = Gdk.WindowType.Child;
             attributes.Wclass = Gdk.WindowClass.InputOutput;
             attributes.EventMask = (int)Gdk.EventMask.ExposureMask;
-                
+
             GdkWindow = new Gdk.Window (Parent.GdkWindow, attributes, 0);
             GdkWindow.UserData = Handle;
             GdkWindow.Background = Style.Background (State);
             Style.Attach (GdkWindow);
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             if (Widget != null) {
@@ -137,7 +137,7 @@ namespace Hyena.Widgets
                 widget_alloc.Width = req.Width;
                 widget_alloc.Height = req.Height;
             }
-            
+
             if (horizontal) {
                 Width = Choreographer.PixelCompose (percent, widget_alloc.Width + StartPadding + EndPadding, Easing);
                 Height = widget_alloc.Height;
@@ -145,11 +145,11 @@ namespace Hyena.Widgets
                 Width = widget_alloc.Width;
                 Height = Choreographer.PixelCompose (percent, widget_alloc.Height + StartPadding + EndPadding, Easing);
             }
-            
+
             requisition.Width = Width;
             requisition.Height = Height;
         }
-        
+
         protected override void OnSizeAllocated (Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
@@ -173,7 +173,7 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         protected override bool OnExposeEvent (EventExpose evnt)
         {
             if (canvas != null) {
@@ -191,8 +191,8 @@ namespace Hyena.Widgets
                 callback (Widget);
             }
         }
-        
+
 #endregion
-        
+
     }
 }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs
index f9d046b..a6191fd 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs
@@ -1,4 +1,4 @@
-// 
+//
 // ComplexMenuItem.cs
 //
 // Author:
@@ -54,7 +54,7 @@ namespace Hyena.Widgets
         protected override void OnRemoved (Widget widget)
         {
         }
-        
+
         protected void ConnectChildExpose(Widget widget)
         {
             widget.ExposeEvent += OnChildExposeEvent;
@@ -67,7 +67,7 @@ namespace Hyena.Widgets
             // into a GtkMenuItem without breaking the theme (leaving an unstyled void in the item).
             // This method is called before the EventBox child does its drawing and the background
             // is filled in with the proper style.
-            
+
             int x, y, width, height;
             Widget widget = (Widget)o;
 
@@ -76,17 +76,17 @@ namespace Hyena.Widgets
                 y = Allocation.Y - widget.Allocation.Y;
                 width = Allocation.Width;
                 height = Allocation.Height;
-                
+
                 ShadowType shadow_type = (ShadowType)StyleGetProperty("selected-shadow-type");
                 Gtk.Style.PaintBox(Style, widget.GdkWindow, StateType.Prelight, shadow_type,
                     args.Event.Area, widget, "menuitem", x, y, width, height);
             } else {
                 // Fill only the visible area in solid color, to be most efficient
-                widget.GdkWindow.DrawRectangle(Parent.Style.BackgroundGC(StateType.Normal), 
+                widget.GdkWindow.DrawRectangle(Parent.Style.BackgroundGC(StateType.Normal),
                     true, 0, 0, widget.Allocation.Width, widget.Allocation.Height);
-               
-                // FIXME: The above should not be necessary, but Clearlooks-based themes apparently 
-                // don't provide any style for the menu background so we have to fill it first with 
+
+                // FIXME: The above should not be necessary, but Clearlooks-based themes apparently
+                // don't provide any style for the menu background so we have to fill it first with
                 // the correct theme color. Weak.
                 //
                 // Do a complete style paint based on the size of the entire menu to be compatible with
@@ -95,35 +95,35 @@ namespace Hyena.Widgets
                 y = Parent.Allocation.Y - widget.Allocation.Y;
                 width = Parent.Allocation.Width;
                 height = Parent.Allocation.Height;
-                
+
                 Gtk.Style.PaintBox(Style, widget.GdkWindow, StateType.Normal, ShadowType.Out,
                     args.Event.Area, widget, "menu", x, y, width, height);
             }
         }
-        
+
         protected override void OnSelected()
         {
             base.OnSelected();
             is_selected = true;
         }
-        
+
         protected override void OnDeselected()
         {
             base.OnDeselected();
             is_selected = false;
         }
-        
+
         protected override void OnParentSet(Widget previous_parent)
         {
             if(previous_parent != null) {
                 previous_parent.KeyPressEvent -= OnKeyPressEventProxy;
             }
-            
+
             if(Parent != null) {
                 Parent.KeyPressEvent += OnKeyPressEventProxy;
             }
         }
-        
+
         [GLib.ConnectBefore]
         private void OnKeyPressEventProxy(object o, KeyPressEventArgs args)
         {
@@ -145,7 +145,7 @@ namespace Hyena.Widgets
         {
             return false;
         }
-        
+
         protected bool IsSelected {
             get { return is_selected; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/ImageButton.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/ImageButton.cs
index fa121ac..9431b0a 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/ImageButton.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/ImageButton.cs
@@ -48,7 +48,7 @@ namespace Hyena.Widgets
         public ImageButton (string text, string iconName) : this (text, iconName, Gtk.IconSize.Button)
         {
         }
-        
+
         public ImageButton (string text, string iconName, Gtk.IconSize iconSize) : base ()
         {
             image = new Image ();
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs
index fa25d84..f40dbbd 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs
@@ -40,32 +40,32 @@ namespace Hyena.Widgets
         private Widget button_widget;
         private Menu menu;
         private Widget size_widget;
-        
+
         public MenuButton ()
         {
         }
-        
+
         public MenuButton (Widget buttonWidget, Menu menu, bool showArrow)
         {
             Construct (buttonWidget, menu, showArrow);
         }
-        
+
         protected void Construct (Widget buttonWidget, Menu menu, bool showArrow)
         {
             WidgetFlags |= WidgetFlags.NoWindow;
-            
+
             button_widget = buttonWidget;
             this.menu = menu;
             menu.Deactivated += delegate { toggle_button.Active = false; };
-            
+
             toggle_button.Parent = this;
             toggle_button.FocusOnClick = false;
             toggle_button.Relief = ReliefStyle.None;
             toggle_button.Pressed += delegate { ShowMenu (); toggle_button.Active = true; };
             toggle_button.Activated += delegate { ShowMenu (); };
-            
+
             box.Parent = this;
-            
+
             if (showArrow) {
                 box.PackStart (button_widget, true, true, 0);
                 alignment = new Alignment (0f, 0.5f, 0f, 0f);
@@ -77,70 +77,70 @@ namespace Hyena.Widgets
                 toggle_button.Add (button_widget);
                 size_widget = toggle_button;
             }
-            
+
             ShowAll ();
         }
-        
+
         public Widget ButtonWidget {
             get { return button_widget; }
         }
-        
+
         public Menu Menu {
             get { return menu; }
         }
-        
+
         protected ToggleButton ToggleButton {
             get { return toggle_button; }
         }
-        
+
         protected Arrow Arrow {
             get { return arrow; }
         }
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             requisition = size_widget.SizeRequest ();
         }
-        
+
         protected override void OnSizeAllocated (Rectangle allocation)
         {
             box.SizeAllocate (allocation);
             toggle_button.SizeAllocate (allocation);
             base.OnSizeAllocated (allocation);
         }
-        
+
         protected override void ForAll (bool include_internals, Callback callback)
         {
             callback (toggle_button);
             callback (box);
         }
-        
+
         protected override void OnAdded (Widget widget)
         {
         }
-        
+
         protected override void OnRemoved (Widget widget)
         {
         }
-        
+
         protected void ShowMenu ()
         {
             menu.Popup (null, null, PositionMenu, 1, Gtk.Global.CurrentEventTime);
         }
 
-        private void PositionMenu (Menu menu, out int x, out int y, out bool push_in) 
+        private void PositionMenu (Menu menu, out int x, out int y, out bool push_in)
         {
             Gtk.Requisition menu_req = menu.SizeRequest ();
             int monitor_num = Screen.GetMonitorAtWindow (GdkWindow);
             Gdk.Rectangle monitor = Screen.GetMonitorGeometry (monitor_num < 0 ? 0 : monitor_num);
 
             GdkWindow.GetOrigin (out x, out y);
-            
+
             y += Allocation.Y;
             x += Allocation.X + (Direction == TextDirection.Ltr
                 ? Math.Max (Allocation.Width - menu_req.Width, 0)
                 : - (menu_req.Width - Allocation.Width));
-            
+
             if (y + Allocation.Height + menu_req.Height <= monitor.Y + monitor.Height) {
                 y += Allocation.Height;
             } else if (y - menu_req.Height >= monitor.Y) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/MessageBar.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/MessageBar.cs
index 420e64e..1934697 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/MessageBar.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/MessageBar.cs
@@ -35,7 +35,7 @@ using Hyena.Gui.Theming;
 namespace Hyena.Widgets
 {
     public class MessageBar : Alignment
-    {   
+    {
         private HBox box;
         private HBox button_box;
         private AnimatedImage image;
@@ -43,14 +43,14 @@ namespace Hyena.Widgets
         private Button close_button;
 
         private Window win;
-        
+
         private Theme theme;
-        
+
         public event EventHandler CloseClicked {
             add { close_button.Clicked += value; }
             remove { close_button.Clicked -= value; }
         }
-        
+
         public MessageBar () : base (0.0f, 0.5f, 1.0f, 0.0f)
         {
             win = new Window (WindowType.Popup);
@@ -62,10 +62,10 @@ namespace Hyena.Widgets
 
             HBox shell_box = new HBox ();
             shell_box.Spacing = 10;
-        
+
             box = new HBox ();
             box.Spacing = 10;
-            
+
             image = new AnimatedImage ();
             try {
                 image.Pixbuf = Gtk.IconTheme.Default.LoadIcon ("process-working", 22, IconLookupFlags.NoSvg);
@@ -75,67 +75,67 @@ namespace Hyena.Widgets
                 image.Load ();
             } catch {
             }
-            
+
             label = new WrapLabel ();
             label.Show ();
-            
+
             box.PackStart (image, false, false, 0);
             box.PackStart (label, true, true, 0);
             box.Show ();
-            
+
             button_box = new HBox ();
             button_box.Spacing = 3;
-            
+
             close_button = new Button (new Image (Stock.Close, IconSize.Menu));
             close_button.Relief = ReliefStyle.None;
             close_button.Clicked += delegate { Hide (); };
             close_button.ShowAll ();
             close_button.Hide ();
-            
+
             shell_box.PackStart (box, true, true, 0);
             shell_box.PackStart (button_box, false, false, 0);
             shell_box.PackStart (close_button, false, false, 0);
             shell_box.Show ();
-            
+
             Add (shell_box);
-            
+
             EnsureStyle ();
 
             BorderWidth = 3;
         }
-        
+
         protected override void OnShown ()
         {
             base.OnShown ();
             image.Show ();
         }
-        
+
         protected override void OnHidden ()
         {
             base.OnHidden ();
             image.Hide ();
         }
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
             theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme (this);
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
             QueueDraw ();
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (!IsDrawable) {
                 return false;
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-                
+
             try {
                 Gdk.Color color = Style.Background (StateType.Normal);
                 theme.DrawFrame (cr, Allocation, CairoExtensions.GdkColorToCairoColor (color));
@@ -145,60 +145,60 @@ namespace Hyena.Widgets
                 ((IDisposable)cr).Dispose ();
             }
         }
-        
+
         private bool changing_style = false;
         protected override void OnStyleSet (Gtk.Style previousStyle)
         {
             if (changing_style) {
                 return;
             }
-            
+
             changing_style = true;
             Style = win.Style;
             label.Style = Style;
             changing_style = false;
         }
-        
+
         public void RemoveButton (Button button)
         {
             button_box.Remove (button);
         }
-        
+
         public void ClearButtons ()
         {
             foreach (Widget child in button_box.Children) {
                 button_box.Remove (child);
             }
         }
-        
+
         public void AddButton (Button button)
         {
             button_box.Show ();
             button.Show ();
             button_box.PackStart (button, false, false, 0);
         }
-        
+
         public bool ShowCloseButton {
             set {
                 close_button.Visible = value;
                 QueueDraw ();
             }
         }
-        
+
         public string Message {
             set {
                 label.Markup = value;
                 QueueDraw ();
             }
         }
-        
+
         public Gdk.Pixbuf Pixbuf {
             set {
                 image.InactivePixbuf = value;
                 QueueDraw ();
             }
         }
-        
+
         public bool Spinning {
             get { return image.Active; }
             set { image.Active = value; }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/PulsingButton.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/PulsingButton.cs
index 49d31bc..c7b57eb 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/PulsingButton.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/PulsingButton.cs
@@ -38,63 +38,63 @@ namespace Hyena.Widgets
     {
         private static Stage<PulsingButton> default_stage;
         public static Stage<PulsingButton> DefaultStage {
-            get { 
+            get {
                 if (default_stage == null) {
                     default_stage = new Stage<PulsingButton> ();
                     default_stage.DefaultActorDuration = 1250;
                 }
-                
+
                 return default_stage;
             }
         }
-        
+
         private Pulsator<PulsingButton> pulsator = new Pulsator<PulsingButton> ();
-        
+
         public Stage<PulsingButton> Stage {
             get { return pulsator.Stage; }
             set { pulsator.Stage = value; }
         }
-        
+
         public PulsingButton () : base ()
         {
             Setup ();
         }
-        
+
         public PulsingButton (string stock_id) : base (stock_id)
         {
             Setup ();
         }
-        
+
         public PulsingButton (Widget widget) : base (widget)
         {
             Setup ();
         }
-        
+
         protected PulsingButton (IntPtr raw) : base (raw)
         {
             Setup ();
         }
-        
+
         private void Setup ()
         {
             Stage = DefaultStage;
             pulsator.Target = this;
             pulsator.Pulse += delegate { QueueDraw (); };
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (!pulsator.IsPulsing) {
                 return base.OnExposeEvent (evnt);
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create (GdkWindow);
-            
+
             double x = Allocation.X + Allocation.Width / 2;
             double y = Allocation.Y + Allocation.Height / 2;
             double r = Math.Min (Allocation.Width, Allocation.Height) / 2;
             double alpha = Choreographer.Compose (pulsator.Percent, Easing.Sine);
-            
+
             Cairo.Color color = CairoExtensions.GdkColorToCairoColor (Style.Background (StateType.Selected));
             Cairo.RadialGradient fill = new Cairo.RadialGradient (x, y, 0, x, y, r);
             color.A = alpha;
@@ -102,28 +102,28 @@ namespace Hyena.Widgets
             fill.AddColorStop (0.5, color);
             color.A = 0;
             fill.AddColorStop (1, color);
-            
+
             cr.Arc (x, y, r, 0, 2 * Math.PI);
             cr.Pattern = fill;
             cr.Fill ();
             fill.Destroy ();
-            
+
             ((IDisposable)cr).Dispose ();
             return base.OnExposeEvent (evnt);
         }
-        
+
         public void StartPulsing ()
         {
             if (IsMapped && Sensitive) {
                 pulsator.StartPulsing ();
             }
         }
-        
+
         public void StopPulsing ()
         {
             pulsator.StopPulsing ();
         }
-        
+
         protected override void OnStateChanged (StateType previous_state)
         {
             base.OnStateChanged (previous_state);
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingEntry.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingEntry.cs
index f36df2f..393c238 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingEntry.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingEntry.cs
@@ -1,4 +1,4 @@
-// 
+//
 // RatingEntry.cs
 //
 // Authors:
@@ -43,7 +43,7 @@ namespace Hyena.Widgets
         private bool interior_focus;
         private int focus_width;
         private Gdk.Window event_window;
-        
+
         public event EventHandler Changing;
         public event EventHandler Changed;
 
@@ -53,8 +53,8 @@ namespace Hyena.Widgets
             RatingAccessibleFactory.Init ();
 #endif
         }
-        
-        public RatingEntry () : this (0) 
+
+        public RatingEntry () : this (0)
         {
             WidgetFlags |= Gtk.WidgetFlags.NoWindow;
         }
@@ -66,7 +66,7 @@ namespace Hyena.Widgets
             CanFocus = true;
             Name = "GtkEntry";
         }
-        
+
         protected virtual void OnChanging ()
         {
             EventHandler handler = Changing;
@@ -89,7 +89,7 @@ namespace Hyena.Widgets
         {
             Value = renderer.RatingFromPosition (event_alloc, x);
         }
-        
+
 #region Public Properties
 
         private bool always_show_empty_stars = false;
@@ -120,27 +120,27 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         public int MaxRating {
             get { return renderer.MaxRating; }
             set { renderer.MaxRating = value; }
         }
-        
+
         public int MinRating {
             get { return renderer.MinRating; }
             set { renderer.MinRating = value; }
         }
-        
+
         public int RatingLevels {
             get { return renderer.RatingLevels; }
         }
-        
+
         private object rated_object;
         public object RatedObject {
             get { return rated_object; }
             set { rated_object = value; }
         }
-        
+
 #endregion
 
 #region Protected Gtk.Widget Overrides
@@ -149,7 +149,7 @@ namespace Hyena.Widgets
         {
             WidgetFlags |= WidgetFlags.Realized | WidgetFlags.NoWindow;
             GdkWindow = Parent.GdkWindow;
-            
+
             Gdk.WindowAttr attributes = new Gdk.WindowAttr ();
             attributes.WindowType = Gdk.WindowType.Child;
             attributes.X = Allocation.X;
@@ -166,37 +166,37 @@ namespace Hyena.Widgets
                 Gdk.EventMask.ButtonPressMask |
                 Gdk.EventMask.ButtonReleaseMask |
                 Gdk.EventMask.ExposureMask);
-                
+
             Gdk.WindowAttributesType attributes_mask =
-                Gdk.WindowAttributesType.X | 
+                Gdk.WindowAttributesType.X |
                 Gdk.WindowAttributesType.Y |
                 Gdk.WindowAttributesType.Wmclass;
-            
+
             event_window = new Gdk.Window (GdkWindow, attributes, attributes_mask);
             event_window.UserData = Handle;
-            
+
             Style = Gtk.Rc.GetStyleByPaths (Settings, "*.GtkEntry", "*.GtkEntry", GType);
-            
+
             base.OnRealized ();
         }
-         
+
         protected override void OnUnrealized ()
         {
             WidgetFlags &= ~WidgetFlags.Realized;
-            
+
             event_window.UserData = IntPtr.Zero;
             Hyena.Gui.GtkWorkarounds.WindowDestroy (event_window);
             event_window = null;
-            
+
             base.OnUnrealized ();
         }
-        
+
         protected override void OnMapped ()
         {
             WidgetFlags |= WidgetFlags.Mapped;
             event_window.Show ();
         }
-        
+
         protected override void OnUnmapped ()
         {
             WidgetFlags &= ~WidgetFlags.Mapped;
@@ -209,15 +209,15 @@ namespace Hyena.Widgets
             if (changing_style) {
                 return;
             }
-            
+
             base.OnStyleSet (previous_style);
-            
+
             changing_style = true;
             focus_width = (int)StyleGetProperty ("focus-line-width");
             interior_focus = (bool)StyleGetProperty ("interior-focus");
             changing_style = false;
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
@@ -226,15 +226,15 @@ namespace Hyena.Widgets
                 event_window.MoveResize (allocation);
             }
         }
-        
+
         protected override void OnSizeRequested (ref Gtk.Requisition requisition)
         {
             EnsureStyle ();
-            
+
             Pango.FontMetrics metrics = PangoContext.GetMetrics (Style.FontDescription, PangoContext.Language);
             renderer.Size = ((int)(metrics.Ascent + metrics.Descent) + 512) >> 10; // PANGO_PIXELS(d)
             metrics.Dispose ();
-            
+
             if (HasFrame) {
                 renderer.Xpad = Style.Xthickness + (interior_focus ? focus_width : 0) + 2;
                 renderer.Ypad = Style.Ythickness + (interior_focus ? focus_width : 0) + 2;
@@ -242,30 +242,30 @@ namespace Hyena.Widgets
                 renderer.Xpad = 0;
                 renderer.Ypad = 0;
             }
-            
+
             requisition.Width = renderer.Width;
             requisition.Height = renderer.Height;
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (evnt.Window != GdkWindow) {
                 return true;
             }
-            
+
             if (HasFrame) {
                 int y_mid = (int)Math.Round ((Allocation.Height - renderer.Height) / 2.0);
-                Gtk.Style.PaintFlatBox (Style, GdkWindow, State, ShadowType.None, evnt.Area, this, "entry", 
+                Gtk.Style.PaintFlatBox (Style, GdkWindow, State, ShadowType.None, evnt.Area, this, "entry",
                     Allocation.X, Allocation.Y + y_mid, Allocation.Width, renderer.Height);
                 Gtk.Style.PaintShadow (Style, GdkWindow, State, ShadowType.In,
                     evnt.Area, this, "entry", Allocation.X, Allocation.Y + y_mid, Allocation.Width, renderer.Height);
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create (GdkWindow);
-            renderer.Render (cr, Allocation, 
+            renderer.Render (cr, Allocation,
                 CairoExtensions.GdkColorToCairoColor (HasFrame ? Parent.Style.Text (State) : Parent.Style.Foreground (State)),
                 AlwaysShowEmptyStars, PreviewOnHover && hover_value >= renderer.MinRating, hover_value,
-                State == StateType.Insensitive ? 1 : 0.90, 
+                State == StateType.Insensitive ? 1 : 0.90,
                 State == StateType.Insensitive ? 1 : 0.55,
                 State == StateType.Insensitive ? 1 : 0.45);
             ((IDisposable)cr.Target).Dispose ();
@@ -279,30 +279,30 @@ namespace Hyena.Widgets
             if (evnt.Button != 1) {
                 return false;
             }
-            
+
             HasFocus = true;
             Value = renderer.RatingFromPosition (event_alloc, evnt.X);
-            
+
             return true;
         }
-        
+
         protected override bool OnEnterNotifyEvent (Gdk.EventCrossing evnt)
         {
             hover_value = renderer.MinRating;
             QueueDraw ();
             return true;
         }
-        
+
         protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing crossing)
         {
             return HandleLeaveNotify (crossing);
         }
-        
+
         protected override bool OnMotionNotifyEvent (Gdk.EventMotion motion)
         {
             return HandleMotionNotify (motion.State, motion.X);
         }
-        
+
         protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
         {
             switch (evnt.Key) {
@@ -312,22 +312,22 @@ namespace Hyena.Widgets
                 case Gdk.Key.equal:
                     Value++;
                     return true;
-                
+
                 case Gdk.Key.Down:
                 case Gdk.Key.Left:
                 case Gdk.Key.minus:
                     Value--;
                     return true;
             }
-            
+
             if (evnt.KeyValue >= (48 + MinRating) && evnt.KeyValue <= (48 + MaxRating) && evnt.KeyValue <= 59) {
                 Value = (int)evnt.KeyValue - 48;
                 return true;
             }
-            
+
             return false;
         }
-        
+
         protected override bool OnScrollEvent (Gdk.EventScroll args)
         {
             return HandleScroll (args);
@@ -336,7 +336,7 @@ namespace Hyena.Widgets
 #endregion
 
 #region Internal API, primarily for RatingMenuItem
-        
+
         internal void ClearHover ()
         {
             hover_value = renderer.MinRating - 1;
@@ -354,38 +354,38 @@ namespace Hyena.Widgets
                 case Gdk.ScrollDirection.Right:
                     Value++;
                     return true;
-                
+
                 case Gdk.ScrollDirection.Down:
                 case Gdk.ScrollDirection.Left:
                     Value--;
                     return true;
             }
-            
+
             return false;
         }
-        
+
         internal bool HandleMotionNotify (Gdk.ModifierType state, double x)
         {
             hover_value = renderer.RatingFromPosition (event_alloc, x);
             /*if ((state & Gdk.ModifierType.Button1Mask) != 0) {
                 Value = hover_value;
             }*/
-            
+
             QueueDraw ();
             return true;
         }
-        
+
         internal bool HandleLeaveNotify (Gdk.EventCrossing crossing)
         {
             ClearHover ();
             QueueDraw ();
             return true;
         }
-        
+
 #endregion
 
     }
-    
+
 #region Test Module
 
     public class RatingAccessible : Atk.Object, Atk.Value, Atk.ValueImplementor
@@ -465,7 +465,7 @@ namespace Hyena.Widgets
         {
             VBox pbox = new VBox ();
             Add (pbox);
-            
+
             Menu m = new Menu ();
             MenuBar b = new MenuBar ();
             MenuItem item = new MenuItem ("Rate Me!");
@@ -477,30 +477,30 @@ namespace Hyena.Widgets
             m.Append (new ImageMenuItem ("gtk-remove", null));
             m.ShowAll ();
             pbox.PackStart (b, false, false, 0);
-            
+
             VBox box = new VBox ();
             box.BorderWidth = 10;
             box.Spacing = 10;
             pbox.PackStart (box, true, true, 0);
-            
+
             RatingEntry entry1 = new RatingEntry ();
             box.PackStart (entry1, true, true, 0);
-            
+
             RatingEntry entry2 = new RatingEntry ();
             box.PackStart (entry2, false, false, 0);
-            
+
             box.PackStart (new Entry ("Normal GtkEntry"), false, false, 0);
-            
+
             RatingEntry entry3 = new RatingEntry ();
             Pango.FontDescription fd = entry3.PangoContext.FontDescription.Copy ();
             fd.Size = (int)(fd.Size * Pango.Scale.XXLarge);
             entry3.ModifyFont (fd);
             box.PackStart (entry3, true, true, 0);
-            
+
             pbox.ShowAll ();
         }
     }
-    
+
 #endregion
 
 }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs
index 01f71f0..a4276db 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs
@@ -1,4 +1,4 @@
-// 
+//
 // RatingMenuItem.cs
 //
 // Author:
@@ -42,20 +42,20 @@ namespace Hyena.Widgets
         {
             box = new HBox ();
             box.Spacing = 5;
-            
+
             Label label = new Label ();
-            label.Markup = String.Format ("<i>{0}</i>", 
+            label.Markup = String.Format ("<i>{0}</i>",
                 GLib.Markup.EscapeText (Catalog.GetString ("Rating:")));
             box.PackStart (label, false, false, 0);
             label.Show ();
-            
+
             entry = new RatingEntry ();
             entry.HasFrame = false;
             entry.PreviewOnHover = true;
             entry.AlwaysShowEmptyStars = true;
             entry.Changed += OnEntryChanged;
             box.PackStart (entry, false, false, 0);
-            
+
             box.ShowAll ();
             Add (box);
         }
@@ -86,7 +86,7 @@ namespace Hyena.Widgets
         {
             return entry.HandleMotionNotify (evnt.State, TransformX (evnt.X));
         }
-        
+
         protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
         {
             return entry.HandleLeaveNotify (evnt);
@@ -101,14 +101,14 @@ namespace Hyena.Widgets
         {
             return entry.HandleKeyPress (evnt);
         }
-        
+
         private void OnEntryChanged (object o, EventArgs args)
         {
             if (can_activate) {
                 Activate ();
             }
         }
-        
+
         public void Reset (int value)
         {
             can_activate = false;
@@ -116,12 +116,12 @@ namespace Hyena.Widgets
             entry.ClearHover ();
             can_activate = true;
         }
-        
+
         public int Value {
             get { return entry.Value; }
             set { entry.Value = value; }
         }
-        
+
         public RatingEntry RatingEntry {
             get { return entry; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
index ddee186..0e5d9f6 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
@@ -42,9 +42,9 @@ namespace Hyena.Widgets
         protected Theme Theme {
             get { return theme; }
         }
-        
+
         private int frame_width = 3;
-        
+
         private Widget child;
         private Gdk.Rectangle child_allocation;
         private bool fill_color_set;
@@ -56,24 +56,24 @@ namespace Hyena.Widgets
         protected RoundedFrame (IntPtr ptr) : base (ptr)
         {
         }
-        
+
         public RoundedFrame ()
         {
         }
-        
+
         public void SetFillColor (Cairo.Color color)
         {
             fill_color = color;
             fill_color_set = true;
             QueueDraw ();
         }
-        
+
         public void UnsetFillColor ()
         {
             fill_color_set = false;
             QueueDraw ();
         }
-        
+
         public Pattern FillPattern {
             get { return fill_pattern; }
             set {
@@ -81,12 +81,12 @@ namespace Hyena.Widgets
                 QueueDraw ();
             }
         }
-        
+
         public bool DrawBorder {
             get { return draw_border; }
             set { draw_border = value; QueueDraw (); }
         }
-        
+
 #region Gtk.Widget Overrides
 
         protected override void OnRealized ()
@@ -98,7 +98,7 @@ namespace Hyena.Widgets
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             if (child != null && child.Visible) {
-                // Add the child's width/height        
+                // Add the child's width/height
                 Requisition child_requisition = child.SizeRequest ();
                 requisition.Width = Math.Max (0, child_requisition.Width);
                 requisition.Height = child_requisition.Height;
@@ -106,7 +106,7 @@ namespace Hyena.Widgets
                 requisition.Width = 0;
                 requisition.Height = 0;
             }
-            
+
             // Add the frame border
             requisition.Width += ((int)BorderWidth + frame_width) * 2;
             requisition.Height += ((int)BorderWidth + frame_width) * 2;
@@ -115,40 +115,40 @@ namespace Hyena.Widgets
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             base.OnSizeAllocated (allocation);
-            
+
             child_allocation = new Gdk.Rectangle ();
-            
+
             if (child == null || !child.Visible) {
                 return;
             }
-            
+
             child_allocation.X = (int)BorderWidth + frame_width;
             child_allocation.Y = (int)BorderWidth + frame_width;
             child_allocation.Width = (int)Math.Max (1, Allocation.Width - child_allocation.X * 2);
-            child_allocation.Height = (int)Math.Max (1, Allocation.Height - child_allocation.Y - 
+            child_allocation.Height = (int)Math.Max (1, Allocation.Height - child_allocation.Y -
                 (int)BorderWidth - frame_width);
-                
+
             child_allocation.X += Allocation.X;
             child_allocation.Y += Allocation.Y;
-            
+
             child.SizeAllocate (child_allocation);
         }
-        
+
         protected override void OnSetScrollAdjustments (Adjustment hadj, Adjustment vadj)
         {
-            // This is to satisfy the gtk_widget_set_scroll_adjustments 
-            // inside of GtkScrolledWindow so it doesn't complain about 
+            // This is to satisfy the gtk_widget_set_scroll_adjustments
+            // inside of GtkScrolledWindow so it doesn't complain about
             // its child not being scrollable.
         }
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (!IsDrawable) {
                 return false;
             }
- 
+
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-                
+
             try {
                 DrawFrame (cr, evnt.Area);
                 if (child != null) {
@@ -160,18 +160,18 @@ namespace Hyena.Widgets
                 ((IDisposable)cr).Dispose ();
             }
         }
-        
+
         private void DrawFrame (Cairo.Context cr, Gdk.Rectangle clip)
         {
             int x = child_allocation.X - frame_width;
             int y = child_allocation.Y - frame_width;
             int width = child_allocation.Width + 2 * frame_width;
             int height = child_allocation.Height + 2 * frame_width;
-            
+
             Gdk.Rectangle rect = new Gdk.Rectangle (x, y, width, height);
-            
+
             theme.Context.ShowStroke = draw_border;
-            
+
             if (fill_color_set) {
                 theme.DrawFrameBackground (cr, rect, fill_color);
             } else if (fill_pattern != null) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs
index f2dbff3..91bb0a2 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs
@@ -42,21 +42,21 @@ namespace Hyena.Widgets
     {
         private Widget adjustable;
         private RoundedFrame rounded_frame;
-    
+
         public ScrolledWindow ()
         {
         }
-        
+
         public void AddWithFrame (Widget widget)
         {
             RoundedFrame frame = new RoundedFrame ();
             frame.Add (widget);
             frame.Show ();
-            
+
             Add (frame);
             ProbeAdjustable (widget);
         }
-        
+
         protected override void OnAdded (Widget widget)
         {
             if (widget is RoundedFrame) {
@@ -64,10 +64,10 @@ namespace Hyena.Widgets
                 rounded_frame.Added += OnFrameWidgetAdded;
                 rounded_frame.Removed += OnFrameWidgetRemoved;
             }
-            
+
             base.OnAdded (widget);
         }
-        
+
         protected override void OnRemoved (Widget widget)
         {
             if (widget == rounded_frame) {
@@ -75,17 +75,17 @@ namespace Hyena.Widgets
                 rounded_frame.Removed -= OnFrameWidgetRemoved;
                 rounded_frame = null;
             }
-            
+
             base.OnRemoved (widget);
         }
-        
+
         private void OnFrameWidgetAdded (object o, AddedArgs args)
         {
             if (rounded_frame != null) {
                 ProbeAdjustable (args.Widget);
             }
         }
-        
+
         private void OnFrameWidgetRemoved (object o, RemovedArgs args)
         {
             if (adjustable != null && adjustable == args.Widget) {
@@ -94,27 +94,27 @@ namespace Hyena.Widgets
                 adjustable = null;
             }
         }
-        
+
         private void ProbeAdjustable (Widget widget)
         {
             Type type = widget.GetType ();
-            
+
             PropertyInfo hadj_prop = type.GetProperty ("Hadjustment");
             PropertyInfo vadj_prop = type.GetProperty ("Vadjustment");
-            
+
             if (hadj_prop == null || vadj_prop == null) {
                 return;
             }
-            
+
             object hadj_value = hadj_prop.GetValue (widget, null);
             object vadj_value = vadj_prop.GetValue (widget, null);
-            
-            if (hadj_value == null || vadj_value == null 
+
+            if (hadj_value == null || vadj_value == null
                 || hadj_value.GetType () != typeof (Adjustment)
                 || vadj_value.GetType () != typeof (Adjustment)) {
                 return;
             }
-            
+
             Hadjustment = (Adjustment)hadj_value;
             Vadjustment = (Adjustment)vadj_value;
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs
index 0ea36b2..5f5f0a2 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs
@@ -39,19 +39,19 @@ namespace Hyena.Widgets
     public class SegmentedBar : Widget
     {
         public delegate string BarValueFormatHandler (Segment segment);
-    
+
         public class Segment
         {
             private string title;
             private double percent;
             private Cairo.Color color;
             private bool show_in_bar;
-            
-            public Segment (string title, double percent, Cairo.Color color) 
+
+            public Segment (string title, double percent, Cairo.Color color)
                 : this (title, percent, color, true)
             {
             }
-            
+
             public Segment (string title, double percent, Cairo.Color color, bool showInBar)
             {
                 this.title = title;
@@ -59,36 +59,36 @@ namespace Hyena.Widgets
                 this.color = color;
                 this.show_in_bar = showInBar;
             }
-            
+
             public string Title {
                 get { return title; }
                 set { title = value; }
             }
-            
+
             public double Percent {
                 get { return percent; }
                 set { percent = value; }
             }
-            
+
             public Cairo.Color Color {
                 get { return color; }
                 set { color = value; }
             }
-            
+
             public bool ShowInBar {
                 get { return show_in_bar; }
                 set { show_in_bar = value; }
             }
-            
+
             internal int LayoutWidth;
             internal int LayoutHeight;
         }
-        
+
         // State
         private List<Segment> segments = new List<Segment> ();
         private int layout_width;
         private int layout_height;
-        
+
         // Properties
         private int bar_height = 26;
         private int bar_label_spacing = 8;
@@ -96,37 +96,37 @@ namespace Hyena.Widgets
         private int segment_box_size = 12;
         private int segment_box_spacing = 6;
         private int h_padding = 0;
-        
+
         private bool show_labels = true;
         private bool reflect = true;
-        
+
         private Color remainder_color = CairoExtensions.RgbToColor (0xeeeeee);
-    
+
         private BarValueFormatHandler format_handler;
-    
+
         public SegmentedBar ()
         {
             WidgetFlags |= WidgetFlags.NoWindow;
         }
-        
+
         protected override void OnRealized ()
         {
             GdkWindow = Parent.GdkWindow;
             base.OnRealized ();
         }
-        
+
 #region Size Calculations
-        
+
         protected override void OnSizeRequested (ref Requisition requisition)
         {
             requisition.Width = 200;
             requisition.Height = 0;
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             int _bar_height = reflect ? (int)Math.Ceiling (bar_height * 1.75) : bar_height;
-            
+
             if (show_labels) {
                 ComputeLayoutSize ();
                 HeightRequest = Math.Max (bar_height + bar_label_spacing + layout_height, _bar_height);
@@ -135,69 +135,69 @@ namespace Hyena.Widgets
                 HeightRequest = _bar_height;
                 WidthRequest = bar_height + (2 * h_padding);
             }
-            
+
             base.OnSizeAllocated (allocation);
         }
-        
+
         private void ComputeLayoutSize ()
         {
             if (segments.Count == 0) {
                 return;
             }
-            
+
             Pango.Layout layout = null;
-            
+
             layout_width = layout_height = 0;
-            
+
             for (int i = 0, n = segments.Count; i < n; i++) {
                 int aw, ah, bw, bh;
-                
+
                 layout = CreateAdaptLayout (layout, false, true);
                 layout.SetText (FormatSegmentText (segments[i]));
                 layout.GetPixelSize (out aw, out ah);
-                
+
                 layout = CreateAdaptLayout (layout, true, false);
                 layout.SetText (FormatSegmentValue (segments[i]));
                 layout.GetPixelSize (out bw, out bh);
-                
+
                 int w = Math.Max (aw, bw);
                 int h = ah + bh;
-                
+
                 segments[i].LayoutWidth = w;
                 segments[i].LayoutHeight = Math.Max (h, segment_box_size * 2);
-                
-                layout_width += segments[i].LayoutWidth + segment_box_size + segment_box_spacing 
+
+                layout_width += segments[i].LayoutWidth + segment_box_size + segment_box_spacing
                     + (i < n - 1 ? segment_label_spacing : 0);
                 layout_height = Math.Max (layout_height, segments[i].LayoutHeight);
             }
-            
+
             layout.Dispose ();
         }
-        
+
 #endregion
-        
+
 #region Public Methods
-        
+
         public void AddSegmentRgba (string title, double percent, uint rgbaColor)
         {
             AddSegment (title, percent, CairoExtensions.RgbaToColor (rgbaColor));
         }
-        
+
         public void AddSegmentRgb (string title, double percent, uint rgbColor)
         {
             AddSegment (title, percent, CairoExtensions.RgbToColor (rgbColor));
         }
-        
+
         public void AddSegment (string title, double percent, Color color)
         {
             AddSegment (new Segment (title, percent, color, true));
         }
-        
+
         public void AddSegment (string title, double percent, Color color, bool showInBar)
         {
             AddSegment (new Segment (title, percent, color, showInBar));
         }
-        
+
         public void AddSegment (Segment segment)
         {
             lock (segments) {
@@ -205,30 +205,30 @@ namespace Hyena.Widgets
                 QueueDraw ();
             }
         }
-        
+
         public void UpdateSegment (int index, double percent)
         {
             segments[index].Percent = percent;
             QueueDraw ();
         }
-        
+
 #endregion
 
-#region Public Properties                
-        
+#region Public Properties
+
         public BarValueFormatHandler ValueFormatter {
             get { return format_handler; }
             set { format_handler = value; }
         }
-        
+
         public Color RemainderColor {
             get { return remainder_color; }
-            set { 
+            set {
                 remainder_color = value;
                 QueueDraw ();
             }
         }
-        
+
         public int BarHeight {
             get { return bar_height; }
             set {
@@ -238,7 +238,7 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         public bool ShowReflection {
             get { return reflect; }
             set {
@@ -248,7 +248,7 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         public bool ShowLabels {
             get { return show_labels; }
             set {
@@ -258,10 +258,10 @@ namespace Hyena.Widgets
                 }
             }
         }
-        
+
         public int SegmentLabelSpacing {
             get { return segment_label_spacing; }
-            set { 
+            set {
                 if (segment_label_spacing != value) {
                     segment_label_spacing = value;
                     QueueResize ();
@@ -270,202 +270,202 @@ namespace Hyena.Widgets
         }
         public int SegmentBoxSize {
             get { return segment_box_size; }
-            set { 
+            set {
                 if (segment_box_size != value) {
                     segment_box_size = value;
                     QueueResize ();
                 }
             }
         }
-        
+
         public int SegmentBoxSpacing {
             get { return segment_box_spacing; }
-            set { 
+            set {
                 if (segment_box_spacing != value) {
                     segment_box_spacing = value;
                     QueueResize ();
                 }
             }
         }
-        
+
         public int BarLabelSpacing {
             get { return bar_label_spacing; }
-            set { 
+            set {
                 if (bar_label_spacing != value) {
                     bar_label_spacing = value;
                     QueueResize ();
                 }
             }
         }
-        
+
         public int HorizontalPadding {
             get { return h_padding; }
-            set { 
+            set {
                 if (h_padding != value) {
                     h_padding = value;
                     QueueResize ();
                 }
             }
         }
-        
+
 #endregion
-        
+
 #region Rendering
-        
+
         protected override bool OnExposeEvent (Gdk.EventExpose evnt)
         {
             if (evnt.Window != GdkWindow) {
                 return base.OnExposeEvent (evnt);
             }
-            
+
             Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
-            
+
             if (reflect) {
                 CairoExtensions.PushGroup (cr);
             }
-            
+
             cr.Operator = Operator.Over;
             cr.Translate (Allocation.X + h_padding, Allocation.Y);
-            cr.Rectangle (0, 0, Allocation.Width - h_padding, Math.Max (2 * bar_height, 
+            cr.Rectangle (0, 0, Allocation.Width - h_padding, Math.Max (2 * bar_height,
                 bar_height + bar_label_spacing + layout_height));
             cr.Clip ();
-            
+
             Pattern bar = RenderBar (Allocation.Width - 2 * h_padding, bar_height);
-            
+
             cr.Save ();
             cr.Source = bar;
             cr.Paint ();
             cr.Restore ();
-            
+
             if (reflect) {
                 cr.Save ();
-    
+
                 cr.Rectangle (0, bar_height, Allocation.Width - h_padding, bar_height);
                 cr.Clip ();
-                
+
                 Matrix matrix = new Matrix ();
                 matrix.InitScale (1, -1);
                 matrix.Translate (0, -(2 * bar_height) + 1);
                 cr.Transform (matrix);
-                
+
                 cr.Pattern = bar;
-                
+
                 LinearGradient mask = new LinearGradient (0, 0, 0, bar_height);
-                
+
                 mask.AddColorStop (0.25, new Color (0, 0, 0, 0));
                 mask.AddColorStop (0.5, new Color (0, 0, 0, 0.125));
                 mask.AddColorStop (0.75, new Color (0, 0, 0, 0.4));
                 mask.AddColorStop (1.0, new Color (0, 0, 0, 0.7));
-                
+
                 cr.Mask (mask);
                 mask.Destroy ();
-                
+
                 cr.Restore ();
-                
+
                 CairoExtensions.PopGroupToSource (cr);
                 cr.Paint ();
             }
-            
+
             if (show_labels) {
-                cr.Translate ((reflect ? Allocation.X : -h_padding) + (Allocation.Width - layout_width) / 2, 
+                cr.Translate ((reflect ? Allocation.X : -h_padding) + (Allocation.Width - layout_width) / 2,
                      (reflect ? Allocation.Y : 0) + bar_height + bar_label_spacing);
-                
+
                 RenderLabels (cr);
             }
-            
+
             bar.Destroy ();
             ((IDisposable)cr.Target).Dispose ();
             ((IDisposable)cr).Dispose ();
-            
+
             return true;
         }
-        
+
         private Pattern RenderBar (int w, int h)
         {
             ImageSurface s = new ImageSurface (Format.Argb32, w, h);
             Context cr = new Context (s);
             RenderBar (cr, w, h, h / 2);
 // TODO Implement the new ctor - see http://bugzilla.gnome.org/show_bug.cgi?id=561394
-#pragma warning disable 0618 
+#pragma warning disable 0618
             Pattern pattern = new Pattern (s);
-#pragma warning restore 0618 
+#pragma warning restore 0618
             s.Destroy ();
             ((IDisposable)cr).Dispose ();
             return pattern;
         }
-        
+
         private void RenderBar (Context cr, int w, int h, int r)
         {
             RenderBarSegments (cr, w, h, r);
             RenderBarStrokes (cr, w, h, r);
         }
-        
+
         private void RenderBarSegments (Context cr, int w, int h, int r)
         {
             LinearGradient grad = new LinearGradient (0, 0, w, 0);
             double last = 0.0;
-            
+
             foreach (Segment segment in segments) {
                 if (segment.Percent > 0) {
                     grad.AddColorStop (last, segment.Color);
                     grad.AddColorStop (last += segment.Percent, segment.Color);
                 }
             }
-            
-            CairoExtensions.RoundedRectangle (cr, 0, 0, w, h, r); 
+
+            CairoExtensions.RoundedRectangle (cr, 0, 0, w, h, r);
             cr.Pattern = grad;
             cr.FillPreserve ();
             cr.Pattern.Destroy ();
-            
+
             grad = new LinearGradient (0, 0, 0, h);
             grad.AddColorStop (0.0, new Color (1, 1, 1, 0.125));
             grad.AddColorStop (0.35, new Color (1, 1, 1, 0.255));
             grad.AddColorStop (1, new Color (0, 0, 0, 0.4));
-            
+
             cr.Pattern = grad;
             cr.Fill ();
             cr.Pattern.Destroy ();
         }
-        
+
         private void RenderBarStrokes (Context cr, int w, int h, int r)
         {
             LinearGradient stroke = MakeSegmentGradient (h, CairoExtensions.RgbaToColor (0x00000040));
             LinearGradient seg_sep_light = MakeSegmentGradient (h, CairoExtensions.RgbaToColor (0xffffff20));
             LinearGradient seg_sep_dark = MakeSegmentGradient (h, CairoExtensions.RgbaToColor (0x00000020));
-            
+
             cr.LineWidth = 1;
-            
+
             double seg_w = 20;
             double x = seg_w > r ? seg_w : r;
-            
+
             while (x <= w - r) {
                 cr.MoveTo (x - 0.5, 1);
                 cr.LineTo (x - 0.5, h - 1);
                 cr.Pattern = seg_sep_light;
                 cr.Stroke ();
-                
+
                 cr.MoveTo (x + 0.5, 1);
                 cr.LineTo (x + 0.5, h - 1);
                 cr.Pattern = seg_sep_dark;
                 cr.Stroke ();
-                
+
                 x += seg_w;
             }
-            
+
             CairoExtensions.RoundedRectangle (cr, 0.5, 0.5, w - 1, h - 1, r);
             cr.Pattern = stroke;
             cr.Stroke ();
-            
+
             stroke.Destroy ();
             seg_sep_light.Destroy ();
             seg_sep_dark.Destroy ();
         }
-        
+
         private LinearGradient MakeSegmentGradient (int h, Color color)
         {
             return MakeSegmentGradient (h, color, false);
         }
-        
+
         private LinearGradient MakeSegmentGradient (int h, Color color, bool diag)
         {
             LinearGradient grad = new LinearGradient (0, 0, 0, h);
@@ -474,19 +474,19 @@ namespace Hyena.Widgets
             grad.AddColorStop (1, CairoExtensions.ColorShade (color, 0.8));
             return grad;
         }
-        
+
         private void RenderLabels (Context cr)
         {
             if (segments.Count == 0) {
                 return;
             }
-            
+
             Pango.Layout layout = null;
             Color text_color = CairoExtensions.GdkColorToCairoColor (Style.Foreground (State));
             Color box_stroke_color = new Color (0, 0, 0, 0.6);
-            
+
             int x = 0;
-            
+
             foreach (Segment segment in segments) {
                 cr.LineWidth = 1;
                 cr.Rectangle (x + 0.5, 2 + 0.5, segment_box_size - 1, segment_box_size - 1);
@@ -496,41 +496,41 @@ namespace Hyena.Widgets
                 cr.Color = box_stroke_color;
                 cr.Stroke ();
                 grad.Destroy ();
-                
+
                 x += segment_box_size + segment_box_spacing;
-                
+
                 int lw, lh;
                 layout = CreateAdaptLayout (layout, false, true);
                 layout.SetText (FormatSegmentText (segment));
                 layout.GetPixelSize (out lw, out lh);
-                
+
                 cr.MoveTo (x, 0);
                 text_color.A = 0.9;
                 cr.Color = text_color;
                 PangoCairoHelper.ShowLayout (cr, layout);
                 cr.Fill ();
-                
+
                 layout = CreateAdaptLayout (layout, true, false);
                 layout.SetText (FormatSegmentValue (segment));
-                
+
                 cr.MoveTo (x, lh);
                 text_color.A = 0.75;
                 cr.Color = text_color;
                 PangoCairoHelper.ShowLayout (cr, layout);
                 cr.Fill ();
-                
+
                 x += segment.LayoutWidth + segment_label_spacing;
             }
-            
+
             layout.Dispose ();
         }
-        
+
 #endregion
 
 #region Utilities
-        
+
         private int pango_size_normal;
-        
+
         private Pango.Layout CreateAdaptLayout (Pango.Layout layout, bool small, bool bold)
         {
             if (layout == null) {
@@ -538,38 +538,38 @@ namespace Hyena.Widgets
                 layout = new Pango.Layout (context);
                 layout.FontDescription = context.FontDescription;
                 pango_size_normal = layout.FontDescription.Size;
-            } 
-            
-            layout.FontDescription.Size = small 
+            }
+
+            layout.FontDescription.Size = small
                 ? (int)(layout.FontDescription.Size * Pango.Scale.Small)
                 : pango_size_normal;
-            
+
             layout.FontDescription.Weight = bold
                 ? Pango.Weight.Bold
                 : Pango.Weight.Normal;
-            
+
             return layout;
         }
-        
-                
+
+
         private string FormatSegmentText (Segment segment)
         {
             return segment.Title;
         }
-        
+
         private string FormatSegmentValue (Segment segment)
         {
             return format_handler == null
                 ? String.Format ("{0}%", segment.Percent * 100.0)
                 : format_handler (segment);
         }
-        
+
 #endregion
 
     }
-    
-#region Test Module    
-    
+
+#region Test Module
+
     [TestModule ("Segmented Bar")]
     internal class SegmentedBarTestModule : Window
     {
@@ -579,11 +579,11 @@ namespace Hyena.Widgets
         {
             BorderWidth = 10;
             AppPaintable = true;
-            
+
             box = new VBox ();
             box.Spacing = 10;
             Add (box);
-            
+
             int space = 55;
             bar = new SegmentedBar ();
             bar.HorizontalPadding = bar.BarHeight / 2;
@@ -591,39 +591,39 @@ namespace Hyena.Widgets
             bar.AddSegmentRgb ("Other", 0.0788718162651326, 0xf57900);
             bar.AddSegmentRgb ("Video", 0.0516869922033282, 0x73d216);
             bar.AddSegment ("Free Space", 0.867561266964516, bar.RemainderColor, false);
-           
+
             bar.ValueFormatter = delegate (SegmentedBar.Segment segment) {
                 return String.Format ("{0} GB", space * segment.Percent);
             };
-            
+
             HBox controls = new HBox ();
             controls.Spacing = 5;
-            
+
             Label label = new Label ("Height:");
             controls.PackStart (label, false, false, 0);
-            
+
             SpinButton height = new SpinButton (new Adjustment (bar.BarHeight, 5, 100, 1, 1, 1), 1, 0);
             height.Activated += delegate { bar.BarHeight = height.ValueAsInt; };
             height.Changed += delegate { bar.BarHeight = height.ValueAsInt; bar.HorizontalPadding = bar.BarHeight / 2; };
             controls.PackStart (height, false, false, 0);
-            
+
             CheckButton reflect = new CheckButton ("Reflection");
             reflect.Active = bar.ShowReflection;
             reflect.Toggled += delegate { bar.ShowReflection = reflect.Active; };
             controls.PackStart (reflect, false, false, 0);
-            
+
             CheckButton labels = new CheckButton ("Labels");
             labels.Active = bar.ShowLabels;
             labels.Toggled += delegate { bar.ShowLabels = labels.Active; };
             controls.PackStart (labels, false, false, 0);
-            
+
             box.PackStart (controls, false, false, 0);
             box.PackStart (new HSeparator (), false, false, 0);
             box.PackStart (bar, false, false, 0);
             box.ShowAll ();
-            
+
             SetSizeRequest (350, -1);
-            
+
             Gdk.Geometry limits = new Gdk.Geometry ();
             limits.MinWidth = SizeRequest ().Width;
             limits.MaxWidth = Gdk.Screen.Default.Width;
@@ -632,7 +632,7 @@ namespace Hyena.Widgets
             SetGeometryHints (this, limits, Gdk.WindowHints.MaxSize | Gdk.WindowHints.MinSize);
         }
     }
-    
+
 #endregion
-    
+
 }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs
index 97073af..9b0ed79 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs
@@ -36,41 +36,41 @@ namespace Hyena.Widgets
         private double value;
         private double target_value;
         private double velocity = 0;
-        
+
         private double Accelerate (double velocity)
         {
             return AccelerateCore (velocity);
         }
-        
+
         private double Decelerate (double velocity)
         {
             return Math.Max (DecelerateCore (velocity), 0);
         }
-        
+
         protected virtual double AccelerateCore (double velocity)
         {
             return velocity + 8;
         }
-        
+
         protected virtual double DecelerateCore (double velocity)
         {
             return velocity - Math.Max (3, 0.2 * velocity);
         }
-        
+
         private double TargetValue {
             get { return target_value; }
             set {
                 if (value == target_value) {
                     return;
                 }
-                
+
                 target_value = value;
                 if (timeout == 0) {
                     timeout = GLib.Timeout.Add (20, OnTimeout);
                 }
             }
         }
-        
+
         // Smoothly get us to the target value
         private bool OnTimeout ()
         {
@@ -80,17 +80,17 @@ namespace Hyena.Widgets
                 timeout = 0;
                 return false;
             }
-            
+
             int sign = Math.Sign (delta);
             delta = Math.Abs (delta);
-            
+
             double hypothetical = delta;
             double v = Accelerate (velocity);
             while (v > 0 && hypothetical > 0) {
                 hypothetical -= v;
                 v = Decelerate (v);
             }
-            
+
             velocity = hypothetical <= 0 ? Decelerate (velocity) : Accelerate (velocity);
 
             // Minimum speed: 2 px / 20 ms = 100px / second
@@ -102,10 +102,10 @@ namespace Hyena.Widgets
             ignore_value_changed = true;
             Vadjustment.Value = Math.Round (value);
             ignore_value_changed = false;
-            
+
             return true;
         }
-        
+
         protected override bool OnScrollEvent (Gdk.EventScroll evnt)
         {
             switch (evnt.Direction) {
@@ -120,19 +120,19 @@ namespace Hyena.Widgets
             }
             return true;
         }
-        
+
         protected override void OnRealized ()
         {
             base.OnRealized ();
             Vadjustment.ValueChanged += OnValueChanged;
         }
-        
+
         protected override void OnUnrealized ()
         {
             Vadjustment.ValueChanged -= OnValueChanged;
             base.OnUnrealized ();
         }
-        
+
         private void OnValueChanged (object o, EventArgs args)
         {
             if (!ignore_value_changed) {
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs
index fa224ef..5b25c80 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs
@@ -32,18 +32,18 @@ using Gtk;
 namespace Hyena.Widgets
 {
     public class TextViewEditable : TextView, Editable
-    {       
+    {
         public TextViewEditable ()
         {
             Buffer.Changed += OnBufferChanged;
             Buffer.InsertText += OnBufferInsertText;
             Buffer.DeleteRange += OnBufferDeleteRange;
         }
-        
+
         public event EventHandler Changed;
         public event TextDeletedHandler TextDeleted;
         public event TextInsertedHandler TextInserted;
-        
+
         private void OnBufferChanged (object o, EventArgs args)
         {
             EventHandler handler = Changed;
@@ -51,13 +51,13 @@ namespace Hyena.Widgets
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         private void OnBufferInsertText (object o, InsertTextArgs args)
         {
             TextInsertedHandler handler = TextInserted;
             if (handler != null) {
                 TextInsertedArgs raise_args = new TextInsertedArgs ();
-                raise_args.Args = new object [] { 
+                raise_args.Args = new object [] {
                     args.Text,
                     args.Length,
                     args.Pos.Offset
@@ -65,79 +65,79 @@ namespace Hyena.Widgets
                 handler (this, raise_args);
             }
         }
-        
+
         private void OnBufferDeleteRange (object o, DeleteRangeArgs args)
         {
             TextDeletedHandler handler = TextDeleted;
             if (handler != null) {
                 TextDeletedArgs raise_args = new TextDeletedArgs ();
-                raise_args.Args = new object [] { 
+                raise_args.Args = new object [] {
                     args.Start.Offset,
                     args.End.Offset
                 };
                 handler (this, raise_args);
             }
         }
-        
+
         void Editable.PasteClipboard ()
         {
         }
-        
+
         void Editable.CutClipboard ()
         {
         }
-        
+
         void Editable.CopyClipboard ()
         {
         }
-           
+
         public void DeleteText (int start_pos, int end_pos)
         {
             start_pos--;
             end_pos--;
-        
+
             TextIter start_iter = Buffer.GetIterAtOffset (start_pos);
             TextIter end_iter = Buffer.GetIterAtOffset (start_pos + (end_pos - start_pos));
             Buffer.Delete (ref start_iter, ref end_iter);
         }
-        
+
         public void InsertText (string new_text, ref int position)
         {
             TextIter iter = Buffer.GetIterAtOffset (position - 1);
             Buffer.Insert (ref iter, new_text);
             position = iter.Offset + 1;
         }
-        
+
         public string GetChars (int start_pos, int end_pos)
         {
             start_pos--;
             end_pos--;
-            
+
             TextIter start_iter = Buffer.GetIterAtOffset (start_pos);
             TextIter end_iter = Buffer.GetIterAtOffset (start_pos + (end_pos - start_pos));
             return Buffer.GetText (start_iter, end_iter, true);
         }
-        
+
         public void SelectRegion (int start, int end)
         {
             Buffer.SelectRange (Buffer.GetIterAtOffset (start - 1), Buffer.GetIterAtOffset (end - 1));
         }
-        
+
         public bool GetSelectionBounds (out int start, out int end)
         {
             TextIter start_iter, end_iter;
             start = 0;
             end = 0;
-            
+
             if (Buffer.GetSelectionBounds (out start_iter, out end_iter)) {
                 start = start_iter.Offset + 1;
                 end = end_iter.Offset + 1;
                 return true;
             }
-            
+
             return true;
         }
-        
+
         public void DeleteSelection ()
         {
             TextIter start, end;
@@ -145,13 +145,13 @@ namespace Hyena.Widgets
                 Buffer.Delete (ref start, ref end);
             }
         }
-        
-        public int Position { 
+
+        public int Position {
             get { return Buffer.CursorPosition; }
             set { Buffer.PlaceCursor (Buffer.GetIterAtOffset (Position)); }
         }
-        
-        public bool IsEditable { 
+
+        public bool IsEditable {
             get { return Editable; }
             set { Editable = value; }
         }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs b/src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs
index a138e87..c2a4923 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs
@@ -37,65 +37,65 @@ namespace Hyena.Widgets
         private bool use_markup = false;
         private bool wrap = true;
         private Pango.Layout layout;
-        
+
         public WrapLabel ()
         {
             WidgetFlags |= WidgetFlags.NoWindow;
         }
-        
+
         private void CreateLayout ()
         {
             if (layout != null) {
                 layout.Dispose ();
             }
-            
+
             layout = new Pango.Layout (PangoContext);
             layout.Wrap = Pango.WrapMode.Word;
         }
-        
+
         private void UpdateLayout ()
         {
             if (layout == null) {
                 CreateLayout ();
             }
-            
+
             layout.Ellipsize = wrap ? Pango.EllipsizeMode.None : Pango.EllipsizeMode.End;
 
             if (text == null) {
                 text = "";
             }
-            
+
             if (use_markup) {
                 layout.SetMarkup (text);
             } else {
                 layout.SetText (text);
             }
-            
+
             QueueResize ();
         }
-        
+
         protected override void OnStyleSet (Style previous_style)
         {
             CreateLayout ();
             UpdateLayout ();
             base.OnStyleSet (previous_style);
         }
-        
+
         protected override void OnRealized ()
         {
             GdkWindow = Parent.GdkWindow;
             base.OnRealized ();
         }
-        
+
         protected override void OnSizeAllocated (Gdk.Rectangle allocation)
         {
             int lw, lh;
-            
+
             layout.Width = (int)(allocation.Width * Pango.Scale.PangoScale);
             layout.GetPixelSize (out lw, out lh);
-            
+
             HeightRequest = lh;
-            
+
             base.OnSizeAllocated (allocation);
         }
 
@@ -107,29 +107,29 @@ namespace Hyena.Widgets
                 layout.GetPixelSize (out lw, out lh);
                 int y = Allocation.Y + (Allocation.Height - lh) / 2;
 
-                Gtk.Style.PaintLayout (Style, GdkWindow, State, false, 
+                Gtk.Style.PaintLayout (Style, GdkWindow, State, false,
                     evnt.Area, this, null, Allocation.X, y, layout);
             }
 
             return true;
         }
-        
+
         public void MarkupFormat (string format, params object [] args)
         {
             if (args == null || args.Length == 0) {
                 Markup = format;
                 return;
             }
-            
+
             for (int i = 0; i < args.Length; i++) {
                 if (args[i] is string) {
                     args[i] = GLib.Markup.EscapeText ((string)args[i]);
                 }
             }
-            
+
             Markup = String.Format (format, args);
         }
-        
+
         public bool Wrap {
             get { return wrap; }
             set {
@@ -137,7 +137,7 @@ namespace Hyena.Widgets
                 UpdateLayout ();
             }
         }
-        
+
         public string Markup {
             get { return text; }
             set {
@@ -146,7 +146,7 @@ namespace Hyena.Widgets
                 UpdateLayout ();
             }
         }
-        
+
         public string Text {
             get { return text; }
             set {
@@ -154,6 +154,6 @@ namespace Hyena.Widgets
                 text = value;
                 UpdateLayout ();
             }
-        }       
+        }
     }
 }
diff --git a/src/Libraries/Hyena/Hyena.Collections/CollectionExtensions.cs b/src/Libraries/Hyena/Hyena.Collections/CollectionExtensions.cs
index a42435c..99ed0a1 100644
--- a/src/Libraries/Hyena/Hyena.Collections/CollectionExtensions.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/CollectionExtensions.cs
@@ -31,7 +31,7 @@ using System.Text;
 using System.Collections.Generic;
 
 namespace Hyena.Collections
-{   
+{
     public static class CollectionExtensions
     {
         public static void SortedInsert<T> (List<T> list, T value) where T : IComparable
@@ -45,42 +45,42 @@ namespace Hyena.Collections
                 list.Insert (index < 0 ? ~index : index, value);
             }
         }
-        
+
         public static string Join<T> (IList<T> list)
         {
             return Join<T> (list, ", ");
         }
-        
+
         public static string Join<T> (IList<T> list, string separator)
         {
             return Join<T> (list, null, null, separator);
         }
-        
+
         public static string Join<T> (IList<T> list, string wrapper, string separator)
         {
             return Join<T> (list, wrapper, wrapper, separator);
         }
-        
+
         public static string Join<T> (IList<T> list, string front, string back, string separator)
         {
             StringBuilder builder = new StringBuilder ();
-            
+
             for (int i = 0, n = list.Count; i < n; i++) {
                 if (front != null) {
                     builder.Append (front);
                 }
-                
+
                 builder.Append (list[i]);
-                
+
                 if (back != null) {
                     builder.Append (back);
                 }
-                
+
                 if (i < n - 1) {
                     builder.Append (separator);
                 }
             }
-            
+
             return builder.ToString ();
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.Collections/IntervalHeap.cs b/src/Libraries/Hyena/Hyena.Collections/IntervalHeap.cs
index 641ae98..2db698c 100644
--- a/src/Libraries/Hyena/Hyena.Collections/IntervalHeap.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/IntervalHeap.cs
@@ -35,36 +35,36 @@ namespace Hyena.Collections
     public class IntervalHeap<T> : ICollection<T>, ICollection
     {
         private const int MIN_CAPACITY = 16;
-    
+
         private int count;
         private int generation;
-        
+
         private Interval [] heap;
-        
+
         public IntervalHeap ()
         {
             Clear ();
         }
-        
+
         public virtual T Pop ()
         {
             if (count == 0) {
                 throw new InvalidOperationException ();
             }
-            
+
             T item = heap[0].Item;
             MoveDown (0, heap[--count]);
             generation++;
-            
+
             return item;
         }
-        
+
         public virtual T Peek ()
         {
             if (count == 0) {
                 throw new InvalidOperationException ();
             }
-            
+
             return heap[0].Item;
         }
 
@@ -73,22 +73,22 @@ namespace Hyena.Collections
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-            
+
             if (count == heap.Length) {
                 OptimalArrayResize (ref heap, 1);
             }
-            
+
             MoveUp (++count - 1, new Interval (item, priority));
             generation++;
         }
-        
+
         public virtual void Clear ()
         {
             generation = 0;
             count = 0;
             heap = new Interval[MIN_CAPACITY];
         }
-        
+
         void ICollection.CopyTo (Array array, int index)
         {
             if (array == null) {
@@ -101,7 +101,7 @@ namespace Hyena.Collections
 
             Array.Copy (heap, 0, array, index, count);
         }
-        
+
         public virtual void CopyTo (T [] array, int index)
         {
             if (array == null) {
@@ -120,63 +120,63 @@ namespace Hyena.Collections
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-            
+
             return FindItemHeapIndex (item) >= 0;
         }
-        
+
         public virtual void Add (T item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-            
+
             Push (item, 0);
         }
-        
+
         public virtual bool Remove (T item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-            
+
             int index = FindItemHeapIndex (item);
-            
+
             if (index < 0) {
                 return false;
             }
-        
+
             MoveDown (index, heap[--count]);
             generation++;
-            
+
             return true;
         }
-        
+
         public virtual void TrimExcess ()
         {
             if (count < heap.Length * 0.9) {
                 Array.Resize (ref heap, count);
             }
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
+
         public virtual IEnumerator<T> GetEnumerator ()
         {
             return new IntervalHeapEnumerator (this);
         }
-        
+
         public static IntervalHeap<T> Synchronized (IntervalHeap<T> heap)
         {
             if (heap == null) {
                 throw new ArgumentNullException ("heap");
             }
-            
+
             return new SyncIntervalHeap (heap);
         }
-        
+
         private int FindItemHeapIndex (T item)
         {
             for (int i = 0; i < count; i++) {
@@ -184,22 +184,22 @@ namespace Hyena.Collections
                     return i;
                 }
             }
-            
+
             return -1;
         }
-        
+
         private int GetLeftChildIndex (int index)
         {
             return index * 2 + 1;
         }
-        
+
         private int GetParentIndex (int index)
         {
             return (index - 1) / 2;
         }
-        
+
         private static void OptimalArrayResize (ref Interval [] array, int grow)
-        { 
+        {
             int new_capacity = array.Length == 0 ? 1 : array.Length;
             int min_capacity = array.Length == 0 ? MIN_CAPACITY : array.Length + grow;
 
@@ -213,193 +213,192 @@ namespace Hyena.Collections
         private void MoveUp (int index, Interval node)
         {
             int parent_index = GetParentIndex (index);
-            
+
             while (index > 0 && heap[parent_index].Priority < node.Priority) {
                 heap[index] = heap[parent_index];
                 index = parent_index;
                 parent_index = GetParentIndex (index);
             }
-            
+
             heap[index] = node;
         }
-        
+
         private void MoveDown (int index, Interval node)
         {
             int child_index = GetLeftChildIndex (index);
-            
+
             while (child_index < count) {
-                if (child_index + 1 < count 
+                if (child_index + 1 < count
                     && heap[child_index].Priority < heap[child_index + 1].Priority) {
                     child_index++;
                 }
-                
+
                 heap[index] = heap[child_index];
                 index = child_index;
                 child_index = GetLeftChildIndex (index);
             }
-            
+
             MoveUp (index, node);
         }
 
         public virtual int Count {
             get { return count; }
         }
-        
+
         public bool IsReadOnly {
             get { return false; }
         }
-        
+
         public virtual object SyncRoot {
             get { return this; }
         }
-        
+
         public virtual bool IsSynchronized {
             get { return false; }
         }
-        
+
         private struct Interval
         {
             private T item;
             private int priority;
-            
+
             public Interval (T item, int priority)
             {
                 this.item = item;
                 this.priority = priority;
             }
-            
+
             public T Item {
                 get { return item; }
             }
-            
-            public int Priority { 
+
+            public int Priority {
                 get { return priority; }
             }
         }
-        
+
         private class SyncIntervalHeap : IntervalHeap<T>
         {
             private IntervalHeap<T> heap;
-            
+
             internal SyncIntervalHeap (IntervalHeap<T> heap)
             {
                 this.heap = heap;
             }
-            
+
             public override int Count {
                 get { lock (heap) { return heap.Count; } }
             }
-            
+
             public override bool IsSynchronized {
                 get { return true; }
             }
-            
+
             public override object SyncRoot {
                 get { return heap.SyncRoot; }
             }
-            
+
             public override void Clear ()
             {
                 lock (heap) { heap.Clear (); }
             }
-            
+
             public override bool Contains(T item)
             {
                 lock (heap) { return heap.Contains (item); }
             }
-            
+
             public override T Pop()
             {
                 lock (heap) { return heap.Pop (); }
             }
-            
+
             public override T Peek ()
             {
                 lock (heap) { return heap.Peek (); }
             }
-            
+
             public override void Push (T item, int priority)
             {
                 lock (heap) { heap.Push (item, priority); }
             }
-            
+
             public override void Add (T item)
             {
                 lock (heap) { heap.Add (item); }
             }
-            
+
             public override bool Remove (T item)
             {
                 lock (heap) { return heap.Remove (item); }
             }
-            
+
             public override void TrimExcess ()
             {
                 lock (heap) { heap.TrimExcess (); }
             }
-            
+
             public override void CopyTo (T [] array, int index)
             {
                 lock (heap) { heap.CopyTo (array, index); }
             }
-            
+
             public override IEnumerator<T> GetEnumerator ()
             {
                 lock (heap) { return new IntervalHeapEnumerator (this); }
             }
         }
-    
+
         private class IntervalHeapEnumerator : IEnumerator<T>, IEnumerator
         {
             private IntervalHeap<T> heap;
             private int index;
             private int generation;
-            
+
             public IntervalHeapEnumerator (IntervalHeap<T> heap)
             {
                 this.heap = heap;
                 Reset ();
             }
-            
+
             public void Reset ()
             {
                 generation = heap.generation;
                 index = -1;
             }
-            
+
             public void Dispose ()
             {
                 heap = null;
             }
- 
+
             public bool MoveNext ()
             {
                 if (generation != heap.generation) {
                     throw new InvalidOperationException ();
                 }
-                
+
                 if (index + 1 == heap.count) {
                     return false;
                 }
-                
+
                 index++;
                 return true;
             }
-            
+
             object IEnumerator.Current {
                 get { return Current; }
             }
- 
+
             public T Current {
                 get {
                     if (generation != heap.generation) {
                         throw new InvalidOperationException ();
                     }
-                    
+
                     return heap.heap[index].Item;
                 }
             }
         }
     }
 }
- 
\ No newline at end of file
diff --git a/src/Libraries/Hyena/Hyena.Collections/LruCache.cs b/src/Libraries/Hyena/Hyena.Collections/LruCache.cs
index 7520e03..86b42fe 100644
--- a/src/Libraries/Hyena/Hyena.Collections/LruCache.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/LruCache.cs
@@ -39,13 +39,13 @@ namespace Hyena.Collections
             get { return key; }
             set { key = value; }
         }
-    
+
         private TValue value;
         public TValue Value {
             get { return this.value; }
             set { this.value = value; }
         }
-        
+
         internal DateTime LastUsed;
         internal int UsedCount;
     }
@@ -54,17 +54,17 @@ namespace Hyena.Collections
     {
         private Dictionary<TKey, CacheEntry<TKey, TValue>> cache;
         private int max_count;
-        
+
         public LruCache () : this (1024)
         {
         }
-        
+
         public LruCache (int maxCount)
         {
             max_count = maxCount;
             cache = new Dictionary<TKey, CacheEntry<TKey, TValue>> ();
         }
-        
+
         public void Add (TKey key, TValue value)
         {
             lock (cache) {
@@ -74,12 +74,12 @@ namespace Hyena.Collections
                     cache[key] = entry;
                     return;
                 }
-                
+
                 entry.Key = key;
                 entry.Value = value;
                 Ref (ref entry);
                 cache.Add (key, entry);
-                
+
                 if (Count >= max_count) {
                     TKey expire = FindOldestEntry ();
                     ExpireItem (cache[expire].Value);
@@ -87,14 +87,14 @@ namespace Hyena.Collections
                 }
             }
         }
-        
+
         public bool Contains (TKey key)
         {
             lock (cache) {
                 return cache.ContainsKey (key);
             }
         }
-        
+
         public bool TryGetValue (TKey key, out TValue value)
         {
             lock (cache) {
@@ -105,23 +105,23 @@ namespace Hyena.Collections
                     cache[key] = entry;
                     return true;
                 }
-                
+
                 value = default (TValue);
                 return false;
             }
         }
-        
+
         private void Ref (ref CacheEntry<TKey, TValue> entry)
         {
             entry.LastUsed = DateTime.Now;
             entry.UsedCount++;
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
+
         public IEnumerator<CacheEntry<TKey, TValue>> GetEnumerator ()
         {
             lock (cache) {
@@ -130,12 +130,12 @@ namespace Hyena.Collections
                 }
             }
         }
-        
+
         // Ok, this blows. I have no time to implement anything clever or proper here.
         // Using a hashtable generally sucks for this, but it's not bad for a 15 minute
         // hack. max_count will be sufficiently small in our case that this can't be
         // felt anyway. Meh.
-        
+
         private TKey FindOldestEntry ()
         {
             lock (cache) {
@@ -150,16 +150,16 @@ namespace Hyena.Collections
                 return oldest_key;
             }
         }
-        
+
         protected virtual void ExpireItem (TValue item)
         {
         }
-        
+
         public int MaxCount {
             get { lock (cache) { return max_count; } }
             set { lock (cache) { max_count = value; } }
         }
-        
+
         public int Count {
             get { lock (cache) { return cache.Count; } }
         }
diff --git a/src/Libraries/Hyena/Hyena.Collections/QueuePipeline.cs b/src/Libraries/Hyena/Hyena.Collections/QueuePipeline.cs
index 541e893..6c869a3 100644
--- a/src/Libraries/Hyena/Hyena.Collections/QueuePipeline.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/QueuePipeline.cs
@@ -38,16 +38,16 @@ namespace Hyena.Collections
         #pragma warning restore 0067
 
         private object sync = new object ();
-        
+
         private QueuePipelineElement<T> first_element;
         internal QueuePipelineElement<T> FirstElement {
             get { return first_element; }
         }
-        
+
         public QueuePipeline ()
         {
         }
-        
+
         public void AddElement (QueuePipelineElement<T> element)
         {
             element.Finished += OnElementFinished;
@@ -56,7 +56,7 @@ namespace Hyena.Collections
                     first_element = element;
                     return;
                 }
-            
+
                 QueuePipelineElement<T> current = first_element;
 
                 while (current != null) {
@@ -64,21 +64,21 @@ namespace Hyena.Collections
                         current.NextElement = element;
                         break;
                     }
-                    
+
                     current = current.NextElement;
                 }
             }
         }
-        
+
         public virtual void Enqueue (T item)
         {
             if (first_element == null) {
                 throw new InvalidOperationException ("There are no elements in this pipeline");
             }
-            
+
             first_element.Enqueue (item);
         }
-        
+
         public virtual void Cancel ()
         {
             if (first_element != null) {
diff --git a/src/Libraries/Hyena/Hyena.Collections/QueuePipelineElement.cs b/src/Libraries/Hyena/Hyena.Collections/QueuePipelineElement.cs
index dc95885..a088d6c 100644
--- a/src/Libraries/Hyena/Hyena.Collections/QueuePipelineElement.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/QueuePipelineElement.cs
@@ -55,14 +55,14 @@ namespace Hyena.Collections
         public int ProcessedCount {
             get { return processed_count; }
         }
-        
+
         private int total_count;
         public int TotalCount {
             get { return total_count; }
         }
-        
+
         protected abstract T ProcessItem (T item);
-        
+
         protected virtual void OnFinished ()
         {
             lock (this) {
@@ -73,7 +73,7 @@ namespace Hyena.Collections
                 total_count = 0;
                 processed_count = 0;
             }
-            
+
             EventHandler handler = Finished;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
@@ -87,7 +87,7 @@ namespace Hyena.Collections
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnCanceled ()
         {
             lock (queue) {
@@ -96,24 +96,24 @@ namespace Hyena.Collections
                 processed_count = 0;
             }
         }
-        
+
         public virtual void Enqueue (T item)
         {
-            lock (this) {                
+            lock (this) {
                 lock (queue) {
                     queue.Enqueue (item);
                     total_count++;
                 }
-                
+
                 if (!threaded) {
                     Processor (null);
                     return;
                 }
-                
+
                 if (thread_wait == null) {
                     thread_wait = new AutoResetEvent (false);
                 }
-                
+
                 if (Monitor.TryEnter (monitor)) {
                     Monitor.Exit (monitor);
                     ThreadPool.QueueUserWorkItem (Processor);
@@ -121,35 +121,35 @@ namespace Hyena.Collections
                 }
             }
         }
-        
+
         protected virtual void EnqueueDownstream (T item)
         {
             if (NextElement != null && item != null) {
                 NextElement.Enqueue (item);
             }
         }
-        
+
         private void Processor (object state)
         {
             lock (monitor) {
                 if (threaded) {
                     thread_wait.Set ();
                 }
-            
+
                 lock (this) {
                     processing = true;
                 }
-                
+
                 try {
                     while (queue.Count > 0) {
                         CheckForCanceled ();
-                        
+
                         T item = null;
                         lock (queue) {
                             item = queue.Dequeue ();
                             processed_count++;
                         }
-                        
+
                         EnqueueDownstream (ProcessItem (item));
                         OnProcessedItem ();
                     }
@@ -165,11 +165,11 @@ namespace Hyena.Collections
                     thread_wait.Close ();
                     thread_wait = null;
                 }
-                
+
                 OnFinished ();
             }
         }
-        
+
         protected virtual void CheckForCanceled ()
         {
             lock (this) {
@@ -178,39 +178,39 @@ namespace Hyena.Collections
                 }
             }
         }
-        
+
         public void Cancel ()
         {
             lock (this) {
                 if (processing) {
                     canceled = true;
                 }
-                
+
                 if (NextElement != null) {
                     NextElement.Cancel ();
                 }
             }
         }
-        
+
         public bool Processing {
             get { lock (this) { return processing; } }
         }
-        
+
         public bool Threaded {
             get { return threaded; }
-            set { 
+            set {
                 if (processing) {
                     throw new InvalidOperationException ("Cannot change threading model while the element is processing");
                 }
-                
-                threaded = value; 
+
+                threaded = value;
             }
         }
-        
+
         protected Queue<T> Queue {
             get { return queue; }
         }
-        
+
         private QueuePipelineElement<T> next_element;
         internal QueuePipelineElement<T> NextElement {
             get { return next_element; }
diff --git a/src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs b/src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs
index 4c4fd63..7973e18 100644
--- a/src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs
@@ -42,11 +42,11 @@ namespace Hyena.Collections
 #if NET_1_1
     internal
 #else
-    public 
+    public
 #endif
 
     class RangeCollection :
-        ICloneable, 
+        ICloneable,
 #if NET_2_0
         ICollection<int>
 #else
@@ -57,7 +57,7 @@ namespace Hyena.Collections
         {
             private int start;
             private int end;
-            
+
             public Range (int start, int end)
             {
                 this.start = start;
@@ -73,12 +73,12 @@ namespace Hyena.Collections
                 get { return start; }
                 set { start = value; }
             }
-            
+
             public int End {
                 get { return end; }
                 set { end = value; }
             }
-            
+
             public int Count {
                 get { return End - Start + 1; }
             }
@@ -104,23 +104,23 @@ namespace Hyena.Collections
             if (delta < 0) {
                 start -= delta;
             }
-            
+
             if (start < range_count) {
                 Array.Copy (ranges, start, ranges, start + delta, range_count - start);
             }
-            
+
             range_count += delta;
         }
 
         private void EnsureCapacity (int growBy)
-        { 
+        {
             int new_capacity = ranges.Length == 0 ? 1 : ranges.Length;
             int min_capacity = ranges.Length == 0 ? MIN_CAPACITY : ranges.Length + growBy;
 
             while (new_capacity < min_capacity) {
                 new_capacity <<= 1;
             }
-            
+
 #if NET_2_0
             Array.Resize (ref ranges, new_capacity);
 #else
@@ -129,34 +129,34 @@ namespace Hyena.Collections
             ranges = new_ranges;
 #endif
         }
-        
+
         private void Insert (int position, Range range)
         {
             if (range_count == ranges.Length) {
                 EnsureCapacity (1);
             }
-            
+
             Shift (position, 1);
             ranges[position] = range;
         }
-       
+
         private void RemoveAt (int position)
         {
             Shift (position, -1);
             Array.Clear (ranges, range_count, 1);
         }
-        
+
 #endregion
 
 #region Private Range Logic
-        
+
         private bool RemoveIndexFromRange (int index)
         {
             int range_index = FindRangeIndexForValue (index);
             if (range_index < 0) {
                 return false;
             }
-            
+
             Range range = ranges[range_index];
             if (range.Start == index && range.End == index) {
                 RemoveAt (range_index);
@@ -169,7 +169,7 @@ namespace Hyena.Collections
                 ranges[range_index].End = index - 1;
                 Insert (range_index + 1, split_range);
             }
-            
+
             index_count--;
             return true;
         }
@@ -177,7 +177,7 @@ namespace Hyena.Collections
         private void InsertRange (Range range)
         {
             int position = FindInsertionPosition (range);
-            bool merged_left = MergeLeft (range, position); 
+            bool merged_left = MergeLeft (range, position);
             bool merged_right = MergeRight (range, position);
 
             if (!merged_left && !merged_right) {
@@ -208,7 +208,7 @@ namespace Hyena.Collections
 
             return false;
         }
-        
+
         private static int CompareRanges (Range a, Range b)
         {
             return (a.Start + (a.End - a.Start)).CompareTo (b.Start + (b.End - b.Start));
@@ -218,29 +218,29 @@ namespace Hyena.Collections
         {
             int min = 0;
             int max = range_count - 1;
-            
+
             while (min <= max) {
                 int mid = min + ((max - min) / 2);
                 int cmp = CompareRanges (ranges[mid], range);
-                 
+
                 if (cmp == 0) {
                     return mid;
                 } else if (cmp > 0) {
                     if (mid > 0 && CompareRanges (ranges[mid - 1], range) < 0) {
                         return mid;
                     }
-                    
+
                     max = mid - 1;
                 } else {
                     min = mid + 1;
                 }
             }
-            
+
             return min;
         }
-        
+
         public int FindRangeIndexForValue (int value)
-        {  
+        {
             int min = 0;
 			int max = range_count - 1;
 			
@@ -258,8 +258,8 @@ namespace Hyena.Collections
 
 			return ~min;
         }
-        
-#endregion 
+
+#endregion
 
 #region Public RangeCollection API
 
@@ -270,45 +270,45 @@ namespace Hyena.Collections
                 return ranges_copy;
             }
         }
-        
+
         public int RangeCount {
             get { return range_count; }
         }
-          
+
 #if NET_2_0
         [Obsolete ("Do not use the Indexes property in 2.0 profiles if enumerating only; Indexes allocates an array to avoid boxing in the 1.1 profile")]
 #endif
         public int [] Indexes {
-            get { 
+            get {
                 if (indexes_cache != null && generation == indexes_cache_generation) {
                     return indexes_cache;
                 }
-                
+
                 indexes_cache = new int[Count];
                 indexes_cache_generation = generation;
-                
+
                 for (int i = 0, j = 0; i < range_count; i++) {
                     for (int k = ranges[i].Start; k <= ranges[i].End; j++, k++) {
                         indexes_cache[j] = k;
                     }
                 }
-                
+
                 return indexes_cache;
             }
         }
-        
+
         public int IndexOf (int value)
         {
             int offset = 0;
-            
+
             foreach (Range range in ranges) {
                 if (value >= range.Start && value <= range.End) {
                     return offset + (value - range.Start);
                 }
-                
+
                 offset += range.End - range.Start + 1;
             }
-            
+
             return -1;
         }
 
@@ -319,7 +319,7 @@ namespace Hyena.Collections
                         return ranges[i].End - (cuml_count - index) + 1;
                     }
                 }
-                
+
                 throw new IndexOutOfRangeException (index.ToString ());
             }
         }
@@ -336,10 +336,10 @@ namespace Hyena.Collections
                 index_count++;
                 return true;
             }
-            
+
             return false;
         }
-        
+
         void
 #if NET_2_0
         ICollection<int>.
@@ -350,63 +350,63 @@ namespace Hyena.Collections
         {
             Add (value);
         }
-                
+
         public bool Remove (int value)
         {
             generation++;
             return RemoveIndexFromRange (value);
         }
-        
+
         public void Clear ()
         {
             range_count = 0;
             index_count = 0;
             generation++;
-            ranges = new Range[MIN_CAPACITY];   
+            ranges = new Range[MIN_CAPACITY];
         }
-        
+
         public bool Contains (int value)
         {
             return FindRangeIndexForValue (value) >= 0;
         }
-        
+
         public void CopyTo (int [] array, int index)
         {
             throw new NotImplementedException ();
         }
-        
+
         public void CopyTo (Array array, int index)
         {
             throw new NotImplementedException ();
         }
-        
+
         public int Count {
             get { return index_count; }
         }
-        
+
         public bool IsReadOnly {
             get { return false; }
         }
 
-#if !NET_2_0        
+#if !NET_2_0
         public bool IsSynchronized {
             get { return false; }
         }
-        
+
         public object SyncRoot {
             get { return this; }
         }
 #endif
 
 #endregion
-        
+
 #region ICloneable Implementation
 
         public object Clone ()
         {
             return MemberwiseClone ();
         }
-        
+
 #endregion
 
 #region IEnumerable Implementation
@@ -420,7 +420,7 @@ namespace Hyena.Collections
                 }
             }
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
diff --git a/src/Libraries/Hyena/Hyena.Collections/Selection.cs b/src/Libraries/Hyena/Hyena.Collections/Selection.cs
index 1b77df5..39a86b1 100644
--- a/src/Libraries/Hyena/Hyena.Collections/Selection.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/Selection.cs
@@ -39,9 +39,9 @@ namespace Hyena.Collections
 #if NET_1_1
     internal
 #else
-    public 
+    public
 #endif
-    
+
     class Selection :
 #if NET_2_0
         IEnumerable<int>
@@ -52,11 +52,11 @@ namespace Hyena.Collections
         RangeCollection ranges = new RangeCollection ();
         private int max_index;
         private int first_selected_index;
-        
+
         public event EventHandler Changed;
         public event EventHandler FocusChanged;
         private int focused_index = -1;
-        
+
         public Selection ()
         {
         }
@@ -79,16 +79,16 @@ namespace Hyena.Collections
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public void ToggleSelect (int index)
         {
             if (!ranges.Remove (index)) {
                 ranges.Add (index);
             }
-            
+
             OnChanged ();
         }
-        
+
         public void Select (int index)
         {
             ranges.Add (index);
@@ -103,7 +103,7 @@ namespace Hyena.Collections
             if (Count == 1)
                 first_selected_index = index;
         }
-        
+
         public void Unselect (int index)
         {
             if (ranges.Remove (index))
@@ -114,7 +114,7 @@ namespace Hyena.Collections
         {
             ranges.Remove (index);
         }
-                    
+
         public bool Contains(int index)
         {
             return ranges.Contains (index);
@@ -132,7 +132,7 @@ namespace Hyena.Collections
             else
                 Select (end);
         }
-        
+
         public void SelectRange (int a, int b)
         {
             int start = Math.Min (a, b);
@@ -145,7 +145,7 @@ namespace Hyena.Collections
 
             if (Count == i)
                 first_selected_index = a;
-            
+
             OnChanged ();
         }
 
@@ -167,38 +167,38 @@ namespace Hyena.Collections
             SelectRange (0, max_index);
         }
 
-        public void Clear () 
+        public void Clear ()
         {
             Clear (true);
         }
-        
+
         public void Clear (bool raise)
         {
             if (ranges.Count <= 0) {
                 return;
             }
-            
+
             ranges.Clear ();
             if (raise)
                 OnChanged ();
         }
-        
+
         public int Count {
             get { return ranges.Count; }
         }
-        
+
         public int MaxIndex {
             set { max_index = value; }
             get { return max_index; }
         }
-        
+
         public virtual bool AllSelected {
-            get { 
+            get {
                 if (ranges.RangeCount == 1) {
                     RangeCollection.Range range = ranges.Ranges[0];
                     return range.Start == 0 && range.End == max_index;
                 }
-                
+
                 return false;
             }
         }
@@ -210,21 +210,21 @@ namespace Hyena.Collections
         public RangeCollection.Range [] Ranges {
             get { return ranges.Ranges; }
         }
-        
+
         public int FirstIndex {
             get { return Count > 0 ? ranges[0] : -1; }
         }
-        
+
         public int LastIndex {
             get { return Count > 0 ? ranges[Count - 1]: -1; }
         }
-        
+
 #if NET_2_0
         public IEnumerator<int> GetEnumerator ()
         {
             return ranges.GetEnumerator ();
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
diff --git a/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs b/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs
index 01fa7db..4fdf49e 100644
--- a/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs
@@ -40,7 +40,7 @@ namespace Hyena.Collections.Tests
     {
         private IntervalHeap<int> heap;
         private static int [] heap_data = new int[2048];
-        
+
         [TestFixtureSetUp]
         public void Init()
         {
@@ -53,11 +53,11 @@ namespace Hyena.Collections.Tests
         private void PopulateHeap()
         {
             heap.Clear();
-            
+
             foreach(int i in heap_data) {
                 heap.Push(i, 0);
             }
-            
+
             Assert.AreEqual(heap.Count, heap_data.Length);
         }
 
@@ -65,7 +65,7 @@ namespace Hyena.Collections.Tests
         public void PopHeap()
         {
             PopulateHeap();
-            
+
             int i = 0;
             while(heap.Count > 0) {
                 heap.Pop();
@@ -118,7 +118,7 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual(h.Pop(), 3);
             Assert.AreEqual(h.Pop(), 1);
 
-            Assert.AreEqual(h.Count, 0);        
+            Assert.AreEqual(h.Count, 0);
         }
     }
 }
diff --git a/src/Libraries/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs b/src/Libraries/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs
index 35237df..1b96058 100644
--- a/src/Libraries/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs
@@ -47,7 +47,7 @@ namespace Hyena.Collections.Tests
                 return null;
             }
         }
-    
+
         [Test]
         public void BuildPipeline ()
         {
@@ -57,21 +57,21 @@ namespace Hyena.Collections.Tests
             BuildPipeline (10);
             BuildPipeline (1000);
         }
-        
+
         private void BuildPipeline (int count)
         {
             List<FakeElement> elements = new List<FakeElement> ();
             for (int i = 0; i < count; i++) {
                 elements.Add (new FakeElement ());
             }
-        
+
             QueuePipeline<object> qp = new QueuePipeline<object> ();
             foreach (FakeElement s in elements) {
                 qp.AddElement (s);
             }
-            
+
             Assert.AreEqual (elements[0], qp.FirstElement);
-            
+
             int index = 0;
             FakeElement element = (FakeElement)qp.FirstElement;
             while (element != null) {
diff --git a/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs b/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs
index bb81b8c..b461573 100644
--- a/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs
@@ -43,16 +43,16 @@ namespace Hyena.Collections.Tests
         {
             _TestRanges (new RangeCollection (), new int [] { 1, 11, 5, 7, 15, 32, 3, 9, 34 });
         }
-        
+
         [Test]
         public void MergedRanges ()
         {
             RangeCollection range = new RangeCollection ();
             int [] indexes = new int [] { 0, 7, 5, 9, 1, 6, 8, 2, 10, 12 };
-            
+
             _TestRanges (range, indexes);
             Assert.AreEqual (3, range.RangeCount);
-            
+
             int i= 0;
             foreach (RangeCollection.Range r in range.Ranges) {
                 switch (i++) {
@@ -74,94 +74,94 @@ namespace Hyena.Collections.Tests
                 }
             }
         }
-        
+
         [Test]
         public void LargeSequentialContains ()
         {
             RangeCollection range = new RangeCollection ();
             int i, n = 1000000;
-            
+
             for (i = 0; i < n; i++) {
                 range.Add (i);
             }
-            
+
             for (i = 0; i < n; i++) {
                 Assert.AreEqual (true, range.Contains (i));
             }
         }
-        
+
         [Test]
         public void LargeSequential ()
-        { 
+        {
             RangeCollection range = new RangeCollection ();
             int i, n = 1000000;
-            
+
             for (i = 0; i < n; i++) {
                 range.Add (i);
                 Assert.AreEqual (1, range.RangeCount);
             }
-            
+
             Assert.AreEqual (n, range.Count);
-            
+
             i = 0;
             foreach (int j in range) {
                 Assert.AreEqual (i++, j);
             }
-            
+
             Assert.AreEqual (n, i);
         }
-    
+
         [Test]
         public void LargeNonAdjacent ()
-        { 
+        {
             RangeCollection range = new RangeCollection ();
             int i, n = 1000000;
-            
+
             for (i = 0; i < n; i += 2) {
                 range.Add (i);
             }
-            
+
             Assert.AreEqual (n / 2, range.Count);
-            
+
             i = 0;
             foreach (int j in range) {
                 Assert.AreEqual (i, j);
                 i += 2;
             }
-            
+
             Assert.AreEqual (n, i);
         }
-    
+
         private static void _TestRanges (RangeCollection range, int [] indexes)
         {
             foreach (int index in indexes) {
                 range.Add (index);
             }
-            
+
             Assert.AreEqual (indexes.Length, range.Count);
-            
+
             Array.Sort (indexes);
-            
+
             int i = 0;
             foreach (int index in range) {
                 Assert.AreEqual (indexes[i++], index);
             }
-            
+
             #pragma warning disable 0618
-    
+
             i = 0;
             foreach (int index in range.Indexes) {
                 Assert.AreEqual (indexes[i++], index);
             }
-            
+
             for (i = 0; i < range.Indexes.Length; i++) {
                 Assert.AreEqual (indexes[i], range.Indexes[i]);
             }
-    
+
             #pragma warning restore 0618
-    
+
         }
-        
+
         [Test]
         public void RemoveSingles ()
         {
@@ -170,29 +170,29 @@ namespace Hyena.Collections.Tests
             foreach (int index in indexes) {
                 range.Add (index);
             }
-            
+
             foreach (int index in indexes) {
                 Assert.AreEqual (true, range.Remove (index));
             }
         }
-        
+
         [Test]
         public void RemoveStarts ()
         {
             RangeCollection range = _SetupTestRemoveMerges ();
-            
+
             Assert.AreEqual (true, range.Contains (0));
             range.Remove (0);
             Assert.AreEqual (false, range.Contains (0));
             Assert.AreEqual (4, range.RangeCount);
-            
+
             Assert.AreEqual (true, range.Contains (2));
             range.Remove (2);
             Assert.AreEqual (false, range.Contains (2));
             Assert.AreEqual (4, range.RangeCount);
             Assert.AreEqual (3, range.Ranges[0].Start);
             Assert.AreEqual (5, range.Ranges[0].End);
-            
+
             Assert.AreEqual (true, range.Contains (14));
             range.Remove (14);
             Assert.AreEqual (false, range.Contains (14));
@@ -200,19 +200,19 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual (15, range.Ranges[2].Start);
             Assert.AreEqual (15, range.Ranges[2].End);
         }
-         
+
         [Test]
         public void RemoveEnds ()
         {
             RangeCollection range = _SetupTestRemoveMerges ();
-            
+
             Assert.AreEqual (true, range.Contains (5));
             range.Remove (5);
             Assert.AreEqual (false, range.Contains (5));
             Assert.AreEqual (5, range.RangeCount);
             Assert.AreEqual (2, range.Ranges[1].Start);
             Assert.AreEqual (4, range.Ranges[1].End);
-            
+
             Assert.AreEqual (true, range.Contains (15));
             range.Remove (15);
             Assert.AreEqual (false, range.Contains (15));
@@ -220,12 +220,12 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual (14, range.Ranges[3].Start);
             Assert.AreEqual (14, range.Ranges[3].End);
         }
-        
+
         [Test]
         public void RemoveMids ()
         {
             RangeCollection range = _SetupTestRemoveMerges ();
-            
+
             Assert.AreEqual (5, range.RangeCount);
             Assert.AreEqual (14, range.Ranges[3].Start);
             Assert.AreEqual (15, range.Ranges[3].End);
@@ -240,22 +240,22 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual (14, range.Ranges[4].Start);
             Assert.AreEqual (15, range.Ranges[4].End);
         }
-        
+
         private static RangeCollection _SetupTestRemoveMerges ()
         {
             RangeCollection range = new RangeCollection ();
-            int [] indexes = new int [] { 
-                0, 
+            int [] indexes = new int [] {
+                0,
                 2, 3, 4, 5,
                 7, 8, 9, 10, 11,
                 14, 15,
                 17, 18, 19
             };
-            
+
             foreach (int index in indexes) {
                 range.Add (index);
             }
-            
+
             int i = 0;
             foreach (RangeCollection.Range r in range.Ranges) {
                 switch (i++) {
@@ -284,43 +284,43 @@ namespace Hyena.Collections.Tests
                         break;
                 }
             }
-            
+
             return range;
         }
-        
+
         #pragma warning disable 0618
-        
+
         [Test]
         public void IndexesCacheGeneration ()
         {
             RangeCollection range = new RangeCollection ();
             int [] index_cache = range.Indexes;
-            
+
             Assert.AreSame (index_cache, range.Indexes);
-            
+
             range.Add (0);
             range.Add (5);
-            
+
             if (index_cache == range.Indexes) {
                 Assert.Fail ("Indexes Cache not regenerated after change");
             }
-            
+
             index_cache = range.Indexes;
             range.Remove (0);
             range.Add (3);
-    
+
             if (index_cache == range.Indexes) {
                 Assert.Fail ("Indexes Cache not regenerated after change");
             }
         }
-        
+
         #pragma warning restore 0618
-    
+
         [Test]
         public void IndexOf ()
         {
             RangeCollection range = new RangeCollection ();
-            
+
             range.Add (0);
             range.Add (2);
             range.Add (3);
@@ -331,7 +331,7 @@ namespace Hyena.Collections.Tests
             range.Add (11);
             range.Add (12);
             range.Add (13);
-            
+
             Assert.AreEqual (0, range.IndexOf (0));
             Assert.AreEqual (1, range.IndexOf (2));
             Assert.AreEqual (2, range.IndexOf (3));
@@ -344,27 +344,27 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual (9, range.IndexOf (13));
             Assert.AreEqual (-1, range.IndexOf (99));
         }
-        
+
         [Test]
         public void IndexerForGoodIndexes ()
         {
             RangeCollection range = new RangeCollection ();
-            
+
             /*
             Range  Idx  Value
             0-2    0 -> 0
                    1 -> 1
                    2 -> 2
-            
+
             7-9    3 -> 7
                    4 -> 8
                    5 -> 9
-            
+
             11-13  6 -> 11
                    7 -> 12
                    8 -> 13
             */
-            
+
             range.Add (0);
             range.Add (1);
             range.Add (2);
@@ -374,7 +374,7 @@ namespace Hyena.Collections.Tests
             range.Add (11);
             range.Add (12);
             range.Add (13);
-            
+
             Assert.AreEqual (0, range[0]);
             Assert.AreEqual (1, range[1]);
             Assert.AreEqual (2, range[2]);
@@ -385,27 +385,27 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual (12, range[7]);
             Assert.AreEqual (13, range[8]);
         }
-    
+
         [Test]
         public void StressForGoodIndexes ()
         {
             Random random = new Random (0xbeef);
             RangeCollection ranges = new RangeCollection ();
             List<int> indexes = new List<int> ();
-            
+
             for (int i = 0, n = 75000; i < n; i++) {
                 int value = random.Next (n);
                 if (ranges.Add (value)) {
                     CollectionExtensions.SortedInsert (indexes, value);
                 }
-            } 
-            
+            }
+
             Assert.AreEqual (indexes.Count, ranges.Count);
             for (int i = 0; i < indexes.Count; i++) {
                 Assert.AreEqual (indexes[i], ranges[i]);
             }
         }
-        
+
         [Test]
         [ExpectedException (typeof (IndexOutOfRangeException))]
         public void IndexerForNegativeBadIndex ()
@@ -413,7 +413,7 @@ namespace Hyena.Collections.Tests
             RangeCollection range = new RangeCollection ();
             Assert.AreEqual (0, range[1]);
         }
-        
+
         [Test]
         [ExpectedException (typeof (IndexOutOfRangeException))]
         public void IndexerForZeroBadIndex ()
@@ -421,7 +421,7 @@ namespace Hyena.Collections.Tests
             RangeCollection range = new RangeCollection ();
             Assert.AreEqual (0, range[0]);
         }
-        
+
         [Test]
         [ExpectedException (typeof (IndexOutOfRangeException))]
         public void IndexerForPositiveBadIndex ()
@@ -430,7 +430,7 @@ namespace Hyena.Collections.Tests
             range.Add (1);
             Assert.AreEqual (0, range[1]);
         }
-        
+
         [Test]
         public void ExplicitInterface ()
         {
@@ -439,10 +439,10 @@ namespace Hyena.Collections.Tests
             range.Add (2);
             range.Add (5);
             range.Add (6);
-            
+
             Assert.AreEqual (4, range.Count);
         }
-        
+
         [Test]
         public void NegativeIndices ()
         {
@@ -464,7 +464,7 @@ namespace Hyena.Collections.Tests
             Assert.AreEqual (new RangeCollection.Range (-5, -5), c.Ranges[1], "#7");
             Assert.AreEqual (new RangeCollection.Range (5, 5), c.Ranges[2], "#8");
             Assert.AreEqual (new RangeCollection.Range (10, 10), c.Ranges[3], "#9");
-            
+
             Assert.AreEqual (0, c.FindRangeIndexForValue (-9), "#10");
             Assert.IsTrue (c.FindRangeIndexForValue (-7) < 0, "#11");
         }
@@ -480,12 +480,12 @@ namespace Hyena.Collections.Tests
             for (int i = start; i <= end; i++) {
                 ranges.Add (i);
             }
-            
+
             Assert.IsTrue (ranges.Contains (GetAddress ("127.0.0.15")));
             Assert.IsFalse (ranges.Contains (GetAddress ("127.0.0.0")));
             Assert.IsFalse (ranges.Contains (GetAddress ("127.0.0.51")));
         }
-        
+
         private static int GetAddress (string addressStr)
         {
             System.Net.IPAddress address = System.Net.IPAddress.Parse (addressStr);
diff --git a/src/Libraries/Hyena/Hyena.Collections/WriteLineElement.cs b/src/Libraries/Hyena/Hyena.Collections/WriteLineElement.cs
index f1277cd..3d3b37f 100644
--- a/src/Libraries/Hyena/Hyena.Collections/WriteLineElement.cs
+++ b/src/Libraries/Hyena/Hyena.Collections/WriteLineElement.cs
@@ -36,7 +36,7 @@ namespace Hyena.Collections
         {
             Threaded = false;
         }
-        
+
         protected override T ProcessItem (T item)
         {
             Console.WriteLine (item);
diff --git a/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs b/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs
index 91325d2..b5e5e19 100644
--- a/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs
+++ b/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs
@@ -1,4 +1,4 @@
-// 
+//
 // CommandLineParser.cs
 //
 // Author:
@@ -38,14 +38,14 @@ namespace Hyena.CommandLine
         {
             public int Order;
             public string Value;
-            
+
             public Argument (int order, string value)
             {
                 Order = order;
                 Value = value;
             }
         }
-    
+
         private int generation;
         private int sorted_args_generation;
         private int offset;
@@ -53,19 +53,19 @@ namespace Hyena.CommandLine
         private KeyValuePair<string, Argument> [] sorted_args;
         private Dictionary<string, Argument> parsed_arguments = new Dictionary<string, Argument> ();
         private List<string> file_list = new List<string> ();
-        
+
         public CommandLineParser () : this (Environment.GetCommandLineArgs (), 1)
         {
         }
-        
+
         public CommandLineParser (string [] arguments, int offset)
         {
             this.arguments = arguments;
             this.offset = offset;
-            
+
             Parse ();
         }
-        
+
         private void Parse ()
         {
             for (int i = offset; i < arguments.Length; i++) {
@@ -73,7 +73,7 @@ namespace Hyena.CommandLine
                     file_list.Add (arguments[i]);
                     continue;
                 }
-                
+
                 string name = OptionName (arguments[i]);
                 string value = String.Empty;
 
@@ -82,7 +82,7 @@ namespace Hyena.CommandLine
                     value = name.Substring (eq_offset + 1);
                     name = name.Substring (0, eq_offset);
                 }
-                 
+
                 if (parsed_arguments.ContainsKey (name)) {
                     parsed_arguments[name] = new Argument (i, value);
                 } else {
@@ -90,22 +90,22 @@ namespace Hyena.CommandLine
                 }
             }
         }
-        
+
         private bool IsOption (string argument)
         {
             return argument.Length > 2 && argument.Substring (0, 2) == "--";
         }
-        
+
         private string OptionName (string argument)
         {
             return argument.Substring (2);
         }
-        
+
         public bool Contains (string name)
         {
             return parsed_arguments.ContainsKey (name);
         }
-        
+
         public bool ContainsStart (string start)
         {
             foreach (string argument in parsed_arguments.Keys) {
@@ -115,34 +115,34 @@ namespace Hyena.CommandLine
             }
             return false;
         }
-        
+
         public string this[string name] {
             get { return Contains (name) ? parsed_arguments[name].Value : String.Empty; }
-            set { 
+            set {
                 Argument arg = parsed_arguments[name];
                 arg.Value = value;
                 parsed_arguments[name] = arg;
                 generation++;
             }
         }
-        
+
         public IEnumerable<KeyValuePair<string, string>> Arguments {
             get {
-                if (sorted_args == null || sorted_args_generation != generation) {                
+                if (sorted_args == null || sorted_args_generation != generation) {
                     sorted_args = new KeyValuePair<string, Argument>[parsed_arguments.Count];
                     int i = 0;
-                    
+
                     foreach (KeyValuePair<string, Argument> arg in parsed_arguments) {
                         sorted_args[i++] = arg;
                     }
-                    
+
                     Array.Sort (sorted_args, delegate (KeyValuePair<string, Argument> a, KeyValuePair<string, Argument> b) {
                         return a.Value.Order.CompareTo (b.Value.Order);
                     });
-                    
+
                     sorted_args_generation = generation;
                 }
-                
+
                 foreach (KeyValuePair<string, Argument> arg in sorted_args) {
                     yield return new KeyValuePair<string, string> (arg.Key, arg.Value.Value);
                 }
@@ -152,21 +152,21 @@ namespace Hyena.CommandLine
         public ReadOnlyCollection<string> Files {
             get { return new ReadOnlyCollection<string> (file_list); }
         }
-            
+
         public override string ToString ()
         {
             System.Text.StringBuilder builder = new System.Text.StringBuilder ();
 
             builder.Append ("Parsed Arguments\n");
             foreach (KeyValuePair<string, Argument> argument in parsed_arguments) {
-                builder.AppendFormat ("  {0} = [{1}]\n", argument.Key, argument.Value.Value); 
+                builder.AppendFormat ("  {0} = [{1}]\n", argument.Key, argument.Value.Value);
             }
-            
+
             builder.Append ("\nFile List\n");
             foreach (string file in file_list) {
                 builder.AppendFormat ("{0}\n", file);
             }
-            
+
             return builder.ToString ();
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.CommandLine/Layout.cs b/src/Libraries/Hyena/Hyena.CommandLine/Layout.cs
index f4797fb..665c198 100644
--- a/src/Libraries/Hyena/Hyena.CommandLine/Layout.cs
+++ b/src/Libraries/Hyena/Hyena.CommandLine/Layout.cs
@@ -35,7 +35,7 @@ namespace Hyena.CommandLine
     public class Layout
     {
         private List<LayoutGroup> groups;
-        
+
         public Layout (List<LayoutGroup> groups)
         {
             this.groups = groups;
@@ -44,33 +44,33 @@ namespace Hyena.CommandLine
         public Layout (params LayoutGroup [] groups) : this (new List<LayoutGroup> (groups))
         {
         }
-        
+
         private int TerminalWidth {
             get { return Console.WindowWidth <= 0 ? 80 : Console.WindowWidth; }
         }
-        
+
         public string ToString (params string [] groupIds)
         {
             return ToString (GroupIdsToGroups (groupIds));
         }
-        
+
         public override string ToString ()
         {
             return ToString (groups);
         }
-        
+
         public string ToString (IEnumerable<LayoutGroup> groups)
         {
             StringBuilder builder = new StringBuilder ();
-            
+
             int min_spacing = 6;
-            
+
             int group_index = 0;
             int group_count = 0;
             int max_option_length = 0;
             int max_description_length = 0;
             int description_alignment = 0;
-            
+
             foreach (LayoutGroup group in groups) {
                 foreach (LayoutOption option in group) {
                     if (option.Name.Length > max_option_length) {
@@ -78,54 +78,54 @@ namespace Hyena.CommandLine
                     }
                 }
             }
-            
+
             max_description_length = TerminalWidth - max_option_length - min_spacing - 4;
             description_alignment = max_option_length + min_spacing + 4;
-            
+
             IEnumerator<LayoutGroup> enumerator = groups.GetEnumerator ();
             while (enumerator.MoveNext ()) {
                 group_count++;
             }
-            
+
             foreach (LayoutGroup group in groups) {
                 if (group.Id != "default") {
                     builder.Append (group.Title);
                     builder.AppendLine ();
                     builder.AppendLine ();
                 }
-                
+
                 for (int i = 0, n = group.Count; i < n; i++) {
                     int spacing = (max_option_length - group[i].Name.Length) + min_spacing;
-                    builder.AppendFormat ("  --{0}{2}{1}", group[i].Name, 
-                        WrapAlign (group[i].Description, max_description_length, 
+                    builder.AppendFormat ("  --{0}{2}{1}", group[i].Name,
+                        WrapAlign (group[i].Description, max_description_length,
                             description_alignment, i == n - 1),
                         String.Empty.PadRight (spacing));
                     builder.AppendLine ();
                 }
-                
+
                 if (group_index++ < group_count - 1) {
                     builder.AppendLine ();
                 }
             }
-            
+
             return builder.ToString ();
         }
-        
+
         public string LayoutLine (string str)
         {
             return WrapAlign (str, TerminalWidth, 0, true);
         }
-        
+
         private static string WrapAlign (string str, int width, int align, bool last)
         {
             StringBuilder builder = new StringBuilder ();
             bool did_wrap = false;
-            
+
             for (int i = 0, b = 0; i < str.Length; i++, b++) {
                 if (str[i] == ' ') {
                     int word_length = 0;
                     for (int j = i + 1; j < str.Length && str[j] != ' '; word_length++, j++);
-                    
+
                     if (b + word_length >= width) {
                         builder.AppendLine ();
                         builder.Append (String.Empty.PadRight (align));
@@ -134,27 +134,27 @@ namespace Hyena.CommandLine
                         continue;
                     }
                 }
-                
+
                 builder.Append (str[i]);
             }
-            
+
             if (did_wrap && !last) {
                 builder.AppendLine ();
             }
-            
+
             return builder.ToString ();
         }
-        
+
         public void Add (LayoutGroup group)
         {
             groups.Add (group);
         }
-        
+
         public void Remove (LayoutGroup group)
         {
             groups.Remove (group);
         }
-        
+
         public void Remove (string groupId)
         {
             LayoutGroup group = FindGroup (groupId);
@@ -162,7 +162,7 @@ namespace Hyena.CommandLine
                 groups.Remove (group);
             }
         }
-        
+
         private LayoutGroup FindGroup (string id)
         {
             foreach (LayoutGroup group in groups) {
@@ -170,25 +170,25 @@ namespace Hyena.CommandLine
                     return group;
                 }
             }
-            
+
             return null;
         }
-        
+
         private IEnumerable<LayoutGroup> GroupIdsToGroups (string [] groupIds)
         {
             foreach (string group_id in groupIds) {
                 LayoutGroup group = FindGroup (group_id);
                 if (group != null) {
                     yield return group;
-                }    
+                }
             }
         }
-        
+
         public static LayoutOption Option (string name, string description)
         {
             return new LayoutOption (name, description);
         }
-        
+
         public static LayoutGroup Group (string id, string title, params LayoutOption [] options)
         {
             return new LayoutGroup (id, title, options);
diff --git a/src/Libraries/Hyena/Hyena.CommandLine/LayoutGroup.cs b/src/Libraries/Hyena/Hyena.CommandLine/LayoutGroup.cs
index 4054937..757f559 100644
--- a/src/Libraries/Hyena/Hyena.CommandLine/LayoutGroup.cs
+++ b/src/Libraries/Hyena/Hyena.CommandLine/LayoutGroup.cs
@@ -1,4 +1,4 @@
-// 
+//
 // LayoutGroup.cs
 //
 // Author:
@@ -36,44 +36,44 @@ namespace Hyena.CommandLine
         private List<LayoutOption> options;
         private string id;
         private string title;
-        
+
         public LayoutGroup (string id, string title, List<LayoutOption> options)
         {
             this.id = id;
             this.title = title;
             this.options = options;
         }
-        
-        public LayoutGroup (string id, string title, params LayoutOption [] options) 
+
+        public LayoutGroup (string id, string title, params LayoutOption [] options)
             : this (id, title, new List<LayoutOption> (options))
         {
         }
-        
+
         public IEnumerator<LayoutOption> GetEnumerator ()
         {
             return options.GetEnumerator ();
         }
-        
+
         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
+
         public void Add (LayoutOption option)
         {
             options.Add (option);
         }
-        
+
         public void Add (string name, string description)
         {
             options.Add (new LayoutOption (name, description));
         }
-        
+
         public void Remove (LayoutOption option)
         {
             options.Remove (option);
         }
-        
+
         public void Remove (string optionName)
         {
             LayoutOption option = FindOption (optionName);
@@ -81,7 +81,7 @@ namespace Hyena.CommandLine
                 options.Remove (option);
             }
         }
-        
+
         private LayoutOption FindOption (string name)
         {
             foreach (LayoutOption option in options) {
@@ -89,27 +89,27 @@ namespace Hyena.CommandLine
                     return option;
                 }
             }
-            
+
             return null;
         }
-        
+
         public LayoutOption this[int index] {
             get { return options[index]; }
             set { options[index] = value; }
         }
-        
+
         public int Count {
             get { return options.Count; }
         }
-        
+
         public string Id {
             get { return id; }
         }
-        
+
         public string Title {
             get { return title; }
         }
-        
+
         public IList<LayoutOption> Options {
             get { return options; }
         }
diff --git a/src/Libraries/Hyena/Hyena.CommandLine/LayoutOption.cs b/src/Libraries/Hyena/Hyena.CommandLine/LayoutOption.cs
index e27bf70..8a01041 100644
--- a/src/Libraries/Hyena/Hyena.CommandLine/LayoutOption.cs
+++ b/src/Libraries/Hyena/Hyena.CommandLine/LayoutOption.cs
@@ -1,4 +1,4 @@
-// 
+//
 // LayoutOption.cs
 //
 // Author:
@@ -27,22 +27,22 @@
 //
 
 namespace Hyena.CommandLine
-{   
+{
     public class LayoutOption
     {
         private string name;
         private string description;
-        
+
         public LayoutOption (string name, string description)
         {
             this.name = name;
-            this.description = description;        
+            this.description = description;
         }
-        
+
         public string Name {
             get { return name; }
         }
-        
+
         public string Description {
             get { return description; }
         }
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumn.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumn.cs
index 37c9bd9..e37bbbc 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumn.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumn.cs
@@ -40,13 +40,13 @@ namespace Hyena.Data.Sqlite
         private readonly Type type;
         private readonly string column_type;
         private readonly string name;
-        
+
         protected AbstractDatabaseColumn (FieldInfo field_info, AbstractDatabaseColumnAttribute attribute)
             : this (attribute, field_info, field_info.FieldType)
         {
             this.field_info = field_info;
         }
-        
+
         protected AbstractDatabaseColumn (PropertyInfo property_info, AbstractDatabaseColumnAttribute attribute) :
             this (attribute, property_info, property_info.PropertyType)
         {
@@ -60,7 +60,7 @@ namespace Hyena.Data.Sqlite
             }
             this.property_info = property_info;
         }
-        
+
         private AbstractDatabaseColumn (AbstractDatabaseColumnAttribute attribute, MemberInfo member_info, Type type)
         {
             try {
@@ -77,7 +77,7 @@ namespace Hyena.Data.Sqlite
         {
             return field_info != null ? field_info.GetValue (target) : property_info.GetValue (target, null);
         }
-        
+
         public object GetValue (object target)
         {
             object result = field_info != null
@@ -85,14 +85,14 @@ namespace Hyena.Data.Sqlite
                 : property_info.GetValue (target, null);
             return SqliteUtils.ToDbFormat (type, result);
         }
-        
+
         public void SetValue (object target, IDataReader reader, int column)
         {
             // FIXME should we insist on nullable types?
             object value = reader.IsDBNull (column) ? null : reader.GetValue (column);
             SetValue (target, SqliteUtils.FromDbFormat(type, value));
         }
-        
+
         public void SetValue (object target, object value)
         {
             if (field_info != null) {
@@ -101,97 +101,97 @@ namespace Hyena.Data.Sqlite
                 property_info.SetValue (target, value, null);
             }
         }
-        
+
         public string Name {
             get { return name; }
         }
-        
+
         public string Type {
             get { return column_type; }
         }
     }
-    
+
     public sealed class DatabaseColumn : AbstractDatabaseColumn
     {
         private DatabaseColumnAttribute attribute;
-        
+
         public DatabaseColumn (FieldInfo field_info, DatabaseColumnAttribute attribute)
             : base (field_info, attribute)
         {
             this.attribute = attribute;
         }
-        
+
         public DatabaseColumn (PropertyInfo property_info, DatabaseColumnAttribute attribute)
             : base (property_info, attribute)
         {
             this.attribute = attribute;
         }
-        
+
         public DatabaseColumnConstraints Constraints {
             get { return attribute.Constraints; }
         }
-        
+
         public string DefaultValue {
             get { return attribute.DefaultValue; }
         }
-        
+
         public string Index {
             get { return attribute.Index; }
         }
-        
+
         public string Schema {
             get {
                 return SqliteUtils.BuildColumnSchema (Type, Name, attribute.DefaultValue, attribute.Constraints);
             }
         }
-        
+
         public override bool Equals (object o)
         {
             DatabaseColumn column = o as DatabaseColumn;
             return o != null && column.Name.Equals (Name);
         }
-        
+
         public override int GetHashCode ()
         {
             return Name.GetHashCode ();
         }
     }
-    
+
     internal sealed class VirtualDatabaseColumn : AbstractDatabaseColumn
     {
         private VirtualDatabaseColumnAttribute attribute;
-        
+
         public VirtualDatabaseColumn (FieldInfo field_info, VirtualDatabaseColumnAttribute attribute)
             : base (field_info, attribute)
         {
             this.attribute = attribute;
         }
-        
+
         public VirtualDatabaseColumn (PropertyInfo property_info, VirtualDatabaseColumnAttribute attribute)
             : base (property_info, attribute)
         {
             this.attribute = attribute;
         }
-        
+
         public string TargetTable {
             get { return attribute.TargetTable; }
         }
-        
+
         public string LocalKey {
             get { return attribute.LocalKey; }
         }
-        
+
         public string ForeignKey {
             get { return attribute.ForeignKey; }
         }
     }
-    
+
     public struct DbColumn
     {
         public readonly string Name;
         public readonly DatabaseColumnConstraints Constraints;
         public readonly string DefaultValue;
-        
+
         public DbColumn(string name, DatabaseColumnConstraints constraints, string default_value)
         {
             Name = name;
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs
index cd70129..dc022ed 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs
@@ -41,21 +41,21 @@ namespace Hyena.Data.Sqlite
         PrimaryKey = 2,
         Unique = 4
     }
-    
+
     public abstract class AbstractDatabaseColumnAttribute : Attribute
     {
         private string column_name;
         private bool select = true;
-        
+
         public AbstractDatabaseColumnAttribute ()
         {
         }
-        
+
         public AbstractDatabaseColumnAttribute (string column_name)
         {
             this.column_name = column_name;
         }
-        
+
         public string ColumnName {
             get { return column_name; }
         }
@@ -65,45 +65,45 @@ namespace Hyena.Data.Sqlite
             set { select = value; }
         }
     }
-    
+
     [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
     public sealed class DatabaseColumnAttribute : AbstractDatabaseColumnAttribute
     {
         private DatabaseColumnConstraints contraints;
         private string default_value;
         private string index;
-        
+
         public DatabaseColumnAttribute ()
         {
         }
-        
+
         public DatabaseColumnAttribute (string column_name) : base (column_name)
         {
         }
-        
+
         public DatabaseColumnConstraints Constraints {
             get { return contraints; }
             set { contraints = value; }
         }
-        
+
         public string DefaultValue {
             get { return default_value; }
             set { default_value = value; }
         }
-        
+
         public string Index {
             get { return index; }
             set { index = value; }
         }
     }
-    
+
     [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
     public sealed class VirtualDatabaseColumnAttribute : AbstractDatabaseColumnAttribute
     {
         private string target_table;
         private string local_key;
         private string foreign_key;
-        
+
         public VirtualDatabaseColumnAttribute (string column_name, string target_table, string local_key, string foreign_key)
             : base (column_name)
         {
@@ -111,15 +111,15 @@ namespace Hyena.Data.Sqlite
             this.local_key = local_key;
             this.foreign_key = foreign_key;
         }
-        
+
         public string TargetTable {
             get { return target_table; }
         }
-        
+
         public string LocalKey {
             get { return local_key; }
         }
-        
+
         public string ForeignKey {
             get { return foreign_key; }
         }
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
index 53fc49e..be45a9e 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
@@ -45,13 +45,13 @@ namespace Hyena.Data.Sqlite
             StackTrace = stackTrace;
             Ms = ms;
         }
-        
+
         public string Sql;
         public string SqlWithValues;
         public string StackTrace;
         public long Ms;
     }
-    
+
     public class HyenaSqliteCommand
     {
         private object result = null;
@@ -73,7 +73,7 @@ namespace Hyena.Data.Sqlite
             get { return log_all; }
             set { log_all = value; }
         }
-        
+
         public delegate void CommandExecutedHandler (object o, CommandExecutedArgs args);
         public static event CommandExecutedHandler CommandExecuted;
 
@@ -160,7 +160,7 @@ namespace Hyena.Data.Sqlite
             }
 
             object ret = result;
-            
+
             // Reset to false in case run again
             finished = false;
 
@@ -170,7 +170,7 @@ namespace Hyena.Data.Sqlite
             if (execution_exception != null) {
                 throw execution_exception;
             }
-            
+
             return ret;
         }
 
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
index 503568f..65a53e1 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
@@ -26,7 +26,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Data;
 using System.Threading;
@@ -43,12 +43,12 @@ namespace Hyena.Data.Sqlite
         public IDataReader Reader {
             get { return reader; }
         }
-        
+
         public HyenaDataReader (IDataReader reader)
         {
             this.reader = reader;
         }
-        
+
         public T Get<T> (int i)
         {
             if (!read) {
@@ -56,20 +56,20 @@ namespace Hyena.Data.Sqlite
             }
             return (T) SqliteUtils.FromDbFormat (typeof(T), reader[i]);
         }
-        
+
         public bool Read ()
         {
             read = true;
             return reader.Read ();
         }
-        
+
         public void Dispose ()
         {
             reader.Dispose ();
             reader = null;
         }
     }
-    
+
     public class ExecutingEventArgs : EventArgs
     {
         public readonly SqliteCommand Command;
@@ -78,7 +78,7 @@ namespace Hyena.Data.Sqlite
             Command = command;
         }
     }
-    
+
     public enum HyenaCommandType {
         Reader,
         Scalar,
@@ -114,9 +114,9 @@ namespace Hyena.Data.Sqlite
         internal ManualResetEvent ResultReadySignal {
             get { return result_ready_signal; }
         }
-        
+
         public event EventHandler<ExecutingEventArgs> Executing;
-        
+
         public HyenaSqliteConnection(string dbpath)
         {
             this.dbpath = dbpath;
@@ -129,7 +129,7 @@ namespace Hyena.Data.Sqlite
 #region Public Query Methods
 
         // TODO special case for single object param to avoid object []
-                
+
         // SELECT multiple column queries
         public IDataReader Query (HyenaSqliteCommand command)
         {
@@ -149,7 +149,7 @@ namespace Hyena.Data.Sqlite
         {
             return Query (new HyenaSqliteCommand (command_str, param_values));
         }
-        
+
         public IDataReader Query (object command)
         {
             return Query (new HyenaSqliteCommand (command.ToString ()));
@@ -180,7 +180,7 @@ namespace Hyena.Data.Sqlite
         {
             return QueryEnumerable<T> (new HyenaSqliteCommand (command_str, param_values));
         }
-        
+
         public IEnumerable<T> QueryEnumerable<T> (object command)
         {
             return QueryEnumerable<T> (new HyenaSqliteCommand (command.ToString ()));
@@ -241,7 +241,7 @@ namespace Hyena.Data.Sqlite
 #endregion
 
 #region Public Utility Methods
-        
+
         public void BeginTransaction ()
         {
             if (transaction_thread == Thread.CurrentThread) {
@@ -276,7 +276,7 @@ namespace Hyena.Data.Sqlite
             lock (command_queue) {
                 transaction_thread = null;
                 // Let any other threads continue
-                transaction_signal.Set (); 
+                transaction_signal.Set ();
             }
         }
 
@@ -290,9 +290,9 @@ namespace Hyena.Data.Sqlite
 
             lock (command_queue) {
                 transaction_thread = null;
-            
+
                 // Let any other threads continue
-                transaction_signal.Set (); 
+                transaction_signal.Set ();
             }
         }
 
@@ -300,17 +300,17 @@ namespace Hyena.Data.Sqlite
         {
             return Exists ("table", tableName);
         }
-        
+
         public bool IndexExists (string indexName)
         {
             return Exists ("index", indexName);
         }
-        
+
         private bool Exists (string type, string name)
         {
             return Exists (type, name, "sqlite_master") || Exists (type, name, "sqlite_temp_master");
         }
-        
+
         private bool Exists (string type, string name, string master)
         {
             return Query<int> (String.Format (
@@ -320,7 +320,7 @@ namespace Hyena.Data.Sqlite
         }
 
         private delegate void SchemaHandler (string column);
-        
+
         private void SchemaClosure (string table_name, SchemaHandler code)
         {
             string sql = Query<string> (String.Format (
@@ -335,7 +335,7 @@ namespace Hyena.Data.Sqlite
                 code (column_def_t.Substring (0, ws_index));
             }
         }
-        
+
         public bool ColumnExists (string tableName, string columnName)
         {
             bool value = false;
@@ -347,7 +347,7 @@ namespace Hyena.Data.Sqlite
             });
             return value;
         }
-        
+
         private static readonly char [] ws_chars = new char [] { ' ', '\t', '\n', '\r' };
         public IDictionary<string, string> GetSchema (string table_name)
         {
@@ -410,12 +410,12 @@ namespace Hyena.Data.Sqlite
         }
 
         private void ProcessQueue()
-        {         
+        {
             if (connection == null) {
                 connection = new SqliteConnection (String.Format ("Version=3,URI=file:{0}", dbpath));
                 connection.Open ();
             }
-            
+
             // Keep handling queries
             while (!dispose_requested) {
                 while (command_queue.Count > 0) {
@@ -453,7 +453,7 @@ namespace Hyena.Data.Sqlite
             // Finish
             connection.Close ();
         }
-        
+
         internal void OnExecuting (SqliteCommand command)
         {
             EventHandler<ExecutingEventArgs> handler = Executing;
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
index 9698461..c4a8344 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
@@ -65,7 +65,7 @@ namespace Hyena.Data.Sqlite
             this.connection = connection;
             this.model = model;
             this.provider = provider;
-            
+
             CheckCacheTable ();
 
             if (model.SelectAggregates != null) {
@@ -126,7 +126,7 @@ namespace Hyena.Data.Sqlite
                     @"SELECT OrderID, ItemID FROM {0} WHERE {0}.ModelID = {1}",
                     CacheTableName, uid
                 );
-                
+
                 reload_sql = String.Format (@"
                     DELETE FROM {0} WHERE ModelID = {1};
                     INSERT INTO {0} (ModelID, ItemID) SELECT DISTINCT {1}, {2} ",
@@ -135,7 +135,7 @@ namespace Hyena.Data.Sqlite
             } else {
                 select_str = String.Format (
                     @"SELECT {0}, {2}.ItemID FROM {1}
-                        INNER JOIN {2} 
+                        INNER JOIN {2}
                             ON {3} = {2}.ItemID
                         WHERE
                             {2}.ModelID = {4} {5} {6}",
@@ -177,7 +177,7 @@ namespace Hyena.Data.Sqlite
                 delete_selection_command = new HyenaSqliteCommand (String.Format (
                     "DELETE FROM {0} WHERE ModelID = {1}", CacheTableName, selection_uid
                 ));
-                
+
                 save_selection_command = new HyenaSqliteCommand (String.Format (
                     "INSERT INTO {0} (ModelID, ItemID) SELECT {1}, ItemID FROM {0} WHERE ModelID = {2} LIMIT ?, ?",
                     CacheTableName, selection_uid, uid
@@ -212,7 +212,7 @@ namespace Hyena.Data.Sqlite
         protected virtual string CacheModelsTableName {
             get { return "HyenaCacheModels"; }
         }
-        
+
         protected virtual string CacheTableName {
             get { return "HyenaCache"; }
         }
@@ -227,13 +227,13 @@ namespace Hyena.Data.Sqlite
                 }
              }
         }
-        
+
         public long IndexOf (ICacheableItem item)
         {
             if (item == null || item.CacheModelId != CacheId) {
                 return -1;
             }
-            
+
             return IndexOf (item.CacheEntryId);
         }
 
@@ -309,7 +309,7 @@ namespace Hyena.Data.Sqlite
             {
                 connection.Execute (delete_selection_command);
                 saved_selection = true;
-                
+
                 if (!has_select_all_item && model.Selection.FocusedIndex != -1) {
                     T item = GetValue (model.Selection.FocusedIndex);
                     if (item != null) {
@@ -384,7 +384,7 @@ namespace Hyena.Data.Sqlite
                 }
             }
         }
-        
+
         public void UpdateAggregates ()
         {
             using (IDataReader reader = connection.Query (count_command, uid)) {
@@ -398,7 +398,7 @@ namespace Hyena.Data.Sqlite
                 }
             }
         }
-        
+
         private long FindOrCreateCacheModelId (string id)
         {
             long model_id = connection.Query<long> (String.Format (
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs
index 8cb805a..2ddd0cd 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs
@@ -39,12 +39,12 @@ namespace Hyena.Data.Sqlite
         private readonly List<DatabaseColumn> columns = new List<DatabaseColumn> ();
         private readonly List<DatabaseColumn> select_columns = new List<DatabaseColumn> ();
         private readonly List<VirtualDatabaseColumn> virtual_columns = new List<VirtualDatabaseColumn> ();
-        
+
         private DatabaseColumn key;
         private int key_select_column_index;
         private HyenaSqliteConnection connection;
         private bool check_table = true;
-        
+
         private HyenaSqliteCommand create_command;
         private HyenaSqliteCommand insert_command;
         private HyenaSqliteCommand update_command;
@@ -52,13 +52,13 @@ namespace Hyena.Data.Sqlite
         private HyenaSqliteCommand select_command;
         private HyenaSqliteCommand select_range_command;
         private HyenaSqliteCommand select_single_command;
-        
+
         private string table_name;
         private string primary_key;
         private string select;
         private string from;
         private string where;
-        
+
         private const string HYENA_DATABASE_NAME = "hyena_database_master";
 
         public virtual string TableName { get { return table_name; } }
@@ -79,11 +79,11 @@ namespace Hyena.Data.Sqlite
         {
             return new T ();
         }
-        
+
         protected virtual string HyenaTableName {
             get { return "HyenaModelVersions"; }
         }
-        
+
         public HyenaSqliteConnection Connection {
             get { return connection; }
         }
@@ -96,7 +96,7 @@ namespace Hyena.Data.Sqlite
         public SqliteModelProvider (HyenaSqliteConnection connection, string table_name) : this (connection, table_name, true)
         {
         }
-        
+
         public SqliteModelProvider (HyenaSqliteConnection connection, string table_name, bool checkTable) : this (connection)
         {
             this.table_name = table_name;
@@ -129,15 +129,15 @@ namespace Hyena.Data.Sqlite
             if (key == null) {
                 throw new Exception (String.Format ("The {0} table does not have a primary key", TableName));
             }
-            
+
             key_select_column_index = select_columns.IndexOf (key);
-            
+
             if (check_table) {
                 CheckVersion ();
                 CheckTable ();
             }
         }
-        
+
         protected virtual void CheckVersion ()
         {
             if (connection.TableExists (HyenaTableName)) {
@@ -166,33 +166,33 @@ namespace Hyena.Data.Sqlite
                         version INTEGER)",
                     HyenaTableName)
                 );
-                
+
                 InsertVersion (HYENA_DATABASE_NAME, DatabaseVersion);
                 InsertVersion (TableName, ModelVersion);
             }
         }
-        
+
         private string SelectVersionSql (string name)
         {
             return String.Format (
                 "SELECT version FROM {0} WHERE name='{1}'",
                 HyenaTableName, name);
         }
-        
+
         private void UpdateVersion (string name, int version)
         {
             connection.Execute (String.Format (
                 "UPDATE {0} SET version={1} WHERE name='{2}'",
                 HyenaTableName, version, name));
         }
-        
+
         private void InsertVersion (string name, int version)
         {
             connection.Execute (String.Format (
                 "INSERT INTO {0} (name, version) VALUES ('{1}', {2})",
                 HyenaTableName, name, version));
         }
-        
+
         protected void CheckTable ()
         {
             //Console.WriteLine ("In {0} checking for table {1}", this, TableName);
@@ -213,7 +213,7 @@ namespace Hyena.Data.Sqlite
                 CreateTable ();
             }
         }
-        
+
         private void AddColumn (MemberInfo member, Attribute attribute)
         {
             DatabaseColumnAttribute column = attribute as DatabaseColumnAttribute;
@@ -221,7 +221,7 @@ namespace Hyena.Data.Sqlite
                 DatabaseColumn c = member is FieldInfo
                     ? new DatabaseColumn ((FieldInfo)member, column)
                     : new DatabaseColumn ((PropertyInfo)member, column);
-                    
+
                 AddColumn (c, column.Select);
             }
             VirtualDatabaseColumnAttribute virtual_column = attribute as VirtualDatabaseColumnAttribute;
@@ -233,7 +233,7 @@ namespace Hyena.Data.Sqlite
                 }
             }
         }
-        
+
         protected void AddColumn (DatabaseColumn c, bool select)
         {
             foreach (DatabaseColumn col in columns) {
@@ -250,13 +250,13 @@ namespace Hyena.Data.Sqlite
                     );
                 }
             }
-            
+
             columns.Add (c);
 
             if (select) {
                 select_columns.Add (c);
             }
-            
+
             if ((c.Constraints & DatabaseColumnConstraints.PrimaryKey) > 0) {
                 if (key != null) {
                     throw new Exception (String.Format (
@@ -266,7 +266,7 @@ namespace Hyena.Data.Sqlite
                 key = c;
             }
         }
-        
+
         protected virtual void CreateTable ()
         {
             connection.Execute (CreateCommand);
@@ -279,7 +279,7 @@ namespace Hyena.Data.Sqlite
                 }
             }
         }
-        
+
         protected void CreateIndex (string name, string columns)
         {
             Connection.Execute (String.Format (
@@ -287,7 +287,7 @@ namespace Hyena.Data.Sqlite
                 name, TableName, columns
             ));
         }
-        
+
         public virtual void Save (T target)
         {
             try {
@@ -297,12 +297,12 @@ namespace Hyena.Data.Sqlite
                     key.SetValue (target, Insert (target));
                 }
             } catch (Exception e) {
-                Hyena.Log.Exception (e); 
+                Hyena.Log.Exception (e);
                 Hyena.Log.DebugFormat ("type of key value: {0}", key.GetRawValue (target).GetType ());
                 throw;
             }
         }
-        
+
         protected virtual object [] GetInsertParams (T target)
         {
             // TODO create an instance variable object array and reuse it? beware threading issues
@@ -316,7 +316,7 @@ namespace Hyena.Data.Sqlite
             }
             return values;
         }
-        
+
         protected int Insert (T target)
         {
             return connection.Execute (InsertCommand, GetInsertParams (target));
@@ -336,30 +336,30 @@ namespace Hyena.Data.Sqlite
             values[j] = key.GetValue (target);
             return values;
         }
-        
+
         protected void Update (T target)
         {
             connection.Execute (UpdateCommand, GetUpdateParams (target));
         }
-        
+
         public virtual T Load (IDataReader reader)
         {
             T item = MakeNewObject ();
             Load (reader, item);
             return item;
         }
-        
+
         public void Load (IDataReader reader, T target)
         {
             int i = 0;
-            
+
             AbstractDatabaseColumn bad_column = null;
             try {
                 foreach (DatabaseColumn column in select_columns) {
                     bad_column = column;
                     column.SetValue (target, reader, i++);
                 }
-                
+
                 foreach (VirtualDatabaseColumn column in virtual_columns) {
                     bad_column = column;
                     column.SetValue (target, reader, i++);
@@ -371,7 +371,7 @@ namespace Hyena.Data.Sqlite
                 );
             }
         }
-        
+
         public IEnumerable<T> FetchAll ()
         {
             using (IDataReader reader = connection.Query (SelectCommand)) {
@@ -388,7 +388,7 @@ namespace Hyena.Data.Sqlite
             }
             return default(T);
         }
-        
+
         public IEnumerable<T> FetchAllMatching (string condition, params object [] vals)
         {
             HyenaSqliteCommand fetch_matching_command = CreateFetchCommand (condition);
@@ -403,7 +403,7 @@ namespace Hyena.Data.Sqlite
         {
             return new HyenaSqliteCommand (String.Format ("{0} AND {1}", SelectCommand.Text, condition));
         }
-        
+
         public IEnumerable<T> FetchRange (int offset, int limit)
         {
             using (IDataReader reader = connection.Query (SelectRangeCommand, offset, limit)) {
@@ -412,12 +412,12 @@ namespace Hyena.Data.Sqlite
                 }
             }
         }
-        
+
         public T FetchSingle (int id)
         {
             return FetchSingle ((long) id);
         }
-        
+
         public virtual T FetchSingle (long id)
         {
             using (IDataReader reader = connection.Query (SelectSingleCommand, id)) {
@@ -427,28 +427,28 @@ namespace Hyena.Data.Sqlite
             }
             return default(T);
         }
-        
+
         protected long PrimaryKeyFor (T item)
         {
             return Convert.ToInt64 (key.GetValue (item));
         }
-        
+
         protected long PrimaryKeyFor (IDataReader reader)
         {
             return Convert.ToInt64 (reader[key_select_column_index]);
         }
-        
+
         public virtual void Delete (long id)
         {
             if (id > 0)
                 connection.Execute (DeleteCommand, id);
         }
-        
+
         public void Delete (T item)
         {
             Delete (PrimaryKeyFor (item));
         }
-        
+
         public virtual void Delete (IEnumerable<T> items)
         {
             List<long> ids = new List<long> ();
@@ -458,7 +458,7 @@ namespace Hyena.Data.Sqlite
                 if (id > 0)
                     ids.Add (id);
             }
-            
+
             if (ids.Count > 0)
                 connection.Execute (DeleteCommand, ids.ToArray ());
         }
@@ -492,7 +492,7 @@ namespace Hyena.Data.Sqlite
                 column.SetValue (copy, column.GetRawValue (original));
             }
         }
-        
+
         protected virtual HyenaSqliteCommand CreateCommand {
             get {
                 if (create_command == null) {
@@ -515,7 +515,7 @@ namespace Hyena.Data.Sqlite
                 return create_command;
             }
         }
-        
+
         protected virtual HyenaSqliteCommand InsertCommand {
             get {
                 // FIXME can this string building be done more nicely?
@@ -544,7 +544,7 @@ namespace Hyena.Data.Sqlite
                 return insert_command;
             }
         }
-        
+
         protected virtual HyenaSqliteCommand UpdateCommand {
             get {
                 if (update_command == null) {
@@ -572,7 +572,7 @@ namespace Hyena.Data.Sqlite
                 return update_command;
             }
         }
-        
+
         protected virtual HyenaSqliteCommand SelectCommand {
             get {
                 if (select_command == null) {
@@ -586,7 +586,7 @@ namespace Hyena.Data.Sqlite
                 return select_command;
             }
         }
-        
+
         protected virtual HyenaSqliteCommand SelectRangeCommand {
             get {
                 if (select_range_command == null) {
@@ -602,7 +602,7 @@ namespace Hyena.Data.Sqlite
                 return select_range_command;
             }
         }
-        
+
         protected virtual HyenaSqliteCommand SelectSingleCommand {
             get {
                 if (select_single_command == null) {
@@ -618,7 +618,7 @@ namespace Hyena.Data.Sqlite
                 return select_single_command;
             }
         }
-        
+
         protected virtual HyenaSqliteCommand DeleteCommand {
             get {
                 if (delete_command == null) {
@@ -629,7 +629,7 @@ namespace Hyena.Data.Sqlite
                 return delete_command;
             }
         }
-        
+
         public virtual string Select {
             get {
                 if (select == null) {
@@ -638,7 +638,7 @@ namespace Hyena.Data.Sqlite
                 return select;
             }
         }
-        
+
         public virtual string From {
             get {
                 if (from == null) {
@@ -647,7 +647,7 @@ namespace Hyena.Data.Sqlite
                 return from;
             }
         }
-        
+
         public virtual string Where {
             get {
                 if (where == null) {
@@ -656,7 +656,7 @@ namespace Hyena.Data.Sqlite
                 return where;
             }
         }
-        
+
         public string PrimaryKey {
             get {
                 if (primary_key == null) {
@@ -666,7 +666,7 @@ namespace Hyena.Data.Sqlite
             }
             protected set { primary_key = value; }
         }
-        
+
         private void BuildQuerySql ()
         {
             StringBuilder select_builder = new StringBuilder ();
@@ -681,7 +681,7 @@ namespace Hyena.Data.Sqlite
                 select_builder.Append ('.');
                 select_builder.Append (column.Name);
             }
-            
+
             StringBuilder where_builder = new StringBuilder ();
             Dictionary<string, string> tables = new Dictionary<string,string> (virtual_columns.Count + 1);
             bool first_virtual = true;
@@ -702,7 +702,7 @@ namespace Hyena.Data.Sqlite
                 } else if (table_not_joined) {
                     where_builder.Append (" AND ");
                 }
-                
+
                 if (table_not_joined) {
                     where_builder.Append (column.TargetTable);
                     where_builder.Append ('.');
@@ -711,11 +711,11 @@ namespace Hyena.Data.Sqlite
                     where_builder.Append (TableName);
                     where_builder.Append ('.');
                     where_builder.Append (column.LocalKey);
-                
+
                     tables.Add (column.TargetTable, null);
                 }
             }
-            
+
             StringBuilder from_builder = new StringBuilder ();
             from_builder.Append (TableName);
             foreach (KeyValuePair<string, string> pair in tables) {
@@ -727,27 +727,27 @@ namespace Hyena.Data.Sqlite
             from = from_builder.ToString ();
             where = where_builder.ToString ();
         }
-        
+
         public U GetProperty <U> (T item, DbColumn column)
         {
             CheckProperty (typeof (U), column);
-            
+
             return connection.Query<U> (String.Format (
                 "SELECT {0} FROM {1} WHERE {2}={3}",
                 column.Name, TableName, key.Name, key.GetValue (item)));
         }
-        
+
         public void SetProperty <U> (T item, U value, DbColumn column)
         {
             CheckProperty (typeof (U), column);
-            
+
             connection.Execute (String.Format (
                 "UPDATE {0} SET {1}='{2}' WHERE {3}={4}",
                 TableName, column.Name,
                 SqliteUtils.ToDbFormat (typeof (U), value),
                 key.Name, key.GetValue (item)));
         }
-        
+
         public void ClearProperty <U> (DbColumn column)
         {
             if (!connection.ColumnExists (TableName, column.Name)) {
@@ -760,7 +760,7 @@ namespace Hyena.Data.Sqlite
                     TableName, column.Name, column.DefaultValue));
             }
         }
-        
+
         private void CheckProperty (Type type, DbColumn column)
         {
             if (!connection.ColumnExists (TableName, column.Name)) {
@@ -769,7 +769,7 @@ namespace Hyena.Data.Sqlite
                     column.Name, column.DefaultValue, column.Constraints));
             }
         }
-                                              
+
         private void AddColumnToTable (string column_schema)
         {
             connection.Execute (String.Format (
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteUtils.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteUtils.cs
index 9d89962..b0acfb7 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteUtils.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteUtils.cs
@@ -49,7 +49,7 @@ namespace Hyena.Data.Sqlite
                     "The type {0} cannot be bound to a database column.", type.Name));
             }
         }
-        
+
         public static object ToDbFormat (Type type, object value)
         {
             if (type == typeof (string)) {
@@ -70,15 +70,15 @@ namespace Hyena.Data.Sqlite
             } else if (type == typeof (bool)) {
                 return ((bool)value) ? 1 : 0;
             }
-            
+
             return value;
         }
-        
+
         public static object FromDbFormat (Type type, object value)
         {
             if (Convert.IsDBNull (value))
                 value = null;
-            
+
             if (type == typeof (DateTime)) {
                 return value == null
                     ? DateTime.MinValue
@@ -101,7 +101,7 @@ namespace Hyena.Data.Sqlite
                 return Convert.ChangeType (value, type);
             }
         }
-        
+
         public static string BuildColumnSchema (string type, string name, string default_value,
             DatabaseColumnConstraints constraints)
         {
@@ -125,7 +125,7 @@ namespace Hyena.Data.Sqlite
             return builder.ToString ();
         }
     }
-        
+
     [SqliteFunction (Name = "HYENA_COLLATION_KEY", FuncType = FunctionType.Scalar, Arguments = 1)]
     internal class CollationKeyFunction : SqliteFunction
     {
@@ -134,7 +134,7 @@ namespace Hyena.Data.Sqlite
             return Hyena.StringUtil.SortKey (args[0] as string);
         }
     }
-    
+
     [SqliteFunction (Name = "HYENA_SEARCH_KEY", FuncType = FunctionType.Scalar, Arguments = 1)]
     internal class SearchKeyFunction : SqliteFunction
     {
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs
index 181adf8..58b7dc6 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/DbBoundType.cs
@@ -40,7 +40,7 @@ namespace Hyena.Data.Sqlite.Tests
         Two,
         Three
     }
-    
+
     internal enum LongEnum : long
     {
         Cero,
@@ -48,14 +48,14 @@ namespace Hyena.Data.Sqlite.Tests
         Dos,
         Tres
     }
-    
+
     internal class ModelProvider : SqliteModelProvider<DbBoundType>
     {
         public ModelProvider (HyenaSqliteConnection connection) : base (connection)
         {
             Init ();
         }
-        
+
         public override string TableName {
             get { return "TestTable"; }
         }
@@ -65,7 +65,7 @@ namespace Hyena.Data.Sqlite.Tests
         protected override int DatabaseVersion {
             get { return 1; }
         }
-        
+
         protected override void MigrateTable (int old_version)
         {
         }
@@ -77,12 +77,12 @@ namespace Hyena.Data.Sqlite.Tests
             return new DbBoundType ();
         }
     }
-    
+
     internal class DbBoundType
     {
         [DatabaseColumn ("PrimaryKey", Constraints = DatabaseColumnConstraints.PrimaryKey)]
         public int PrimaryKey;
-        
+
         [DatabaseColumn ("PublicIntField")]
         public int PublicIntField;
         [DatabaseColumn ("PublicLongField")]
@@ -97,7 +97,7 @@ namespace Hyena.Data.Sqlite.Tests
         public IntEnum PublicIntEnumField;
         [DatabaseColumn ("PublicLongEnumField")]
         public LongEnum PublicLongEnumField;
-        
+
         private int public_int_property_field;
         [DatabaseColumn ("PublicIntProperty")]
         public int PublicIntProperty {
@@ -140,7 +140,7 @@ namespace Hyena.Data.Sqlite.Tests
             get { return public_long_enum_property_field; }
             set { public_long_enum_property_field = value; }
         }
-        
+
         [DatabaseColumn ("PrivateIntField")]
         private int private_int_field;
         [DatabaseColumn ("PrivateLongField")]
@@ -155,7 +155,7 @@ namespace Hyena.Data.Sqlite.Tests
         private IntEnum private_int_enum_field;
         [DatabaseColumn ("PrivateLongEnumField")]
         private LongEnum private_long_enum_field;
-        
+
         public int GetPrivateIntField ()
         {
             return private_int_field;
@@ -212,7 +212,7 @@ namespace Hyena.Data.Sqlite.Tests
         {
             private_long_enum_field = value;
         }
-        
+
         private int private_int_property_field;
         [DatabaseColumn ("PrivateIntProperty")]
         private int private_int_property {
@@ -255,7 +255,7 @@ namespace Hyena.Data.Sqlite.Tests
             get { return private_long_enum_property_field; }
             set { private_long_enum_property_field = value; }
         }
-        
+
         public int GetPrivateIntProperty ()
         {
             return private_int_property;
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
index f847f1b..e212010 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
@@ -47,36 +47,36 @@ namespace Hyena.Data.Sqlite.Tests
                     "a", 32);
                 Assert.Fail ("Should not have been able to pass 2 values to ApplyValues without exception");
             } catch {}
-    
+
             try {
                 cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
                     "a", 32, "22");
             } catch {
                 Assert.Fail ("Should have been able to pass 3 values to ApplyValues without exception");
             }
-    
+
             Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
         }
-    
+
         [Test]
         public void Constructor ()
         {
             HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?", "a", 32, "22");
             Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
         }
-    
+
         [Test]
         public void CultureInvariant ()
         {
             HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?", 32.2);
             Assert.AreEqual ("select foo from bar where baz = 32.2", GetGeneratedSql (cmd));
         }
-    
+
         [Test]
         public void ParameterSerialization ()
         {
             HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?");
-    
+
             Assert.AreEqual ("select foo from bar where baz = NULL", GetGeneratedSql (cmd, null));
             Assert.AreEqual ("select foo from bar where baz = 'It''s complicated, \"but\" ''''why not''''?'", GetGeneratedSql (cmd, "It's complicated, \"but\" ''why not''?"));
             Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, new DateTime (1970, 1, 1).ToLocalTime ()));
@@ -86,10 +86,10 @@ namespace Hyena.Data.Sqlite.Tests
             Assert.AreEqual ("select foo from bar where baz = 555", GetGeneratedSql (cmd, 555));
             Assert.AreEqual ("select foo from bar where baz = 1", GetGeneratedSql (cmd, true));
             Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, false));
-    
+
             HyenaSqliteCommand cmd2 = new HyenaSqliteCommand ("select foo from bar where baz = ?, bar = ?, boo = ?");
             Assert.AreEqual ("select foo from bar where baz = NULL, bar = NULL, boo = 22", GetGeneratedSql (cmd2, null, null, 22));
-    
+
             HyenaSqliteCommand cmd3 = new HyenaSqliteCommand ("select foo from bar where id in (?) and foo not in (?)");
             Assert.AreEqual ("select foo from bar where id in (1,2,4) and foo not in ('foo','baz')",
                     GetGeneratedSql (cmd3, new int [] {1, 2, 4}, new string [] {"foo", "baz"}));
@@ -111,19 +111,19 @@ namespace Hyena.Data.Sqlite.Tests
                 Assert.IsTrue (disposed);
             }
         }
-    
+
         static PropertyInfo tf = typeof(HyenaSqliteCommand).GetProperty ("CurrentSqlText", BindingFlags.Instance | BindingFlags.NonPublic);
         private static string GetGeneratedSql (HyenaSqliteCommand cmd, params object [] p)
         {
             return tf.GetValue ((new HyenaSqliteCommand (cmd.Text, p)), null) as string;
         }
-    
+
         private static string GetGeneratedSql (HyenaSqliteCommand cmd)
         {
             return tf.GetValue (cmd, null) as string;
         }
     }
-    
+
     [TestFixture]
     public class ObjectToSqlTests
     {
@@ -131,20 +131,20 @@ namespace Hyena.Data.Sqlite.Tests
         {
             Assert.AreEqual (expected, HyenaSqliteCommand.SqlifyObject (o));
         }
-        
+
         [Test]
         public void TestNull ()
         {
             AssertToSql (null, "NULL");
         }
-        
+
         [Test]
         public void TestBool ()
         {
             AssertToSql (false, "0");
             AssertToSql (true, "1");
         }
-        
+
         [Test]
         public void TestString ()
         {
@@ -152,7 +152,7 @@ namespace Hyena.Data.Sqlite.Tests
             AssertToSql ("test", "'test'");
             AssertToSql ("te'st", "'te''st'");
         }
-        
+
         [Test]
         public void TestByteArray ()
         {
@@ -160,7 +160,7 @@ namespace Hyena.Data.Sqlite.Tests
             AssertToSql (new byte[] {}, "X''");
             AssertToSql (new byte[] {0x10, 0x20, 0x30}, "X'102030'");
         }
-        
+
         [Test]
         public void TestOtherArray ()
         {
@@ -168,13 +168,13 @@ namespace Hyena.Data.Sqlite.Tests
             AssertToSql (new object[] {"a"}, "'a'");
             AssertToSql (new object[] {"a", "b"}, "'a','b'");
         }
-        
+
         [Test]
         public void TestDateTime ()
         {
             // Returned using local time, not UTC
             AssertToSql (new DateTime (2000, 1, 2), 946792800);
-            
+
             // Disregards milliseconds
             AssertToSql (new DateTime (2000, 1, 2, 10, 9, 8, 7), 946829348);
         }
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs
index 360dd39..7b12c5d 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs
@@ -41,21 +41,21 @@ namespace Hyena.Data.Sqlite.Tests
     {
         private HyenaSqliteConnection connection;
         private ModelProvider provider;
-        
+
         [TestFixtureSetUp]
         public void Init ()
         {
             connection = new HyenaSqliteConnection ("test.db");
             provider = new ModelProvider (connection);
         }
-        
+
         [TestFixtureTearDown]
         public void Dispose ()
         {
             connection.Dispose ();
             File.Delete ("test.db");
         }
-        
+
         [Test]
         public void IntMembers ()
         {
@@ -64,16 +64,16 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicIntProperty = 13;
             newed_item.SetPrivateIntField (128);
             newed_item.SetPrivateIntProperty (42);
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicIntField, loaded_item.PublicIntField);
             Assert.AreEqual (newed_item.PublicIntProperty, loaded_item.PublicIntProperty);
             Assert.AreEqual (newed_item.GetPrivateIntField (), loaded_item.GetPrivateIntField ());
             Assert.AreEqual (newed_item.GetPrivateIntProperty (), loaded_item.GetPrivateIntProperty ());
         }
-        
+
         [Test]
         public void LongMembers ()
         {
@@ -82,16 +82,16 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicLongProperty = -932;
             newed_item.SetPrivateLongField (3243);
             newed_item.SetPrivateLongProperty (1);
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicLongField, loaded_item.PublicLongField);
             Assert.AreEqual (newed_item.PublicLongProperty, loaded_item.PublicLongProperty);
             Assert.AreEqual (newed_item.GetPrivateLongField (), loaded_item.GetPrivateLongField ());
             Assert.AreEqual (newed_item.GetPrivateLongProperty (), loaded_item.GetPrivateLongProperty ());
         }
-        
+
         [Test]
         public void StringMembers ()
         {
@@ -100,9 +100,9 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicStringProperty = "Even as a splitted bark, so sunder we: This way fall I to death.";
             newed_item.SetPrivateStringField ("Who is John Galt?");
             newed_item.SetPrivateStringProperty ("The most formidable weapon against errors of every kind is Reason.");
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
             Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
@@ -118,16 +118,16 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicStringProperty = null;
             newed_item.SetPrivateStringField (" \t ");
             newed_item.SetPrivateStringProperty (" foo ");
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (null, loaded_item.PublicStringField);
             Assert.AreEqual (null, loaded_item.PublicStringProperty);
             Assert.AreEqual (null, loaded_item.GetPrivateStringField ());
             Assert.AreEqual (" foo ", loaded_item.GetPrivateStringProperty ());
         }
-    
+
         [Test]
         public void NullStringMembers ()
         {
@@ -136,16 +136,16 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicStringProperty = null;
             newed_item.SetPrivateStringField (null);
             newed_item.SetPrivateStringProperty (null);
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
             Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
             Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
             Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
         }
-        
+
         // Some fidelity is lost in the conversion from DT to DB time format
         private void AssertArePrettyClose (DateTime time1, DateTime time2)
         {
@@ -156,7 +156,7 @@ namespace Hyena.Data.Sqlite.Tests
             Assert.AreEqual (time1.Minute, time2.Minute);
             Assert.AreEqual (time1.Second, time2.Second);
         }
-        
+
         [Test]
         public void DateTimeMembers ()
         {
@@ -165,23 +165,23 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicDateTimeProperty = new DateTime (1986, 4, 23);
             newed_item.SetPrivateDateTimeField (DateTime.MinValue);
             newed_item.SetPrivateDateTimeProperty (DateTime.Now);
-            
+
             provider.Save (newed_item);
-            
+
             string command = String.Format ("SELECT PrivateDateTimeField FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
-            
+
             using (IDataReader reader = connection.Query (command)) {
                 reader.Read ();
                 Assert.IsTrue (reader.IsDBNull (0));
             }
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             AssertArePrettyClose (newed_item.PublicDateTimeField, loaded_item.PublicDateTimeField);
             AssertArePrettyClose (newed_item.PublicDateTimeProperty, loaded_item.PublicDateTimeProperty);
             AssertArePrettyClose (newed_item.GetPrivateDateTimeField (), loaded_item.GetPrivateDateTimeField ());
             AssertArePrettyClose (newed_item.GetPrivateDateTimeProperty (), loaded_item.GetPrivateDateTimeProperty ());
         }
-        
+
         [Test]
         public void TimeSpanMembers ()
         {
@@ -190,15 +190,15 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicTimeSpanProperty = new TimeSpan (1, 0, 0);
             newed_item.SetPrivateTimeSpanField (new TimeSpan (1, 39, 12));
             newed_item.SetPrivateTimeSpanProperty (TimeSpan.MinValue);
-            
+
             provider.Save (newed_item);
-            
+
             string command = String.Format ("SELECT PrivateTimeSpanProperty FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
             using (IDataReader reader = connection.Query (command)) {
                 reader.Read ();
                 Assert.IsTrue (reader.IsDBNull (0));
             }
-            
+
             // NUnit boxes and uses reference equality, rather than Equals()
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicTimeSpanField, loaded_item.PublicTimeSpanField);
@@ -206,7 +206,7 @@ namespace Hyena.Data.Sqlite.Tests
             Assert.AreEqual (newed_item.GetPrivateTimeSpanField (), loaded_item.GetPrivateTimeSpanField ());
             Assert.AreEqual (newed_item.GetPrivateTimeSpanProperty (), loaded_item.GetPrivateTimeSpanProperty ());
         }
-        
+
         [Test]
         public void IntEnumMembers ()
         {
@@ -215,16 +215,16 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicIntEnumProperty = IntEnum.One;
             newed_item.SetPrivateIntEnumField (IntEnum.Two);
             newed_item.SetPrivateIntEnumProperty (IntEnum.Three);
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicIntEnumField, loaded_item.PublicIntEnumField);
             Assert.AreEqual (newed_item.PublicIntEnumProperty, loaded_item.PublicIntEnumProperty);
             Assert.AreEqual (newed_item.GetPrivateIntEnumField (), loaded_item.GetPrivateIntEnumField ());
             Assert.AreEqual (newed_item.GetPrivateIntEnumProperty (), loaded_item.GetPrivateIntEnumProperty ());
         }
-        
+
         [Test]
         public void LongEnumMembers ()
         {
@@ -233,9 +233,9 @@ namespace Hyena.Data.Sqlite.Tests
             newed_item.PublicLongEnumProperty = LongEnum.Uno;
             newed_item.SetPrivateLongEnumField (LongEnum.Dos);
             newed_item.SetPrivateLongEnumProperty (LongEnum.Tres);
-            
+
             provider.Save (newed_item);
-            
+
             DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
             Assert.AreEqual (newed_item.PublicLongEnumField, loaded_item.PublicLongEnumField);
             Assert.AreEqual (newed_item.PublicLongEnumProperty, loaded_item.PublicLongEnumProperty);
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs
index 84af70c..2ccc8be 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs
@@ -38,14 +38,14 @@ namespace Hyena.Data.Sqlite.Tests
         {
             Assert.AreEqual (after, (new CollationKeyFunction ()).Invoke (new object[] {before}));
         }
-        
+
         [Test]
         public void TestNull ()
         {
             CollationKeyTest (null, null);
             CollationKeyTest (System.DBNull.Value, null);
         }
-        
+
         [Test]
         public void TestKey ()
         {
@@ -55,7 +55,7 @@ namespace Hyena.Data.Sqlite.Tests
             CollationKeyTest ("\u0104", new byte[] {14, 2, 1, 27, 1, 1, 1, 0});
         }
     }
-    
+
     [TestFixture]
     public class SearchKeyTests
     {
@@ -63,14 +63,14 @@ namespace Hyena.Data.Sqlite.Tests
         {
             Assert.AreEqual (after, (new SearchKeyFunction ()).Invoke (new object[] {before}));
         }
-        
+
         [Test]
         public void TestNull ()
         {
             SearchKeyTest (null, null);
             SearchKeyTest (System.DBNull.Value, null);
         }
-        
+
         [Test]
         public void TestKey ()
         {
diff --git a/src/Libraries/Hyena/Hyena.Data/BaseListModel.cs b/src/Libraries/Hyena/Hyena.Data/BaseListModel.cs
index 4066059..9694784 100644
--- a/src/Libraries/Hyena/Hyena.Data/BaseListModel.cs
+++ b/src/Libraries/Hyena/Hyena.Data/BaseListModel.cs
@@ -43,7 +43,7 @@ namespace Hyena.Data
         public BaseListModel () : base ()
         {
         }
-        
+
         protected virtual void OnCleared ()
         {
             EventHandler handler = Cleared;
@@ -51,7 +51,7 @@ namespace Hyena.Data
                 handler(this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnReloaded ()
         {
             EventHandler handler = Reloaded;
@@ -64,11 +64,11 @@ namespace Hyena.Data
         {
             OnReloaded ();
         }
-        
+
         public abstract void Clear();
-        
+
         public abstract void Reload();
-    
+
         public abstract T this[int index] { get; }
 
         public abstract int Count { get; }
@@ -83,7 +83,7 @@ namespace Hyena.Data
                 return model_selection ?? (model_selection = new ModelSelection<T> (this, Selection));
             }
         }
-        
+
         public T FocusedItem {
             get { return Selection.FocusedIndex == -1 ? default(T) : this[Selection.FocusedIndex]; }
         }
diff --git a/src/Libraries/Hyena/Hyena.Data/ColumnDescription.cs b/src/Libraries/Hyena/Hyena.Data/ColumnDescription.cs
index abd9311..cdb6a12 100644
--- a/src/Libraries/Hyena/Hyena.Data/ColumnDescription.cs
+++ b/src/Libraries/Hyena/Hyena.Data/ColumnDescription.cs
@@ -39,14 +39,14 @@ namespace Hyena.Data
         private string property;
 
         private bool initialized;
-        
+
         public event EventHandler VisibilityChanged;
         public event EventHandler WidthChanged;
-        
+
         public ColumnDescription (string property, string title, double width) : this (property, title, width, true)
         {
         }
-        
+
         public ColumnDescription (string property, string title, double width, bool visible)
         {
             this.property = property;
@@ -56,7 +56,7 @@ namespace Hyena.Data
             Visible = visible;
             initialized = true;
         }
-                
+
         protected virtual void OnVisibilityChanged ()
         {
             EventHandler handler = VisibilityChanged;
@@ -64,7 +64,7 @@ namespace Hyena.Data
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         protected virtual void OnWidthChanged ()
         {
             EventHandler handler = WidthChanged;
@@ -72,7 +72,7 @@ namespace Hyena.Data
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         public string Title {
             get { return title; }
             set { title = value; }
@@ -82,7 +82,7 @@ namespace Hyena.Data
             get { return long_title; }
             set { long_title = value; }
         }
-        
+
         public double Width {
             get { return width; }
             set {
@@ -98,18 +98,18 @@ namespace Hyena.Data
                 }
             }
         }
-        
+
         public string Property {
             get { return property; }
             set { property = value; }
         }
-        
+
         public bool Visible {
             get { return visible; }
             set {
                 bool old = Visible;
                 visible = value;
-                
+
                 if(initialized && value != old) {
                     OnVisibilityChanged ();
                 }
diff --git a/src/Libraries/Hyena/Hyena.Data/IListModel.cs b/src/Libraries/Hyena/Hyena.Data/IListModel.cs
index 9cdda82..3bb8629 100644
--- a/src/Libraries/Hyena/Hyena.Data/IListModel.cs
+++ b/src/Libraries/Hyena/Hyena.Data/IListModel.cs
@@ -36,19 +36,19 @@ namespace Hyena.Data
     {
         event EventHandler Cleared;
         event EventHandler Reloaded;
-        
+
         void Clear ();
         void Reload ();
-        
+
         int Count { get; }
         bool CanReorder { get; }
     }
-    
+
     public interface IListModel<T> : IListModel
     {
         T this[int index] { get; }
     }
-    
+
     public interface IObjectListModel : IListModel<object>
     {
         ColumnDescription [] ColumnDescriptions { get; }
diff --git a/src/Libraries/Hyena/Hyena.Data/IPropertyStoreExpose.cs b/src/Libraries/Hyena/Hyena.Data/IPropertyStoreExpose.cs
index eb4e054..d8c4381 100644
--- a/src/Libraries/Hyena/Hyena.Data/IPropertyStoreExpose.cs
+++ b/src/Libraries/Hyena/Hyena.Data/IPropertyStoreExpose.cs
@@ -1,4 +1,4 @@
-// 
+//
 // IPropertyStoreExpose.cs
 //
 // Author:
@@ -29,7 +29,7 @@
 using System;
 
 namespace Hyena.Data
-{   
+{
     public interface IPropertyStoreExpose
     {
         PropertyStore PropertyStore { get; }
diff --git a/src/Libraries/Hyena/Hyena.Data/ModelCache.cs b/src/Libraries/Hyena/Hyena.Data/ModelCache.cs
index c736ed6..fe610b2 100644
--- a/src/Libraries/Hyena/Hyena.Data/ModelCache.cs
+++ b/src/Libraries/Hyena/Hyena.Data/ModelCache.cs
@@ -45,16 +45,16 @@ namespace Hyena.Data
             lock (this) {
                 if (ContainsKey (index))
                     return this[index];
-                
+
                 FetchSet (index, model.FetchCount);
-                
+
                 if (ContainsKey (index))
                     return this[index];
-                
+
                 return default (T);
             }
         }
-        
+
         // Responsible for fetching a set of items and placing them in the cache
         protected abstract void FetchSet (long offset, long limit);
 
diff --git a/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs b/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs
index 0225017..60a5af8 100644
--- a/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs
+++ b/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs
@@ -32,7 +32,7 @@ using System.Collections.Generic;
 namespace Hyena.Data
 {
     public delegate void PropertyChangeEventHandler(object o, PropertyChangeEventArgs args);
-    
+
     public class PropertyChangeEventArgs : EventArgs
     {
         private string property_name;
@@ -40,7 +40,7 @@ namespace Hyena.Data
         private bool removed;
         private object old_value;
         private object new_value;
-        
+
         public PropertyChangeEventArgs(string propertyName, bool added, bool removed, object oldValue, object newValue)
         {
             this.property_name = propertyName;
@@ -49,49 +49,49 @@ namespace Hyena.Data
             this.old_value = oldValue;
             this.new_value = newValue;
         }
-        
+
         public string PropertyName {
             get { return property_name; }
         }
-        
+
         public bool Added {
             get { return added; }
         }
-        
+
         public bool Removed {
             get { return removed; }
         }
-        
+
         public object OldValue {
             get { return old_value; }
         }
-        
+
         public object NewValue {
             get { return new_value; }
         }
     }
-    
+
     public class PropertyStore
     {
         private Dictionary<string, object> object_store;
-        
+
         public event PropertyChangeEventHandler PropertyChanged;
-        
+
         public PropertyStore()
         {
         }
-        
-        protected virtual void OnPropertyChanged(string propertyName, bool added, bool removed, 
+
+        protected virtual void OnPropertyChanged(string propertyName, bool added, bool removed,
             object oldValue, object newValue)
         {
             PropertyChangeEventHandler handler = PropertyChanged;
             if(handler != null) {
-                PropertyChangeEventArgs args = new PropertyChangeEventArgs(propertyName, 
+                PropertyChangeEventArgs args = new PropertyChangeEventArgs(propertyName,
                     added, removed, oldValue, newValue);
                 handler(this, args);
             }
         }
-            
+
         public void Remove(string name)
         {
             bool raise = false;
@@ -108,28 +108,28 @@ namespace Hyena.Data
                 OnPropertyChanged(name, false, true, old_value, null);
             }
         }
-        
+
         public void RemoveStartingWith (string prefix)
         {
             lock(this) {
                 Queue<string> to_remove = null;
-                
+
                 foreach (KeyValuePair<string, object> item in object_store) {
                     if (item.Key.StartsWith (prefix)) {
                         if (to_remove == null) {
                             to_remove = new Queue<string> ();
                         }
-                        
+
                         to_remove.Enqueue (item.Key);
                     }
                 }
-                
+
                 while (to_remove != null && to_remove.Count > 0) {
                     Remove (to_remove.Dequeue ());
                 }
             }
         }
-        
+
         public void Set<T>(string name, T value)
         {
             bool added = false;
@@ -151,66 +151,66 @@ namespace Hyena.Data
             }
             OnPropertyChanged(name, added, false, old_value, value);
         }
-        
+
         public T Get<T>(string name)
         {
             lock(this) {
                 if(object_store != null && object_store.ContainsKey(name)) {
                     return (T)object_store[name];
                 }
-            
+
                 return default(T);
             }
         }
-        
+
         public int GetInteger(string name)
         {
             return Get<int>(name);
         }
-        
+
         public void SetInteger(string name, int value)
         {
             Set<int>(name, value);
         }
-        
+
         // No longer used, since it causes strings to be marked for translation
         /*public string GetString(string name)
         {
             return Get<string>(name);
         }*/
-        
+
         public void SetString(string name, string value)
         {
             Set<string>(name, value);
         }
-        
+
         public string [] GetStringList(string name)
         {
             return Get<string []>(name);
         }
-        
+
         public void SetStringList(string name, params string [] value)
         {
             Set<string []>(name, value);
         }
-        
+
         public bool GetBoolean(string name)
         {
             return Get<bool>(name);
         }
-        
+
         public void SetBoolean(string name, bool value)
         {
             Set<bool>(name, value);
         }
-        
+
         public bool Contains(string name)
         {
             lock(this) {
                 return object_store != null && object_store.ContainsKey(name);
             }
         }
-    
+
         public Type GetType(string name)
         {
             lock(this) {
diff --git a/src/Libraries/Hyena/Hyena.Jobs/Job.cs b/src/Libraries/Hyena/Hyena.Jobs/Job.cs
index 99c49db..0fdaa44 100644
--- a/src/Libraries/Hyena/Hyena.Jobs/Job.cs
+++ b/src/Libraries/Hyena/Hyena.Jobs/Job.cs
@@ -193,8 +193,8 @@ namespace Hyena.Jobs
             get { return icon_names; }
             set {
                 if (value != null) {
-                    icon_names = value; 
-                    OnUpdated (); 
+                    icon_names = value;
+                    OnUpdated ();
                 }
             }
         }
diff --git a/src/Libraries/Hyena/Hyena.Jobs/Scheduler.cs b/src/Libraries/Hyena/Hyena.Jobs/Scheduler.cs
index d18f713..4573d1d 100644
--- a/src/Libraries/Hyena/Hyena.Jobs/Scheduler.cs
+++ b/src/Libraries/Hyena/Hyena.Jobs/Scheduler.cs
@@ -182,7 +182,7 @@ namespace Hyena.Jobs
 
             if (job.Has (PriorityHints.SpeedSensitive))
                 return true;
-            
+
             // Run only one non-SpeedSensitive job that uses a given Resource
             if (job.Has (PriorityHints.LongRunning))
                 return jobs.Where (IsRunning)
diff --git a/src/Libraries/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs b/src/Libraries/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs
index 8ca7cd3..262075f 100644
--- a/src/Libraries/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs
+++ b/src/Libraries/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs
@@ -35,7 +35,7 @@ using System.Threading;
 using NUnit.Framework;
 
 using Hyena;
-    
+
 namespace Hyena.Jobs
 {
     [TestFixture]
diff --git a/src/Libraries/Hyena/Hyena.Json/Deserializer.cs b/src/Libraries/Hyena/Hyena.Json/Deserializer.cs
index 15afe8c..f54b6d7 100644
--- a/src/Libraries/Hyena/Hyena.Json/Deserializer.cs
+++ b/src/Libraries/Hyena/Hyena.Json/Deserializer.cs
@@ -1,4 +1,4 @@
-// 
+//
 // Deserializer.cs
 //
 // Author:
@@ -34,40 +34,40 @@ namespace Hyena.Json
     public class Deserializer
     {
         private Tokenizer tokenizer = new Tokenizer ();
-        
+
         public Deserializer () { }
         public Deserializer (string input) { SetInput (input); }
         public Deserializer (Stream stream) { SetInput (stream); }
         public Deserializer (StreamReader reader) { SetInput (reader); }
-        
+
         public Deserializer SetInput (StreamReader reader)
         {
             tokenizer.SetInput (reader);
             return this;
         }
-        
+
         public Deserializer SetInput (Stream stream)
         {
             tokenizer.SetInput (stream);
             return this;
         }
-        
+
         public Deserializer SetInput (string input)
         {
             tokenizer.SetInput (input);
             return this;
         }
-        
+
         public object Deserialize ()
         {
             Token token = CheckScan (TokenType.Value, true);
             if (token == null) {
                 return null;
             }
-            
+
             return Parse (token);
         }
-        
+
         private object Parse (Token token)
         {
             if (token.Type == TokenType.ObjectStart) {
@@ -75,67 +75,67 @@ namespace Hyena.Json
             } else if (token.Type == TokenType.ArrayStart) {
                 return ParseArray ();
             }
-            
+
             return token.Value;
         }
-        
+
         private JsonObject ParseObject ()
         {
             JsonObject obj = new JsonObject ();
-            
+
             while (true) {
                 Token key = CheckScan (TokenType.String | TokenType.ObjectFinish);
                 if (key.Type == TokenType.ObjectFinish) {
                     break;
                 }
-                
+
                 CheckScan (TokenType.Colon);
                 Token value = CheckScan (TokenType.Value);
-                
+
                 object value_val = value.Value;
                 if (value.Type == TokenType.ArrayStart) {
                     value_val = ParseArray ();
                 } else if (value.Type == TokenType.ObjectStart) {
                     value_val = ParseObject ();
                 }
-                
+
                 obj.Add ((string)key.Value, value_val);
-                
+
                 Token token = CheckScan (TokenType.Comma | TokenType.ObjectFinish);
                 if (token.Type == TokenType.ObjectFinish) {
                      break;
                 }
             }
-            
+
             return obj;
         }
-        
+
         private JsonArray ParseArray ()
         {
             JsonArray array = new JsonArray ();
-            
+
             while (true) {
                 Token value = CheckScan (TokenType.Value | TokenType.ArrayFinish);
                 if (value.Type == TokenType.ArrayFinish) {
                     break;
                 }
-                
+
                 array.Add (Parse (value));
-                
+
                 Token token = CheckScan (TokenType.Comma | TokenType.ArrayFinish);
                 if (token.Type == TokenType.ArrayFinish) {
                      break;
                 }
             }
-            
+
             return array;
         }
-        
+
         private Token CheckScan (TokenType expected)
         {
             return CheckScan (expected, false);
         }
-        
+
         private Token CheckScan (TokenType expected, bool eofok)
         {
             Token token = tokenizer.Scan ();
@@ -148,13 +148,13 @@ namespace Hyena.Json
             }
             return token;
         }
-        
+
         private void UnexpectedToken (TokenType expected, Token got)
         {
-            throw new ApplicationException (String.Format ("Unexpected token {0} at [{1}:{2}]; expected {3}", 
+            throw new ApplicationException (String.Format ("Unexpected token {0} at [{1}:{2}]; expected {3}",
                 got.Type, got.SourceLine, got.SourceColumn, expected));
         }
-        
+
         private void UnexpectedEof (TokenType expected)
         {
             throw new ApplicationException (String.Format ("Unexpected End of File; expected {0}", expected));
diff --git a/src/Libraries/Hyena/Hyena.Json/IJsonCollection.cs b/src/Libraries/Hyena/Hyena.Json/IJsonCollection.cs
index 4d46bf7..c9fc698 100644
--- a/src/Libraries/Hyena/Hyena.Json/IJsonCollection.cs
+++ b/src/Libraries/Hyena/Hyena.Json/IJsonCollection.cs
@@ -1,4 +1,4 @@
-// 
+//
 // IJsonCollection.cs
 //
 // Author:
diff --git a/src/Libraries/Hyena/Hyena.Json/JsonArray.cs b/src/Libraries/Hyena/Hyena.Json/JsonArray.cs
index f2288bf..5d86826 100644
--- a/src/Libraries/Hyena/Hyena.Json/JsonArray.cs
+++ b/src/Libraries/Hyena/Hyena.Json/JsonArray.cs
@@ -1,4 +1,4 @@
-// 
+//
 // JsonArray.cs
 //
 // Author:
@@ -37,14 +37,14 @@ namespace Hyena.Json
         {
             Dump (1);
         }
-        
+
         public void Dump (int levels)
         {
             if (Count == 0) {
                 Console.WriteLine ("[ ]");
                 return;
             }
-        
+
             Console.WriteLine ("[");
             foreach (object item in this) {
                 Console.Write (String.Empty.PadLeft (levels * 2, ' '));
diff --git a/src/Libraries/Hyena/Hyena.Json/JsonObject.cs b/src/Libraries/Hyena/Hyena.Json/JsonObject.cs
index 98d32c4..a9216b1 100644
--- a/src/Libraries/Hyena/Hyena.Json/JsonObject.cs
+++ b/src/Libraries/Hyena/Hyena.Json/JsonObject.cs
@@ -1,4 +1,4 @@
-// 
+//
 // JsonObject.cs
 //
 // Author:
@@ -37,14 +37,14 @@ namespace Hyena.Json
         {
             Dump (1);
         }
-        
+
         public void Dump (int levels)
         {
             if (Count == 0) {
                 Console.WriteLine ("{ }");
                 return;
             }
-        
+
             Console.WriteLine ("{");
             foreach (KeyValuePair<string, object> item in this) {
                 Console.Write ("{0}\"{1}\" : ", String.Empty.PadLeft (levels * 2, ' '), item.Key);
diff --git a/src/Libraries/Hyena/Hyena.Json/Tests/DeserializerTests.cs b/src/Libraries/Hyena/Hyena.Json/Tests/DeserializerTests.cs
index e5c9927..7c1bda8 100644
--- a/src/Libraries/Hyena/Hyena.Json/Tests/DeserializerTests.cs
+++ b/src/Libraries/Hyena/Hyena.Json/Tests/DeserializerTests.cs
@@ -40,13 +40,13 @@ namespace Hyena.Json.Tests
     public class DeserializerTests : Hyena.Tests.TestBase
     {
         private Deserializer deserializer;
-        
+
         [TestFixtureSetUp]
         public void Setup ()
         {
             deserializer = new Deserializer ();
         }
-        
+
         [Test]
         public void Literal ()
         {
@@ -56,39 +56,39 @@ namespace Hyena.Json.Tests
             Assert.AreEqual (true, (bool)deserializer.SetInput ("true").Deserialize ());
             Assert.AreEqual (false, (bool)deserializer.SetInput ("false").Deserialize ());
         }
-        
+
         [Test]
         public void Array ()
         {
             JsonArray array = (JsonArray)deserializer.SetInput ("[]").Deserialize ();
             Assert.AreEqual (0, array.Count);
-            
+
             array = (JsonArray)deserializer.SetInput ("[[]]").Deserialize ();
             Assert.AreEqual (1, array.Count);
             Assert.AreEqual (0, ((JsonArray)array[0]).Count);
-            
+
             array = (JsonArray)deserializer.SetInput ("[[true,[]]]").Deserialize ();
             Assert.AreEqual (1, array.Count);
             Assert.AreEqual (2, ((JsonArray)array[0]).Count);
             Assert.AreEqual (0, ((JsonArray)((JsonArray)array[0])[1]).Count);
-            
+
             array = (JsonArray)deserializer.SetInput ("[\"a\", 1.0, true]").Deserialize ();
             Assert.AreEqual (3, array.Count);
             Assert.AreEqual ("a", (string)array[0]);
             Assert.AreEqual (1, (double)array[1]);
             Assert.AreEqual (true, (bool)array[2]);
         }
-        
+
         [Test]
         public void Object ()
         {
             JsonObject obj = (JsonObject)deserializer.SetInput ("{}").Deserialize ();
             Assert.AreEqual (0, obj.Count);
-            
+
             obj = (JsonObject)deserializer.SetInput ("{\"a\":{}}").Deserialize ();
             Assert.AreEqual (1, obj.Count);
             Assert.AreEqual (0, ((JsonObject)obj["a"]).Count);
-            
+
             obj = (JsonObject)deserializer.SetInput ("{\"a\":[{\"b\":false},\"c\"]}").Deserialize ();
             Assert.AreEqual (1, obj.Count);
             JsonArray arr = (JsonArray)obj["a"];
diff --git a/src/Libraries/Hyena/Hyena.Json/Tests/TokenizerTests.cs b/src/Libraries/Hyena/Hyena.Json/Tests/TokenizerTests.cs
index 05f0bd0..146acb6 100644
--- a/src/Libraries/Hyena/Hyena.Json/Tests/TokenizerTests.cs
+++ b/src/Libraries/Hyena/Hyena.Json/Tests/TokenizerTests.cs
@@ -40,13 +40,13 @@ namespace Hyena.Json.Tests
     public class TokenizerTests : Hyena.Tests.TestBase
     {
         private Tokenizer tokenizer;
-        
+
         [TestFixtureSetUp]
         public void Setup ()
         {
             tokenizer = new Tokenizer ();
         }
-    
+
         [Test]
         public void Whitespace ()
         {
@@ -54,7 +54,7 @@ namespace Hyena.Json.Tests
             AssertTokenStream (" ");
             AssertTokenStream ("\f\n\r\t ");
         }
-        
+
         [Test]
         public void BoolNull ()
         {
@@ -63,41 +63,41 @@ namespace Hyena.Json.Tests
             AssertTokenStream ("false", Token.Bool (false));
             AssertTokenStream ("null", Token.Null);
         }
-        
+
         [Test]
         public void NumberInt ()
         {
             AssertTokenStream ("0", Token.Integer (0));
             AssertTokenStream ("-0", Token.Integer (-0));
-            
+
             AssertTokenStream ("9", Token.Integer (9));
             AssertTokenStream ("-9", Token.Integer (-9));
-            
+
             AssertTokenStream ("14", Token.Integer (14));
             AssertTokenStream ("-14", Token.Integer (-14));
-            
+
             AssertTokenStream ("15309", Token.Integer (15309));
             AssertTokenStream ("-15309", Token.Integer (-15309));
         }
-        
+
         [Test]
         public void NumberFloat ()
         {
             AssertTokenStream ("0.0", Token.Number (0.0));
             AssertTokenStream ("-0.0", Token.Number (-0.0));
-            
+
             AssertTokenStream ("1.9", Token.Number (1.9));
             AssertTokenStream ("-1.9", Token.Number (-1.9));
-            
+
             AssertTokenStream ("9.1", Token.Number (9.1));
             AssertTokenStream ("-9.1", Token.Number (-9.1));
-            
+
             AssertTokenStream ("15309.0", Token.Number (15309.0));
             AssertTokenStream ("15309.9", Token.Number (15309.9));
             AssertTokenStream ("-15309.01", Token.Number (-15309.01));
             AssertTokenStream ("-15309.9009", Token.Number (-15309.9009));
         }
-        
+
         [Test]
         public void NumberExponent ()
         {
@@ -107,13 +107,13 @@ namespace Hyena.Json.Tests
             AssertTokenStream ("-20.6e3", Token.Number (-20.6e3));
             AssertTokenStream ("-20.6e+3", Token.Number (-20.6e+3));
             AssertTokenStream ("-20.6e-3", Token.Number (-20.6e-3));
-            
+
             AssertTokenStream ("1e1", Token.Number (1e1));
             AssertTokenStream ("1E2", Token.Number (1E2));
             AssertTokenStream ("1.0e1", Token.Number (1.0e1));
             AssertTokenStream ("1.0E1", Token.Number (1.0E1));
         }
-        
+
         [Test]
         public void Strings ()
         {
@@ -129,7 +129,7 @@ namespace Hyena.Json.Tests
             AssertTokenStream (@"""1\uabcdef0""", Token.String ("1\uabcdef0"));
             AssertTokenStream (@"""\b\f\n\r\t""", Token.String ("\b\f\n\r\t"));
         }
-        
+
         [Test]
         public void Container ()
         {
@@ -138,12 +138,12 @@ namespace Hyena.Json.Tests
             AssertTokenStream ("{  }", Token.ObjectStart, Token.ObjectFinish);
             AssertTokenStream ("[  ]", Token.ArrayStart, Token.ArrayFinish);
             AssertTokenStream ("[{}]", Token.ArrayStart, Token.ObjectStart, Token.ObjectFinish, Token.ArrayFinish);
-            AssertTokenStream ("[[[ { } ]]]", 
-                Token.ArrayStart, Token.ArrayStart, Token.ArrayStart, 
-                Token.ObjectStart, Token.ObjectFinish, 
+            AssertTokenStream ("[[[ { } ]]]",
+                Token.ArrayStart, Token.ArrayStart, Token.ArrayStart,
+                Token.ObjectStart, Token.ObjectFinish,
                 Token.ArrayFinish, Token.ArrayFinish, Token.ArrayFinish);
         }
-        
+
         [Test]
         public void Array ()
         {
@@ -156,24 +156,24 @@ namespace Hyena.Json.Tests
                  Token.Integer (4), Token.ArrayFinish, Token.ArrayFinish, Token.Comma, Token.Integer (5), Token.ArrayFinish,
                  Token.Comma, Token.Integer (6), Token.ArrayFinish);
         }
-        
+
         [Test]
         public void Object ()
         {
-            AssertTokenStream ("{\"a\":{}}", Token.ObjectStart, Token.String ("a"), Token.Colon, Token.ObjectStart, 
+            AssertTokenStream ("{\"a\":{}}", Token.ObjectStart, Token.String ("a"), Token.Colon, Token.ObjectStart,
                 Token.ObjectFinish, Token.ObjectFinish);
-            AssertTokenStream ("{\"a\":{\"b\":[],\"c\":false}}", Token.ObjectStart, Token.String ("a"), 
-                Token.Colon, Token.ObjectStart, Token.String ("b"), Token.Colon, Token.ArrayStart, Token.ArrayFinish, 
+            AssertTokenStream ("{\"a\":{\"b\":[],\"c\":false}}", Token.ObjectStart, Token.String ("a"),
+                Token.Colon, Token.ObjectStart, Token.String ("b"), Token.Colon, Token.ArrayStart, Token.ArrayFinish,
                 Token.Comma, Token.String ("c"), Token.Colon, Token.Bool (false), Token.ObjectFinish, Token.ObjectFinish);
-            AssertTokenStream ("[{\"a\":{},{}]", Token.ArrayStart, Token.ObjectStart, Token.String ("a"), Token.Colon, 
+            AssertTokenStream ("[{\"a\":{},{}]", Token.ArrayStart, Token.ObjectStart, Token.String ("a"), Token.Colon,
                 Token.ObjectStart, Token.ObjectFinish, Token.Comma, Token.ObjectStart, Token.ObjectFinish, Token.ArrayFinish);
-        }    
-        
+        }
+
         private void AssertTokenStream (string input, params Token [] tokens)
         {
             int cmp_idx = 0;
             tokenizer.SetInput (input);
-            
+
             while (true) {
                 Token token = tokenizer.Scan ();
                 if (token == null) {
@@ -182,17 +182,17 @@ namespace Hyena.Json.Tests
                     }
                     break;
                 }
-                
+
                 Token compare = tokens[cmp_idx++];
                 if (compare.Type != token.Type) {
-                    throw new ApplicationException (String.Format ("TokenTypes do not match (exp {0}, got {1}", 
+                    throw new ApplicationException (String.Format ("TokenTypes do not match (exp {0}, got {1}",
                         compare.Type, token.Type));
                 }
-                
+
                 if (compare.Value == null && token.Value == null) {
                     continue;
                 }
-                
+
                 if ((compare.Type == TokenType.Integer && (int)compare.Value != (int)token.Value) ||
                     (compare.Type == TokenType.Number && (double)compare.Value != (double)token.Value) ||
                     (compare.Type == TokenType.String && (string)compare.Value != (string)token.Value) ||
diff --git a/src/Libraries/Hyena/Hyena.Json/Token.cs b/src/Libraries/Hyena/Hyena.Json/Token.cs
index c1ef414..4f9de6f 100644
--- a/src/Libraries/Hyena/Hyena.Json/Token.cs
+++ b/src/Libraries/Hyena/Hyena.Json/Token.cs
@@ -1,4 +1,4 @@
-// 
+//
 // Token.cs
 //
 // Author:
@@ -29,19 +29,19 @@
 using System;
 
 namespace Hyena.Json
-{   
+{
     internal class Token
     {
         public Token (TokenType type) : this (type, null)
         {
         }
-        
+
         public Token (TokenType type, object value)
         {
             this.type = type;
             this.value = value;
         }
-        
+
         private TokenType type;
         public TokenType Type {
             get { return type; }
@@ -58,56 +58,56 @@ namespace Hyena.Json
             get { return source_line; }
             internal set { source_line = value; }
         }
-        
+
         private int source_column;
         public int SourceColumn {
             get { return source_column; }
             internal set { source_column = value; }
         }
-        
+
         internal static Token ObjectStart {
             get { return new Token (TokenType.ObjectStart); }
         }
-        
+
         internal static Token ObjectFinish {
             get { return new Token (TokenType.ObjectFinish); }
         }
-        
+
         internal static Token ArrayStart {
             get { return new Token (TokenType.ArrayStart); }
         }
-        
+
         internal static Token ArrayFinish {
             get { return new Token (TokenType.ArrayFinish); }
         }
-        
+
         internal static Token Null {
             get { return new Token (TokenType.Null); }
         }
-        
+
         internal static Token Comma {
             get { return new Token (TokenType.Comma); }
         }
-        
+
         internal static Token Colon {
             get { return new Token (TokenType.Colon); }
         }
-        
+
         internal static Token Number (double value)
         {
             return new Token (TokenType.Number, value);
         }
-        
+
         internal static Token Integer (int value)
         {
             return new Token (TokenType.Integer, value);
         }
-        
+
         internal static Token String (string value)
         {
             return new Token (TokenType.String, value);
         }
-        
+
         internal static Token Bool (bool value)
         {
             return new Token (TokenType.Boolean, value);
diff --git a/src/Libraries/Hyena/Hyena.Json/TokenType.cs b/src/Libraries/Hyena/Hyena.Json/TokenType.cs
index cd6ae93..09b14a7 100644
--- a/src/Libraries/Hyena/Hyena.Json/TokenType.cs
+++ b/src/Libraries/Hyena/Hyena.Json/TokenType.cs
@@ -1,4 +1,4 @@
-// 
+//
 // TokenType.cs
 //
 // Author:
@@ -45,7 +45,7 @@ namespace Hyena.Json
         Integer = 1 << 8,
         Comma = 1 << 9,
         Colon = 1 << 10,
-        
+
         Literal = String | Number | Boolean | Null | Integer,
         Value = ObjectStart | ArrayStart | Literal
     }
diff --git a/src/Libraries/Hyena/Hyena.Json/Tokenizer.cs b/src/Libraries/Hyena/Hyena.Json/Tokenizer.cs
index 618ed3a..90d1dd4 100644
--- a/src/Libraries/Hyena/Hyena.Json/Tokenizer.cs
+++ b/src/Libraries/Hyena/Hyena.Json/Tokenizer.cs
@@ -1,4 +1,4 @@
-// 
+//
 // Tokenizer.cs
 //
 // Author:
@@ -36,18 +36,18 @@ namespace Hyena.Json
     {
         private StreamReader reader;
         private StringBuilder string_buffer;
-        
+
         private char peek = ' ';
         private int current_line = 1;
         private int current_column = 1;
         private int token_start_line;
         private int token_start_column;
-        
+
         public Tokenizer () { Reset (); }
         public Tokenizer (string input) { SetInput (input); }
         public Tokenizer (Stream stream) { SetInput (stream); }
         public Tokenizer (StreamReader reader) { SetInput (reader); }
-        
+
         private void Reset ()
         {
             peek = ' ';
@@ -56,62 +56,62 @@ namespace Hyena.Json
             token_start_line = 0;
             token_start_column = 0;
         }
-        
+
         public void SetInput (StreamReader reader)
         {
             this.reader = reader;
             Reset ();
         }
-        
+
         public void SetInput (Stream stream)
         {
             SetInput (new StreamReader (stream));
         }
-        
+
         public void SetInput (string input)
         {
             SetInput (new MemoryStream (Encoding.UTF8.GetBytes (input)));
         }
-        
+
         private void ReadChar ()
         {
             peek = (char)reader.Read ();
             current_column++;
         }
-        
+
         private void UnexpectedCharacter (char ch)
         {
-            throw new ApplicationException (String.Format ("Unexpected character '{0}' at [{1}:{2}]", 
+            throw new ApplicationException (String.Format ("Unexpected character '{0}' at [{1}:{2}]",
                 ch, current_line, current_column - 1));
         }
-        
+
         private void InvalidSyntax (string message)
         {
             throw new ApplicationException (String.Format ("Invalid syntax: {0} at [{1}:{2}]",
                 message, current_line, current_column));
         }
-        
+
         private StringBuilder GetStringBuilder ()
         {
             if (string_buffer == null) {
                 string_buffer = new StringBuilder (64);
                 return string_buffer;
             }
-            
+
             string_buffer.Remove (0, string_buffer.Length);
             return string_buffer;
         }
-        
+
         private string LexString ()
         {
             StringBuilder buffer = GetStringBuilder ();
             bool read = true;
-            
+
             while (!reader.EndOfStream) {
                 if (read) {
                     ReadChar ();
                 }
-                
+
                 read = true;
 
                 if (peek == '\\') {
@@ -141,16 +141,16 @@ namespace Hyena.Json
                     buffer.Append (peek);
                 }
             }
-            
+
             if (peek != '"') {
                 InvalidSyntax ("Unterminated string, expected '\"' termination, got '" + peek + "'");
             } else if (!read && reader.EndOfStream) {
                 ReadChar ();
             }
-            
+
             return buffer.ToString ();
         }
-        
+
         private string LexId ()
         {
             StringBuilder buffer = GetStringBuilder ();
@@ -162,42 +162,42 @@ namespace Hyena.Json
 
             return buffer.ToString ();
         }
-        
+
         private int LexInt ()
         {
             return LexInt (false, 0);
         }
-        
+
         private int LexInt (bool hex, int maxDigits)
         {
             int value = 0;
             int count = 0;
-            
+
             do {
-                value = (hex ? 16 : 10) * value +  (hex 
+                value = (hex ? 16 : 10) * value +  (hex
                     ? peek >= 'A' && peek <= 'F'
                         ? 10 + peek - 'A'
                         : (peek >= 'a' && peek <= 'f'
                             ? 10 + peek - 'a'
                             : peek - '0')
                     : peek - '0');
-                    
+
                 if (maxDigits > 0 && ++count >= maxDigits) {
                     ReadChar ();
                     return value;
                 }
-                
+
                 ReadChar ();
             } while (Char.IsDigit (peek) || (hex && ((peek >= 'a' && peek <= 'f') || (peek >= 'A' && peek <= 'F'))));
-            
+
             return value;
         }
-        
+
         private double LexFraction ()
         {
             double fraction = 0;
             double d = 10;
-            
+
             while (true) {
                 ReadChar ();
 
@@ -208,10 +208,10 @@ namespace Hyena.Json
                 fraction += (peek - '0') / d;
                 d *= 10;
             }
-            
+
             return fraction;
         }
-        
+
         private object LexNumber (out bool isDouble)
         {
             isDouble = false;
@@ -221,18 +221,18 @@ namespace Hyena.Json
             if (negate) {
                 ReadChar ();
             }
-            
+
             if (peek != '0') {
                 doubleVal = intVal = LexInt ();
             } else {
                 ReadChar ();
             }
-            
+
             if (peek == '.') {
                 isDouble = true;
                 doubleVal += LexFraction ();
             }
-            
+
             if (peek == 'e' || peek == 'E') {
                 isDouble = true;
                 ReadChar ();
@@ -248,7 +248,7 @@ namespace Hyena.Json
                     InvalidSyntax ("Malformed exponent");
                 }
             }
-            
+
             if (Char.IsDigit (peek)) {
                 InvalidSyntax ("Numbers starting with 0 must be followed by a . or not " +
                     "followed by a digit (octal syntax not legal)");
@@ -259,14 +259,14 @@ namespace Hyena.Json
             else
                 return negate ? -1.0 * doubleVal : doubleVal;
         }
-        
+
         public Token Scan ()
         {
             Token token = InnerScan ();
             if (token == null) {
                 return null;
             }
-            
+
             token.SourceLine = token_start_line;
             token.SourceColumn = token_start_column - 1;
             return token;
@@ -315,13 +315,13 @@ namespace Hyena.Json
                                 break;
                         }
                     }
-                
+
                     if (peek != Char.MaxValue) {
                         UnexpectedCharacter (peek);
                     }
                     break;
             }
-            
+
             return null;
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs
index 757f854..ba0ad75 100644
--- a/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs
@@ -125,7 +125,7 @@ namespace Hyena.Query
                 }
             }
         }
-        
+
         public override string ToUserQuery ()
         {
             return ToUserQuery (false);
@@ -135,8 +135,8 @@ namespace Hyena.Query
         {
             if (factor != FileSizeFactor.None) {
                 return String.Format ("{0} {1}",
-                    IntValue == 0 
-                        ? "0" 
+                    IntValue == 0
+                        ? "0"
                         : StringUtil.DoubleToTenthsPrecision (((double)IntValue / (double)factor), always_decimal),
                     factor.ToString ()
                 );
diff --git a/src/Libraries/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs
index e68f161..7cbc9b0 100644
--- a/src/Libraries/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs
@@ -33,7 +33,7 @@ namespace Hyena.Query
     public abstract class IntegerKeyedObjectQueryValue<T> : IntegerQueryValue where T : class
     {
         private T object_value;
-        
+
         public override void SetValue (long value)
         {
             object_value = null;
@@ -48,7 +48,7 @@ namespace Hyena.Query
                 return object_value;
             }
         }
-        
+
         protected abstract T Resolve ();
     }
 }
diff --git a/src/Libraries/Hyena/Hyena.Query/IntegerQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/IntegerQueryValue.cs
index df2a13c..abb3245 100644
--- a/src/Libraries/Hyena/Hyena.Query/IntegerQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/IntegerQueryValue.cs
@@ -55,7 +55,7 @@ namespace Hyena.Query
         {
             IsEmpty = !Int64.TryParse (input, out value);
         }
-        
+
         public override void LoadString (string input)
         {
             ParseUserQuery (input);
diff --git a/src/Libraries/Hyena/Hyena.Query/NullQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/NullQueryValue.cs
index 06aa001..e1eac54 100644
--- a/src/Libraries/Hyena/Hyena.Query/NullQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/NullQueryValue.cs
@@ -39,7 +39,7 @@ namespace Hyena.Query
     public class NullQueryValue : QueryValue
     {
         public static readonly Operator IsNullOrEmpty  = new Operator ("empty", Catalog.GetString ("empty"), "IN (NULL, '', 0)", true, "!");
-        
+
         public static readonly NullQueryValue Instance = new NullQueryValue ();
 
         public override string XmlElementName {
@@ -63,7 +63,7 @@ namespace Hyena.Query
         public override void ParseUserQuery (string input)
         {
         }
-        
+
         public override void LoadString (string input)
         {
         }
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryField.cs b/src/Libraries/Hyena/Hyena.Query/QueryField.cs
index 7e4bc3e..75288d2 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryField.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryField.cs
@@ -48,7 +48,7 @@ namespace Hyena.Query
             get { return name; }
             set { name = value; }
         }
-        
+
         private string property_name;
         public string PropertyName {
             get { return property_name; }
@@ -174,7 +174,7 @@ namespace Hyena.Query
         public static string ToTermString (string alias, string op, string value)
         {
             value = String.Format (
-                "{1}{0}{1}", 
+                "{1}{0}{1}",
                 value, value.IndexOf (" ") == -1 ? String.Empty : "\""
             );
 
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryListNode.cs b/src/Libraries/Hyena/Hyena.Query/QueryListNode.cs
index e090e07..366481b 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryListNode.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryListNode.cs
@@ -44,23 +44,23 @@ namespace Hyena.Query
     {
         private List<QueryNode> children = new List<QueryNode>();
         private Keyword keyword;
-    
+
         public QueryListNode(Keyword keyword) : base()
         {
             this.keyword = keyword;
         }
-        
+
         public QueryListNode(Keyword keyword, QueryListNode parent) : base(parent)
         {
             this.keyword = keyword;
         }
-        
+
         public void AddChild(QueryNode child)
         {
             child.Parent = this;
             children.Add(child);
         }
-        
+
         public void RemoveChild(QueryNode child)
         {
             child.Parent = null;
@@ -74,52 +74,52 @@ namespace Hyena.Query
             }
             from.Children.Clear ();
         }
-        
+
         public void ReplaceChild(QueryNode old_child, QueryNode new_child)
         {
             int index = children.IndexOf(old_child);
             if(index < 0) {
                 throw new ApplicationException("old_child does not exist");
             }
-            
+
             children.RemoveAt(index);
             children.Insert(index, new_child);
         }
-        
+
         public void InsertChild(int index, QueryNode child)
         {
             child.Parent = this;
             children.Insert(index, child);
         }
-        
+
         public int IndexOfChild(QueryNode child)
         {
             return children.IndexOf(child);
         }
-        
+
         internal override void Dump(int depth)
         {
             PrintIndent(depth);
             Console.WriteLine("<{0}>", Keyword);
-            
+
             foreach(QueryNode child in children) {
                 child.Dump(depth + 1);
             }
-            
+
             PrintIndent(depth);
             Console.WriteLine("</{0}>", Keyword);
         }
-        
+
         public QueryNode GetLeftSibling(QueryNode node)
         {
             int index = IndexOfChild(node);
             if(index >= 1) {
                 return Children[index - 1];
             }
-            
+
             return null;
         }
-        
+
         public QueryNode GetRightSibling(QueryNode node)
         {
             int index = IndexOfChild(node);
@@ -228,15 +228,15 @@ namespace Hyena.Query
         public bool IsEmpty {
             get { return ChildCount == 0; }
         }
-        
+
         public List<QueryNode> Children {
             get { return children; }
         }
-        
+
         public QueryNode LastChild {
             get { return ChildCount > 0 ? children[ChildCount - 1] : null; }
         }
-        
+
         public int ChildCount {
             get { return children.Count; }
         }
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryNode.cs b/src/Libraries/Hyena/Hyena.Query/QueryNode.cs
index 59e8420..0634c8c 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryNode.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryNode.cs
@@ -40,33 +40,33 @@ namespace Hyena.Query
         DepthFirst,
         BreadthFirst
     }
-    
+
     public abstract class QueryNode
     {
         private QueryListNode parent;
         private int source_column;
         private int source_line;
-        
+
         public QueryNode()
         {
         }
-        
+
         public QueryNode(QueryListNode parent)
         {
             Parent = parent;
             Parent.AddChild(this);
         }
-        
+
         protected void PrintIndent(int depth)
         {
             Console.Write(String.Empty.PadLeft(depth * 2, ' '));
         }
-        
+
         public void Dump()
         {
             Dump(0);
         }
-        
+
         internal virtual void Dump(int depth)
         {
             PrintIndent(depth);
@@ -115,12 +115,12 @@ namespace Hyena.Query
                 }
             }
         }
-        
+
         public IEnumerable<T> SearchForValues<T> () where T : QueryValue
         {
             return SearchForValues<T> (QueryNodeSearchMethod.DepthFirst);
         }
-        
+
         public IEnumerable<T> SearchForValues<T> (QueryNodeSearchMethod method) where T : QueryValue
         {
             if (method == QueryNodeSearchMethod.DepthFirst) {
@@ -129,7 +129,7 @@ namespace Hyena.Query
                 return SearchForValuesByBreadth<T> ();
             }
         }
-        
+
         private static IEnumerable<T> SearchForValuesByDepth<T> (QueryNode node) where T : QueryValue
         {
             QueryListNode list = node as QueryListNode;
@@ -149,7 +149,7 @@ namespace Hyena.Query
                 }
             }
         }
-        
+
         private IEnumerable<T> SearchForValuesByBreadth<T> () where T : QueryValue
         {
             Queue<QueryNode> queue = new Queue<QueryNode> ();
@@ -214,17 +214,17 @@ namespace Hyena.Query
         }
 
         public abstract void AppendSql (StringBuilder sb, QueryFieldSet fieldSet);
-        
+
         public QueryListNode Parent {
             get { return parent; }
             set { parent = value; }
         }
-        
+
         public int SourceColumn {
             get { return source_column; }
             set { source_column = value; }
         }
-        
+
         public int SourceLine {
             get { return source_line; }
             set { source_line = value; }
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryOperator.cs b/src/Libraries/Hyena/Hyena.Query/QueryOperator.cs
index 644ee9b..db46ddb 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryOperator.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryOperator.cs
@@ -66,7 +66,7 @@ namespace Hyena.Query
         public bool IsNot {
             get { return is_not; }
         }
-        
+
         internal Operator (string name, string label, string sql_format, params string [] userOps) : this (name, label, sql_format, false, userOps)
         {
         }
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryParser.cs b/src/Libraries/Hyena/Hyena.Query/QueryParser.cs
index 32a373a..97dd46e 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryParser.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryParser.cs
@@ -36,7 +36,7 @@ namespace Hyena.Query
     public abstract class QueryParser
     {
         protected StreamReader reader;
-        
+
         public QueryParser()
         {
             Reset ();
@@ -57,7 +57,7 @@ namespace Hyena.Query
 
         public abstract QueryNode BuildTree (QueryFieldSet fieldSet);
         public abstract void Reset ();
-        
+
         public StreamReader InputReader {
             get { return reader; }
             set { reader = value; }
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryTermNode.cs b/src/Libraries/Hyena/Hyena.Query/QueryTermNode.cs
index db523b6..27c50ab 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryTermNode.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryTermNode.cs
@@ -91,7 +91,7 @@ namespace Hyena.Query
             }
             return this;
         }
-        
+
         public override void AppendUserQuery (StringBuilder sb)
         {
             sb.Append (Field == null ? Value.ToUserQuery () : Field.ToTermString (Operator.PrimaryAlias, Value.ToUserQuery ()));
@@ -119,13 +119,13 @@ namespace Hyena.Query
             if (Field == null) {
                 sb.Append ("(");
                 int emitted = 0;
-                
+
                 foreach (QueryField field in fieldSet.Fields) {
                     if (field.IsDefault)
                         if (EmitTermMatch (sb, field, emitted > 0))
                             emitted++;
                 }
-                
+
                 sb.Append (")");
             } else {
                 EmitTermMatch (sb, Field, false);
@@ -155,7 +155,7 @@ namespace Hyena.Query
             get { return op; }
             set { op = value; }
         }
-        
+
         public QueryValue Value {
             get { return qvalue; }
             set { qvalue = value; }
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryToken.cs b/src/Libraries/Hyena/Hyena.Query/QueryToken.cs
index e3fac84..aa7a363 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryToken.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryToken.cs
@@ -40,7 +40,7 @@ namespace Hyena.Query
         Range,
         Term
     }
-    
+
     public class QueryToken
     {
         private TokenID id;
diff --git a/src/Libraries/Hyena/Hyena.Query/QueryValue.cs b/src/Libraries/Hyena/Hyena.Query/QueryValue.cs
index a39e3ae..875517a 100644
--- a/src/Libraries/Hyena/Hyena.Query/QueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/QueryValue.cs
@@ -62,7 +62,7 @@ namespace Hyena.Query
 
             return null;
         }
-        
+
         public static QueryValue CreateFromStringValue (string input, QueryField field)
         {
             if (field == null) {
diff --git a/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
index 772ef48..bd9d271 100644
--- a/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
@@ -50,7 +50,7 @@ namespace Hyena.Query
         public override AliasedObjectSet<Operator> OperatorSet {
             get { return operators; }
         }
-        
+
         public static RelativeTimeSpanQueryValue RelativeToNow (DateTime since)
         {
             RelativeTimeSpanQueryValue qv = new RelativeTimeSpanQueryValue ();
diff --git a/src/Libraries/Hyena/Hyena.Query/StringQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/StringQueryValue.cs
index 5e60d4a..a707283 100644
--- a/src/Libraries/Hyena/Hyena.Query/StringQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/StringQueryValue.cs
@@ -94,7 +94,7 @@ namespace Hyena.Query
                            .Replace ("%", "\\%")
                            .Replace ("_", "\\_");
             }
-            
+
             return orig;
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs b/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs
index 5af782f..ceb5c29 100644
--- a/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs
+++ b/src/Libraries/Hyena/Hyena.Query/Tests/QueryTests.cs
@@ -77,12 +77,12 @@ namespace Hyena.Query.Tests
         public void QueryValueSql ()
         {
             QueryValue qv;
-            
+
             qv = new DateQueryValue (); qv.ParseUserQuery ("2007-03-9");
             Assert.AreEqual (new DateTime (2007, 3, 9), qv.Value);
             Assert.AreEqual ("2007-03-09", qv.ToUserQuery ());
             Assert.AreEqual ("1173420000", qv.ToSql ());
-    
+
             qv = new StringQueryValue (); qv.ParseUserQuery ("foo 'bar'");
             Assert.AreEqual ("foo 'bar'", qv.Value);
             Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ());
@@ -92,34 +92,34 @@ namespace Hyena.Query.Tests
             Assert.AreEqual ("Foo Baño", qv.Value);
             Assert.AreEqual ("Foo Baño", qv.ToUserQuery ());
             Assert.AreEqual ("foo bano", qv.ToSql ());
-    
+
             qv = new ExactStringQueryValue (); qv.ParseUserQuery ("foo 'bar'");
             Assert.AreEqual ("foo 'bar'", qv.Value);
             Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ());
             Assert.AreEqual ("foo ''bar''", qv.ToSql ());
-    
+
             qv = new IntegerQueryValue (); qv.ParseUserQuery ("22");
             Assert.AreEqual (22, qv.Value);
             Assert.AreEqual ("22", qv.ToUserQuery ());
             Assert.AreEqual ("22", qv.ToSql ());
-    
+
             qv = new FileSizeQueryValue (); qv.ParseUserQuery ("2048 KB");
             Assert.AreEqual (2097152, qv.Value);
             Assert.AreEqual ("2.048 KB", qv.ToUserQuery ());
             Assert.AreEqual ("2097152", qv.ToSql ());
-    
+
             // TODO this will break once an it_IT translation for "days ago" etc is committed
             qv = new RelativeTimeSpanQueryValue (); qv.ParseUserQuery ("2 days ago");
             Assert.AreEqual (-172800, qv.Value);
             Assert.AreEqual ("2 days ago", qv.ToUserQuery ());
-    
+
             // TODO this will break once an it_IT translation for "minutes" etc is committed
             qv = new TimeSpanQueryValue (); qv.ParseUserQuery ("4 minutes");
             Assert.AreEqual (240, qv.Value);
             Assert.AreEqual ("4 minutes", qv.ToUserQuery ());
             Assert.AreEqual ("240000", qv.ToSql ());
         }
-    
+
         [Test]
         public void QueryParsing ()
         {
@@ -144,16 +144,16 @@ namespace Hyena.Query.Tests
                 "by:on", // bgo#601065
                 "on:by",
             };
-    
+
             AssertForEach<string> (tests, UserQueryParsesAndGenerates);
         }
-    
+
         [Test]
         public void CustomFormatParenthesisBugFixed ()
         {
             QueryValue val = new StringQueryValue ();
             val.ParseUserQuery ("mp3");
-    
+
             Assert.AreEqual (
                 "(CoreTracks.MimeType LIKE '%mp3%' ESCAPE '\\' OR CoreTracks.Uri LIKE '%mp3%' ESCAPE '\\')",
                 MimeTypeField.ToSql (StringQueryValue.Contains, val)
@@ -231,15 +231,15 @@ namespace Hyena.Query.Tests
             Assert.IsNotNull (query_tree, "Query should parse");
             Assert.AreEqual ("by==\"foo (disc 2)\"", query_tree.ToUserQuery ());
         }
-    
+
         private static void UserQueryParsesAndGenerates (string query)
         {
             QueryNode node = UserQueryParser.Parse (query, FieldSet);
             if (query == null || query.Trim () == String.Empty) {
-                Assert.AreEqual (node, null); 
+                Assert.AreEqual (node, null);
                 return;
             }
-    
+
             Assert.AreEqual (query, node.ToUserQuery ());
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.Query/UserQueryParser.cs b/src/Libraries/Hyena/Hyena.Query/UserQueryParser.cs
index 6d38233..ee7b49e 100644
--- a/src/Libraries/Hyena/Hyena.Query/UserQueryParser.cs
+++ b/src/Libraries/Hyena/Hyena.Query/UserQueryParser.cs
@@ -62,7 +62,7 @@ namespace Hyena.Query
             field_set = fieldSet;
             root = current_parent = new QueryListNode (Keyword.And);
             bool last_was_term = false;
-            
+
             while (true) {
                 QueryToken token = Scan ();
 
@@ -72,7 +72,7 @@ namespace Hyena.Query
 
                 token.Column = token_start_column;
                 token.Line = token_start_line;
-                
+
                 // If we have two terms in a row, put an AND between them
                 if (last_was_term && token.ID == TokenID.Term)
                     ParseToken (new QueryToken (TokenID.And));
@@ -84,19 +84,19 @@ namespace Hyena.Query
 
             return root.Trim ();
         }
-        
+
         private void DepthPush ()
         {
             current_parent = new QueryListNode (Keyword.And, current_parent);
         }
-        
+
         private void DepthPop ()
         {
             // Avoid trying to pop more than is possible
             if (current_parent.Parent != null)
                 current_parent = current_parent.Parent;
         }
-        
+
         private void NodePush (QueryNode node)
         {
             if (current_parent == null && node is QueryListNode) {
@@ -115,7 +115,7 @@ namespace Hyena.Query
                 current_parent = list;
             }
         }
-        
+
         private void ParseToken (QueryToken token)
         {
             switch (token.ID) {
@@ -169,7 +169,7 @@ namespace Hyena.Query
                 else
                     eos_consumed = true;
             }
-            
+
             for (; ; ReadChar ()) {
                 if (Char.IsWhiteSpace (peek) && peek != '\n') {
                     continue;
@@ -201,10 +201,10 @@ namespace Hyena.Query
 
                 if (reader.EndOfStream)
                     eos_consumed = true;
-                
+
                 switch (token) {
-                    case "or": 
-                    case "OR": 
+                    case "or":
+                    case "OR":
                         return new QueryToken (TokenID.Or);
                     case "NOT":
                         return new QueryToken (TokenID.Not);
@@ -248,7 +248,7 @@ namespace Hyena.Query
                     break;
                 }
             }
-            
+
             return buffer.ToString ();
         }
 
@@ -266,7 +266,7 @@ namespace Hyena.Query
             if (peek == Char.MinValue) {
                 return;
             }
-            
+
             peek = (char)reader.Read ();
             current_column++;
         }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs
index 62414c8..3b92d77 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs
@@ -45,25 +45,25 @@ namespace Hyena.SExpEngine
         {
             double result = 0.0;
             bool as_int = true;
-            
+
             for(int i = 0; i < args.Length; i++) {
                 TreeNode arg = Evaluate(args[i]);
-                
+
                 if(arg is IntLiteral || arg is DoubleLiteral) {
                     double arg_value;
-                    
+
                     if(arg is DoubleLiteral) {
                         as_int = false;
                         arg_value = (arg as DoubleLiteral).Value;
                     } else {
                         arg_value = (int)(arg as IntLiteral).Value;
                     }
-                    
+
                     if(i == 0) {
                         result = arg_value;
                         continue;
                     }
-                    
+
                     switch(operation) {
                         case ArithmeticOperation.Add:
                             result += arg_value;
@@ -81,76 +81,76 @@ namespace Hyena.SExpEngine
                             if(!(arg is IntLiteral)) {
                                 throw new ArgumentException("Modulo requires int arguments");
                             }
-                            
+
                             result %= (int)arg_value;
                             break;
-                    }       
+                    }
                 } else {
                     throw new ArgumentException("arguments must be double or int");
                 }
             }
-            
-            return as_int ? 
-                ((TreeNode)new IntLiteral((int)result)) : 
+
+            return as_int ?
+                ((TreeNode)new IntLiteral((int)result)) :
                 ((TreeNode)new DoubleLiteral(result));
         }
-        
+
         [Function("add", "+")]
         public virtual TreeNode OnAdd(TreeNode [] args)
         {
             TreeNode first = Evaluate(args[0]);
-            
+
             if(first is StringLiteral) {
                 return StringFunctionSet.ConcatenateStrings(Evaluator, args);
             }
-        
+
             return OnPerformArithmetic(args, ArithmeticOperation.Add);
         }
-        
+
         [Function("sub", "-")]
         public virtual TreeNode OnSubtract(TreeNode [] args)
         {
             return OnPerformArithmetic(args, ArithmeticOperation.Subtract);
         }
-        
+
         [Function("mul", "*")]
         public virtual TreeNode OnMultiply(TreeNode [] args)
         {
             return OnPerformArithmetic(args, ArithmeticOperation.Multiply);
         }
-        
+
         [Function("div", "/")]
         public virtual TreeNode OnDivide(TreeNode [] args)
         {
             return OnPerformArithmetic(args, ArithmeticOperation.Divide);
         }
-        
+
         [Function("mod", "%")]
         public virtual TreeNode OnModulo(TreeNode [] args)
         {
             return OnPerformArithmetic(args, ArithmeticOperation.Modulo);
         }
-        
+
         [Function("++")]
         public virtual TreeNode OnIncrement(TreeNode [] args)
         {
             return IntegerUpdate(args, 1);
         }
-        
+
         [Function("--")]
         public virtual TreeNode OnDecrement(TreeNode [] args)
         {
             return IntegerUpdate(args, -1);
         }
-        
+
         private TreeNode IntegerUpdate(TreeNode [] args, int value)
         {
             TreeNode variable_node = (FunctionNode)args[0];
             TreeNode result = Evaluate(variable_node);
             TreeNode new_result = new IntLiteral(((IntLiteral)result).Value + value);
-            
+
             FunctionFunctionSet.VariableSet(Evaluator, args[0], new_result);
-            
+
             return new_result;
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/CastFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/CastFunctionSet.cs
index 526db08..ba3063d 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/CastFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/CastFunctionSet.cs
@@ -37,8 +37,8 @@ namespace Hyena.SExpEngine
         {
             if(args.Length != 1) {
                 throw new ArgumentException("cast must have only one argument");
-            } 
-            
+            }
+
             TreeNode arg = Evaluate(args[0]);
 
             if(arg is DoubleLiteral) {
@@ -47,34 +47,34 @@ namespace Hyena.SExpEngine
                 return new DoubleLiteral((int)(arg as IntLiteral).Value);
             } else if(arg is StringLiteral) {
                 return new DoubleLiteral(Convert.ToDouble((arg as StringLiteral).Value));
-            } 
-            
+            }
+
             throw new ArgumentException("can only cast double, int, or string literals");
         }
-        
+
         [Function("cast-int")]
         public virtual TreeNode OnCastInt(TreeNode [] args)
         {
             DoubleLiteral result = (DoubleLiteral)OnCastDouble(args);
             return new IntLiteral((int)result.Value);
         }
-        
+
         [Function("cast-bool")]
         public virtual TreeNode OnCastBool(TreeNode [] args)
         {
             DoubleLiteral result = (DoubleLiteral)OnCastDouble(args);
             return new BooleanLiteral((int)result.Value != 0);
         }
-        
+
         [Function("cast-string")]
         public virtual TreeNode OnCastString(TreeNode [] args)
         {
             if(args.Length != 1) {
                 throw new ArgumentException("cast must have only one argument");
             }
-            
+
             TreeNode arg = Evaluate(args[0]);
-            
+
             if(arg is DoubleLiteral) {
                 return new StringLiteral(Convert.ToString((arg as DoubleLiteral).Value));
             } else if(arg is IntLiteral) {
@@ -82,7 +82,7 @@ namespace Hyena.SExpEngine
             } else if(arg is StringLiteral) {
                 return arg;
             }
-            
+
             throw new ArgumentException("can only cast double, int, or string literals");
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs
index d6b8064..1c3adaf 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs
@@ -38,7 +38,7 @@ namespace Hyena.SExpEngine
             if(args.Length != 2) {
                 throw new ArgumentException("must have two arguments");
             }
-            
+
             return Compare(Evaluator, args[0], args[1]);
         }
 
@@ -46,13 +46,13 @@ namespace Hyena.SExpEngine
         {
             TreeNode arg_a = evaluator.Evaluate(a);
             TreeNode arg_b = evaluator.Evaluate(b);
-            
+
             if(arg_a.GetType() != arg_b.GetType()) {
                 throw new ArgumentException("arguments must be of the same type to compare");
             }
-            
+
             int result = 0;
-            
+
             if(arg_a is IntLiteral) {
                 result = (arg_a as IntLiteral).Value.CompareTo(
                     (arg_b as IntLiteral).Value);
@@ -68,38 +68,38 @@ namespace Hyena.SExpEngine
             } else {
                 throw new ArgumentException("invalid type for comparison");
             }
-            
+
             return new IntLiteral(result);
         }
-        
+
         [Function("less-than", "<")]
         public virtual TreeNode OnCompareLessThan(TreeNode [] args)
         {
             IntLiteral result = (IntLiteral)OnCompareTo(args);
             return new BooleanLiteral(result.Value < 0);
         }
-        
+
         [Function("greater-than", ">")]
         public virtual TreeNode OnCompareGreaterThan(TreeNode [] args)
         {
             IntLiteral result = (IntLiteral)OnCompareTo(args);
             return new BooleanLiteral(result.Value > 0);
         }
-        
+
         [Function("equal", "=")]
         public virtual TreeNode OnCompareEqual(TreeNode [] args)
         {
             IntLiteral result = (IntLiteral)OnCompareTo(args);
             return new BooleanLiteral(result.Value == 0);
         }
-        
+
         [Function("not-equal", "!=")]
         public virtual TreeNode OnCompareNotEqual(TreeNode [] args)
         {
             BooleanLiteral result = (BooleanLiteral)OnCompareEqual(args);
             return new BooleanLiteral(!result.Value);
         }
-        
+
         [Function("less-than-or-equal", "<=")]
         public virtual TreeNode OnCompareLessThanOrEqual(TreeNode [] args)
         {
@@ -107,7 +107,7 @@ namespace Hyena.SExpEngine
             BooleanLiteral b = (BooleanLiteral)OnCompareEqual(args);
             return new BooleanLiteral(a.Value || b.Value);
         }
-        
+
         [Function("greater-than-or-equal", ">=")]
         public virtual TreeNode OnCompareGreaterThanOrEqual(TreeNode [] args)
         {
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs
index b91de93..b803e7c 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs
@@ -37,43 +37,43 @@ namespace Hyena.SExpEngine
         {
             if(args == null || args.Length < 2 || args.Length > 3) {
                 throw new ArgumentException("if accepts 2 or 3 arguments");
-            } 
-            
+            }
+
             TreeNode arg = Evaluate(args[0]);
             if(!(arg is BooleanLiteral)) {
                 throw new ArgumentException("first if argument must be boolean");
             }
-            
+
             BooleanLiteral conditional = (BooleanLiteral)arg;
-            
+
             if(conditional.Value) {
                 return Evaluate(args[1]);
             } else if(args.Length == 3) {
                 return Evaluate(args[2]);
             }
-            
+
             return new VoidLiteral();
         }
-        
+
         [Function("while")]
         public virtual TreeNode OnWhile(TreeNode [] args)
         {
             if(args == null || args.Length < 1 || args.Length > 2) {
                 throw new ArgumentException("while accepts a condition and an expression or just an expression");
-            } 
-            
+            }
+
             while(true) {
                 if(args.Length == 2) {
                     TreeNode result = Evaluate(args[0]);
                     if(!(result is BooleanLiteral)) {
                         throw new ArgumentException("condition is not boolean");
                     }
-                
+
                     if(!(result as BooleanLiteral).Value) {
                         break;
                     }
                 }
-                
+
                 try {
                     Evaluate(args[args.Length - 1]);
                 } catch(Exception e) {
@@ -82,27 +82,27 @@ namespace Hyena.SExpEngine
                     }
                 }
             }
-            
+
             return new VoidLiteral();
         }
-        
+
         [Function("break")]
         public virtual TreeNode OnBreak(TreeNode [] args)
         {
             throw new BreakException();
         }
-        
+
         private class BreakException : Exception
         {
             public BreakException()
             {
             }
         }
-        
+
         public static bool BreakHandler(Exception e)
         {
             Exception parent_e = e;
-            
+
             while(parent_e != null) {
                 if(parent_e is BreakException) {
                     return true;
@@ -110,7 +110,7 @@ namespace Hyena.SExpEngine
                 parent_e = parent_e.InnerException;
             }
 
-            throw e;    
+            throw e;
         }
     }
 }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/Evaluator.cs b/src/Libraries/Hyena/Hyena.SExpEngine/Evaluator.cs
index 60a3014..294b0da 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/Evaluator.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/Evaluator.cs
@@ -36,17 +36,17 @@ namespace Hyena.SExpEngine
         {
             RegisterFunctions();
         }
-        
+
         public Evaluator(TreeNode expression) : base(expression)
         {
             RegisterFunctions();
         }
-        
+
         public Evaluator(string expression) : base(expression)
         {
             RegisterFunctions();
         }
-        
+
         private void RegisterFunctions()
         {
             RegisterFunctionSet(new ControlFunctionSet());
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/EvaluatorBase.cs b/src/Libraries/Hyena/Hyena.SExpEngine/EvaluatorBase.cs
index af80a7b..2076cdd 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/EvaluatorBase.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/EvaluatorBase.cs
@@ -39,12 +39,12 @@ namespace Hyena.SExpEngine
     public class EvaluationException : ApplicationException
     {
         public EvaluationException(TreeNode node, string token, Exception inner) : base(String.Format(
-            "Evaluation exception at token `{0} ({1})' [{2},{3}]", 
+            "Evaluation exception at token `{0} ({1})' [{2},{3}]",
             node.GetType(), token, node.Line, node.Column), inner)
         {
         }
     }
-    
+
     public class UnknownVariableException : ApplicationException
     {
         public UnknownVariableException(string var) : base(var)
@@ -60,171 +60,171 @@ namespace Hyena.SExpEngine
             public MethodInfo MethodInfo;
             public bool EvaluateVariables;
         }
-    
+
         private TreeNode expression;
         private TreeNode function_table_expression = new TreeNode();
-        
+
         private string input;
         private Dictionary<string, object> functions = new Dictionary<string, object>();
         private List<Exception> exceptions = new List<Exception>();
-        
+
         public EvaluatorBase()
         {
             expression = function_table_expression;
         }
-        
+
         public EvaluatorBase(TreeNode expression)
         {
             this.expression = expression;
         }
-        
+
         public EvaluatorBase(string input)
         {
             expression = function_table_expression;
             this.input = input;
         }
-        
+
         public void RegisterVariable(string name, string value)
         {
             expression.RegisterFunction(name, value);
         }
-        
+
         public void RegisterVariable(string name, bool value)
         {
             expression.RegisterFunction(name, value);
         }
-        
+
         public void RegisterVariable(string name, int value)
         {
             expression.RegisterFunction(name, value);
         }
-        
+
         public void RegisterVariable(string name, double value)
         {
             expression.RegisterFunction(name, value);
         }
-        
+
         public void RegisterVariable(string name, SExpVariableResolutionHandler value)
         {
             expression.RegisterFunction(name, value);
         }
-        
+
         public void RegisterVariable(string name, TreeNode value)
         {
             expression.RegisterFunction(name, value);
         }
-        
+
         public void RegisterFunction(SExpFunctionHandler handler, params string [] names)
         {
             foreach(string name in names) {
                 if(functions.ContainsKey(name)) {
                     functions.Remove(name);
                 }
-                
+
                 functions.Add(name, handler);
             }
         }
-        
+
         public void RegisterFunction(object o, MethodInfo method, string [] names)
         {
             RegisterFunction(o, method, names, true);
         }
-        
+
         public void RegisterFunction(object o, MethodInfo method, string [] names, bool evaluateVariables)
         {
             MethodInfoContainer container = new MethodInfoContainer();
             container.MethodInfo = method;
             container.Object = o;
             container.EvaluateVariables = evaluateVariables;
-        
+
             foreach(string name in names) {
                 if(functions.ContainsKey(name)) {
                     functions.Remove(name);
                 }
-                
+
                 functions.Add(name, container);
             }
         }
-        
+
         public void RegisterFunctionSet(FunctionSet functionSet)
         {
             functionSet.Load(this);
         }
-        
+
         public TreeNode EvaluateTree(TreeNode expression)
         {
             this.expression = expression;
             this.input = null;
             return Evaluate();
         }
-        
+
         public TreeNode EvaluateString(string input)
         {
             this.expression = null;
             this.input = input;
             return Evaluate();
         }
-        
+
         public TreeNode Evaluate()
         {
             exceptions.Clear();
-            
+
             try {
                 if(expression == null) {
                     Parser parser = new Parser();
                     expression = parser.Parse(input);
                     expression.CopyFunctionsFrom(function_table_expression);
                 }
-                
+
                 return Evaluate(expression);
-            } catch(Exception e) {    
+            } catch(Exception e) {
                 Exception next = e;
-                
+
                 do {
                     if(next != null) {
                         exceptions.Add(next);
                         next = next.InnerException;
                     }
                 } while(next != null && next.InnerException != null);
-            
+
                 if(next != null) {
                     exceptions.Add(next);
                 }
             }
-            
+
             return null;
         }
-       
+
         public TreeNode Evaluate(TreeNode node)
         {
             if(!node.HasChildren || node is FunctionNode) {
                 return EvaluateNode(node);
             }
-            
+
             TreeNode final_result_node = new TreeNode();
-            
+
             foreach(TreeNode child_node in node.Children) {
                 TreeNode result_node = EvaluateNode(child_node);
-                
+
                 if(result_node != null) {
                     final_result_node.AddChild(result_node);
                 }
-                
+
                 if(child_node is FunctionNode) {
                     if(functions.ContainsKey((child_node as FunctionNode).Function)) {
                         break;
                     }
-                    
+
                     FunctionNode impl = ResolveFunction(child_node as FunctionNode);
                     if(impl != null && impl.RequiresArguments) {
                         break;
                     }
                 }
             }
-            
+
             return final_result_node.ChildCount == 1 ? final_result_node.Children[0] : final_result_node;
         }
-        
+
         private TreeNode EvaluateNode(TreeNode node)
         {
             TreeNode result_node = null;
@@ -237,25 +237,25 @@ namespace Hyena.SExpEngine
                     if(e is TargetInvocationException) {
                         ee = e.InnerException;
                     }
-                
+
                     throw new EvaluationException(node, (node as FunctionNode).Function, ee);
                 }
             } else if(node is LiteralNodeBase) {
                 result_node = node;
             } else {
                 result_node = Evaluate(node);
-            } 
-            
+            }
+
             return result_node;
         }
-        
+
         private TreeNode EvaluateFunction(FunctionNode node)
         {
             object handler = null;
-            
+
             TreeNode parent = node.Parent;
             TreeNode [] args = null;
-            
+
             if(!functions.ContainsKey(node.Function)) {
                 handler = ResolveFunction(node);
                 if(handler == null) {
@@ -267,16 +267,16 @@ namespace Hyena.SExpEngine
 
             if(parent.Children[0] == node) {
                 args = new TreeNode[parent.ChildCount - 1];
-                
+
                 for(int i = 0; i < args.Length; i++) {
                     args[i] = parent.Children[i + 1];
-                    
+
                     if(handler is MethodInfoContainer && !(handler as MethodInfoContainer).EvaluateVariables) {
                         continue;
                     }
                 }
             }
-            
+
             if(handler is FunctionNode) {
                 return (handler as FunctionNode).Evaluate(this, args);
             } else if(handler is SExpFunctionHandler) {
@@ -293,39 +293,39 @@ namespace Hyena.SExpEngine
         internal FunctionNode ResolveFunction(FunctionNode node)
         {
             TreeNode shift_node = node;
-            
+
             do {
                 if(shift_node.Functions.ContainsKey(node.Function)) {
                     return shift_node.Functions[node.Function];
                 }
-                
+
                 shift_node = shift_node.Parent;
             } while(shift_node != null);
-            
+
             return null;
         }
-        
+
         public bool Success {
             get { return exceptions.Count == 0; }
         }
-        
+
         public TreeNode ExpressionTree {
             get { return expression; }
         }
-        
+
         public ReadOnlyCollection<Exception> Exceptions {
             get { return new ReadOnlyCollection<Exception>(exceptions); }
         }
-        
+
         public string ErrorMessage {
             get {
                 if(exceptions.Count == 0) {
                     return null;
                 } else if(exceptions.Count >= 2) {
-                    return String.Format("{0}: {1}", exceptions[exceptions.Count - 2].Message, 
+                    return String.Format("{0}: {1}", exceptions[exceptions.Count - 2].Message,
                         exceptions[exceptions.Count - 1].Message);
                 }
-                
+
                 return exceptions[0].Message;
             }
         }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs
index d7c7a5b..96a3ba6 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs
@@ -37,22 +37,22 @@ namespace Hyena.SExpEngine
         {
             return VariableSet(Evaluator, args, true);
         }
-        
+
         public static TreeNode VariableSet(EvaluatorBase evaluator, TreeNode var, TreeNode value)
         {
             return VariableSet(evaluator, new TreeNode[] { var, value }, true);
         }
-        
+
         public static TreeNode VariableSet(EvaluatorBase evaluator, TreeNode [] args, bool update)
         {
             if(args.Length != 2) {
                 throw new ArgumentException("must have two arguments");
             }
-            
+
             if(!(args[0] is FunctionNode)) {
                 throw new ArgumentException("first argument must be a variable");
             }
-            
+
             FunctionNode variable_node = evaluator.ResolveFunction(args[0] as FunctionNode);
             if(variable_node != null) {
                 variable_node.Body = evaluator.Evaluate(args[1]);
@@ -62,38 +62,38 @@ namespace Hyena.SExpEngine
 
                 parent.RegisterFunction((args[0] as FunctionNode).Function, evaluator.Evaluate(args[1]));
             }
-            
+
             return new VoidLiteral();
         }
-        
+
         [Function(false, "define")]
         public virtual TreeNode OnDefine(TreeNode [] args)
         {
             if(args.Length < 2 || args.Length > 3) {
                 throw new ArgumentException("define must have two or three arguments");
             }
-            
+
             if(!(args[0] is FunctionNode)) {
                 throw new ArgumentException("first define argument must be a variable");
             }
-            
+
             FunctionNode function = new FunctionNode((args[0] as FunctionNode).Function, args[args.Length - 1]);
-            
+
             if(args.Length == 3 && args[1].HasChildren) {
                 foreach(TreeNode function_arg in args[1].Children) {
                     if(!(function_arg is FunctionNode)) {
                         throw new ArgumentException("define function arguments must be variable tokens");
                     }
-                    
+
                     function.RegisterFunction((function_arg as FunctionNode).Function, new VoidLiteral());
                 }
             }
-            
+
             TreeNode parent = args[0].Parent;
             parent = parent.Parent ?? parent;
-            
+
             parent.RegisterFunction(function.Function, function);
-            
+
             return new VoidLiteral();
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/FunctionNode.cs b/src/Libraries/Hyena/Hyena.SExpEngine/FunctionNode.cs
index 0e7e40e..966be3c 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/FunctionNode.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/FunctionNode.cs
@@ -47,7 +47,7 @@ namespace Hyena.SExpEngine
         {
             this.function = function;
         }
-        
+
         public FunctionNode(string function, object body)
         {
             this.function = function;
@@ -57,32 +57,32 @@ namespace Hyena.SExpEngine
         public TreeNode Evaluate(EvaluatorBase evaluator, TreeNode [] args)
         {
             if(args != null && args.Length != FunctionCount && RequiresArguments) {
-                throw new ArgumentException("Function " + function + " takes " 
+                throw new ArgumentException("Function " + function + " takes "
                     + FunctionCount + " arguments, not " + args.Length);
             }
-            
+
             if(args != null && RequiresArguments) {
                 int i = 0;
                 string [] names = new string[args.Length];
-                
+
                 foreach(KeyValuePair<string, FunctionNode> var in Functions) {
                     names[i++] = var.Key;
                 }
-                
+
                 for(i = 0; i < args.Length; i++) {
                     (body as TreeNode).RegisterFunction(names[i], evaluator.Evaluate(args[i]));
                 }
             }
-            
+
             return evaluator.Evaluate(ResolveBody(evaluator));
         }
-        
+
         private TreeNode ResolveBody(EvaluatorBase evaluator)
         {
             if(body == null) {
                 throw new UnknownVariableException(Function);
             }
-            
+
             if(body is string) {
                 return new StringLiteral((string)body);
             } else if(body is double) {
@@ -96,26 +96,26 @@ namespace Hyena.SExpEngine
             } else if(body is TreeNode) {
                 return evaluator.Evaluate((TreeNode)body);
             }
-            
+
             throw new UnknownVariableException(String.Format(
                 "Unknown function type `{0}' for function `{1}'",
                 body.GetType(), Function));
         }
-        
+
         public override string ToString()
         {
             return Function;
         }
-        
+
         internal object Body {
             get { return body; }
             set { body = value; }
         }
-        
+
         internal bool RequiresArguments {
             get { return FunctionCount > 0 && body is TreeNode; }
         }
-        
+
         public string Function {
             get { return function; }
         }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/FunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/FunctionSet.cs
index 46798f8..97cb4ab 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/FunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/FunctionSet.cs
@@ -36,40 +36,40 @@ namespace Hyena.SExpEngine
     {
         private string [] names;
         private bool evaluate_variables;
-        
+
         public FunctionAttribute(params string [] names)
         {
             this.evaluate_variables = true;
             this.names = names;
         }
-        
+
         public FunctionAttribute(bool evaluateVariables, params string [] names)
         {
             this.evaluate_variables = evaluateVariables;
             this.names = names;
         }
-        
+
         public string [] Names {
             get { return names; }
         }
-        
+
         public bool EvaluateVariables {
             get { return evaluate_variables; }
         }
     }
-    
+
     public abstract class FunctionSet
     {
         private EvaluatorBase evaluator;
-        
+
         public void Load(EvaluatorBase evaluator)
         {
             this.evaluator = evaluator;
-            
+
             foreach(MethodInfo method in GetType().GetMethods()) {
                 string [] names = null;
                 bool evaluate_variables = true;
-                
+
                 foreach(Attribute attr in method.GetCustomAttributes(false)) {
                     if(attr is FunctionAttribute) {
                         names = (attr as FunctionAttribute).Names;
@@ -77,20 +77,20 @@ namespace Hyena.SExpEngine
                         break;
                     }
                 }
-                
+
                 if(names == null || names.Length == 0) {
                     continue;
                 }
-                
+
                 evaluator.RegisterFunction(this, method, names, evaluate_variables);
             }
         }
-        
+
         public TreeNode Evaluate(TreeNode node)
         {
             return evaluator.Evaluate(node);
         }
-        
+
         protected EvaluatorBase Evaluator {
             get { return evaluator; }
         }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/ListFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/ListFunctionSet.cs
index 1727a05..e834d02 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/ListFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/ListFunctionSet.cs
@@ -37,88 +37,88 @@ namespace Hyena.SExpEngine
         // private TreeNode EvaluateList(TreeNode node)
         // {
         //    TreeNode list = new TreeNode();
-        //    
+        //
         //    foreach(TreeNode child in node.Children) {
         //        list.AddChild(Evaluate(child));
         //    }
-        //    
+        //
         //    return list;
         // }
-    
+
         private bool IsList(TreeNode node)
         {
             return !(node is LiteralNodeBase) && !(node is FunctionNode);
         }
-        
+
         public void CheckList(TreeNode node)
         {
             if(!IsList(node)) {
                 throw new ArgumentException("argument must be a list");
             }
         }
-    
+
         [Function("is-list")]
         public virtual TreeNode OnIsList(TreeNode [] args)
         {
             return new BooleanLiteral(IsList(args[0]));
         }
-        
+
         [Function("item-at")]
         public virtual TreeNode OnItemAt(TreeNode [] args)
         {
             TreeNode list = Evaluate(args[0]);
             CheckList(list);
-            
+
             TreeNode node = Evaluate(args[1]);
             int index = 0;
-            
+
             if(!(node is IntLiteral)) {
                 throw new ArgumentException("argument must be an index");
             }
-            
+
             index = (node as IntLiteral).Value;
-            
+
             return Evaluate(list.Children[index]);
         }
-                
+
         [Function("remove-at")]
         public virtual TreeNode OnRemoveAt(TreeNode [] args)
         {
             TreeNode list = Evaluate(args[0]);
             CheckList(list);
-            
+
             TreeNode node = Evaluate(args[1]);
             int index = 0;
-            
+
             if(!(node is IntLiteral)) {
                 throw new ArgumentException("argument must be an index");
             }
-            
+
             index = (node as IntLiteral).Value;
-            
+
             list.Children.RemoveAt(index);
-            
+
             return list;
         }
-                        
+
         [Function("remove")]
         public virtual TreeNode OnRemove(TreeNode [] args)
         {
             TreeNode list = Evaluate(args[0]);
             CheckList(list);
-            
+
             TreeNode node = Evaluate(args[1]);
-            
+
             foreach(TreeNode compare_node in list.Children) {
                 if(((IntLiteral)CompareFunctionSet.Compare(Evaluator, node, compare_node)).Value == 0) {
                     list.Children.Remove(compare_node);
                     break;
                 }
             }
-           
+
             return list;
-        }       
-        
+        }
+
         [Function("append")]
         public virtual TreeNode OnAppend(TreeNode [] args)
         {
@@ -126,8 +126,8 @@ namespace Hyena.SExpEngine
             CheckList(list);
             list.Children.Add(Evaluate(args[1]));
             return list;
-        } 
-        
+        }
+
         [Function("prepend")]
         public virtual TreeNode OnPrepend(TreeNode [] args)
         {
@@ -135,27 +135,27 @@ namespace Hyena.SExpEngine
             CheckList(list);
             list.Children.Insert(0, Evaluate(args[1]));
             return list;
-        }       
-        
+        }
+
         [Function("insert")]
         public virtual TreeNode OnInsert(TreeNode [] args)
         {
             TreeNode list = Evaluate(args[0]);
             CheckList(list);
-            
+
             TreeNode node = Evaluate(args[1]);
             int index = 0;
-            
+
             if(!(node is IntLiteral)) {
                 throw new ArgumentException("argument must be an index");
             }
-            
+
             index = (node as IntLiteral).Value;
             list.Children.Insert(index, Evaluate(args[2]));
-            
+
             return list;
         }
-        
+
         [Function("foreach")]
         public virtual TreeNode OnForeach(TreeNode [] args)
         {
@@ -163,13 +163,13 @@ namespace Hyena.SExpEngine
             CheckList(list);
             FunctionNode item_variable = (FunctionNode)args[0];
             TreeNode function = args[2];
-            
+
             TreeNode self = args[0].Parent.Children[0];
             self.Parent.RegisterFunction(item_variable.Function, item_variable);
-            
+
             foreach(TreeNode child in list.Children) {
                 item_variable.Body = child;
-                
+
                 try {
                     if(function is FunctionNode) {
                         FunctionNode function_impl = Evaluator.ResolveFunction(function as FunctionNode);
@@ -183,7 +183,7 @@ namespace Hyena.SExpEngine
                     }
                 }
             }
-            
+
             return new VoidLiteral();
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/Literals.cs b/src/Libraries/Hyena/Hyena.SExpEngine/Literals.cs
index fb686d4..217b273 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/Literals.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/Literals.cs
@@ -31,9 +31,9 @@ using System;
 namespace Hyena.SExpEngine
 {
     public class LiteralNodeBase : TreeNode
-    {    
+    {
         private Type type = null;
-        
+
         public Type EnclosedType {
             get { return type ?? GetType(); }
             set { type = value; }
@@ -43,18 +43,18 @@ namespace Hyena.SExpEngine
     public class LiteralNode<T> : LiteralNodeBase
     {
         private T value;
-        
+
         public LiteralNode(T value)
         {
             this.value = value;
             EnclosedType = typeof(T);
         }
-        
+
         public override string ToString()
         {
             return Value.ToString();
         }
-        
+
         public T Value {
             get { return value; }
         }
@@ -69,18 +69,18 @@ namespace Hyena.SExpEngine
             return "void";
         }
     }
-    
+
     public class DoubleLiteral : LiteralNode<double>
     {
         private static System.Globalization.CultureInfo culture_info = new System.Globalization.CultureInfo("en-US");
-        
+
         public DoubleLiteral(double value) : base(value)
         {
         }
-        
+
         public override string ToString()
         {
-            return (Value - (int)Value) == 0.0 
+            return (Value - (int)Value) == 0.0
                 ? String.Format("{0}.0", Value.ToString(culture_info))
                 : Value.ToString(culture_info);
         }
@@ -91,7 +91,7 @@ namespace Hyena.SExpEngine
         public BooleanLiteral(bool value) : base(value)
         {
         }
-        
+
         public override string ToString()
         {
             return Value ? "true" : "false";
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs
index 7f14cab..88c9b67 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs
@@ -38,56 +38,56 @@ namespace Hyena.SExpEngine
             if(args.Length != 1) {
                 throw new ArgumentException("not must have only one argument");
             }
-            
+
             TreeNode arg = Evaluate(args[0]);
-            
+
             if(!(arg is BooleanLiteral)) {
                 throw new ArgumentException("can only not a boolean");
             }
-            
+
             return new BooleanLiteral(!(arg as BooleanLiteral).Value);
         }
-        
+
         [Function("or", "|")]
         public virtual TreeNode OnOr(TreeNode [] args)
         {
             return OnAndOr(args, false);
         }
-        
+
         [Function("and", "|")]
         public virtual TreeNode OnAnd(TreeNode [] args)
         {
             return OnAndOr(args, true);
         }
-        
+
         private TreeNode OnAndOr(TreeNode [] args, bool and)
         {
             if(args.Length < 2) {
                 throw new ArgumentException("must have two or more boolean arguments");
             }
-            
+
             bool result = false;
-            
+
             for(int i = 0; i < args.Length; i++) {
                 TreeNode node = Evaluate(args[i]);
                 if(!(node is BooleanLiteral)) {
                     throw new ArgumentException("arguments must be boolean");
                 }
-                
+
                 BooleanLiteral arg = (BooleanLiteral)node;
-                
+
                 if(i == 0) {
                     result = arg.Value;
                     continue;
                 }
-                
+
                 if(and) {
                     result &= arg.Value;
                 } else {
                     result |= arg.Value;
                 }
             }
-            
+
             return new BooleanLiteral(result);
         }
     }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/Parser.cs b/src/Libraries/Hyena/Hyena.SExpEngine/Parser.cs
index 9aad1da..53939ab 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/Parser.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/Parser.cs
@@ -47,89 +47,89 @@ namespace Hyena.SExpEngine
     {
         private static Regex number_regex = new Regex(@"^[-+]?(0x[\dA-Fa-f]+)?[\d]*\.?[\d]*([eE][-+]?[\d]+)?$");
         private static System.Globalization.CultureInfo culture_info = new System.Globalization.CultureInfo("en-US");
-        
+
         private StreamReader reader;
         private bool debug;
-        
+
         private StringBuilder current_token;
         private TreeNode root_node ;
         private TreeNode current_parent;
         private int scope;
         private int line;
         private int column;
-        
+
         public Parser()
         {
         }
-        
+
         public TreeNode Parse(string input)
         {
             return Parse(new MemoryStream(Encoding.UTF8.GetBytes(input)));
         }
-        
+
         public TreeNode Parse(Stream stream)
         {
             return Parse(new StreamReader(stream));
         }
-        
+
         public TreeNode Parse(StreamReader reader)
         {
             this.reader = reader;
-            
+
             current_token = new StringBuilder();
             root_node = new TreeNode();
             current_parent = root_node;
             scope = 0;
             line = 1;
             column = 0;
-            
+
             try {
                 Tokenize();
-                
+
                 if(scope != 0) {
                     throw new ApplicationException("Scope does pop back to zero");
                 }
             } catch(Exception e) {
                 throw new ParserException(current_token.ToString(), line, column, e);
             }
-            
+
             return root_node;
         }
-        
+
         private void Tokenize()
         {
             bool in_string = false;
             bool in_comment = false;
-            
+
             while(true) {
                 int ich = reader.Read();
                 char ch = (char)ich;
-                
+
                 if(ich < 0) {
                     break;
                 }
-                
+
                 if(ch == '\n') {
                     line++;
                     column = 0;
                 } else {
                     column++;
                 }
-                
+
                 if(in_comment) {
                     if(ch == '\r' || ch == '\n') {
                         in_comment = false;
                     }
-                    
+
                     continue;
                 }
-                
+
                 switch(ch) {
                     case '(':
                     case ')':
                         if(!in_string) {
                             TokenPush(false);
-                            
+
                             if(ch == '(') {
                                 ScopePush();
                             } else {
@@ -170,61 +170,61 @@ namespace Hyena.SExpEngine
                         } else {
                             current_token.Append(ch);
                         }
-                        break;    
+                        break;
                 }
             }
-            
+
             TokenPush(false);
 
             reader.Close();
         }
-        
+
         private void ScopePush()
         {
             current_parent = new TreeNode(current_parent);
             scope++;
         }
-        
+
         private void ScopePop()
         {
             current_parent = current_parent.Parent;
             scope--;
         }
-        
+
         private void TokenPush(bool as_string)
         {
             if(current_token.Length == 0 && !as_string) {
                 return;
             }
-            
+
             TreeNode node = null;
             string token = current_token.ToString();
-                
+
             if(Debug) {
-                Console.Write("{3}[{0}] TOKEN({4},{5}): [{2}{1}{2}]", scope, token, 
+                Console.Write("{3}[{0}] TOKEN({4},{5}): [{2}{1}{2}]", scope, token,
                     as_string ? "\"" : String.Empty, String.Empty.PadLeft(scope - 1, ' '),
                     line, column - current_token.Length);
             }
-            
+
             if(as_string) {
                 node = new StringLiteral(token);
             } else if(token == "#t") {
                 node = new BooleanLiteral(true);
             } else if(token == "#f") {
                 node = new BooleanLiteral(false);
-            } else if(token.Length > 0 && token != "." && token != "-" && 
+            } else if(token.Length > 0 && token != "." && token != "-" &&
                 token != "+" && number_regex.IsMatch(token)) {
                 try {
                     if(token.StartsWith("0x") || token.StartsWith("-0x")) {
                         int offset = token[0] == '-' ? 3 : 2;
-                        int value = Int32.Parse(token.Substring(offset), 
+                        int value = Int32.Parse(token.Substring(offset),
                             NumberStyles.HexNumber, culture_info.NumberFormat);
                         node = new IntLiteral(value * (offset == 3 ? -1 : 1));
                     } else if(token.Contains(".")) {
-                        node = new DoubleLiteral(Double.Parse(token, 
+                        node = new DoubleLiteral(Double.Parse(token,
                             NumberStyles.Float, culture_info.NumberFormat));
                     } else {
-                        node = new IntLiteral(Int32.Parse(token, 
+                        node = new IntLiteral(Int32.Parse(token,
                             NumberStyles.Integer, culture_info.NumberFormat));
                     }
                 } catch {
@@ -233,7 +233,7 @@ namespace Hyena.SExpEngine
             } else {
                 node = new FunctionNode(token);
             }
-            
+
             if(Debug) {
                 Console.WriteLine(" => [{0}]", node);
             }
@@ -241,10 +241,10 @@ namespace Hyena.SExpEngine
             node.Line = line;
             node.Column = column;
             current_parent.AddChild(node);
-            
+
             current_token.Remove(0, current_token.Length);
         }
-        
+
         public bool Debug {
             get { return debug; }
             set { debug = value; }
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/StringFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/StringFunctionSet.cs
index 4821e8a..5b55791 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/StringFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/StringFunctionSet.cs
@@ -39,105 +39,105 @@ namespace Hyena.SExpEngine
         {
             return ConcatenateStrings(Evaluator, args);
         }
-        
+
         public static TreeNode ConcatenateStrings(EvaluatorBase evaluator, TreeNode [] args)
         {
             StringBuilder result = new StringBuilder();
-            
+
             foreach(TreeNode arg in args) {
                 TreeNode eval_arg = evaluator.Evaluate(arg);
                 if(!(eval_arg is VoidLiteral)) {
                     result.Append(eval_arg);
                 }
             }
-            
+
             return new StringLiteral(result.ToString());
         }
-        
+
         private void CheckArgumentCount(TreeNode [] args, int expected)
         {
             CheckArgumentCount(args, expected, expected);
         }
-        
+
         private void CheckArgumentCount(TreeNode [] args, int expected_min, int expected_max)
         {
             if(args.Length < expected_min || args.Length > expected_max) {
-                throw new ArgumentException("expects " + expected_min + " <= args <= " 
+                throw new ArgumentException("expects " + expected_min + " <= args <= "
                     + expected_max + " arguments");
             }
         }
-        
+
         private string GetArgumentString(TreeNode [] args, int index)
         {
             TreeNode node = Evaluate(args[index]);
             if(!(node is StringLiteral)) {
                 throw new ArgumentException("argument " + index + " must be a string");
             }
-            
+
             return (node as StringLiteral).Value;
         }
-                
+
         private int GetArgumentInteger(TreeNode [] args, int index)
         {
             TreeNode node = Evaluate(args[index]);
             if(!(node is IntLiteral)) {
                 throw new ArgumentException("argument " + index + " must be an integer");
             }
-            
+
             return (node as IntLiteral).Value;
         }
-        
+
         [Function("length")]
         public virtual TreeNode OnLength(TreeNode [] args)
         {
             CheckArgumentCount(args, 1);
-            
+
             TreeNode node = Evaluate(args[0]);
-            
+
             if(node is StringLiteral) {
                 return new IntLiteral((node as StringLiteral).Value.Length);
             } else if(!(node is LiteralNodeBase) && !(node is FunctionNode)) {
                 return new IntLiteral(node.ChildCount);
             }
-            
+
             return new IntLiteral(0);
-        } 
-        
+        }
+
         [Function("contains")]
         public virtual TreeNode OnContains(TreeNode [] args)
         {
             CheckArgumentCount(args, 2);
             return new BooleanLiteral(GetArgumentString(args, 0).Contains(GetArgumentString(args, 1)));
         }
-                
+
         [Function("index-of")]
         public virtual TreeNode OnIndexOf(TreeNode [] args)
         {
             CheckArgumentCount(args, 2);
             return new IntLiteral(GetArgumentString(args, 0).IndexOf(GetArgumentString(args, 1)));
         }
-                
+
         [Function("last-index-of")]
         public virtual TreeNode OnLastIndexOf(TreeNode [] args)
         {
             CheckArgumentCount(args, 2);
             return new IntLiteral(GetArgumentString(args, 0).LastIndexOf(GetArgumentString(args, 1)));
         }
-        
+
         [Function("starts-with")]
         public virtual TreeNode OnStartsWith(TreeNode [] args)
         {
             CheckArgumentCount(args, 2);
             return new BooleanLiteral(GetArgumentString(args, 0).StartsWith(GetArgumentString(args, 1)));
         }
-                
+
         [Function("ends-with")]
         public virtual TreeNode OnEndsWith(TreeNode [] args)
         {
             CheckArgumentCount(args, 2);
             return new BooleanLiteral(GetArgumentString(args, 0).EndsWith(GetArgumentString(args, 1)));
         }
-        
+
         [Function("substring")]
         public virtual TreeNode OnSubstring(TreeNode [] args)
         {
@@ -149,23 +149,23 @@ namespace Hyena.SExpEngine
                     GetArgumentInteger(args, 1), GetArgumentInteger(args, 2)));
             }
         }
-        
+
         [Function("split")]
         public virtual TreeNode OnSplit(TreeNode [] args)
         {
             CheckArgumentCount(args, 2);
-            
+
             TreeNode result = new TreeNode();
             string str = GetArgumentString(args, 0);
             string pattern = GetArgumentString(args, 1);
-            
+
             foreach(string item in Regex.Split(str, pattern)) {
                 result.AddChild(new StringLiteral(item));
             }
-            
+
             return result;
         }
-        
+
         [Function("trim")]
         public virtual TreeNode OnTrim(TreeNode [] args)
         {
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/TreeNode.cs b/src/Libraries/Hyena/Hyena.SExpEngine/TreeNode.cs
index c0cd73b..fd3bd88 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/TreeNode.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/TreeNode.cs
@@ -39,7 +39,7 @@ namespace Hyena.SExpEngine
         private TreeNode parent;
         private int column;
         private int line;
-        
+
         public TreeNode()
         {
         }
@@ -49,14 +49,14 @@ namespace Hyena.SExpEngine
             this.parent = parent;
             parent.AddChild(this);
         }
-        
+
         internal void CopyFunctionsFrom(TreeNode node)
         {
             foreach(KeyValuePair<string, FunctionNode> function in node.Functions) {
                 RegisterFunction(function.Key, function.Value);
             }
         }
-        
+
         internal void RegisterFunction(string name, object value)
         {
             if(functions.ContainsKey(name)) {
@@ -65,7 +65,7 @@ namespace Hyena.SExpEngine
                 functions.Add(name, new FunctionNode(name, value));
             }
         }
-        
+
         internal void RegisterFunction(string name, FunctionNode function)
         {
             if(functions.ContainsKey(name)) {
@@ -74,26 +74,26 @@ namespace Hyena.SExpEngine
                 functions.Add(name, function);
             }
         }
-        
+
         public TreeNode Flatten()
         {
             TreeNode result_node = new TreeNode();
             Flatten(result_node, this);
-            
-            return result_node.ChildCount == 1 ? result_node.Children[0] : result_node; 
+
+            return result_node.ChildCount == 1 ? result_node.Children[0] : result_node;
         }
-        
+
         private void Flatten(TreeNode result_node, TreeNode node)
         {
             if(node == null) {
                 return;
             }
-            
+
             if(!node.HasChildren && !(node is VoidLiteral)) {
                 result_node.AddChild(node);
                 return;
             }
-            
+
             foreach(TreeNode child_node in node.Children) {
                 Flatten(result_node, child_node);
             }
@@ -103,7 +103,7 @@ namespace Hyena.SExpEngine
         {
             child.Parent = this;
             children.Add(child);
-        } 
+        }
 
         public TreeNode Parent {
             get { return parent; }
@@ -113,16 +113,16 @@ namespace Hyena.SExpEngine
         public int ChildCount {
             get { return children.Count; }
         }
-        
+
         public bool HasChildren {
             get { return ChildCount > 0; }
         }
-        
+
         public int Line {
             get { return line; }
             set { line = value; }
         }
-        
+
         public int Column {
             get { return column; }
             set { column = value; }
@@ -135,28 +135,28 @@ namespace Hyena.SExpEngine
         public IDictionary<string, FunctionNode> Functions {
             get { return functions; }
         }
-        
+
         public int FunctionCount {
             get { return functions.Count; }
         }
-        
+
         public bool Empty {
             get { return ChildCount == 0 && !(this is LiteralNodeBase) && !(this is FunctionNode); }
         }
-        
+
         public void Dump()
         {
             DumpTree(this);
         }
-               
+
         public TreeNode FindRootNode()
         {
             TreeNode shift_node = this;
-            
+
             while(shift_node.Parent != null) {
                 shift_node = shift_node.Parent;
             }
-            
+
             return shift_node;
         }
 
diff --git a/src/Libraries/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs b/src/Libraries/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs
index 802fcf5..cf576b8 100644
--- a/src/Libraries/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs
+++ b/src/Libraries/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs
@@ -37,32 +37,32 @@ namespace Hyena.SExpEngine
         {
             if(args.Length != 1) {
                 throw new ArgumentException("print must have only one argument");
-            } 
-            
+            }
+
             Console.WriteLine(Evaluate(args[0]));
-            
+
             return new VoidLiteral();
         }
-        
+
         [Function("print-type")]
         public virtual TreeNode OnPrintType(TreeNode [] args)
         {
             if(args.Length != 1) {
                 throw new ArgumentException("print-type must have only one argument");
-            } 
-            
+            }
+
             Console.WriteLine(Evaluate(args[0]).GetType());
-            
+
             return new VoidLiteral();
         }
-        
+
         [Function("dump")]
         public virtual TreeNode OnDump(TreeNode [] args)
         {
             foreach(TreeNode arg in args) {
                 Evaluate(arg).Dump();
             }
-            
+
             return new VoidLiteral();
         }
     }
diff --git a/src/Libraries/Hyena/Hyena/ConsoleCrayon.cs b/src/Libraries/Hyena/Hyena/ConsoleCrayon.cs
index 5d62b0b..c55dcd3 100644
--- a/src/Libraries/Hyena/Hyena/ConsoleCrayon.cs
+++ b/src/Libraries/Hyena/Hyena/ConsoleCrayon.cs
@@ -87,7 +87,7 @@ namespace Hyena
         // License: MIT/X11
         // Authors: Gonzalo Paniagua Javier <gonzalo ximian com>
         // (C) 2005-2006 Novell, Inc <http://www.novell.com>
-        
+
         private static int TranslateColor (ConsoleColor desired, out bool light)
         {
             light = false;
@@ -113,7 +113,7 @@ namespace Hyena
                 case ConsoleColor.White: default: light = true; return 7;
             }
         }
-        
+
         private static string GetAnsiColorControlCode (ConsoleColor color, bool isForeground)
         {
             // lighter fg colours are 90 -> 97 rather than 30 -> 37
@@ -133,7 +133,7 @@ namespace Hyena
 #region xterm Detection
 
         private static bool? xterm_colors = null;
-        public static bool XtermColors { 
+        public static bool XtermColors {
             get {
                 if (xterm_colors == null) {
                     DetectXtermColors ();
@@ -145,7 +145,7 @@ namespace Hyena
 
         [System.Runtime.InteropServices.DllImport ("libc", EntryPoint="isatty")]
         private extern static int _isatty (int fd);
-            
+
         private static bool isatty (int fd)
         {
             try {
@@ -158,11 +158,11 @@ namespace Hyena
         private static void DetectXtermColors ()
         {
             bool _xterm_colors = false;
-                
+
             switch (Environment.GetEnvironmentVariable ("TERM")) {
                 case "xterm":
                 case "rxvt":
-                case "rxvt-unicode": 
+                case "rxvt-unicode":
                     if (Environment.GetEnvironmentVariable ("COLORTERM") != null) {
                         _xterm_colors = true;
                     }
@@ -181,7 +181,7 @@ namespace Hyena
 
         private static bool? runtime_is_mono;
         public static bool RuntimeIsMono {
-            get { 
+            get {
                 if (runtime_is_mono == null) {
                     runtime_is_mono = Type.GetType ("System.MonoType") != null;
                 }
diff --git a/src/Libraries/Hyena/Hyena/CryptoUtil.cs b/src/Libraries/Hyena/Hyena/CryptoUtil.cs
index 2d07e43..b8fefe4 100644
--- a/src/Libraries/Hyena/Hyena/CryptoUtil.cs
+++ b/src/Libraries/Hyena/Hyena/CryptoUtil.cs
@@ -43,12 +43,12 @@ namespace Hyena
         {
             return text == null || text.Length != 32 ? false : md5_regex.IsMatch (text);
         }
-        
+
         public static string Md5Encode (string text)
         {
             return Md5Encode (text, Encoding.ASCII);
         }
-        
+
         public static string Md5Encode (string text, Encoding encoding)
         {
             if (String.IsNullOrEmpty (text)) {
diff --git a/src/Libraries/Hyena/Hyena/DateTimeUtil.cs b/src/Libraries/Hyena/Hyena/DateTimeUtil.cs
index e533c28..ae1bff1 100644
--- a/src/Libraries/Hyena/Hyena/DateTimeUtil.cs
+++ b/src/Libraries/Hyena/Hyena/DateTimeUtil.cs
@@ -61,13 +61,13 @@ namespace Hyena
         public static string FormatDuration (long time) {
             return FormatDuration (TimeSpan.FromSeconds (time));
         }
-        
+
         public static string FormatDuration (TimeSpan time) {
             return FormatDuration (time.Hours, time.Minutes, time.Seconds);
         }
-        
+
         public static string FormatDuration (int hours, int minutes, int seconds) {
-            return (hours > 0 ? 
+            return (hours > 0 ?
                     String.Format ("{0}:{1:00}:{2:00}", hours, minutes, seconds) :
                     String.Format ("{0}:{1:00}", minutes, seconds));
         }
diff --git a/src/Libraries/Hyena/Hyena/Log.cs b/src/Libraries/Hyena/Hyena/Log.cs
index 836ae29..6dea20c 100644
--- a/src/Libraries/Hyena/Hyena/Log.cs
+++ b/src/Libraries/Hyena/Hyena/Log.cs
@@ -37,17 +37,17 @@ namespace Hyena
     public class LogNotifyArgs : EventArgs
     {
         private LogEntry entry;
-        
+
         public LogNotifyArgs (LogEntry entry)
         {
             this.entry = entry;
         }
-        
+
         public LogEntry Entry {
             get { return entry; }
         }
     }
-        
+
     public enum LogEntryType
     {
         Debug,
@@ -55,14 +55,14 @@ namespace Hyena
         Error,
         Information
     }
-    
+
     public class LogEntry
     {
         private LogEntryType type;
         private string message;
         private string details;
         private DateTime timestamp;
-        
+
         internal LogEntry (LogEntryType type, string message, string details)
         {
             this.type = type;
@@ -71,27 +71,27 @@ namespace Hyena
             this.timestamp = DateTime.Now;
         }
 
-        public LogEntryType Type { 
+        public LogEntryType Type {
             get { return type; }
         }
-        
-        public string Message { 
-            get { return message; } 
+
+        public string Message {
+            get { return message; }
         }
-        
-        public string Details { 
-            get { return details; } 
+
+        public string Details {
+            get { return details; }
         }
 
-        public DateTime TimeStamp { 
-            get { return timestamp; } 
+        public DateTime TimeStamp {
+            get { return timestamp; }
         }
     }
-    
+
     public static class Log
     {
         public static event LogNotifyHandler Notify;
-        
+
         private static Dictionary<uint, DateTime> timers = new Dictionary<uint, DateTime> ();
         private static uint next_timer_id = 1;
 
@@ -100,13 +100,13 @@ namespace Hyena
             get { return debugging; }
             set { debugging = value; }
         }
-        
+
         public static void Commit (LogEntryType type, string message, string details, bool showUser)
         {
             if (type == LogEntryType.Debug && !Debugging) {
                 return;
             }
-        
+
             if (type != LogEntryType.Information || (type == LogEntryType.Information && !showUser)) {
                 switch (type) {
                     case LogEntryType.Error: ConsoleCrayon.ForegroundColor = ConsoleColor.Red; break;
@@ -114,19 +114,19 @@ namespace Hyena
                     case LogEntryType.Information: ConsoleCrayon.ForegroundColor = ConsoleColor.Green; break;
                     case LogEntryType.Debug: ConsoleCrayon.ForegroundColor = ConsoleColor.Blue; break;
                 }
-                
+
                 Console.Write ("[{0} {1:00}:{2:00}:{3:00}.{4:000}]", TypeString (type), DateTime.Now.Hour,
                     DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
-                
+
                 ConsoleCrayon.ResetColor ();
-                               
+
                 if (details != null) {
                     Console.WriteLine (" {0} - {1}", message, details);
                 } else {
                     Console.WriteLine (" {0}", message);
                 }
             }
-            
+
             if (showUser) {
                 OnNotify (new LogEntry (type, message, details));
             }
@@ -142,7 +142,7 @@ namespace Hyena
             }
             return null;
         }
-        
+
         private static void OnNotify (LogEntry entry)
         {
             LogNotifyHandler handler = Notify;
@@ -150,95 +150,95 @@ namespace Hyena
                 handler (new LogNotifyArgs (entry));
             }
         }
-        
+
         #region Timer Methods
-        
+
         public static uint DebugTimerStart (string message)
         {
             return TimerStart (message, false);
         }
-        
+
         public static uint InformationTimerStart (string message)
         {
             return TimerStart (message, true);
         }
-        
+
         private static uint TimerStart (string message, bool isInfo)
         {
             if (!Debugging && !isInfo) {
                 return 0;
             }
-            
+
             if (isInfo) {
                 Information (message);
             } else {
                 Debug (message);
             }
-            
+
             return TimerStart (isInfo);
         }
-        
+
         public static uint DebugTimerStart ()
         {
             return TimerStart (false);
         }
-        
+
         public static uint InformationTimerStart ()
         {
             return TimerStart (true);
         }
-            
+
         private static uint TimerStart (bool isInfo)
         {
             if (!Debugging && !isInfo) {
                 return 0;
             }
-            
+
             uint timer_id = next_timer_id++;
             timers.Add (timer_id, DateTime.Now);
             return timer_id;
         }
-        
+
         public static void DebugTimerPrint (uint id)
         {
             if (!Debugging) {
                 return;
             }
-            
+
             TimerPrint (id, "Operation duration: {0}", false);
         }
-        
+
         public static void DebugTimerPrint (uint id, string message)
         {
             if (!Debugging) {
                 return;
             }
-            
+
             TimerPrint (id, message, false);
         }
-        
+
         public static void InformationTimerPrint (uint id)
         {
             TimerPrint (id, "Operation duration: {0}", true);
         }
-        
+
         public static void InformationTimerPrint (uint id, string message)
         {
             TimerPrint (id, message, true);
         }
-        
+
         private static void TimerPrint (uint id, string message, bool isInfo)
         {
             if (!Debugging && !isInfo) {
                 return;
             }
-            
+
             DateTime finish = DateTime.Now;
-            
+
             if (!timers.ContainsKey (id)) {
                 return;
             }
-            
+
             TimeSpan duration = finish - timers[id];
             string d_message;
             if (duration.TotalSeconds < 60) {
@@ -246,116 +246,116 @@ namespace Hyena
             } else {
                 d_message = duration.ToString ();
             }
-            
+
             if (isInfo) {
                 InformationFormat (message, d_message);
             } else {
                 DebugFormat (message, d_message);
             }
         }
-        
+
         #endregion
-        
+
         #region Public Debug Methods
-                                    
+
         public static void Debug (string message, string details)
         {
             if (Debugging) {
                 Commit (LogEntryType.Debug, message, details, false);
             }
         }
-        
+
         public static void Debug (string message)
         {
             if (Debugging) {
                 Debug (message, null);
             }
         }
-        
+
         public static void DebugFormat (string format, params object [] args)
         {
             if (Debugging) {
                 Debug (String.Format (format, args));
             }
         }
-                
+
         #endregion
-        
+
         #region Public Information Methods
-            
+
         public static void Information (string message)
         {
             Information (message, null);
         }
-        
+
         public static void Information (string message, string details)
         {
             Information (message, details, false);
         }
-        
+
         public static void Information (string message, string details, bool showUser)
         {
             Commit (LogEntryType.Information, message, details, showUser);
         }
-        
+
         public static void Information (string message, bool showUser)
         {
             Information (message, null, showUser);
         }
-        
+
         public static void InformationFormat (string format, params object [] args)
         {
             Information (String.Format (format, args));
         }
-        
+
         #endregion
-        
+
         #region Public Warning Methods
-        
+
         public static void Warning (string message)
         {
             Warning (message, null);
         }
-        
+
         public static void Warning (string message, string details)
         {
             Warning (message, details, false);
         }
-        
+
         public static void Warning (string message, string details, bool showUser)
         {
             Commit (LogEntryType.Warning, message, details, showUser);
         }
-        
+
         public static void Warning (string message, bool showUser)
         {
             Warning (message, null, showUser);
         }
-        
+
         public static void WarningFormat (string format, params object [] args)
         {
             Warning (String.Format (format, args));
         }
-        
+
         #endregion
-        
+
         #region Public Error Methods
-        
+
         public static void Error (string message)
         {
             Error (message, null);
         }
-        
+
         public static void Error (string message, string details)
         {
             Error (message, details, false);
         }
-        
+
         public static void Error (string message, string details, bool showUser)
         {
             Commit (LogEntryType.Error, message, details, showUser);
         }
-        
+
         public static void Error (string message, bool showUser)
         {
             Error (message, null, showUser);
@@ -365,11 +365,11 @@ namespace Hyena
         {
             Error (String.Format (format, args));
         }
-        
+
         #endregion
-        
+
         #region Public Exception Methods
-        
+
         public static void DebugException (Exception e)
         {
             if (Debugging) {
@@ -381,17 +381,17 @@ namespace Hyena
         {
             Exception (null, e);
         }
-        
+
         public static void Exception (string message, Exception e)
         {
             Stack<Exception> exception_chain = new Stack<Exception> ();
             StringBuilder builder = new StringBuilder ();
-            
+
             while (e != null) {
                 exception_chain.Push (e);
                 e = e.InnerException;
             }
-            
+
             while (exception_chain.Count > 0) {
                 e = exception_chain.Pop ();
                 builder.AppendFormat ("{0} (in `{1}')", e.Message, e.Source).AppendLine ();
@@ -400,11 +400,11 @@ namespace Hyena
                     builder.AppendLine ();
                 }
             }
-        
+
             // FIXME: We should save these to an actual log file
             Log.Warning (message ?? "Caught an exception", builder.ToString (), false);
         }
-        
+
         #endregion
     }
 }
diff --git a/src/Libraries/Hyena/Hyena/PlatformUtil.cs b/src/Libraries/Hyena/Hyena/PlatformUtil.cs
index 9ff0f1d..2af4a2f 100644
--- a/src/Libraries/Hyena/Hyena/PlatformUtil.cs
+++ b/src/Libraries/Hyena/Hyena/PlatformUtil.cs
@@ -1,4 +1,4 @@
-// 
+//
 // PlatformUtil.cs
 //
 // Author:
diff --git a/src/Libraries/Hyena/Hyena/StringUtil.cs b/src/Libraries/Hyena/Hyena/StringUtil.cs
index 4d271a9..9070b5c 100644
--- a/src/Libraries/Hyena/Hyena/StringUtil.cs
+++ b/src/Libraries/Hyena/Hyena/StringUtil.cs
@@ -34,10 +34,10 @@ using System.Globalization;
 using System.Text.RegularExpressions;
 
 namespace Hyena
-{    
+{
     public static class StringUtil
     {
-        private static CompareOptions compare_options = 
+        private static CompareOptions compare_options =
             CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace |
             CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth;
 
@@ -45,7 +45,7 @@ namespace Hyena
         {
             return CultureInfo.CurrentCulture.CompareInfo.IndexOf (haystack, needle, compare_options);
         }
-        
+
         public static int RelaxedCompare (string a, string b)
         {
             if (a == null && b == null) {
@@ -55,29 +55,29 @@ namespace Hyena
             } else if (a == null && b != null) {
                 return -1;
             }
-            
+
             int a_offset = a.StartsWith ("the ") ? 4 : 0;
             int b_offset = b.StartsWith ("the ") ? 4 : 0;
 
-            return CultureInfo.CurrentCulture.CompareInfo.Compare (a, a_offset, a.Length - a_offset, 
+            return CultureInfo.CurrentCulture.CompareInfo.Compare (a, a_offset, a.Length - a_offset,
                 b, b_offset, b.Length - b_offset, compare_options);
         }
-        
+
         public static string CamelCaseToUnderCase (string s)
         {
             return CamelCaseToUnderCase (s, '_');
         }
-        
+
         private static Regex camelcase = new Regex ("([A-Z]{1}[a-z]+)", RegexOptions.Compiled);
         public static string CamelCaseToUnderCase (string s, char underscore)
         {
             if (String.IsNullOrEmpty (s)) {
                 return null;
             }
-        
+
             StringBuilder undercase = new StringBuilder ();
             string [] tokens = camelcase.Split (s);
-            
+
             for (int i = 0; i < tokens.Length; i++) {
                 if (tokens[i] == String.Empty) {
                     continue;
@@ -88,7 +88,7 @@ namespace Hyena
                     undercase.Append (underscore);
                 }
             }
-            
+
             return undercase.ToString ();
         }
 
@@ -143,7 +143,7 @@ namespace Hyena
         {
             return DoubleToTenthsPrecision (num, false);
         }
-        
+
         public static string DoubleToTenthsPrecision (double num, bool always_decimal)
         {
             return DoubleToTenthsPrecision (num, always_decimal, NumberFormatInfo.CurrentInfo);
@@ -154,7 +154,7 @@ namespace Hyena
             num = Math.Round (num, 1, MidpointRounding.ToEven);
             return String.Format (provider, !always_decimal && num == (int)num ? "{0:N0}" : "{0:N1}", num);
         }
-        
+
         // This method helps us pluralize doubles. Probably a horrible i18n idea.
         public static int DoubleToPluralInt (double num)
         {
@@ -163,7 +163,7 @@ namespace Hyena
             else
                 return (int)num + 1;
         }
-        
+
         // A mapping of non-Latin characters to be considered the same as
         // a Latin equivalent.
         private static Dictionary<char, char> BuildSpecialCases ()
@@ -174,24 +174,24 @@ namespace Hyena
             return dict;
         }
         private static Dictionary<char, char> searchkey_special_cases = BuildSpecialCases ();
-        
+
         //  Removes accents from Latin characters, and some kinds of punctuation.
         public static string SearchKey (string val)
         {
             if (String.IsNullOrEmpty (val)) {
                 return val;
             }
-            
+
             val = val.ToLower ();
             StringBuilder sb = new StringBuilder ();
             UnicodeCategory category;
             bool previous_was_latin = false;
             bool got_space = false;
-            
+
             // Normalizing to KD splits into (base, combining) so we can check for Latin
             // characters and then strip off any NonSpacingMarks following them
             foreach (char orig_c in val.TrimStart ().Normalize (NormalizationForm.FormKD)) {
-                
+
                 // Check for a special case *before* whitespace. This way, if
                 // a special case is ever added that maps to ' ' or '\t', it
                 // won't cause a run of whitespace in the result.
@@ -199,12 +199,12 @@ namespace Hyena
                 if (searchkey_special_cases.ContainsKey (c)) {
                     c = searchkey_special_cases[c];
                 }
-                
+
                 if (c == ' ' || c == '\t') {
                     got_space = true;
                     continue;
                 }
-                
+
                 category = Char.GetUnicodeCategory (c);
                 if (category == UnicodeCategory.OtherPunctuation) {
                     // Skip punctuation
@@ -215,7 +215,7 @@ namespace Hyena
                     }
                     sb.Append (c);
                 }
-                
+
                 // Can ignore A-Z because we've already lowercased the char
                 previous_was_latin = (c >= 'a' && c <= 'z');
             }
@@ -229,7 +229,7 @@ namespace Hyena
             }
             return result;
         }
-        
+
         private static Regex invalid_path_regex = BuildInvalidPathRegex ();
 
         private static Regex BuildInvalidPathRegex ()
@@ -241,7 +241,7 @@ namespace Hyena
                 '\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D', '\x0E', '\x0F',
                 '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17',
                 '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D', '\x1E', '\x1F',
-                
+
                 // Invalid in FAT32 / NTFS: " \ / : * | ? < >
                 // Invalid in HFS   :
                 // Invalid in ext3  /
@@ -253,10 +253,10 @@ namespace Hyena
                 regex_str += "\\" + invalid_path_characters[i];
             }
             regex_str += "]+";
-            
+
             return new Regex (regex_str, RegexOptions.Compiled);
         }
-        
+
         private static CompareInfo culture_compare_info = CultureInfo.CurrentCulture.CompareInfo;
         public static byte[] SortKey (string orig)
         {
@@ -269,7 +269,7 @@ namespace Hyena
         {
             if (input == null)
                 return "";
-            
+
             // Remove leading and trailing dots and spaces.
             input = input.Trim (escape_path_trim_chars);
 
@@ -304,19 +304,19 @@ namespace Hyena
 
             return builder.ToString ();
         }
-        
+
         public static string MaybeFallback (string input, string fallback)
         {
             string trimmed = input == null ? null : input.Trim ();
             return String.IsNullOrEmpty (trimmed) ? fallback : trimmed;
         }
-        
+
         public static uint SubstringCount (string haystack, string needle)
         {
             if (String.IsNullOrEmpty (haystack) || String.IsNullOrEmpty (needle)) {
                 return 0;
             }
-            
+
             int position = 0;
             uint count = 0;
             while (true) {
diff --git a/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs b/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs
index a03b1ac..27866ba 100644
--- a/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs
+++ b/src/Libraries/Hyena/Hyena/Tests/CryptoUtilTests.cs
@@ -44,7 +44,7 @@ namespace Hyena.Tests
             Assert.AreEqual ("", CryptoUtil.Md5Encode (null));
             Assert.AreEqual ("", CryptoUtil.Md5Encode (""));
         }
-    
+
         [Test]
         public void IsMd5Encoded ()
         {
diff --git a/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs b/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs
index bf567fe..de38010 100644
--- a/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs
+++ b/src/Libraries/Hyena/Hyena/Tests/StringUtilTests.cs
@@ -33,7 +33,7 @@ using System;
 using System.IO;
 using NUnit.Framework;
 using Hyena;
-    
+
 namespace Hyena.Tests
 {
     [TestFixture]
@@ -46,11 +46,11 @@ namespace Hyena.Tests
                 Camel = camel;
                 Under = under;
             }
-    
+
             public string Camel;
             public string Under;
         }
-    
+
         private Map [] u_to_c_maps = new Map [] {
             new Map ("Hello", "hello"),
             new Map ("HelloWorld", "hello_world"),
@@ -64,7 +64,7 @@ namespace Hyena.Tests
             new Map (null, ""),
             new Map ("H", "h")
         };
-    
+
         [Test]
         public void UnderCaseToCamelCase ()
         {
@@ -72,7 +72,7 @@ namespace Hyena.Tests
                 Assert.AreEqual (map.Camel, StringUtil.UnderCaseToCamelCase (map.Under));
             }
         }
-    
+
         private Map [] c_to_u_maps = new Map [] {
             new Map ("Hello", "hello"),
             new Map ("HelloWorld", "hello_world"),
@@ -84,7 +84,7 @@ namespace Hyena.Tests
             new Map ("", null),
             new Map ("H", "h")
         };
-    
+
         [Test]
         public void CamelCaseToUnderCase ()
         {
@@ -92,7 +92,7 @@ namespace Hyena.Tests
                 Assert.AreEqual (map.Under, StringUtil.CamelCaseToUnderCase (map.Camel));
             }
         }
-    
+
         [Test]
         public void DoubleToTenthsPrecision ()
         {
@@ -108,7 +108,7 @@ namespace Hyena.Tests
             Assert.AreEqual ("1.000,3", StringUtil.DoubleToTenthsPrecision (1000.32));
             Assert.AreEqual ("9.233",   StringUtil.DoubleToTenthsPrecision (9233));
         }
-    
+
         [Test]
         public void DoubleToPluralInt ()
         {
@@ -129,11 +129,11 @@ namespace Hyena.Tests
             Assert.AreEqual ("foobar", StringUtil.RemoveNewlines (@"foo
 bar"));
             Assert.AreEqual ("foobar baz", StringUtil.RemoveNewlines (@"foo
-bar 
+bar
 baz"));
             Assert.AreEqual ("haswindows newline andunix", StringUtil.RemoveNewlines (@"has
 windows
- newline 
+ newline
 andunix"));
         }
 
@@ -147,11 +147,11 @@ andunix"));
             Assert.AreEqual ("foobar", StringUtil.RemoveHtml ("foo<baz/>bar"));
             Assert.AreEqual ("foobar", StringUtil.RemoveHtml ("foo</baz>bar"));
             Assert.AreEqual ("foobazbar", StringUtil.RemoveHtml ("foo<a href=\"http://lkjdflkjdflkjj\";>baz</a>bar"));
-            Assert.AreEqual ("foobaz foo bar", StringUtil.RemoveHtml (@"foo<a 
+            Assert.AreEqual ("foobaz foo bar", StringUtil.RemoveHtml (@"foo<a
 href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
         }
     }
-    
+
     [TestFixture]
     public class SearchKeyTests
     {
@@ -159,14 +159,14 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
         {
             Assert.AreEqual (after, StringUtil.SearchKey (before));
         }
-        
+
         [Test]
         public void TestEmpty ()
         {
             AssertSearchKey ("", "");
             AssertSearchKey (null, null);
         }
-        
+
         // Test that resulting search keys are in lower-case
         [Test]
         public void TestLowercase ()
@@ -174,14 +174,14 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
             AssertSearchKey ("A", "a");
             AssertSearchKey ("\u0104", "a");
         }
-        
+
         // Test that combining diacritics are removed from Latin characters.
         [Test]
         public void TestRemoveDiacritics ()
         {
             AssertSearchKey ("\u00e9", "e");
             AssertSearchKey ("e\u0301", "e");
-            
+
             AssertSearchKey ("\u014d", "o");
             AssertSearchKey ("o\u0304", "o");
 
@@ -209,7 +209,7 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
             AssertSearchKey ("ż", "z");
             AssertSearchKey ("Å»", "z");
         }
-        
+
         // Test that combining diacritics are preserved, and combined, for non-Latin characters.
         [Test]
         public void TestPreserveDiacritics ()
@@ -217,7 +217,7 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
             AssertSearchKey ("\u304c", "\u304c");
             AssertSearchKey ("\u304b\u3099", "\u304c");
         }
-        
+
         // Test that some non-Latin characters are converted to Latin counterparts.
         [Test]
         public void TestEquivalents ()
@@ -225,7 +225,7 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
             AssertSearchKey ("\u00f8", "o");
             AssertSearchKey ("\u0142", "l");
         }
-        
+
         // Test that some kinds of punctuation are removed.
         [Test]
         public void TestRemovePunctuation ()
@@ -236,16 +236,16 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
             AssertSearchKey ("?", "");
             AssertSearchKey ("/", "");
         }
-        
+
         [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=573484
         public void TestCollapseSpaces ()
         {
             AssertSearchKey ("  a  \t  b  ", "a b");
             AssertSearchKey ("100 % techno", "100 techno");
-            
+
             // Character in the set of special overrides
             AssertSearchKey ("a \u00f8", "a o");
-            
+
             // Invalid combining character
             AssertSearchKey ("a \u0301", "a");
         }
@@ -263,7 +263,7 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
         {
             AssertProduces (input, input);
         }
-        
+
         [Test]
         public void TestEmpty ()
         {
@@ -293,7 +293,7 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
             AssertProduces ("Greetings! -* 你好?", "Greetings! -_ 你好_");
         }
     }
-    
+
     [TestFixture]
     public class SortKeyTests
     {
@@ -301,19 +301,19 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
         {
             Assert.AreEqual (after, StringUtil.SortKey (before));
         }
-        
+
         [Test]
         public void TestNull ()
         {
             AssertSortKey (null, null);
         }
-        
+
         [Test]
         public void TestEmpty ()
         {
             AssertSortKey ("", new byte[] {1, 1, 1, 1, 0});
         }
-        
+
         [Test]
         public void TestSortKey ()
         {
@@ -379,7 +379,7 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
                 String.Format ("foo{0}01. bar.ogg", dir_sep));
         }
     }
-    
+
     [TestFixture]
     public class SubstringCountTests
     {
@@ -387,21 +387,21 @@ href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
         {
             Assert.AreEqual (expected, StringUtil.SubstringCount (haystack, needle));
         }
-        
+
         [Test]
         public void TestEmpty ()
         {
             AssertCount ("", "a", 0);
             AssertCount ("a", "", 0);
         }
-        
+
         [Test]
         public void TestNoMatches ()
         {
             AssertCount ("a", "b", 0);
             AssertCount ("with needle in", "long needle", 0);
         }
-        
+
         [Test]
         public void TestMatches ()
         {
diff --git a/src/Libraries/Hyena/Hyena/Tests/TestBase.cs b/src/Libraries/Hyena/Hyena/Tests/TestBase.cs
index b6c3e63..3c263b6 100644
--- a/src/Libraries/Hyena/Hyena/Tests/TestBase.cs
+++ b/src/Libraries/Hyena/Hyena/Tests/TestBase.cs
@@ -44,13 +44,13 @@ namespace Hyena.Tests
     {
         public F From;
         public T To;
-    
+
         public TransformPair (F from, T to)
         {
             From = from;
             To = to;
         }
-    
+
         public static TransformPair<F, T> [] GetFrom (params object [] objects)
         {
             TransformPair<F, T> [] pairs = new TransformPair<F, T> [objects.Length / 2];
@@ -59,27 +59,27 @@ namespace Hyena.Tests
             }
             return pairs;
         }
-    
+
         public override string ToString ()
         {
             return From.ToString ();
         }
     }
-    
+
     public delegate To Transform<F, To> (F from);
-    
+
     public abstract class TestBase
     {
         private string bin_dir;
         public string BinDir {
             get { return bin_dir ?? (bin_dir = Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location)); }
         }
-        
+
         private string tests_dir;
         public string TestsDir {
             get { return tests_dir ?? (tests_dir = Path.Combine (Path.GetDirectoryName (BinDir), "tests")); }
         }
-    
+
         public static void AssertForEach<T> (IEnumerable<T> objects, Action<T> runner)
         {
             System.Text.StringBuilder sb = new System.Text.StringBuilder ();
@@ -88,11 +88,11 @@ namespace Hyena.Tests
                 catch (AssertionException e) { sb.AppendFormat ("Failed assertion on {0}: {1}\n", o, e.Message); }
                 catch (Exception e) { sb.AppendFormat ("\nCaught exception on {0}: {1}\n", o, e.ToString ()); }
             }
-    
+
             if (sb.Length > 0)
                 Assert.Fail ("\n" + sb.ToString ());
         }
-    
+
         // Fails to compile, causes SIGABRT in gmcs; boo
         /*public static void AssertTransformsEach<A, B> (IEnumerable<TransformPair<A, B>> pairs, Transform<A, B> transform)
         {
diff --git a/src/Libraries/Hyena/Hyena/Timer.cs b/src/Libraries/Hyena/Hyena/Timer.cs
index 9f4d3f3..1c83e04 100644
--- a/src/Libraries/Hyena/Hyena/Timer.cs
+++ b/src/Libraries/Hyena/Hyena/Timer.cs
@@ -38,8 +38,8 @@ namespace Hyena
         public Timer (string format, params object [] vals) : this (String.Format (format, vals))
         {
         }
-        
-        public Timer (string label) 
+
+        public Timer (string label)
         {
             this.label = label;
             start = DateTime.Now;
diff --git a/src/Libraries/Hyena/Hyena/UndoManager.cs b/src/Libraries/Hyena/Hyena/UndoManager.cs
index 60b43c7..810d4cb 100644
--- a/src/Libraries/Hyena/Hyena/UndoManager.cs
+++ b/src/Libraries/Hyena/Hyena/UndoManager.cs
@@ -53,7 +53,7 @@ namespace Hyena
                 UndoRedo(redo_stack, undo_stack, false);
             }
         }
-        
+
         public void Clear()
         {
             lock(this) {
@@ -128,7 +128,7 @@ namespace Hyena
             get { return undo_stack.Count > 0; }
         }
 
-        public bool CanRedo { 
+        public bool CanRedo {
             get { return redo_stack.Count > 0; }
         }
     }
diff --git a/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginDialog.cs b/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginDialog.cs
index d6ef79d..e6df094 100644
--- a/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginDialog.cs
+++ b/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginDialog.cs
@@ -39,67 +39,67 @@ namespace Lastfm.Gui
         private AccelGroup accel_group;
         private AccountLoginForm login_form;
         private Label message;
-    
+
         public AccountLoginDialog (Account account) : this (account, false)
         {
         }
-    
+
         public AccountLoginDialog (Account account, bool addCloseButton) : base ()
         {
             Title = Catalog.GetString ("Log in to Last.fm");
             HasSeparator = false;
             BorderWidth = 5;
-            
+
             IconName = "gtk-dialog-authentication";
-            
+
             accel_group = new AccelGroup ();
             AddAccelGroup (accel_group);
-            
+
             HBox hbox = new HBox (false, 12);
             VBox vbox = new VBox (false, 0);
             hbox.BorderWidth = 5;
             vbox.Spacing = 5;
             hbox.Show ();
             vbox.Show ();
-            
+
             Image image = new Image ();
             image.Yalign = 0.0f;
             image.IconName = "gtk-dialog-authentication";
             image.IconSize = (int)IconSize.Dialog;
             image.Show ();
-        
+
             hbox.PackStart (image, false, false, 0);
             hbox.PackStart (vbox, true, true, 0);
-        
+
             Label header = new Label ();
             header.Xalign = 0.0f;
             header.Markup = String.Format ("<big><b>{0}</b></big>", Catalog.GetString ("Last.fm Account Login"));
             header.Show ();
-            
+
             message = new Label (Catalog.GetString ("Please enter your Last.fm account credentials."));
             message.Xalign = 0.0f;
             message.Show ();
-            
+
             vbox.PackStart (header, false, false, 0);
             vbox.PackStart (message, false, false, 0);
-        
+
             login_form = new AccountLoginForm (account);
             login_form.AddSignUpButton ();
             login_form.AddAuthorizeButton ();
             login_form.Show ();
-            
+
             vbox.PackStart (login_form, true, true, 0);
-            
+
             VBox.PackStart (hbox, true, true, 0);
             VBox.Remove (ActionArea);
             VBox.Spacing = 10;
-            
+
             HBox bottom_box = new HBox ();
             bottom_box.PackStart (new Badge (account), true, true, 5);
             bottom_box.PackStart (ActionArea, false, false, 0);
             bottom_box.ShowAll ();
             VBox.PackEnd (bottom_box, false, false, 0);
-            
+
             if (addCloseButton) {
                 AddButton (Stock.Cancel, ResponseType.Cancel);
                 Button button = new Button ();
@@ -115,38 +115,38 @@ namespace Lastfm.Gui
                 AddActionWidget (button, ResponseType.Ok);
             }
         }
-        
+
         public void AddButton (string message, ResponseType response, bool isDefault)
         {
             Button button = (Button)AddButton (message, response);
-            
+
             if (isDefault) {
                 DefaultResponse = response;
-                button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Return, 
+                button.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.Return,
                     0, Gtk.AccelFlags.Visible);
             }
         }
-        
+
         public void AddSignUpButton ()
         {
             login_form.AddSignUpButton ();
         }
-        
+
         public void AddAuthorizeButton ()
         {
             login_form.AddAuthorizeButton ();
         }
-        
+
         public string Message {
             get { return message.Text; }
             set { message.Text = value; }
         }
-        
+
         public bool SaveOnEdit {
             get { return login_form.SaveOnEdit; }
             set { login_form.SaveOnEdit = value; }
         }
-        
+
         public string Username {
             get { return login_form.Username; }
         }
diff --git a/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginForm.cs b/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginForm.cs
index ddb6e43..2f9bdd2 100644
--- a/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginForm.cs
+++ b/src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginForm.cs
@@ -42,7 +42,7 @@ namespace Lastfm.Gui
         private Button authorize_button;
 
         private bool save_on_edit = false;
-        
+
         public AccountLoginForm (Account account) : base (1, 2, false)
         {
             this.account = account;
@@ -50,50 +50,50 @@ namespace Lastfm.Gui
             BorderWidth = 5;
             RowSpacing = 5;
             ColumnSpacing = 5;
-        
+
             Label username_label = new Label (Catalog.GetString ("Username:"));
             username_label.Xalign = 1.0f;
             username_label.Show ();
-            
+
             username_entry = new Entry ();
             username_entry.Show ();
-            
-            Attach (username_label, 0, 1, 0, 1, AttachOptions.Fill, 
+
+            Attach (username_label, 0, 1, 0, 1, AttachOptions.Fill,
                 AttachOptions.Shrink, 0, 0);
-            
-            Attach (username_entry, 1, 2, 0, 1, AttachOptions.Fill | AttachOptions.Expand, 
+
+            Attach (username_entry, 1, 2, 0, 1, AttachOptions.Fill | AttachOptions.Expand,
                 AttachOptions.Shrink, 0, 0);
-            
+
             username_entry.Text = account.UserName ?? String.Empty;
         }
-        
+
         protected override void OnDestroyed ()
         {
             if (save_on_edit) {
                 Save ();
             }
-            
+
             base.OnDestroyed ();
         }
-        
+
         public void AddSignUpButton ()
         {
             if (signup_button != null) {
                 return;
             }
-            
+
             Resize (2, 2);
             signup_button = new LinkButton (account.SignUpUrl, Catalog.GetString ("Sign up for Last.fm"));
             signup_button.Show ();
             Attach (signup_button, 1, 2, 1, 2, AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
         }
-        
+
         public void AddAuthorizeButton ()
         {
             if (authorize_button != null) {
                 return;
             }
-            
+
             Resize (3, 2);
             authorize_button = new Button (Catalog.GetString ("Authorize for Last.fm"));
             authorize_button.Clicked += OnAuthorize;
@@ -106,11 +106,11 @@ namespace Lastfm.Gui
             account.SessionKey = null;
             account.RequestAuthorization ();
         }
-        
+
         public void Save ()
         {
             bool is_modified = false;
-            
+
             if (account.UserName != username_entry.Text.Trim ()) {
                 account.UserName = username_entry.Text.Trim ();
                 is_modified = true;
@@ -119,7 +119,7 @@ namespace Lastfm.Gui
                 account.FetchSessionKey ();
                 is_modified = true;
             }
-            
+
             if (is_modified) {
                 account.Save ();
             }
@@ -129,7 +129,7 @@ namespace Lastfm.Gui
             get { return save_on_edit; }
             set { save_on_edit = value; }
         }
-        
+
         public string Username {
             get { return username_entry.Text; }
         }
diff --git a/src/Libraries/Lastfm.Gui/Lastfm.Gui/Badge.cs b/src/Libraries/Lastfm.Gui/Lastfm.Gui/Badge.cs
index 3245ee0..6519f28 100644
--- a/src/Libraries/Lastfm.Gui/Lastfm.Gui/Badge.cs
+++ b/src/Libraries/Lastfm.Gui/Lastfm.Gui/Badge.cs
@@ -38,10 +38,10 @@ namespace Lastfm.Gui
     {
         private static Gdk.Pixbuf pixbuf = Gdk.Pixbuf.LoadFromResource ("badge.png");
         private static Gdk.Pixbuf pixbuf_hover = Gdk.Pixbuf.LoadFromResource ("badge-hover.png");
-        
+
         private Image image;
         private bool link = true;
-        
+
         public Badge (Account account) : base (account.HomePageUrl)
         {
             image = new Image ();
@@ -49,27 +49,27 @@ namespace Lastfm.Gui
             image.Xalign = 0.0f;
             Image = image;
         }
-                
+
         protected override bool OnEnterNotifyEvent (Gdk.EventCrossing evnt)
         {
             if (link) {
                 (Image as Image).Pixbuf = pixbuf_hover;
             }
-            
+
             return base.OnEnterNotifyEvent (evnt);
         }
 
         protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
         {
             (Image as Image).Pixbuf = pixbuf;
-            
+
             return base.OnLeaveNotifyEvent (evnt);
         }
-        
+
         public static Gdk.Pixbuf Pixbuf {
             get { return pixbuf; }
         }
-        
+
         public static Gdk.Pixbuf PixbufHover {
             get { return pixbuf_hover; }
         }
diff --git a/src/Libraries/Lastfm.Gui/Test.cs b/src/Libraries/Lastfm.Gui/Test.cs
index 950ffdc..4fa815e 100644
--- a/src/Libraries/Lastfm.Gui/Test.cs
+++ b/src/Libraries/Lastfm.Gui/Test.cs
@@ -5,24 +5,24 @@
  *  Written by Aaron Bockover <aaron abock org>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -32,17 +32,17 @@ using Gtk;
 using Last.FM;
 using Last.FM.Gui;
 
-public class LastFMTest 
+public class LastFMTest
 {
 	public static void Main()
 	{
         Application.Init();
-        
+
         AccountLoginDialog dialog = new AccountLoginDialog();
         dialog.AddButton(Stock.Cancel, ResponseType.Cancel);
         dialog.AddButton(Stock.Save, ResponseType.Ok, true);
         dialog.AddSignUpButton();
-        
+
         try {
             if(dialog.Run() == (int)ResponseType.Ok) {
                 Account.LoginCommitFinished += delegate { Application.Quit(); };
diff --git a/src/Libraries/Lastfm/Lastfm.Data/DataCore.cs b/src/Libraries/Lastfm/Lastfm.Data/DataCore.cs
index beee42e..30a7b51 100644
--- a/src/Libraries/Lastfm/Lastfm.Data/DataCore.cs
+++ b/src/Libraries/Lastfm/Lastfm.Data/DataCore.cs
@@ -64,12 +64,12 @@ namespace Lastfm.Data
                 SetupCache();
             }
         }
-        
+
         public static string DownloadContent (string data_url)
         {
             return DownloadContent (data_url, CacheDuration.Infinite);
         }
-        
+
         public static string DownloadContent (string data_url, CacheDuration cache_duration)
         {
             return DownloadContent (data_url, GetCachedPathFromUrl (data_url), cache_duration);
@@ -95,20 +95,20 @@ namespace Lastfm.Data
             HttpWebRequest request = (HttpWebRequest) WebRequest.Create (data_url);
             request.UserAgent = DataCore.UserAgent;
             request.KeepAlive = false;
-            
+
             using (HttpWebResponse response = (HttpWebResponse) request.GetResponse ()) {
                 using (Stream stream = GetResponseStream (response)) {
                     using (FileStream file_stream = File.Open (cache_file, FileMode.Create)) {
                         using (BufferedStream buffered_stream = new BufferedStream (file_stream)) {
                             byte [] buffer = new byte[8192];
                             int read;
-                            
+
                             while (true) {
                                 read = stream.Read (buffer, 0, buffer.Length);
                                 if (read <= 0) {
                                     break;
                                 }
-                                
+
                                 buffered_stream.Write (buffer, 0, read);
                             }
                         }
@@ -118,7 +118,7 @@ namespace Lastfm.Data
             return cache_file;
         }
 
-        
+
         public static string GetCachedPathFromUrl (string url)
         {
             if (url == null) {
@@ -132,8 +132,8 @@ namespace Lastfm.Data
                 return String.Empty;
             }
         }
-        
-        private static Stream GetResponseStream (HttpWebResponse response) 
+
+        private static Stream GetResponseStream (HttpWebResponse response)
         {
             return response.ContentEncoding == "gzip"
                 ? new GZipInputStream (response.GetResponseStream ())
@@ -159,28 +159,28 @@ namespace Lastfm.Data
         private static void SetupCache()
         {
             bool clean = false;
-            
+
             if(!Directory.Exists(CachePath)) {
                 clean = true;
                 Directory.CreateDirectory(CachePath);
             }
-            
+
             // Create our cache subdirectories.
             for(int i = 0; i < 256; ++i) {
                 string subdir = i.ToString("x");
                 if(i < 16) {
                     subdir = "0" + subdir;
                 }
-                
+
                 subdir = System.IO.Path.Combine(CachePath, subdir);
-                
+
                 if(!Directory.Exists(subdir)) {
                     Directory.CreateDirectory(subdir);
                 }
             }
-            
+
             //RecommendationPlugin.CacheVersion.Set (CACHE_VERSION);
-            
+
             if(clean) {
                 Log.Debug("Recommendation Plugin", "Created a new cache layout");
             }
@@ -189,11 +189,11 @@ namespace Lastfm.Data
         private static void CheckForCacheWipe()
         {
             //bool wipe = false;
-            
+
             if(!Directory.Exists(CachePath)) {
                 return;
             }
-            
+
             /*if (RecommendationPlugin.CacheVersion.Get() < CACHE_VERSION) {
                 Directory.Delete(CachePath, true);
                 Log.Debug("Recommendation Plugin", "Destroyed outdated cache");
diff --git a/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs b/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs
index 69dc754..981dce2 100644
--- a/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs
+++ b/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs
@@ -63,7 +63,7 @@ namespace Lastfm.Data
             } catch (Exception) {}
             return default(T);
         }
-        
+
         protected string GetUrl (string name)
         {
             return Uri.UnescapeDataString (Get<string> (name));
@@ -217,29 +217,29 @@ namespace Lastfm.Data
     {
         public int Reach                { get { return Get<int>      ("reach"); } }
     }
-    
+
     // Album Data
-    public class AlbumData : DataEntry 
-    {            
-        public string Reach             { get { return Get<string>      ("reach"); } }            
+    public class AlbumData : DataEntry
+    {
+        public string Reach             { get { return Get<string>      ("reach"); } }
         public string LastfmUrl         { get { return Get<string>      ("url"); } }
-        public DateTime ReleaseDate     { get { return Get<DateTime>    ("releasedate"); } }        
+        public DateTime ReleaseDate     { get { return Get<DateTime>    ("releasedate"); } }
     }
-    
+
     public class AlbumCoverUrls : DataEntry
-    {        
+    {
         public string Small             { get { return Get<string>      ("small"); } }
         public string Medium            { get { return Get<string>      ("medium"); } }
-        public string Large             { get { return Get<string>      ("large"); } }        
+        public string Large             { get { return Get<string>      ("large"); } }
         public string[] AllUrls() {
             return (new string[] {Small, Medium, Large});
         }
     }
-       
+
     public class AlbumTrack : DataEntry
     {
-        public string Title             { get { return Get<string>      ("title"); } }            
+        public string Title             { get { return Get<string>      ("title"); } }
         public int Reach                { get { return Get<int>         ("reach"); } }
         public string LastfmUrl         { get { return Get<string>      ("url"); } }
-    }   
+    }
 }
diff --git a/src/Libraries/Lastfm/Lastfm.Data/LastfmAlbumData.cs b/src/Libraries/Lastfm/Lastfm.Data/LastfmAlbumData.cs
index b6fb787..7a4fc54 100644
--- a/src/Libraries/Lastfm/Lastfm.Data/LastfmAlbumData.cs
+++ b/src/Libraries/Lastfm/Lastfm.Data/LastfmAlbumData.cs
@@ -43,26 +43,26 @@ namespace Lastfm.Data
         public string Artist {
             get { return artist; }
         }
-        
+
         protected string album;
         public string Album {
             get { return album; }
         }
 
-        public LastfmAlbumData (string artist, string album) 
+        public LastfmAlbumData (string artist, string album)
         {
             this.artist = artist;
             this.album = album;
-            
+
             //Return Exception if the album is not found on Lastfm.
             try {
                 if (AlbumData != null) {
                     return;
                 }
-                } catch { throw; } 
+                } catch { throw; }
         }
 
-        
+
         protected LastfmData<T> Get<T> (string fragment) where T : DataEntry
         {
             return Get<T> (fragment, null);
@@ -72,7 +72,7 @@ namespace Lastfm.Data
         {
             //using cacheKey because the public methods all use the same fragment but with a different xpath.
             string cacheKey = fragment + xpath;
-                    
+
             if (cache.ContainsKey (cacheKey)) {
                 return (LastfmData<T>) cache [cacheKey];
             }
@@ -81,26 +81,26 @@ namespace Lastfm.Data
             cache [cacheKey] = obj;
             return obj;
         }
-        
-        
+
+
 #region Public Properties
 //      All these methods use the same fragment, but with a different xpath. This because the info.xml contains lots of different stuff.
 //      Couldn't figure out how to process it otherwise.
-        
+
         public AlbumData AlbumData {
             // We don't need the array, since there is only 1 set of albumdata for any album. Therefore "[0]".
             get { return (Get<AlbumData> ("info.xml", "/album"))[0]; }
         }
-        
+
         public LastfmData<AlbumTrack> AlbumTracks {
             get { return Get<AlbumTrack> ("info.xml", "/album/tracks/track"); }
         }
-        
+
         public AlbumCoverUrls AlbumCoverUrls {
             // We don't need the array, since there is only 1 set of covers for any album. Therefore "[0]".
             get { return (Get<AlbumCoverUrls> ("info.xml", "/album/coverart"))[0]; }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Libraries/Lastfm/Lastfm.Data/LastfmData.cs b/src/Libraries/Lastfm/Lastfm.Data/LastfmData.cs
index a12e0c4..8511ab3 100644
--- a/src/Libraries/Lastfm/Lastfm.Data/LastfmData.cs
+++ b/src/Libraries/Lastfm/Lastfm.Data/LastfmData.cs
@@ -105,7 +105,7 @@ namespace Lastfm.Data
 
             XmlReaderSettings settings = new XmlReaderSettings ();
             settings.CheckCharacters = false;
-            
+
             using (XmlReader reader = XmlReader.Create (cache_file, settings)) {
                 doc.Load (reader);
             }
diff --git a/src/Libraries/Lastfm/Lastfm/Account.cs b/src/Libraries/Lastfm/Lastfm/Account.cs
index e9e46a3..d5048b4 100644
--- a/src/Libraries/Lastfm/Lastfm/Account.cs
+++ b/src/Libraries/Lastfm/Lastfm/Account.cs
@@ -41,7 +41,7 @@ namespace Lastfm
 
         // Only used during the authentication process
         private string authentication_token;
-        
+
         private string username;
         public string UserName {
             get { return username; }
@@ -74,21 +74,21 @@ namespace Lastfm
         {
             Browser.Open (SignUpUrl);
         }
-        
+
         public void VisitUserProfile (string username)
         {
             Browser.Open (String.Format ("http://last.fm/user/{0}";, username));
         }
-        
+
         public string HomePageUrl {
             get { return "http://www.last.fm/";; }
         }
-        
+
         public void VisitHomePage ()
         {
             Browser.Open (HomePageUrl);
         }
-        
+
         public virtual void Save ()
         {
             OnUpdated ();
@@ -98,14 +98,14 @@ namespace Lastfm
         {
             LastfmRequest get_token = new LastfmRequest ("auth.getToken", RequestType.Read, ResponseFormat.Json);
             get_token.Send ();
-            
+
             var response = get_token.GetResponseObject ();
             object error_code;
             if (response.TryGetValue ("error", out error_code)) {
                 Log.WarningFormat ("Lastfm error {0} : {1}", (int)error_code, (string)response["message"]);
                 return (StationError) error_code;
             }
-            
+
             authentication_token = (string)response["token"];
             Browser.Open (String.Format ("http://www.last.fm/api/auth?api_key={0}&token={1}";, LastfmCore.ApiKey, authentication_token));
 
@@ -117,7 +117,7 @@ namespace Lastfm
             if (authentication_token == null) {
                 throw new InvalidOperationException ("RequestAuthorization should be called before calling FetchSessionKey");
             }
-            
+
             LastfmRequest get_session = new LastfmRequest ("auth.getSession", RequestType.SessionRequest, ResponseFormat.Json);
             get_session.AddParameter ("token", authentication_token);
             get_session.Send ();
@@ -127,7 +127,7 @@ namespace Lastfm
                 Log.WarningFormat ("Lastfm error {0} : {1}", (int)error_code, (string)response["message"]);
                 return (StationError) error_code;
             }
-            
+
             var session = (Hyena.Json.JsonObject)response["session"];
             UserName = (string)session["name"];
             SessionKey = (string)session["key"];
@@ -135,10 +135,10 @@ namespace Lastfm
 
             // The authentication token is only valid once, and for a limited time
             authentication_token = null;
-            
+
             return StationError.None;
         }
-        
+
         protected void OnUpdated ()
         {
             EventHandler handler = Updated;
diff --git a/src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs b/src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs
index 34d0aa3..c2908cc 100644
--- a/src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs
+++ b/src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs
@@ -65,12 +65,12 @@ namespace Lastfm
         private string post_url;
         private string session_id = null;
         private string now_playing_url;
-        
+
         private bool connected = false; /* if we're connected to network or not */
         public bool Connected {
             get { return connected; }
         }
-        
+
         private bool started = false; /* engine has started and was/is connected to AS */
         public bool Started {
             get { return started; }
@@ -81,32 +81,32 @@ namespace Lastfm
         private DateTime last_upload_failed_logged;
 
         private IQueue queue;
-        
+
         private int hard_failures = 0;
         private int hard_failure_retry_sec = 60;
-        
+
         private HttpWebRequest now_playing_post;
         private bool now_playing_started;
         private string current_now_playing_data;
         private HttpWebRequest current_web_req;
         private IAsyncResult current_async_result;
         private State state;
-        
+
         internal AudioscrobblerConnection (IQueue queue)
         {
             LastfmCore.Account.Updated += AccountUpdated;
-            
+
             state = State.Idle;
             this.queue = queue;
         }
-        
+
         private void AccountUpdated (object o, EventArgs args)
         {
             Stop ();
             session_id = null;
             Start ();
         }
-        
+
         public void UpdateNetworkState (bool connected)
         {
             Log.DebugFormat ("Audioscrobbler state: {0}", connected ? "connected" : "disconnected");
@@ -114,17 +114,17 @@ namespace Lastfm
         }
 
         public void Start ()
-        {            
+        {
             if (started) {
                 return;
             }
-            
+
             started = true;
             hard_failures = 0;
             queue.TrackAdded += delegate(object o, EventArgs args) {
                 StartTransitionHandler ();
             };
-            
+
             queue.Load ();
             StartTransitionHandler ();
         }
@@ -135,13 +135,13 @@ namespace Lastfm
                 // Don't run if we're not actually started.
                 return;
             }
-            
+
             if (timer == null) {
                 timer = new System.Timers.Timer ();
                 timer.Interval = TICK_INTERVAL;
                 timer.AutoReset = true;
                 timer.Elapsed += new ElapsedEventHandler (StateTransitionHandler);
-                
+
                 timer.Start ();
             } else if (!timer.Enabled) {
                 timer.Start ();
@@ -157,7 +157,7 @@ namespace Lastfm
             }
 
             queue.Save ();
-            
+
             started = false;
         }
 
@@ -174,18 +174,18 @@ namespace Lastfm
             if (!connected) {
                 return;
             }
-                        
+
             if ((state == State.Idle || state == State.NeedTransmit) && hard_failures > 2) {
                 state = State.NeedHandshake;
                 hard_failures = 0;
             }
-            
+
             // and address changes in our engine state
             switch (state) {
             case State.Idle:
                 if (LastfmCore.Account.UserName != null &&
                     LastfmCore.Account.SessionKey != null && session_id == null) {
-                    
+
                     state = State.NeedHandshake;
                 } else {
                     if (queue.Count > 0 && session_id != null) {
@@ -197,13 +197,13 @@ namespace Lastfm
                         StopTransitionHandler ();
                     }
                 }
-                
+
                 break;
             case State.NeedHandshake:
                 if (DateTime.Now > next_interval) {
                     Handshake ();
                 }
-                
+
                 break;
             case State.NeedTransmit:
                 if (DateTime.Now > next_interval) {
@@ -253,7 +253,7 @@ namespace Lastfm
             current_web_req.Method = "POST";
             current_web_req.ContentType = "application/x-www-form-urlencoded";
             current_web_req.ContentLength = sb.Length;
-            
+
             //Console.WriteLine ("Sending {0} ({1} bytes) to {2}", sb.ToString (), sb.Length, post_url);
 
             TransmitState ts = new TransmitState ();
@@ -267,7 +267,7 @@ namespace Lastfm
                 next_interval = DateTime.Now + new TimeSpan (0, 0, RETRY_SECONDS);
                 hard_failures++;
                 state = State.Idle;
-                
+
                 current_web_req.Abort();
             }
         }
@@ -324,14 +324,14 @@ namespace Lastfm
 
             string line;
             line = sr.ReadLine ();
-            
+
             DateTime now = DateTime.Now;
             if (line.StartsWith ("FAILED")) {
                 if (now - last_upload_failed_logged > TimeSpan.FromMinutes(FAILURE_LOG_MINUTES)) {
                     Log.Warning ("Audioscrobbler upload failed", line.Substring ("FAILED".Length).Trim(), false);
                     last_upload_failed_logged = now;
                 }
-                
+
                 // retransmit the queue on the next interval
                 hard_failures++;
                 state = State.NeedTransmit;
@@ -341,7 +341,7 @@ namespace Lastfm
                     Log.Warning ("Audioscrobbler upload failed", "session ID sent was invalid", false);
                     last_upload_failed_logged = now;
                 }
-                
+
                 // attempt to re-handshake (and retransmit) on the next interval
                 session_id = null;
                 next_interval = DateTime.Now + new TimeSpan (0, 0, RETRY_SECONDS);
@@ -353,20 +353,20 @@ namespace Lastfm
                     Log.Debug ("Audioscrobbler upload succeeded");
                     last_upload_failed_logged = DateTime.MinValue;
                 }
-                
+
                 hard_failures = 0;
-                
+
                 // we succeeded, pop the elements off our queue
                 queue.RemoveRange (0, ts.Count);
                 queue.Save ();
-                
+
                 state = State.Idle;
             } else {
                 if (now - last_upload_failed_logged > TimeSpan.FromMinutes(FAILURE_LOG_MINUTES)) {
                     Log.Warning ("Audioscrobbler upload failed", String.Format ("Unrecognized response: {0}", line), false);
                     last_upload_failed_logged = now;
                 }
-                
+
                 state = State.Idle;
             }
         }
@@ -374,18 +374,18 @@ namespace Lastfm
         //
         // Async code for handshaking
         //
-        
+
         private string UnixTime ()
         {
             return ((int) (DateTime.UtcNow - new DateTime (1970, 1, 1)).TotalSeconds).ToString ();
         }
-        
+
         private void Handshake ()
         {
             string timestamp = UnixTime();
             string authentication_token = Hyena.CryptoUtil.Md5Encode
                 (LastfmCore.ApiSecret + timestamp);
-            
+
             string api_url = LastfmCore.Account.ScrobbleUrl;
             if (String.IsNullOrEmpty (api_url)) {
                 api_url = SCROBBLER_URL;
@@ -443,12 +443,12 @@ namespace Lastfm
             line = sr.ReadLine ();
             if (line.StartsWith ("BANNED")) {
                 Log.Warning ("Audioscrobbler sign-on failed", "Player is banned", false);
-                                   
+
             } else if (line.StartsWith ("BADAUTH")) {
                 Log.Warning ("Audioscrobbler sign-on failed", Catalog.GetString ("Last.fm username is invalid or Banshee is not authorized to access you account."));
                 LastfmCore.Account.SessionKey = null;
             } else if (line.StartsWith ("BADTIME")) {
-                Log.Warning ("Audioscrobbler sign-on failed", 
+                Log.Warning ("Audioscrobbler sign-on failed",
                                                   "timestamp provided was not close enough to the current time", false);
             } else if (line.StartsWith ("FAILED")) {
                 Log.Warning ("Audioscrobbler sign-on failed",
@@ -460,13 +460,13 @@ namespace Lastfm
                 Log.Error ("Audioscrobbler sign-on failed", String.Format ("Unknown error: {0}", line.Trim()));
                 hard_failure = true;
             }
-            
+
             if (success == true) {
-                Log.Debug ("Audioscrobbler sign-on succeeded", "Session ID received"); 
+                Log.Debug ("Audioscrobbler sign-on succeeded", "Session ID received");
                 session_id = sr.ReadLine ().Trim ();
                 now_playing_url = sr.ReadLine ().Trim ();
                 post_url = sr.ReadLine ().Trim ();
-                
+
                 hard_failures = 0;
                 hard_failure_retry_sec = 60;
             } else {
@@ -480,37 +480,37 @@ namespace Lastfm
 
             state = State.Idle;
         }
-        
+
         //
         // Async code for now playing
-        
+
         public void NowPlaying (string artist, string title, string album, double duration,
                                 int tracknum)
         {
             NowPlaying (artist, title, album, duration, tracknum, "");
         }
-        
+
         public void NowPlaying (string artist, string title, string album, double duration,
                                 int tracknum, string mbrainzid)
         {
             if (String.IsNullOrEmpty(artist) || String.IsNullOrEmpty(title) || !connected) {
                 return;
             }
-        
+
             string str_track_number = String.Empty;
             if (tracknum != 0) {
                 str_track_number = tracknum.ToString();
             }
-            
+
             // Fall back to prefixing the URL with a # in case we haven't actually
             // authenticated yet. We replace it with the now_playing_url and session_id
             // later on in NowPlaying(uri).
             string dataprefix = "#";
-            
+
             if (session_id != null) {
                 dataprefix = String.Format ("s={0}", session_id);
             }
-            
+
             string data = String.Format ("{0}&a={1}&t={2}&b={3}&l={4}&n={5}&m={6}",
                                         dataprefix,
                                         HttpUtility.UrlEncode(artist),
@@ -522,13 +522,13 @@ namespace Lastfm
 
             NowPlaying (data);
         }
-        
+
         private void NowPlaying (string data)
-        {            
+        {
             if (now_playing_started) {
                 return;
             }
-            
+
             // If the URI begins with #, then we know the URI was created before we
             // had actually authenticated. So, because we didn't know the session_id and
             // now_playing_url previously, we should now, so we put that in and create our
@@ -538,9 +538,9 @@ namespace Lastfm
                                       session_id,
                                       data.Substring (1));
             }
-            
+
             current_now_playing_data = data;
-            
+
             if (session_id == null) {
                 // Go connect - we'll come back later in main timer loop.
                 Start ();
@@ -563,7 +563,7 @@ namespace Lastfm
             } catch (Exception ex) {
                 Log.Warning ("Audioscrobbler NowPlaying failed",
                                   String.Format ("Exception while creating request: {0}", ex), false);
-                
+
                 // Reset current_now_playing_data if it was the problem.
                 current_now_playing_data = null;
             }
@@ -597,7 +597,7 @@ namespace Lastfm
                 if (line == null) {
                     Log.Warning ("Audioscrobbler NowPlaying failed", "No response", false);
                 }
-                
+
                 if (line.StartsWith ("BADSESSION")) {
                     Log.Warning ("Audioscrobbler NowPlaying failed", "Session ID sent was invalid", false);
                     // attempt to re-handshake on the next interval
@@ -607,21 +607,21 @@ namespace Lastfm
                     StartTransitionHandler ();
                     return;
                 } else if (line.StartsWith ("OK")) {
-                    // NowPlaying submitted  
+                    // NowPlaying submitted
                     Log.DebugFormat ("Submitted NowPlaying track to Audioscrobbler");
                     now_playing_started = false;
                     now_playing_post = null;
                     current_now_playing_data = null;
                     return;
                 } else {
-                    Log.Warning ("Audioscrobbler NowPlaying failed", "Unexpected or no response", false);       
+                    Log.Warning ("Audioscrobbler NowPlaying failed", "Unexpected or no response", false);
                 }
             }
             catch (Exception e) {
-                Log.Warning ("Audioscrobbler NowPlaying failed", 
+                Log.Warning ("Audioscrobbler NowPlaying failed",
                     String.Format("Failed to post NowPlaying: {0}", e), false);
             }
-            
+
             // NowPlaying error/success is non-crucial.
             hard_failures++;
             if (hard_failures < 3) {
diff --git a/src/Libraries/Lastfm/Lastfm/Browser.cs b/src/Libraries/Lastfm/Lastfm/Browser.cs
index eca40f1..2fe173f 100644
--- a/src/Libraries/Lastfm/Lastfm/Browser.cs
+++ b/src/Libraries/Lastfm/Lastfm/Browser.cs
@@ -33,13 +33,13 @@ namespace Lastfm
     public static class Browser
     {
         public delegate bool OpenHandler (string uri);
-        
+
         private static OpenHandler open_handler = DefaultOpen;
         public static OpenHandler Open {
             get { return open_handler; }
             set { open_handler = value; }
         }
-        
+
         private static bool DefaultOpen (string uri)
         {
             return false;
diff --git a/src/Libraries/Lastfm/Lastfm/IQueue.cs b/src/Libraries/Lastfm/Lastfm/IQueue.cs
index 2c6edd3..58d2975 100644
--- a/src/Libraries/Lastfm/Lastfm/IQueue.cs
+++ b/src/Libraries/Lastfm/Lastfm/IQueue.cs
@@ -33,16 +33,16 @@ namespace Lastfm
     public interface IQueue
     {
         event EventHandler TrackAdded;
-        
+
         int Count {
             get;
         }
-        
+
         void Save ();
         void Load ();
-        
+
         string GetTransmitInfo (out int numtracks);
-        
+
         void Add (object track, DateTime started);
         void RemoveRange (int first, int count);
     }
diff --git a/src/Libraries/Lastfm/Lastfm/LastfmCore.cs b/src/Libraries/Lastfm/Lastfm/LastfmCore.cs
index d7b7f64..c5899e0 100644
--- a/src/Libraries/Lastfm/Lastfm/LastfmCore.cs
+++ b/src/Libraries/Lastfm/Lastfm/LastfmCore.cs
@@ -52,34 +52,34 @@ namespace Lastfm
                 if (account == null) {
                     account = new Account ();
                 }
-                
+
                 return account;
             }
         }
-        
+
         private static string user_agent;
         public static string UserAgent {
             get { return user_agent; }
             set { user_agent = value; }
         }
-        
+
         private static RadioConnection radio;
         public static RadioConnection Radio {
             get {
                 if (radio == null) {
                     radio = new RadioConnection ();
                 }
-                
+
                 return radio;
             }
         }
-        
+
         private static IQueue queue;
         public static IQueue AudioscrobblerQueue {
             get { return queue; }
             set { queue = value; }
         }
-        
+
         private static AudioscrobblerConnection audioscrobbler;
         public static AudioscrobblerConnection Audioscrobbler {
             get {
@@ -88,10 +88,10 @@ namespace Lastfm
                         throw new ApplicationException
                             ("Queue instance must be defined before referencing Audioscrobbler.");
                     }
-                    
+
                     audioscrobbler = new AudioscrobblerConnection (queue);
                 }
-                
+
                 return audioscrobbler;
             }
         }
diff --git a/src/Libraries/Lastfm/Lastfm/LastfmRequest.cs b/src/Libraries/Lastfm/Lastfm/LastfmRequest.cs
index 1f479aa..f69b5e5 100644
--- a/src/Libraries/Lastfm/Lastfm/LastfmRequest.cs
+++ b/src/Libraries/Lastfm/Lastfm/LastfmRequest.cs
@@ -50,11 +50,11 @@ namespace Lastfm
         Json,
         Raw
     }
-    
+
     public class LastfmRequest
     {
         private const string API_ROOT = "http://ws.audioscrobbler.com/2.0/";;
-        
+
         private Dictionary<string, string> parameters = new Dictionary<string, string> ();
         private Stream response_stream;
 
@@ -63,7 +63,7 @@ namespace Lastfm
 
         public LastfmRequest (string method) : this (method, RequestType.Read, ResponseFormat.Json)
         {}
-        
+
         public LastfmRequest (string method, RequestType request_type, ResponseFormat response_format)
         {
             this.method = method;
@@ -74,15 +74,15 @@ namespace Lastfm
         private string method;
         public string Method { get; set; }
 
-        
+
         private RequestType request_type;
         public RequestType RequestType { get; set; }
 
-        
+
         private ResponseFormat response_format;
         public ResponseFormat ResponseFormat { get; set; }
 
-        
+
         public void AddParameter (string param_name, string param_value)
         {
             parameters.Add (param_name, param_value);
@@ -98,7 +98,7 @@ namespace Lastfm
             if (method == null) {
                 throw new InvalidOperationException ("The method name should be set");
             }
-            
+
             if (response_format == ResponseFormat.Json) {
                 AddParameter ("format", "json");
             } else if (response_format == ResponseFormat.Raw) {
@@ -111,7 +111,7 @@ namespace Lastfm
                 response_stream = Get (BuildGetUrl ());
             }
         }
-        
+
         public JsonObject GetResponseObject ()
         {
             Deserializer deserializer = new Deserializer (response_stream);
@@ -121,19 +121,19 @@ namespace Lastfm
             if (json_obj == null) {
                 throw new ApplicationException ("Lastfm invalid response : not a JSON object");
             }
-            
+
             return json_obj;
         }
 
         public StationError GetError ()
         {
             StationError error = StationError.None;
-            
+
             string response;
             using (StreamReader sr = new StreamReader (response_stream)) {
                 response = sr.ReadToEnd ();
             }
-            
+
             if (response.Contains ("<lfm status=\"failed\">")) {
                 // XML reply indicates an error
                 Match match = Regex.Match (response, "<error code=\"(\\d+)\">");
@@ -156,13 +156,13 @@ namespace Lastfm
 
             return error;
         }
-        
+
         private string BuildGetUrl ()
         {
             if (request_type == RequestType.AuthenticatedRead) {
                 parameters.Add ("sk", LastfmCore.Account.SessionKey);
             }
-            
+
             StringBuilder url = new StringBuilder (API_ROOT);
             url.AppendFormat ("?method={0}", method);
             url.AppendFormat ("&api_key={0}", LastfmCore.ApiKey);
@@ -172,7 +172,7 @@ namespace Lastfm
             if (request_type == RequestType.AuthenticatedRead || request_type == RequestType.SessionRequest) {
                 url.AppendFormat ("&api_sig={0}", GetSignature ());
             }
-            
+
             return url.ToString ();
         }
 
@@ -190,11 +190,11 @@ namespace Lastfm
 
             return data.ToString ();
         }
-        
+
         private string GetSignature ()
         {
             SortedDictionary<string, string> sorted_params = new SortedDictionary<string, string> (parameters);
-            
+
             if (!sorted_params.ContainsKey ("api_key")) {
                 sorted_params.Add ("api_key", LastfmCore.ApiKey);
             }
@@ -210,7 +210,7 @@ namespace Lastfm
                 signature.Append (parm.Value);
             }
             signature.Append (LastfmCore.ApiSecret);
-            
+
             return Hyena.CryptoUtil.Md5Encode (signature.ToString (), Encoding.UTF8);
         }
 
@@ -235,7 +235,7 @@ namespace Lastfm
             HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
             return response.GetResponseStream ();
         }
-       
+
         private Stream Post (string uri, string data)
         {
             // Do not trust docs : it doesn't work if parameters are in the request body
diff --git a/src/Libraries/Lastfm/Lastfm/RadioConnection.cs b/src/Libraries/Lastfm/Lastfm/RadioConnection.cs
index 05a540c..a85dd16 100644
--- a/src/Libraries/Lastfm/Lastfm/RadioConnection.cs
+++ b/src/Libraries/Lastfm/Lastfm/RadioConnection.cs
@@ -91,11 +91,11 @@ namespace Lastfm
         NotEnoughMembers,
         NotEnoughFans,
         NotEnoughNeighbours,
-        
+
         Unknown // not an official code, just the fall back
     }
 
-    public class RadioConnection 
+    public class RadioConnection
     {
         public delegate void StateChangedHandler (RadioConnection connection, ConnectionStateChangedArgs args);
         public event StateChangedHandler StateChanged;
@@ -155,7 +155,7 @@ namespace Lastfm
                 State = ConnectionState.NoAccount;
                 return;
             }
-            
+
             if (LastfmCore.Account.SessionKey == null) {
                 State = ConnectionState.NotAuthorized;
                 return;
@@ -172,7 +172,7 @@ namespace Lastfm
 
         public bool Love    (string artist, string title) { return PostTrackRequest ("love", artist, title); }
         public bool Ban     (string artist, string title) { return PostTrackRequest ("ban", artist, title); }
-        
+
         public StationError ChangeStationTo (string station)
         {
             lock (this) {
@@ -180,7 +180,7 @@ namespace Lastfm
                     return StationError.None;
 
                 try {
-                    
+
                     LastfmRequest radio_tune = new LastfmRequest ("radio.tune", RequestType.Write, ResponseFormat.Json);
                     radio_tune.AddParameter ("station", station);
                     radio_tune.Send ();
@@ -198,7 +198,7 @@ namespace Lastfm
             }
         }
 
-        public Playlist LoadPlaylistFor (string station) 
+        public Playlist LoadPlaylistFor (string station)
         {
             lock (this) {
                 if (station != Station)
diff --git a/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusChangedEventArgs.cs b/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusChangedEventArgs.cs
index f97ef6a..257a133 100644
--- a/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusChangedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusChangedEventArgs.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 using Migo.TaskCore;
@@ -35,12 +35,12 @@ namespace Migo.DownloadCore
     public class DownloadGroupStatusChangedEventArgs : GroupStatusChangedEventArgs
     {
         private readonly long bytesPerSecond;
-        
-        public long BytesPerSecond 
+
+        public long BytesPerSecond
         {
             get { return bytesPerSecond; }
         }
-        
+
         public DownloadGroupStatusChangedEventArgs (int totalTasks,
                                                     int runningTasks,
                                                     int completedTasks,
@@ -51,5 +51,5 @@ namespace Migo.DownloadCore
         {
             this.bytesPerSecond = bytesPerSecond;
         }
-    }   
+    }
 }
diff --git a/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusManager.cs b/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusManager.cs
index 76b5f34..b297bf9 100644
--- a/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusManager.cs
+++ b/src/Libraries/Migo/Migo.DownloadCore/DownloadGroupStatusManager.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -30,42 +30,42 @@ using System;
 using System.Timers;
 using System.Collections.Generic;
 
-using Migo.TaskCore; 
+using Migo.TaskCore;
 
 namespace Migo.DownloadCore
 {
     public class DownloadGroupStatusManager : GroupStatusManager
     {
-        private long bytesPerSecond;    
-                
-        public DownloadGroupStatusManager () 
-            : this (0,0) {}    
-        
+        private long bytesPerSecond;
+
+        public DownloadGroupStatusManager ()
+            : this (0,0) {}
+
         public DownloadGroupStatusManager (int totalDownloads, int maxRunningDownloads)
             : base (totalDownloads, maxRunningDownloads) {}
-        
+
         public override void Reset ()
         {
             bytesPerSecond = 0;
             base.Reset ();
         }
-        
+
         public virtual void SetTransferRate (long bytesPerSecond)
         {
             if (this.bytesPerSecond != bytesPerSecond) {
-                this.bytesPerSecond = bytesPerSecond;   
+                this.bytesPerSecond = bytesPerSecond;
                 OnStatusChanged ();
             }
         }
-        
+
         protected override void OnStatusChanged ()
         {
             base.OnStatusChanged (
                 new DownloadGroupStatusChangedEventArgs (
-                    RemainingTasks, RunningTasks, 
+                    RemainingTasks, RunningTasks,
                     CompletedTasks, bytesPerSecond
                 ) as GroupStatusChangedEventArgs
-            );        
-        }            
+            );
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.DownloadCore/DownloadManager.cs b/src/Libraries/Migo/Migo.DownloadCore/DownloadManager.cs
index 25e24f6..30eb8ef 100644
--- a/src/Libraries/Migo/Migo.DownloadCore/DownloadManager.cs
+++ b/src/Libraries/Migo/Migo.DownloadCore/DownloadManager.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -60,37 +60,37 @@ namespace Migo.DownloadCore
 		
         private bool disposed;
         private string tmpDir;
-        
+
         private HttpFileDownloadGroup dg;
-        private TaskList<HttpFileDownloadTask> tasks;    
-        
+        private TaskList<HttpFileDownloadTask> tasks;
+
         public HttpFileDownloadGroup Group
         {
             get {
-                return dg;   
+                return dg;
             }
         }
-        
+
         public object SyncRoot
         {
             get {
-                return tasks.SyncRoot;   
+                return tasks.SyncRoot;
             }
         }
-        
+
         public TaskList<HttpFileDownloadTask> Tasks
         {
             get {
-                return tasks;   
+                return tasks;
             }
         }
-        
+
         public DownloadManager (int maxDownloads, string tmpDownloadDir)
         {
             if (!tmpDownloadDir.EndsWith (Convert.ToString (Path.DirectorySeparatorChar))) {
                 tmpDownloadDir += Path.DirectorySeparatorChar;
             }
-            
+
             if (!Directory.Exists (tmpDownloadDir)) {
                 try {
                     Directory.CreateDirectory (tmpDownloadDir);
@@ -101,35 +101,35 @@ namespace Migo.DownloadCore
                     ));
                 }
             }
-            
+
             tmpDir = tmpDownloadDir;
             tasks = new TaskList<HttpFileDownloadTask> ();
-            
-            dg = new HttpFileDownloadGroup (maxDownloads, tasks); 
+
+            dg = new HttpFileDownloadGroup (maxDownloads, tasks);
             dg.TaskStopped += TaskStoppedHandler;
             dg.TaskAssociated += TaskAssociatedHandler;
         }
-        
-        public HttpFileDownloadTask CreateDownloadTask (string url) 
+
+        public HttpFileDownloadTask CreateDownloadTask (string url)
         {
             return CreateDownloadTask (url, null);
         }
-        
+
         public HttpFileDownloadTask CreateDownloadTask (string url, object userState)
         {
             Uri uri;
-            
+
             if (String.IsNullOrEmpty (url)) {
                 throw new ArgumentException ("Cannot be null or empty", "url");
             } else if (!Uri.TryCreate (url, UriKind.Absolute, out uri)) {
                 throw new UriFormatException ("url:  Is not a well formed Uri.");
             }
-            
-            string[] segments = uri.Segments;        
+
+            string[] segments = uri.Segments;
             string fileName = System.Web.HttpUtility.UrlDecode (segments[segments.Length-1].Trim ('/'));
-            
+
             MD5 hasher = MD5.Create ();
-            
+
             byte[] hash = hasher.ComputeHash (
                 Encoding.UTF8.GetBytes (url)
             );
@@ -137,7 +137,7 @@ namespace Migo.DownloadCore
             string urlHash = BitConverter.ToString (hash)
                                          .Replace ("-", String.Empty)
                                          .ToLower ();
-            
+
             string remoteUri = url;
             string localPath = tmpDir + urlHash + Path.DirectorySeparatorChar + Hyena.StringUtil.EscapeFilename (fileName);
 
@@ -155,18 +155,18 @@ namespace Migo.DownloadCore
         public void Dispose ()
         {
             if (SetDisposed ()) {
-                if (dg != null) {                
+                if (dg != null) {
                     dg.StopAsync ();
                     dg.Handle.WaitOne ();
 
-                    dg.TaskStopped -= TaskStoppedHandler;       
+                    dg.TaskStopped -= TaskStoppedHandler;
                     dg.Dispose ();
                 }
-                
+
                 tasks = null;
             }
         }
-                
+
         public void QueueDownload (HttpFileDownloadTask task)
         {
             if (task == null) {
@@ -177,11 +177,11 @@ namespace Migo.DownloadCore
                 if (disposed) {
                     return;
                 }
-                
+
                 tasks.Add (task);
             }
         }
-        
+
         public void QueueDownload (IEnumerable<HttpFileDownloadTask> tasks)
         {
             if (tasks == null) {
@@ -192,10 +192,10 @@ namespace Migo.DownloadCore
                 if (disposed) {
                     return;
                 }
-                
+
                 this.tasks.AddRange (tasks);
             }
-        }        
+        }
 
         public void RemoveDownload (HttpFileDownloadTask task)
         {
@@ -207,11 +207,11 @@ namespace Migo.DownloadCore
                 if (disposed) {
                     return;
                 }
-                
+
                 tasks.Remove (task);
-            }            
+            }
         }
-        
+
         public void RemoveDownload (IEnumerable<HttpFileDownloadTask> tasks)
         {
             if (tasks == null) {
@@ -222,38 +222,38 @@ namespace Migo.DownloadCore
                 if (disposed) {
                     return;
                 }
-                
+
                 this.tasks.Remove (tasks);
-            }            
-        } 
+            }
+        }
 
         private bool SetDisposed ()
         {
             bool ret = false;
-                
+
             lock (SyncRoot) {
                 if (!disposed) {
-                    ret = disposed = true;   
+                    ret = disposed = true;
                 }
             }
-                
+
             return ret;
-        }                
-        
-        private void TaskStoppedHandler (object sender, 
-                                         TaskEventArgs<HttpFileDownloadTask> e) 
+        }
+
+        private void TaskStoppedHandler (object sender,
+                                         TaskEventArgs<HttpFileDownloadTask> e)
         {
             lock (SyncRoot) {
                 if (e.Task.IsCompleted) {
                     tasks.Remove (e.Task);                	
                 }
-            }            
+            }
         }
-        
-        private void TaskAssociatedHandler (object sender, 
+
+        private void TaskAssociatedHandler (object sender,
                                             TaskEventArgs<HttpFileDownloadTask> e)
         {
             dg.Execute ();
         }
-    }   
+    }
 }
diff --git a/src/Libraries/Migo/Migo.DownloadCore/HttpDownloadTaskErrors.cs b/src/Libraries/Migo/Migo.DownloadCore/HttpDownloadTaskErrors.cs
index 16f5cc9..2eb4b70 100644
--- a/src/Libraries/Migo/Migo.DownloadCore/HttpDownloadTaskErrors.cs
+++ b/src/Libraries/Migo/Migo.DownloadCore/HttpDownloadTaskErrors.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -30,9 +30,9 @@ namespace Migo.DownloadCore
 {
     public enum HttpFileDownloadErrors
     {
-        None = 0,   
+        None = 0,
         HttpError,
-        SharingViolation,   
+        SharingViolation,
         UnauthorizedFileAccess,
         Unknown
     }
diff --git a/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadGroup.cs b/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadGroup.cs
index 6abdc09..2bb7e8c 100644
--- a/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadGroup.cs
+++ b/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadGroup.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Timers;  // migrate to System.Threading.Timer
 using System.Threading;
@@ -43,38 +43,38 @@ namespace Migo.DownloadCore
 	{
 	    DownloadGroupStatusManager dsm;
 
-        private DateTime lastTick;	        
+        private DateTime lastTick;	
 
         private bool disposed;
         private long transferRate;
-        private long transferRatePreviously;        
+        private long transferRatePreviously;
         private long bytesThisInterval = 0;
-        
+
         private System.Timers.Timer transferTimer;
-	 
+	
 	    private Dictionary<HttpFileDownloadTask,long> transferRateDict;
-	 
+	
         public HttpFileDownloadGroup (int maxDownloads, TaskCollection<HttpFileDownloadTask> tasks)
-            : base (maxDownloads, tasks, new DownloadGroupStatusManager ()) 
-        {   
+            : base (maxDownloads, tasks, new DownloadGroupStatusManager ())
+        {
             dsm = StatusManager as DownloadGroupStatusManager;
-            
-            transferRateDict = 
+
+            transferRateDict =
                 new Dictionary<HttpFileDownloadTask,long> (dsm.MaxRunningTasks);
-            
+
             InitTransferTimer ();
         }
-        
+
         public override void Dispose ()
         {
             Dispose (null);
         }
-        
+
         public override void Dispose (AutoResetEvent handle)
         {
-            if (SetDisposed ()) {                
+            if (SetDisposed ()) {
                 if (transferTimer != null) {
-                    transferTimer.Enabled = false;            
+                    transferTimer.Enabled = false;
                     transferTimer.Elapsed -= OnTransmissionTimerElapsedHandler;
                     transferTimer.Dispose ();
                     transferTimer = null;
@@ -83,11 +83,11 @@ namespace Migo.DownloadCore
                 base.Dispose (handle);
             }
         }
-        
+
         private bool SetDisposed ()
         {
             bool ret = false;
-            
+
             lock (SyncRoot) {
                 if (!disposed) {
                     ret = disposed = true;
@@ -95,48 +95,48 @@ namespace Migo.DownloadCore
             }
 
             return ret;
-        }        
-        
+        }
+
         protected override void OnStarted ()
         {
             lock (SyncRoot) {
                 transferTimer.Enabled = true;
                 base.OnStarted ();
             }
-        }       
-     
+        }
+
         protected override void OnStopped ()
         {
             lock (SyncRoot) {
-                transferTimer.Enabled = false;   
+                transferTimer.Enabled = false;
                 base.OnStopped ();
             }
-        }        
-        
+        }
+
         protected override void OnTaskStarted (HttpFileDownloadTask task)
         {
             lock (SyncRoot) {
                 transferRateDict.Add (task, task.BytesReceived);
                 base.OnTaskStarted (task);
             }
-        }       
-     
+        }
+
         protected override void OnTaskStopped (HttpFileDownloadTask task)
         {
             lock (SyncRoot) {
                 if (transferRateDict.ContainsKey (task)) {
                     long bytesLastCheck = transferRateDict[task];
                     if (task.BytesReceived > bytesLastCheck) {
-                        bytesThisInterval += (task.BytesReceived - bytesLastCheck);                        
+                        bytesThisInterval += (task.BytesReceived - bytesLastCheck);
                     }
-  
+
                     transferRateDict.Remove (task);                	
                 }
 
                 base.OnTaskStopped (task);
             }
-        }  
-     
+        }
+
         protected virtual void SetTransferRate (long bytesPerSecond)
         {
             lock (SyncRoot) {
@@ -147,31 +147,31 @@ namespace Migo.DownloadCore
         private void InitTransferTimer ()
         {
             transferTimer = new System.Timers.Timer ();
-                
+
             transferTimer.Elapsed += OnTransmissionTimerElapsedHandler;
             transferTimer.Interval = (1500 * 1); // 1.5 seconds
             transferTimer.Enabled = false;
-        }   
+        }
 
         private long CalculateTransferRate ()
         {
             long bytesPerSecond;
-            
+
             TimeSpan duration = (DateTime.Now - lastTick);
             double secondsElapsed = duration.TotalSeconds;
 
             if ((int)secondsElapsed == 0) {
                 return 0;
             }
-            
+
             long tmpCur;
             long tmpPrev;
-            
+
             foreach (HttpFileDownloadTask dt in CurrentTasks) {
                 tmpCur = dt.BytesReceived;
                 tmpPrev = transferRateDict[dt];
                 transferRateDict[dt] = tmpCur;
-                
+
                 bytesThisInterval += (tmpCur - tmpPrev);
             }
 
@@ -180,41 +180,41 @@ namespace Migo.DownloadCore
             );
 
 
-            lastTick = DateTime.Now;                        
-            bytesThisInterval = 0;                
-            
+            lastTick = DateTime.Now;
+            bytesThisInterval = 0;
+
             return bytesPerSecond;
-        }        
+        }
 
         protected override void Reset ()
         {
-            lastTick = DateTime.Now;	        
+            lastTick = DateTime.Now;	
 
             transferRate = -1;
-            transferRatePreviously = -1;        
-            
+            transferRatePreviously = -1;
+
             base.Reset ();
         }
 
-        protected virtual void OnTransmissionTimerElapsedHandler (object source, 
+        protected virtual void OnTransmissionTimerElapsedHandler (object source,
                                                                   ElapsedEventArgs e)
-        {           
+        {
             lock (SyncRoot) {
                 UpdateTransferRate ();
             }
         }
-        
+
         protected virtual void UpdateTransferRate ()
-        {            
+        {
             transferRate = CalculateTransferRate ();
-                        
+
             if (transferRatePreviously == 0) {
                 transferRatePreviously = transferRate;
             }
-            
+
             transferRate = ((transferRate + transferRatePreviously) / 2);
-            SetTransferRate (transferRate);       
-            transferRatePreviously = transferRate;            
+            SetTransferRate (transferRate);
+            transferRatePreviously = transferRate;
         }
 	}
 }
diff --git a/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadTask.cs b/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadTask.cs
index 236ae70..d84586c 100644
--- a/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadTask.cs
+++ b/src/Libraries/Migo/Migo.DownloadCore/HttpFileDownloadTask.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.IO;
 using System.Net;
@@ -41,164 +41,164 @@ namespace Migo.DownloadCore
 	public class HttpFileDownloadTask : Task, IDisposable
 	{
 	    // Roll these into a enum
-        private bool canceled; 
+        private bool canceled;
         private bool completed;
         private bool executing;
-        private bool paused;        
+        private bool paused;
         private bool stopped;
-        
+
 	    private bool disposed;
 
         private bool preexistingFile;
-        
-        private int modified;               
+
+        private int modified;
         private int rangeError;
-        
+
         private string mimeType;
 	    private Uri remoteUri;
 	    private string localPath;
-	    
+	
         private HttpStatusCode httpStatus;
-        private HttpFileDownloadErrors error;        
-        
-	    private AsyncWebClient wc;	    
-	    private FileStream localStream;	    
-	    
+        private HttpFileDownloadErrors error;
+
+	    private AsyncWebClient wc;	
+	    private FileStream localStream;	
+	
         private ManualResetEvent mre;
-	    
+	
 	    public virtual long BytesReceived {
 	        get {
 	            long ret = 0;
-	            
+	
 	            lock (SyncRoot) {
 	                if (wc != null) {
-                        ret =  wc.Status.BytesReceived;    
+                        ret =  wc.Status.BytesReceived;
 	                }
 	            }
-	            
+	
 	            return ret;
 	        }
 	    }
-        
+
         public HttpFileDownloadErrors Error
         {
             get { return error; }
         }
-        
-        public HttpStatusCode HttpStatusCode 
+
+        public HttpStatusCode HttpStatusCode
         {
             get { return httpStatus; }
         }
-        
-        public string LocalPath 
+
+        public string LocalPath
         {
-            get { return localPath; }   
+            get { return localPath; }
         }
-                
-        public string MimeType 
+
+        public string MimeType
         {
             get { return mimeType; }
         }
-        
+
         public Uri RemoteUri
         {
-            get { return remoteUri; }   
+            get { return remoteUri; }
         }
-        
-	    public override WaitHandle WaitHandle 
+
+	    public override WaitHandle WaitHandle
 	    {
 	        get {
 	            lock (SyncRoot) {
 	                if (mre == null) {
                         mre = new ManualResetEvent (false);
 	                }
-	                
+	
 	                return mre;
 	            }
 	        }
 	    }
-	    
-	    public HttpFileDownloadTask (string remoteUri, string localPath, object userState) 
+	
+	    public HttpFileDownloadTask (string remoteUri, string localPath, object userState)
             : base (String.Empty, userState)
 	    {
 	        this.remoteUri = new Uri (remoteUri);
-	        this.localPath = localPath;	   
+	        this.localPath = localPath;	
 	    }
-	    
-	    public HttpFileDownloadTask (string remoteUri, string localPath) 
-            : this (remoteUri, localPath, null) {}   
-        
+	
+	    public HttpFileDownloadTask (string remoteUri, string localPath)
+            : this (remoteUri, localPath, null) {}
+
         private bool SetStopped ()
         {
             bool ret = false;
-            
+
             lock (SyncRoot) {
                 if (!canceled && !stopped) {
                     ret = stopped = true;
                 }
             }
-            
+
             return ret;
-        }        
-        
+        }
+
         private bool SetCanceled ()
         {
             bool ret = false;
-            
+
             lock (SyncRoot) {
                 if (!canceled && !stopped) {
                     ret = canceled = true;
                 }
             }
-            
+
             return ret;
-        }                
-        
+        }
+
         private bool SetCompleted ()
         {
-            bool ret = false;            
-            
+            bool ret = false;
+
             lock (SyncRoot) {
                 if (!completed) {
                     ret = completed = true;
-                } 
+                }
             }
-            
+
             return ret;
         }
-        
+
         protected bool SetExecuting ()
         {
             bool ret = false;
-            
+
             lock (SyncRoot) {
                 // SRSLY?  WTF!  Use an enum!
                 if (!(canceled || executing || completed || paused || stopped)) {
                     ret = executing = true;
-                    
+
                     if (mre != null) {
                         mre.Reset ();
                     }
                 }
             }
-            
+
             return ret;
         }
-        
+
         public override void CancelAsync ()
-	    { 
-            //Console.WriteLine ("CancelAsync ():  {0} - {1}", remoteUri.ToString (), Status);                
+	    {
+            //Console.WriteLine ("CancelAsync ():  {0} - {1}", remoteUri.ToString (), Status);
+
+            bool cancelLive = false;
 
-            bool cancelLive = false;                
-            
             lock (SyncRoot) {
                 if (executing) {
                     cancelLive = true;
                 }
-                    
+
                 if (SetCanceled ()) {
                     if (cancelLive) {
-                        wc.CancelAsync ();  
+                        wc.CancelAsync ();
                     } else {
                         if (SetCompleted ()) {
                             CloseLocalStream (true);
@@ -206,39 +206,39 @@ namespace Migo.DownloadCore
                             OnTaskCompleted (null, true);
                         }
                     }
-                }                
+                }
             }
 	    }
-    
+
         public void Dispose ()
         {
             lock (SyncRoot) {
                 if (!disposed) {
                     if (mre != null) {
                         mre.Close ();
-                        mre = null;                    
-                    } 
-                    
+                        mre = null;
+                    }
+
                     disposed = true;
-                }   
+                }
             }
         }
 
 	    public override void ExecuteAsync ()
 	    {
-            if (SetExecuting ()) {                            	        
-                lock (SyncRoot) {                
+            if (SetExecuting ()) {                            	
+                lock (SyncRoot) {
                     SetStatus (TaskStatus.Running);
                     ExecuteImpl ();
                 }
             }
 	    }
-	    
+	
         private void ExecuteImpl ()
         {
-            Exception err = null;     
+            Exception err = null;
             bool fileOpenError = false;
-            
+
             try {
                 OpenLocalStream ();
             } catch (UnauthorizedAccessException e) {
@@ -249,13 +249,13 @@ namespace Migo.DownloadCore
                 error = HttpFileDownloadErrors.SharingViolation; // Probably
             } catch (Exception e) {
                 err = e;
-                error = HttpFileDownloadErrors.Unknown;                
-            }   
-            
+                error = HttpFileDownloadErrors.Unknown;
+            }
+
             if (error != HttpFileDownloadErrors.None) {
                 fileOpenError = true;   	
-            }            
-            
+            }
+
             if (err == null) {
                 try {
                     InitWebClient ();
@@ -264,66 +264,66 @@ namespace Migo.DownloadCore
                     err = e;
                 }
             }
-                
+
             if (err != null) {
-                //Console.WriteLine ("DT:  {0}", err.Message);                
-                
+                //Console.WriteLine ("DT:  {0}", err.Message);
+
                 if (!fileOpenError) {
                     CloseLocalStream (true);
                 }
-    
+
                 DestroyWebClient ();
-                
+
                 SetStatus (TaskStatus.Failed);
                 OnTaskCompleted (err, false);
             }
         }
-	    
+	
 	    public override void Pause ()
 	    {
             lock (SyncRoot) {	
-                //Console.WriteLine ("Pause ():  {0} - {1}", remoteUri.ToString (), Status);                                
+                //Console.WriteLine ("Pause ():  {0} - {1}", remoteUri.ToString (), Status);
                 if (!IsCompleted && !paused) {
                     paused = true;
-                    
+
                     if (Status == TaskStatus.Running) {
-                        wc.CancelAsync ();                
+                        wc.CancelAsync ();
                     } else {
                         SetStatus (TaskStatus.Paused);
                     }
                 }
             }
 	    }
-	    
+	
 	    public override void Resume ()
 	    {
             lock (SyncRoot) {
-                //Console.WriteLine ("Resume ():  {0} - {1}", remoteUri.ToString (), Status);                                
+                //Console.WriteLine ("Resume ():  {0} - {1}", remoteUri.ToString (), Status);
                 if (Status == TaskStatus.Paused) {
                     paused = false;
                     SetStatus (TaskStatus.Ready);
                 }
             }
-	    }	    
-	    
+	    }	
+	
         public override void Stop ()
         {
-            //Console.WriteLine ("Stop ():  {0} - {1}", remoteUri.ToString (), Status);                
-                
-            bool stopLive = false;                
+            //Console.WriteLine ("Stop ():  {0} - {1}", remoteUri.ToString (), Status);
+
+            bool stopLive = false;
             TaskStatus oldStatus = TaskStatus.Ready;
-            
-            lock (SyncRoot) {                
+
+            lock (SyncRoot) {
                 if (executing) {
                     stopLive = true;
                 } else {
                     oldStatus = Status;
                     SetStatus (TaskStatus.Stopped, false);
                 }
-                
-                if (SetStopped ()) {                
+
+                if (SetStopped ()) {
                     if (stopLive) {
-                        wc.CancelAsync ();                
+                        wc.CancelAsync ();
                     } else {
                         if (SetCompleted ()) {
                             CloseLocalStream (false);
@@ -331,53 +331,53 @@ namespace Migo.DownloadCore
                             OnTaskCompleted (null, false);
                         }
                     }
-                }                   
+                }
             }
         }
-        
+
 	    private void InitWebClient ()
 	    {
             wc = new AsyncWebClient ();
-            
+
             if (localStream.Length > 0) {
                 wc.Range = Convert.ToInt32 (localStream.Length);
                 //Console.WriteLine ("Adding Range:  {0}", wc.Range);
             }
-            
+
 	        wc.Timeout = (60 * 1000);
 	        wc.DownloadFileCompleted += OnDownloadFileCompletedHandler;
 	        wc.DownloadProgressChanged += OnDownloadProgressChangedHandler;
-	        wc.ResponseReceived += OnResponseReceivedHandler;	        
+	        wc.ResponseReceived += OnResponseReceivedHandler;	
 	    }
-	    
+	
 	    private void DestroyWebClient ()
 	    {
             if (wc != null) {
                 wc.DownloadFileCompleted -= OnDownloadFileCompletedHandler;
                 wc.DownloadProgressChanged -= OnDownloadProgressChangedHandler;
                 wc.ResponseReceived -= OnResponseReceivedHandler;
-                wc = null;        	        
-            }            	    
-	    }        
-        
-        private void OpenLocalStream () 
+                wc = null;        	
+            }            	
+	    }
+
+        private void OpenLocalStream ()
         {
             if (File.Exists (localPath)) {
                 localStream = File.Open (
-                    localPath, FileMode.Append, 
+                    localPath, FileMode.Append,
                     FileAccess.Write, FileShare.None
-                );               
-                
+                );
+
                 preexistingFile = true;
             } else {
                 preexistingFile = false;
-                
+
                 if (!Directory.Exists (Path.GetDirectoryName (localPath))) {
                     Directory.CreateDirectory (Path.GetDirectoryName (localPath));
                 }
-            
+
                 localStream = File.Open (
-                    localPath, FileMode.OpenOrCreate, 
+                    localPath, FileMode.OpenOrCreate,
                     FileAccess.Write, FileShare.None
                 );
             }
@@ -388,16 +388,16 @@ namespace Migo.DownloadCore
             try {
                 if (localStream != null) {
                     localStream.Close ();
-                    localStream = null;                    
+                    localStream = null;
                 }
             } catch {}
-            
+
             if (removeFile) {
                 RemoveFile ();
             }
         }
 
-        private void RemoveFile () 
+        private void RemoveFile ()
         {
             if (File.Exists (localPath)) {
                 try {
@@ -406,58 +406,58 @@ namespace Migo.DownloadCore
                     Directory.Delete (Path.GetDirectoryName (localPath));
                 } catch {}
             }
-        }        
+        }
 
-	    private void OnDownloadFileCompletedHandler (object sender, 
+	    private void OnDownloadFileCompletedHandler (object sender,
 	                                                 AsyncCompletedEventArgs e)
 	    {
             bool retry = false;
-            
+
             lock (SyncRoot) {
                 executing = false;
-                TaskStatus newStatus = Status;               	            
-	            
-                try {                        
+                TaskStatus newStatus = Status;               	
+	
+                try {
                     if (e.Error != null) {
                         Hyena.Log.WarningFormat ("HttpDownloadTask {0} Error: {1}", this.Name, e.Error);
                         WebException we = e.Error as WebException;
-                        
+
                         if (we != null) {
                             if(we.Status == WebExceptionStatus.ProtocolError) {
-                                HttpWebResponse resp = we.Response as HttpWebResponse;                                                          
-                                
+                                HttpWebResponse resp = we.Response as HttpWebResponse;
+
                                 if (resp != null) {
                                     httpStatus = resp.StatusCode;
 
                                     // This is going to get triggered if the file on disk is complete.
-                                    // Maybe request range-1 and see if a content length of 0 is returned.                                        
-                                    if (resp.StatusCode == 
-                                        HttpStatusCode.RequestedRangeNotSatisfiable) { 
-                                        
+                                    // Maybe request range-1 and see if a content length of 0 is returned.
+                                    if (resp.StatusCode ==
+                                        HttpStatusCode.RequestedRangeNotSatisfiable) {
+
                                         if (rangeError++ == 0) {
-                                            retry = true;                                               
+                                            retry = true;
                                         }
                                     }
                                 }
                             }
                         }
-                        
+
                         if (!retry) {
-                            error = HttpFileDownloadErrors.HttpError;                            
+                            error = HttpFileDownloadErrors.HttpError;
                             newStatus = TaskStatus.Failed;
                         }
                     } else if (modified > 0) {
                         if (modified == 1) {
-                            retry = true;                                
+                            retry = true;
                         } else {
-                            newStatus = TaskStatus.Failed;                                                            
+                            newStatus = TaskStatus.Failed;
                         }
                     } else if (canceled) {
                         newStatus = TaskStatus.Cancelled;
                     } else if (paused) {
                         newStatus = TaskStatus.Paused;
                     } else if (stopped) {
-                        newStatus = TaskStatus.Stopped;                            
+                        newStatus = TaskStatus.Stopped;
                     } else {
                         newStatus = TaskStatus.Succeeded;
                     }
@@ -467,59 +467,59 @@ namespace Migo.DownloadCore
                     if (retry) {
                         CloseLocalStream (true);
                         DestroyWebClient ();
-                        ExecuteImpl ();                    
+                        ExecuteImpl ();
                     } else if (SetCompleted ()) {
                         switch (newStatus) {
-                        case TaskStatus.Cancelled: goto case TaskStatus.Failed;    
+                        case TaskStatus.Cancelled: goto case TaskStatus.Failed;
                         case TaskStatus.Failed:
                             CloseLocalStream (true);
-                            break;                            
-                        case TaskStatus.Paused: 
-                            completed = false;                            
-                            goto case TaskStatus.Succeeded;  
+                            break;
+                        case TaskStatus.Paused:
+                            completed = false;
+                            goto case TaskStatus.Succeeded;
                         case TaskStatus.Stopped: goto case TaskStatus.Succeeded;
                         case TaskStatus.Succeeded:
                             CloseLocalStream (false);
                             break;
                         default:  goto case TaskStatus.Succeeded;
                         }
-                        
+
                         DestroyWebClient ();
-                        
+
                         SetStatus (newStatus);
                         OnTaskCompleted (e.Error, canceled);
 
                         if (mre != null) {
-                            mre.Set ();   
+                            mre.Set ();
                         }
-                    }                    
+                    }
                 }
 	        }
 	    }
 
-	    private void OnDownloadProgressChangedHandler (object sender, 
+	    private void OnDownloadProgressChangedHandler (object sender,
 	                                                   MN.DownloadProgressChangedEventArgs e)
 	    {
             lock (SyncRoot) {
                 if (e.ProgressPercentage != 0) {
-                    SetProgress (e.ProgressPercentage);                    
+                    SetProgress (e.ProgressPercentage);
                 }
 	        }
-	    }	    
-	    
+	    }	
+	
         private void OnResponseReceivedHandler (object sender, EventArgs e)
         {
             lock (SyncRoot) {
                 if (wc != null && wc.ResponseHeaders != null) {
                     mimeType = wc.ResponseHeaders.Get ("Content-Type");
-                    
-                    httpStatus = wc.Response.StatusCode;                        
 
-                    if (preexistingFile && 
+                    httpStatus = wc.Response.StatusCode;
+
+                    if (preexistingFile &&
                         wc.Response.LastModified.ToUniversalTime () >
                         File.GetLastWriteTimeUtc (localPath)) {
                         ++modified;
-                        
+
                         wc.CancelAsync ();
                     }
                 }
diff --git a/src/Libraries/Migo/Migo.Net/AsyncWebClient.cs b/src/Libraries/Migo/Migo.Net/AsyncWebClient.cs
index 66b2c81..686397e 100644
--- a/src/Libraries/Migo/Migo.Net/AsyncWebClient.cs
+++ b/src/Libraries/Migo/Migo.Net/AsyncWebClient.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  AsyncWebClient.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -39,61 +39,61 @@ namespace Migo.Net
     enum DownloadType
     {
         None = 0,
-        Data = 1,    
+        Data = 1,
         File = 2,
         String = 3
     };
 
     public sealed class AsyncWebClient
-    {            
+    {
         private int range = 0;
         private int timeout = (120 * 1000); // 2 minutes
         private DateTime ifModifiedSince = DateTime.MinValue;
-        private static Regex encoding_regexp = new Regex (@"encoding=[""']([^""']+)[""']", 
+        private static Regex encoding_regexp = new Regex (@"encoding=[""']([^""']+)[""']",
                                                     RegexOptions.Compiled | RegexOptions.IgnoreCase);
-        
+
         private string fileName;
 
         private Exception error;
-        
+
         private Uri uri;
         private object userState;
         private DownloadType type;
-        
+
         private IWebProxy proxy;
         private string user_agent;
-        private Encoding encoding;                        
+        private Encoding encoding;
         private ICredentials credentials;
 
         private HttpWebRequest request;
         private HttpWebResponse response;
-        
+
         private WebHeaderCollection headers;
         private WebHeaderCollection responseHeaders;
-        
+
         private byte[] result;
         private Stream localFile;
-        private MemoryStream memoryStream;        
-        
+        private MemoryStream memoryStream;
+
         private TransferStatusManager tsm;
-        
+
         private AutoResetEvent readTimeoutHandle;
         private RegisteredWaitHandle registeredTimeoutHandle;
-        
+
         private bool busy;
         private bool completed;
         private bool cancelled;
-       
+
         private readonly object cancelBusySync = new object ();
-        
-        public event EventHandler<EventArgs> ResponseReceived;        
+
+        public event EventHandler<EventArgs> ResponseReceived;
         public event EventHandler<DownloadProgressChangedEventArgs> DownloadProgressChanged;
         public event EventHandler<TransferRateUpdatedEventArgs> TransferRateUpdated;
-            
-        public event EventHandler<AsyncCompletedEventArgs> DownloadFileCompleted;        
+
+        public event EventHandler<AsyncCompletedEventArgs> DownloadFileCompleted;
         public event EventHandler<DownloadDataCompletedEventArgs> DownloadDataCompleted;
-        public event EventHandler<DownloadStringCompletedEventArgs> DownloadStringCompleted;               
-                
+        public event EventHandler<DownloadStringCompletedEventArgs> DownloadStringCompleted;
+
         public ICredentials Credentials {
             get { return credentials; }
             set { credentials = value; }
@@ -101,7 +101,7 @@ namespace Migo.Net
 
         public Encoding Encoding {
             get { return encoding; }
-            
+
             set {
                 if (value == null) {
                     throw new ArgumentNullException ("encoding");
@@ -113,7 +113,7 @@ namespace Migo.Net
 
         public WebHeaderCollection Headers {
             get { return headers; }
-            
+
             set {
                 if (value == null) {
                     headers = new WebHeaderCollection ();
@@ -126,7 +126,7 @@ namespace Migo.Net
         public DateTime IfModifiedSince {
             get { return ifModifiedSince; }
             set { ifModifiedSince = value; }
-        }   
+        }
 
         public bool IsBusy {
             get {
@@ -135,15 +135,15 @@ namespace Migo.Net
                 }
             }
         }
-        
+
         public IWebProxy Proxy {
             get { return proxy; }
             set { proxy = value; }
         }
-        
+
         public int Range {
             get { return range; }
-            set { 
+            set {
                 if (range > -1) {
                     range = value;
                 } else {
@@ -151,32 +151,32 @@ namespace Migo.Net
                 }
             }
         }
-        
+
         public HttpWebResponse Response {
             get { return response; }
         }
-        
+
         public WebHeaderCollection ResponseHeaders {
             get { return responseHeaders; }
         }
 
-        public AsyncWebClientStatus Status {            
+        public AsyncWebClientStatus Status {
             get {
                 if (type == DownloadType.String) {
                     throw new InvalidOperationException (
                         "Status cannot be reported for string downloads"
                     );
                 }
-                
+
                 lock (tsm.SyncRoot) {
                     return new AsyncWebClientStatus (
-                        tsm.Progress, tsm.BytesReceived, 
+                        tsm.Progress, tsm.BytesReceived,
                         tsm.TotalBytes, tsm.TotalBytesReceived
                     );
                 }
             }
         }
-        
+
         public int Timeout {
             get { return timeout; }
             set {
@@ -185,26 +185,26 @@ namespace Migo.Net
                         "Value must be greater than or equal to -1"
                     );
                 }
-                
+
                 timeout = value;
             }
         }
-        
+
         private static string default_user_agent;
         public static string DefaultUserAgent {
             get { return default_user_agent; }
             set { default_user_agent = value; }
         }
-        
+
         public string UserAgent {
             get { return user_agent ?? DefaultUserAgent; }
             set { user_agent = value; }
         }
-                
+
         private bool Cancelled {
             get {
                 lock (cancelBusySync) {
-                    return cancelled; 
+                    return cancelled;
                 }
             }
         }
@@ -215,89 +215,89 @@ namespace Migo.Net
             tsm = new TransferStatusManager ();
             tsm.ProgressChanged += OnDownloadProgressChangedHandler;
         }
-            
+
         public void DownloadDataAsync (Uri address)
         {
             DownloadDataAsync (address, null);
         }
-        
+
         public void DownloadDataAsync (Uri address, object userState)
-        {            
+        {
             if (address == null) {
                 throw new ArgumentNullException ("address");
-            }            
-            
+            }
+
             SetBusy ();
             DownloadAsync (address, DownloadType.Data, userState);
         }
-        
+
         public void DownloadFileAsync (Uri address, string fileName)
         {
             DownloadFileAsync (address, fileName, null, null);
         }
-        
+
         public void DownloadFileAsync (Uri address, Stream file)
         {
             DownloadFileAsync (address, null, file, null);
         }
-        
+
         public void DownloadFileAsync (Uri address, string file, object userState)
         {
             DownloadFileAsync (address, file, null, userState);
         }
-        
+
         public void DownloadFileAsync (Uri address, Stream file, object userState)
         {
             DownloadFileAsync (address, null, file, userState);
         }
-        
-        private void DownloadFileAsync (Uri address, 
-                                        string filePath, 
-                                        Stream fileStream, 
+
+        private void DownloadFileAsync (Uri address,
+                                        string filePath,
+                                        Stream fileStream,
                                         object userState)
         {
-            if (String.IsNullOrEmpty (filePath) && 
+            if (String.IsNullOrEmpty (filePath) &&
                 fileStream == null || fileStream == Stream.Null) {
                 throw new ArgumentNullException ("file");
             } else if (address == null) {
                 throw new ArgumentNullException ("address");
             } else if (fileStream != null) {
                 if (!fileStream.CanWrite) {
-                    throw new ArgumentException ("Cannot write to stream");   
+                    throw new ArgumentException ("Cannot write to stream");
                 } else {
                     localFile = fileStream;
                 }
             } else {
                 this.fileName = filePath;
             }
-            
+
             SetBusy ();
             DownloadAsync (address, DownloadType.File, userState);
         }
-        
+
         public void DownloadStringAsync (Uri address)
         {
             DownloadStringAsync (address, null);
         }
-         
+
         public void DownloadStringAsync (Uri address, object userState)
         {
             if (address == null) {
                 throw new ArgumentNullException ("address");
             }
-            
+
             SetBusy ();
             DownloadAsync (address, DownloadType.String, userState);
         }
-                
+
         public void CancelAsync ()
         {
             CancelAsync (true);
         }
-        
+
         public void CancelAsync (bool deleteFile)
         {
-            if (SetCancelled ()) {  
+            if (SetCancelled ()) {
                 AbortDownload ();
             }
         }
@@ -306,14 +306,14 @@ namespace Migo.Net
         {
             AbortDownload (null);
         }
-        
+
         private void AbortDownload (Exception e)
         {
             error = e;
-            
+
             try {
-                HttpWebRequest req = request;                
-                
+                HttpWebRequest req = request;
+
                 if (req != null) {
                     req.Abort();
                 }
@@ -326,19 +326,19 @@ namespace Migo.Net
         {
             Completed (null);
         }
-        
+
         private void Completed (Exception e)
         {
             Exception err = (SetCompleted ()) ? e : error;
-            
+
             object statePtr = userState;
             byte[] resultPtr = result;
             bool cancelledCpy = Cancelled;
 
             CleanUp ();
-                             
+
             DownloadCompleted (resultPtr, err, cancelledCpy, statePtr);
-            
+
             Reset ();
         }
 
@@ -348,40 +348,40 @@ namespace Migo.Net
                 localFile.Close ();
                 localFile = null;
             }
-            
+
             if (memoryStream != null) {
                 memoryStream.Close ();
                 memoryStream = null;
             }
-            
+
             if (response != null) {
                 response.Close ();
                 response = null;
             }
-            
+
             result = null;
             request = null;
-            
+
             CleanUpHandles ();
         }
-        
+
         private void CleanUpHandles ()
         {
             if (registeredTimeoutHandle != null) {
                 registeredTimeoutHandle.Unregister (readTimeoutHandle);
                 readTimeoutHandle = null;
             }
-            
+
             if (readTimeoutHandle != null) {
                 readTimeoutHandle.Close ();
                 readTimeoutHandle = null;
             }
         }
 
-        private bool SetBusy () 
+        private bool SetBusy ()
         {
             bool ret = false;
-            
+
             lock (cancelBusySync) {
                 if (busy) {
                     throw new InvalidOperationException (
@@ -391,46 +391,46 @@ namespace Migo.Net
                     ret = busy = true;
                 }
             }
-            
+
             return ret;
         }
 
         private bool SetCancelled ()
         {
             bool ret = false;
-            
+
             lock (cancelBusySync) {
                 if (busy && !completed && !cancelled) {
                     ret = cancelled = true;
                 }
             }
-            
+
             return ret;
         }
-        
+
         private bool SetCompleted ()
         {
             bool ret = false;
-            
+
             lock (cancelBusySync) {
                 if (busy && !completed && !cancelled) {
                     ret = completed = true;
                 }
             }
-            
+
             return ret;
         }
 
         private void DownloadAsync (Uri uri, DownloadType type, object state)
-        {            
+        {
             this.uri = uri;
-            this.type = type;                        
+            this.type = type;
             this.userState = state;
-            
+
             ImplDownloadAsync ();
         }
-        
-        private void ImplDownloadAsync () 
+
+        private void ImplDownloadAsync ()
         {
             try {
                 tsm.Reset ();
@@ -439,9 +439,9 @@ namespace Migo.Net
                 IAsyncResult ar = request.BeginGetResponse (
                     OnResponseCallback, null
                 );
-                       
+
                 ThreadPool.RegisterWaitForSingleObject (
-                    ar.AsyncWaitHandle, 
+                    ar.AsyncWaitHandle,
                     new WaitOrTimerCallback (OnTimeout),
                     request, timeout, true
                 );
@@ -449,15 +449,15 @@ namespace Migo.Net
                 Completed (e);
             }
         }
-            
+
         private HttpWebRequest PrepRequest (Uri address)
         {
-            responseHeaders = null;        
+            responseHeaders = null;
             HttpWebRequest req = HttpWebRequest.Create (address) as HttpWebRequest;
-            
+
             req.AllowAutoRedirect = true;
             req.Credentials = credentials;
-            
+
             if (proxy != null) {
                 req.Proxy = proxy;
             }
@@ -472,26 +472,26 @@ namespace Migo.Net
                 string referer = headers ["Referer"];
                 string rangeStr = headers ["Range"];
                 string ifModifiedSince = headers ["If-Modified-Since"];
-                
+
                 if (!String.IsNullOrEmpty (rangeStr)) {
                     Int32.TryParse (rangeStr, out rangeHdr);
                 }
-                
+
                 headers.Remove ("Expect");
                 headers.Remove ("Content-Type");
                 headers.Remove ("Accept");
                 headers.Remove ("Connection");
                 headers.Remove ("Referer");
                 headers.Remove ("User-Agent");
-                headers.Remove ("Range");                
-                headers.Remove ("If-Modified-Since");                
-                
+                headers.Remove ("Range");
+                headers.Remove ("If-Modified-Since");
+
                 req.Headers = headers;
 
                 if (!String.IsNullOrEmpty (expect)) {
                     req.Expect = expect;
                 }
-                
+
                 if (!String.IsNullOrEmpty (accept)) {
                     req.Accept = accept;
                 }
@@ -515,10 +515,10 @@ namespace Migo.Net
                 if (rangeHdr > 0) {
                     req.AddRange (range);
                 }
-                
+
                 if (!String.IsNullOrEmpty (ifModifiedSince)) {
                     DateTime modDate;
-                    
+
                     if (DateTime.TryParse (ifModifiedSince, out modDate)) {
                         req.IfModifiedSince = modDate;
                     }
@@ -536,17 +536,17 @@ namespace Migo.Net
                     req.IfModifiedSince = this.ifModifiedSince;
                 }
             }
-            
-            responseHeaders = null;                       
-            
+
+            responseHeaders = null;
+
             return req;
         }
-        
+
         private void OnResponseCallback (IAsyncResult ar)
-        {    
+        {
             Exception err = null;
             bool redirect_workaround = false;
-            
+
             try {
                 response = request.EndGetResponse (ar) as HttpWebResponse;
 
@@ -557,7 +557,7 @@ namespace Migo.Net
             } catch (WebException we) {
                 if (we.Status != WebExceptionStatus.RequestCanceled) {
                     err = we;
-                    
+
                     HttpWebResponse response = we.Response as HttpWebResponse;
                     if (response != null && response.StatusCode == HttpStatusCode.BadRequest && response.ResponseUri != request.RequestUri) {
                         Hyena.Log.DebugFormat ("Identified Content-Length: 0 redirection bug for {0}; trying to get {1} directly", request.RequestUri, response.ResponseUri);
@@ -584,30 +584,30 @@ namespace Migo.Net
             if (cLength == 0) {
                 return;
             }
-            
+
             int nread = -1;
             int offset = 0;
-            
-            int length = (cLength == -1 || cLength > 8192) ? 8192 : (int) cLength;            
-            
+
+            int length = (cLength == -1 || cLength > 8192) ? 8192 : (int) cLength;
+
             Stream dest = null;
             readTimeoutHandle = new AutoResetEvent (false);
-            
+
             byte[] buffer = null;
-            
+
             bool dataDownload = false;
             bool writeToStream = false;
-            
+
             if (type != DownloadType.String) {
                 tsm.TotalBytes = cLength;
                 tsm.BytesReceivedPreviously = range;
             }
-            
+
             switch (type) {
                 case DownloadType.String:
                 case DownloadType.Data:
                     dataDownload = true;
-                    
+
                     if (cLength != -1) {
                         length = (int) cLength;
                         buffer = new byte[cLength];
@@ -618,36 +618,36 @@ namespace Migo.Net
                     }
                     break;
                 case DownloadType.File:
-                    writeToStream = true;          
+                    writeToStream = true;
                     buffer = new byte [length];
                     if (localFile == null) {
                         dest = OpenLocalFile (fileName);
                     } else {
                         dest = localFile;
                     }
-                    
+
                     break;
             }
 
             registeredTimeoutHandle = ThreadPool.RegisterWaitForSingleObject (
                 readTimeoutHandle, new WaitOrTimerCallback (OnTimeout), null, timeout, false
             );
-            
+
             IAsyncResult ar;
 
             while (nread != 0) {
-                // <hack> 
-                // Yeah, Yeah, Yeah, I'll change this later, 
+                // <hack>
+                // Yeah, Yeah, Yeah, I'll change this later,
                 // it's here to get around abort issues.
-                
+
                 ar = st.BeginRead (buffer, offset, length, null, null);
                 nread = st.EndRead (ar);
-                
-                // need an auxiliary downloader class to replace this. 
+
+                // need an auxiliary downloader class to replace this.
                 // </hack>
-                
+
                 readTimeoutHandle.Set ();
-                
+
                 if (writeToStream) {
                     dest.Write (buffer, 0, nread);
                 } else {
@@ -659,15 +659,15 @@ namespace Migo.Net
                     tsm.AddBytes (nread);
                 }
             }
-            
+
             CleanUpHandles ();
-            
+
             if (type != DownloadType.String) {
                 if (tsm.TotalBytes == -1) {
                     tsm.TotalBytes = tsm.BytesReceived;
                 }
             }
-            
+
             if (dataDownload) {
                 if (writeToStream) {
                     result = memoryStream.ToArray ();
@@ -676,24 +676,24 @@ namespace Migo.Net
                 }
             }
         }
-    
+
         private Stream OpenLocalFile (string filePath)
         {
             return File.Open (
-                filePath, FileMode.OpenOrCreate, 
+                filePath, FileMode.OpenOrCreate,
                 FileAccess.Write, FileShare.None
             );
         }
-        
+
         private MemoryStream OpenMemoryStream ()
         {
             return memoryStream = new MemoryStream ();
         }
-        
+
         private void Reset ()
         {
             lock (cancelBusySync) {
-                busy = false;          
+                busy = false;
                 cancelled = false;
                 completed = false;
                 error = null;
@@ -705,10 +705,10 @@ namespace Migo.Net
                 userState = null;
             }
         }
-        
-        private void DownloadCompleted (byte[] resultPtr, 
-                                        Exception errPtr, 
-                                        bool cancelledCpy, 
+
+        private void DownloadCompleted (byte[] resultPtr,
+                                        Exception errPtr,
+                                        bool cancelledCpy,
                                         object userStatePtr)
         {
             switch (type) {
@@ -726,7 +726,7 @@ namespace Migo.Net
                     if (resultPtr != null) {
                         try {
                             s = Encoding.GetString (resultPtr).TrimStart ();
-        
+
                             // Workaround if the string is a XML to set the encoding from it
                             if (s.StartsWith("<?xml")) {
                                 Match match = encoding_regexp.Match (s);
@@ -745,7 +745,7 @@ namespace Migo.Net
                             s = String.Empty;
                         }
                     }
-                
+
                     OnDownloadStringCompleted (
                         s ?? "", errPtr, cancelledCpy, userStatePtr
                     );
@@ -753,13 +753,13 @@ namespace Migo.Net
             }
         }
 
-        private void OnTimeout (object state, bool timedOut) 
+        private void OnTimeout (object state, bool timedOut)
         {
             if (timedOut) {
                 if (SetCompleted ()) {
                     try {
                         AbortDownload (new WebException (
-                            "The operation timed out", null, 
+                            "The operation timed out", null,
                             WebExceptionStatus.Timeout, response
                         ));
                     } finally {
@@ -772,20 +772,20 @@ namespace Migo.Net
         private void OnResponseReceived ()
         {
             EventHandler<EventArgs> handler = ResponseReceived;
-            
+
             if (handler != null) {
                 handler (this, new EventArgs ());
             }
         }
-       
-        private void OnDownloadProgressChanged (long bytesReceived, 
+
+        private void OnDownloadProgressChanged (long bytesReceived,
                                                 long BytesToReceive,
-                                                int progressPercentage, 
+                                                int progressPercentage,
                                                 object userState)
         {
             OnDownloadProgressChanged (
                 new DownloadProgressChangedEventArgs (
-                    progressPercentage, userState, 
+                    progressPercentage, userState,
                     bytesReceived, BytesToReceive
                 )
             );
@@ -793,15 +793,15 @@ namespace Migo.Net
 
         private void OnDownloadProgressChanged (DownloadProgressChangedEventArgs args)
         {
-            EventHandler <DownloadProgressChangedEventArgs> 
+            EventHandler <DownloadProgressChangedEventArgs>
                 handler = DownloadProgressChanged;
-        
+
             if (handler != null) {
                 handler (this, args);
             }
         }
 
-        private void OnDownloadProgressChangedHandler (object sender, 
+        private void OnDownloadProgressChangedHandler (object sender,
                                                        DownloadProgressChangedEventArgs e)
         {
             OnDownloadProgressChanged (
@@ -826,14 +826,14 @@ namespace Migo.Net
 
         private void OnDownloadDataCompleted (DownloadDataCompletedEventArgs args)
         {
-            EventHandler <DownloadDataCompletedEventArgs> 
+            EventHandler <DownloadDataCompletedEventArgs>
                 handler = DownloadDataCompleted;
 
             if (handler != null) {
                 handler (this, args);
             }
         }
-        
+
         private void OnDownloadFileCompleted (Exception error,
                                               bool cancelled,
                                               object userState)
@@ -845,14 +845,14 @@ namespace Migo.Net
 
         private void OnDownloadFileCompleted (AsyncCompletedEventArgs args)
         {
-            EventHandler <AsyncCompletedEventArgs> 
+            EventHandler <AsyncCompletedEventArgs>
                 handler = DownloadFileCompleted;
-        
+
             if (handler != null) {
                 handler (this, args);
             }
         }
-        
+
         private void OnDownloadStringCompleted (string resultStr,
                                                 Exception error,
                                                 bool cancelled,
@@ -867,9 +867,9 @@ namespace Migo.Net
 
         private void OnDownloadStringCompleted (DownloadStringCompletedEventArgs args)
         {
-            EventHandler <DownloadStringCompletedEventArgs> 
+            EventHandler <DownloadStringCompletedEventArgs>
                 handler = DownloadStringCompleted;
-                         
+
             if (handler != null) {
                 handler (this, args);
             }
diff --git a/src/Libraries/Migo/Migo.Net/AsyncWebClientStatus.cs b/src/Libraries/Migo/Migo.Net/AsyncWebClientStatus.cs
index 18b8de7..7b2b821 100644
--- a/src/Libraries/Migo/Migo.Net/AsyncWebClientStatus.cs
+++ b/src/Libraries/Migo/Migo.Net/AsyncWebClientStatus.cs
@@ -1,45 +1,45 @@
-/*************************************************************************** 
+/***************************************************************************
  *  AsyncWebClientStatus.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 namespace Migo.Net
 {
     public struct AsyncWebClientStatus
-    {        
-        private readonly long bytesReceived;    
+    {
+        private readonly long bytesReceived;
         private readonly int progress;
-        private readonly long totalBytes;        
+        private readonly long totalBytes;
         private readonly long totalBytesReceived;
-        
+
         public long BytesReceived
         {
             get { return bytesReceived; }
         }
-        
+
         public int Progress
         {
             get { return progress; }
@@ -53,18 +53,18 @@ namespace Migo.Net
         public long TotalBytesReceived
         {
             get { return totalBytesReceived; }
-        }        
-        
+        }
+
         public AsyncWebClientStatus (int progress,
                                      long bytesReceived,
-                                     long totalBytes,                                     
+                                     long totalBytes,
                                      long totalBytesReceived)
         {
-            this.progress = progress;        
-            this.bytesReceived = bytesReceived;        
+            this.progress = progress;
+            this.bytesReceived = bytesReceived;
             this.totalBytes = totalBytes;
             this.totalBytesReceived = totalBytesReceived;
         }
     }
 }
- 
+
diff --git a/src/Libraries/Migo/Migo.Net/EventArgs/DownloadDataCompletedEventArgs.cs b/src/Libraries/Migo/Migo.Net/EventArgs/DownloadDataCompletedEventArgs.cs
index fc43343..18bc0be 100644
--- a/src/Libraries/Migo/Migo.Net/EventArgs/DownloadDataCompletedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Net/EventArgs/DownloadDataCompletedEventArgs.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  DownloadDataCompletedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -36,15 +36,15 @@ namespace Migo.Net
         private readonly byte[] result;
 
         public byte[] Result {
-            get { 
+            get {
                 RaiseExceptionIfNecessary ();
                 return result;
             }
-        }        
-        
-        internal DownloadDataCompletedEventArgs (byte[] result, 
+        }
+
+        internal DownloadDataCompletedEventArgs (byte[] result,
                                                  Exception error,
-                                                 bool cancelled, 
+                                                 bool cancelled,
                                                  object userState
                                                  ): base (error, cancelled, userState)
         {
diff --git a/src/Libraries/Migo/Migo.Net/EventArgs/DownloadProgressChangedEventArgs.cs b/src/Libraries/Migo/Migo.Net/EventArgs/DownloadProgressChangedEventArgs.cs
index 615b249..38deed9 100644
--- a/src/Libraries/Migo/Migo.Net/EventArgs/DownloadProgressChangedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Net/EventArgs/DownloadProgressChangedEventArgs.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  DownloadProgressChangedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -35,7 +35,7 @@ namespace Migo.Net
     {
         private readonly long totalBytes;
         private readonly long bytesReceived;
-        
+
         public long BytesReceived
         {
             get { return bytesReceived; }
@@ -45,15 +45,15 @@ namespace Migo.Net
         {
             get { return totalBytes; }
         }
-        
+
         public DownloadProgressChangedEventArgs (int progressPercentage,
-                                                 object userState, 
-                                                 long bytesReceived, 
+                                                 object userState,
+                                                 long bytesReceived,
                                                  long totalBytes
                                                  ) : base (progressPercentage, userState)
         {
             this.totalBytes = totalBytes;
-            this.bytesReceived = bytesReceived;            
+            this.bytesReceived = bytesReceived;
         }
     }
 }
diff --git a/src/Libraries/Migo/Migo.Net/EventArgs/DownloadStringCompletedEventArgs.cs b/src/Libraries/Migo/Migo.Net/EventArgs/DownloadStringCompletedEventArgs.cs
index dab3d9c..192580c 100644
--- a/src/Libraries/Migo/Migo.Net/EventArgs/DownloadStringCompletedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Net/EventArgs/DownloadStringCompletedEventArgs.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  DownloadStringCompletedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -37,15 +37,15 @@ namespace Migo.Net
         private readonly string result;
 
         public string Result {
-            get { 
+            get {
                 RaiseExceptionIfNecessary ();
-                return result; 
+                return result;
             }
         }
-        
-        internal DownloadStringCompletedEventArgs (string result, 
-                                                   Exception error, 
-                                                   bool cancelled, 
+
+        internal DownloadStringCompletedEventArgs (string result,
+                                                   Exception error,
+                                                   bool cancelled,
                                                    object userState)
                                                    : base (error, cancelled, userState)
         {
diff --git a/src/Libraries/Migo/Migo.Net/EventArgs/TransferRateUpdatedEventArgs.cs b/src/Libraries/Migo/Migo.Net/EventArgs/TransferRateUpdatedEventArgs.cs
index 6bd454d..73cc9b4 100644
--- a/src/Libraries/Migo/Migo.Net/EventArgs/TransferRateUpdatedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Net/EventArgs/TransferRateUpdatedEventArgs.cs
@@ -1,47 +1,47 @@
-/*************************************************************************** 
+/***************************************************************************
  *  TransferRateUpdatedEventArgs.cs
- *  
+ *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
- 
-namespace Migo.Net 
+
+namespace Migo.Net
 {
     public class TransferRateUpdatedEventArgs : EventArgs
     {
         // bytes per second
         private readonly int transferRate;
-        
+
         public int TransferRate {
             get { return transferRate; }
         }
-    
+
         public TransferRateUpdatedEventArgs (int transferRate)
         {
             this.transferRate = transferRate;
         }
-    }   
+    }
 }
diff --git a/src/Libraries/Migo/Migo.Net/Exceptions/RemoteFileModifiedException.cs b/src/Libraries/Migo/Migo.Net/Exceptions/RemoteFileModifiedException.cs
index 312ad21..bf62505 100644
--- a/src/Libraries/Migo/Migo.Net/Exceptions/RemoteFileModifiedException.cs
+++ b/src/Libraries/Migo/Migo.Net/Exceptions/RemoteFileModifiedException.cs
@@ -1,32 +1,32 @@
-/*************************************************************************** 
+/***************************************************************************
  *  RemoteFileModifiedException.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
-using System; 
+using System;
 
 namespace Migo.Net
 {
@@ -34,7 +34,7 @@ namespace Migo.Net
     {
         private readonly DateTime localFileMod;
         private readonly DateTime remoteFileMod;
-        
+
         public DateTime LocalFileModified {
             get { return remoteFileMod; }
         }
@@ -42,17 +42,17 @@ namespace Migo.Net
         public DateTime RemoteFileModified {
             get { return localFileMod; }
         }
-        
+
         public RemoteFileModifiedException (string message,
-                                            DateTime localFileMod, 
-                                            DateTime remoteFileMod) 
+                                            DateTime localFileMod,
+                                            DateTime remoteFileMod)
                                             : base (message)
         {
             this.localFileMod = localFileMod;
             this.remoteFileMod = remoteFileMod;
         }
-        
-        public RemoteFileModifiedException (string message) 
+
+        public RemoteFileModifiedException (string message)
             : this (message, DateTime.MinValue, DateTime.MinValue) {}
     }
 }
diff --git a/src/Libraries/Migo/Migo.Net/TransferStatusManager.cs b/src/Libraries/Migo/Migo.Net/TransferStatusManager.cs
index e898661..0def0cc 100644
--- a/src/Libraries/Migo/Migo.Net/TransferStatusManager.cs
+++ b/src/Libraries/Migo/Migo.Net/TransferStatusManager.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  TransferStatusManager.cs
- *  
+ *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -39,18 +39,18 @@ namespace Migo.Net
 
         private long bytesReceived;
         private long bytesReceivedPreviously;
-        
-        private long totalBytes = -1;        
-        
+
+        private long totalBytes = -1;
+
         private readonly object progressSync = new object ();
-        
+
         public event EventHandler<DownloadProgressChangedEventArgs> ProgressChanged;
-        
+
         public long BytesReceived {
             get { return bytesReceived; }
             set { SetBytesReceived (value); }
         }
-        
+
         public long BytesReceivedPreviously {
             get { return bytesReceivedPreviously; }
             set {
@@ -59,18 +59,18 @@ namespace Migo.Net
                         "BytesReceivedPreviously", "Must be > 0"
                     );
                 }
-                
-                bytesReceivedPreviously = value; 
+
+                bytesReceivedPreviously = value;
             }
         }
-        
+
         public int Progress {
             get { return progress; }
         }
 
         public object SyncRoot {
             get { return progressSync; }
-        }        
+        }
 
         public long TotalBytesReceived {
             get { return bytesReceived + bytesReceivedPreviously; }
@@ -78,16 +78,16 @@ namespace Migo.Net
 
         public long TotalBytes {
             get { return totalBytes; }
-            set { 
+            set {
                 SetTotalBytes (value);
             }
         }
-    
+
         public TransferStatusManager ()
         {
             Reset ();
         }
-        
+
         public void AddBytes (long bytes)
         {
             if (bytes < 0) {
@@ -95,28 +95,28 @@ namespace Migo.Net
                     "bytes cannot be less than 0"
                 );
             }
-            
+
             lock (progressSync) {
                 bytesReceived += bytes;
                 progressThisStep += bytes;
             }
-            
-            UpdateProgress ();            
+
+            UpdateProgress ();
         }
 
         public void Reset ()
         {
             lock (progressSync) {
                 progress = 0;
-                
+
                 progressStep = 0;
                 progressThisStep = 0;
 
-                totalBytes = -1;        
+                totalBytes = -1;
                 bytesReceived = 0;
-                bytesReceivedPreviously = 0;                
+                bytesReceivedPreviously = 0;
             }
-            
+
             UpdateProgress ();
         }
 
@@ -126,8 +126,8 @@ namespace Migo.Net
                 throw new ArgumentOutOfRangeException (
                     "bytesReceived cannot be less than 0"
                 );
-            } 
-            
+            }
+
             lock (progressSync) {
                 if (totalBytes > -1 &&
                     totalBytes < bytesReceived) {
@@ -135,38 +135,38 @@ namespace Migo.Net
                         "bytesReceived cannot be greater than TotalBytes"
                     );
                 }
-                
+
                 progressThisStep = 0;
                 this.bytesReceived = bytesReceived;
             }
-            
-            UpdateProgress ();                
+
+            UpdateProgress ();
         }
-        
+
         private void SetTotalBytes (long totalBytes)
         {
             bool update = false;
-        
+
             if (totalBytes < -1 || totalBytes == 0) {
                 throw new ArgumentOutOfRangeException (
                     "totalBytes cannot be less than -1 or equal to 0"
                 );
-            } 
-            
+            }
+
             lock (progressSync) {
                 if (totalBytes != -1 && totalBytes < bytesReceived) {
                     throw new ArgumentOutOfRangeException (
                         "totalBytes cannot be less than bytesReceived"
                     );
-                }             
-            
+                }
+
                 if (this.totalBytes != totalBytes) {
-                    this.totalBytes = totalBytes; 
+                    this.totalBytes = totalBytes;
                     progressStep = (totalBytes / 100);
                     update = true;
                 }
             }
-            
+
             if (update) {
                 UpdateProgress ();
             }
@@ -175,29 +175,29 @@ namespace Migo.Net
         private void UpdateProgress ()
         {
             DownloadProgressChangedEventArgs args = null;
-            
+
             lock (progressSync) {
                 long totalBytesReceived = TotalBytesReceived;
-            
-                if (progressThisStep >= progressStep || 
+
+                if (progressThisStep >= progressStep ||
                     totalBytesReceived == totalBytes &&
                     (totalBytes > 0 && progress != 100)) {
-                                          
+
                     progress = Convert.ToInt32 (
                         (totalBytesReceived * 100) / totalBytes
                     );
-                        
+
                     if (progress >= 0) {
                         args = new DownloadProgressChangedEventArgs (
-                            progress, null,                    
+                            progress, null,
                             totalBytesReceived, totalBytes
                         );
                     }
-                        
-                    progressThisStep = 0;                            
-                }        
+
+                    progressThisStep = 0;
+                }
             }
-            
+
             if (args != null) {
                 OnProgressChanged (args);
             }
@@ -205,15 +205,15 @@ namespace Migo.Net
 
         private void OnProgressChanged (DownloadProgressChangedEventArgs args)
         {
-            EventHandler <DownloadProgressChangedEventArgs> 
+            EventHandler <DownloadProgressChangedEventArgs>
                 handler = ProgressChanged;
-        
-            try 
+
+            try
             {
                 if (handler != null) {
                     handler (this, args);
                 }
             } catch {}
-        }         
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.Syndication/EnclosureManager.cs b/src/Libraries/Migo/Migo.Syndication/EnclosureManager.cs
index e346084..0e44b1f 100644
--- a/src/Libraries/Migo/Migo.Syndication/EnclosureManager.cs
+++ b/src/Libraries/Migo/Migo.Syndication/EnclosureManager.cs
@@ -50,26 +50,26 @@ namespace Migo.Syndication
         private bool disposed;
         private readonly object sync = new object ();
         private ManualResetEvent download_handle;
-        
-        public event EventHandler<TaskEventArgs<HttpFileDownloadTask>> EnclosureDownloadCompleted;   
-    
+
+        public event EventHandler<TaskEventArgs<HttpFileDownloadTask>> EnclosureDownloadCompleted;
+
         public EnclosureManager (DownloadManager downloadManager)
         {
             download_manager = downloadManager;
             download_manager.Tasks.TaskAdded += OnDownloadTaskAdded;
-            download_manager.Tasks.TaskRemoved += OnDownloadTaskRemoved;            
+            download_manager.Tasks.TaskRemoved += OnDownloadTaskRemoved;
             download_manager.Group.TaskStatusChanged += OnDownloadTaskStatusChangedHandler;
 
             queued_downloads = new Dictionary<FeedEnclosure, HttpFileDownloadTask> ();
-            
+
             download_handle = new ManualResetEvent (true);
         }
-        
+
         public void Dispose (AutoResetEvent disposeHandle)
         {
-            
+
             disposed = true;
-            
+
             List<HttpFileDownloadTask> tasks = null;
 
             lock (sync) {
@@ -85,124 +85,124 @@ namespace Migo.Syndication
 
                 download_handle.WaitOne ();
             }
-            
+
             if (download_handle != null) {
                 download_handle.Close ();
                 download_handle = null;
-            }                   
-            
+            }
+
             if (download_manager != null) {
                 download_manager.Tasks.TaskAdded -= OnDownloadTaskAdded;
-                download_manager.Tasks.TaskRemoved -= OnDownloadTaskRemoved; 
+                download_manager.Tasks.TaskRemoved -= OnDownloadTaskRemoved;
                 download_manager = null;
-            }  
+            }
         }
 
-        public HttpFileDownloadTask QueueDownload (FeedEnclosure enclosure) 
+        public HttpFileDownloadTask QueueDownload (FeedEnclosure enclosure)
         {
-            return QueueDownload (enclosure, true);         
+            return QueueDownload (enclosure, true);
         }
-           
+
         public HttpFileDownloadTask QueueDownload (FeedEnclosure enclosure, bool queue)
         {
             if (enclosure == null) {
                 throw new ArgumentNullException ("enc");
             }
-            
-            HttpFileDownloadTask task = null;       
-            
+
+            HttpFileDownloadTask task = null;
+
             lock (sync) {
                 if (disposed) {
                     return null;
                 }
-                
-                if (!queued_downloads.ContainsKey (enclosure)) {                    
-                    Feed parentFeed = enclosure.Item.Feed;                    
-                    
-                    if (parentFeed != null) {                        
+
+                if (!queued_downloads.ContainsKey (enclosure)) {
+                    Feed parentFeed = enclosure.Item.Feed;
+
+                    if (parentFeed != null) {
                         task = download_manager.CreateDownloadTask (enclosure.Url, enclosure);
                         //Console.WriteLine ("Task DL path:  {0}", task.LocalPath);
                         task.Name = String.Format ("{0} - {1}", parentFeed.Title, enclosure.Item.Title);
-                        
+
                         //task.StatusChanged
-                        task.Completed += OnDownloadTaskCompletedHandler;                    
-                        
+                        task.Completed += OnDownloadTaskCompletedHandler;
+
                         // Race condition...
-                        // Should only be added when the task is associated or 
+                        // Should only be added when the task is associated or
                         // it can be canceled before it is added to the progress manager.
-                        
-                        // Add a pre-association dict and move tasks to the 
+
+                        // Add a pre-association dict and move tasks to the
                         // queued dict once they've been offically added.
-                        
+
                         queued_downloads.Add (enclosure, task);
-                    }                    
+                    }
                 }
 
                 if (task != null && queue) {
                     download_manager.QueueDownload (task);
                 }
             }
-                       
-            return task;        
+
+            return task;
         }
-        
+
         public IEnumerable<HttpFileDownloadTask> QueueDownloads (IEnumerable<FeedEnclosure> encs)
         {
             if (encs == null) {
                 throw new ArgumentNullException ("encs");
             }
-            
+
             ICollection<HttpFileDownloadTask> encsCol = encs as ICollection<HttpFileDownloadTask>;
-            
+
             List<HttpFileDownloadTask> tasks = (encsCol == null) ?
-                new List<HttpFileDownloadTask> () : 
+                new List<HttpFileDownloadTask> () :
                 new List<HttpFileDownloadTask> (encsCol.Count);
-            
+
             HttpFileDownloadTask tmpTask = null;
-            
-            lock (sync) {   
+
+            lock (sync) {
                 if (disposed) {
                     return tasks;
                 }
-                
+
                 foreach (FeedEnclosure enc in encs) {
                     tmpTask = QueueDownload (enc, false);
                     if (tmpTask != null) {
                         tasks.Add (tmpTask);
-                    }    
+                    }
                 }
-                
+
                 if (tasks.Count > 0) {
                     download_manager.QueueDownload (tasks);
                 }
             }
-            
+
             return tasks;
         }
-       
+
         public void CancelDownload (FeedEnclosure enc)
         {
             lock (sync) {
-                HttpFileDownloadTask task = FindDownloadTask (enc);            
-                        
+                HttpFileDownloadTask task = FindDownloadTask (enc);
+
                 if (task != null) {
-                    // Look into multi-cancel later      
+                    // Look into multi-cancel later
                     task.CancelAsync ();
-                }            
+                }
             }
         }
-        
+
         public void StopDownload (FeedEnclosure enc)
-        {   
+        {
             lock (sync) {
-                HttpFileDownloadTask task = FindDownloadTask (enc);            
-                        
+                HttpFileDownloadTask task = FindDownloadTask (enc);
+
                 if (task != null) {
                     task.Stop ();
-                }   
+                }
             }
-        }  
-        
+        }
+
         /*private void OnFeedItemRemoved (Feed feed, FeedItem item)
         {
             if (feed == null) {
@@ -211,23 +211,23 @@ namespace Migo.Syndication
                 throw new ArgumentNullException ("item");
             }
 
-            EventHandler<FeedItemEventArgs> handler = FeedItemRemoved;            
-            
+            EventHandler<FeedItemEventArgs> handler = FeedItemRemoved;
+
             if (item.Enclosure != null) {
                 lock (sync) {
-                    HttpFileDownloadTask task;                
-                         
+                    HttpFileDownloadTask task;
+
                     if (queued_downloads.TryGetValue ((FeedEnclosure)item.Enclosure, out task)) {
                         task.CancelAsync ();
                     }
                 }
-            }            
-            
+            }
+
             if (handler != null) {
                 OnFeedItemEvent (handler, new FeedItemEventArgs (feed, item));
-            }                 
+            }
         }
-        
+
         private void OnFeedItemsRemoved (Feed feed, IEnumerable<FeedItem> items)
         {
             if (feed == null) {
@@ -235,94 +235,94 @@ namespace Migo.Syndication
             } else if (items == null) {
                 throw new ArgumentNullException ("items");
             }
-            
+
             EventHandler<FeedItemEventArgs> handler = FeedItemRemoved;
 
             lock (sync) {
-                HttpFileDownloadTask task;  
-                
-                foreach (FeedItem item in items) {                
-                    if (item.Enclosure != null) {                    
+                HttpFileDownloadTask task;
+
+                foreach (FeedItem item in items) {
+                    if (item.Enclosure != null) {
                         if (queued_downloads.TryGetValue ((FeedEnclosure)item.Enclosure, out task)) {
                             task.CancelAsync ();
                         }
                     }
                 }
             }
-            
+
             if (handler != null) {
                 OnFeedItemEvent (handler, new FeedItemEventArgs (feed, items));
-            }               
+            }
         } */
-        
+
         private HttpFileDownloadTask FindDownloadTask (FeedEnclosure enc)
         {
             if (enc == null) {
                 throw new ArgumentNullException ("enc");
             }
-            
+
             return FindDownloadTaskImpl ((FeedEnclosure)enc);
         }
-        
-        private HttpFileDownloadTask FindDownloadTaskImpl (FeedEnclosure enc) 
+
+        private HttpFileDownloadTask FindDownloadTaskImpl (FeedEnclosure enc)
         {
             HttpFileDownloadTask task = null;
-            Feed parentFeed = enc.Item.Feed as Feed;                               
-            
+            Feed parentFeed = enc.Item.Feed as Feed;
+
             if (parentFeed != null && queued_downloads.ContainsKey (enc)) {
                 task = queued_downloads[enc];
             }
-            
+
             return task;
-        }     
-        
+        }
+
         private void TaskAddedAction (HttpFileDownloadTask task)
         {
             Feed parentFeed = null;
             FeedEnclosure enc = task.UserState as FeedEnclosure;
-                    
+
             if (enc != null) {
-                lock (sync) { 
-                    parentFeed = enc.Item.Feed;                  
-                    
+                lock (sync) {
+                    parentFeed = enc.Item.Feed;
+
                     if (parentFeed != null && queued_downloads.ContainsKey (enc)) {
                         if (queued_downloads.Count == 0) {
                             download_handle.Reset ();
-                        }                        
+                        }
 
-                        enc.DownloadStatus = FeedDownloadStatus.Pending;                       
-                        //parentFeed.IncrementQueuedDownloadCount ();                    
+                        enc.DownloadStatus = FeedDownloadStatus.Pending;
+                        //parentFeed.IncrementQueuedDownloadCount ();
                     }
                 }
-            }        
+            }
         }
-        
+
         private void OnDownloadTaskAdded (object sender, TaskAddedEventArgs<HttpFileDownloadTask> e)
         {
             if (e.Task != null) {
                 TaskAddedAction (e.Task);
             } else if (e.Tasks != null) {
                 foreach (HttpFileDownloadTask task in e.Tasks) {
-                    TaskAddedAction (task);                                    
+                    TaskAddedAction (task);
                 }
             }
         }
-        
+
         private void OnDownloadTaskCompletedHandler (object sender, TaskCompletedEventArgs args)
         {
             HttpFileDownloadTask task = sender as HttpFileDownloadTask;
             FeedEnclosure enc = task.UserState as FeedEnclosure;
 
-            if (enc != null) {   
+            if (enc != null) {
                 if (args.Error != null || task.Status == TaskStatus.Failed) {
                     enc.DownloadStatus = FeedDownloadStatus.DownloadFailed;
                 } else if (!args.Cancelled) {
                     if (task.Status == TaskStatus.Succeeded) {
-                        try {                        
+                        try {
                             enc.SetFileImpl (
-                                task.RemoteUri.ToString (), 
-                                Path.GetDirectoryName (task.LocalPath), 
-                                task.MimeType, 
+                                task.RemoteUri.ToString (),
+                                Path.GetDirectoryName (task.LocalPath),
+                                task.MimeType,
                                 Path.GetFileName (task.LocalPath)
                             );
                         } catch (Exception e) {
@@ -334,35 +334,35 @@ namespace Migo.Syndication
                     }
                 }
             }
-            
-            OnEnclosureDownloadCompleted (task);            
+
+            OnEnclosureDownloadCompleted (task);
         }
-        
+
         private void OnEnclosureDownloadCompleted (HttpFileDownloadTask task)
         {
             /*EventHandler<TaskEventArgs<HttpFileDownloadTask>> handler = EnclosureDownloadCompleted;
-        
+
             if (handler != null) {
                 AsyncCommandQueue<ICommand> cmdQCpy = command_queue;
-                
+
                 if (cmdQCpy != null) {
                     cmdQCpy.Register (new EventWrapper<TaskEventArgs<HttpFileDownloadTask>> (
                 	    handler, this, new TaskEventArgs<HttpFileDownloadTask> (task))
                 	);
-                }        
-            }   */                      
-        }  
-        
+                }
+            }   */
+        }
+
         private void DownloadTaskRemoved (FeedEnclosure enc, HttpFileDownloadTask task, bool decQueuedCount)
         {
             if (queued_downloads.ContainsKey (enc)) {
-                queued_downloads.Remove (enc);    
-                task.Completed -= OnDownloadTaskCompletedHandler;                                            
-                
+                queued_downloads.Remove (enc);
+                task.Completed -= OnDownloadTaskCompletedHandler;
+
                 if (decQueuedCount) {
                     //enc.Item.Feed.DecrementQueuedDownloadCount ();
                 }
-                
+
                 if (queued_downloads.Count == 0) {
                 	if (download_handle != null) {
                 	    download_handle.Set ();
@@ -370,12 +370,12 @@ namespace Migo.Syndication
                 }
             }
         }
-        
+
         private void OnDownloadTaskRemoved (object sender, TaskRemovedEventArgs<HttpFileDownloadTask> e)
         {
             if (e.Task != null) {
                 FeedEnclosure enc = e.Task.UserState as FeedEnclosure;
-                    
+
                 if (enc != null) {
                     lock (sync) {
                         DownloadTaskRemoved (enc, e.Task, true);
@@ -385,48 +385,48 @@ namespace Migo.Syndication
                 Feed tmpParent = null;
                 FeedEnclosure tmpEnclosure = null;
                 List<FeedEnclosure> tmpList = null;
-                
+
                 Dictionary<Feed, List<FeedEnclosure>> feedDict =
                     new Dictionary<Feed,List<FeedEnclosure>> ();
-                
+
                 lock (sync) {
                     foreach (HttpFileDownloadTask t in e.Tasks) {
                         tmpEnclosure = t.UserState as FeedEnclosure;
-                        
+
                         if (tmpEnclosure != null) {
                             tmpParent = tmpEnclosure.Item.Feed;
-                            
+
                             if (!feedDict.TryGetValue (tmpParent, out tmpList)) {
                                 tmpList = new List<FeedEnclosure> ();
-                                feedDict.Add (tmpParent, tmpList);  
+                                feedDict.Add (tmpParent, tmpList);
                             }
-                            
+
                             tmpList.Add (tmpEnclosure);
                             DownloadTaskRemoved (tmpEnclosure, t, false);
                         }
                     }
-                    
+
                     //foreach (KeyValuePair<Feed,List<FeedEnclosure>> kvp in feedDict) {
                         //kvp.Key.DecrementQueuedDownloadCount (kvp.Value.Count);
                     //}
                 }
-            }                       
-        }        
+            }
+        }
 
         private void TaskStatusChanged (TaskStatusChangedInfo statusInfo)
         {
             HttpFileDownloadTask task = statusInfo.Task as HttpFileDownloadTask;
-            
+
             if (task == null) {
                 return;
             }
-            
+
             FeedEnclosure enc = task.UserState as FeedEnclosure;
-            
+
             if (enc == null) {
                 return;
             }
-               
+
             switch (statusInfo.NewStatus) {
             case TaskStatus.Stopped:
             case TaskStatus.Cancelled:
@@ -435,7 +435,7 @@ namespace Migo.Syndication
             case TaskStatus.Failed:
                 enc.DownloadStatus = FeedDownloadStatus.DownloadFailed;
                 break;
-            case TaskStatus.Paused: 
+            case TaskStatus.Paused:
                 enc.DownloadStatus = FeedDownloadStatus.Paused;
                 break;
             case TaskStatus.Ready:
@@ -443,16 +443,16 @@ namespace Migo.Syndication
                 break;
             case TaskStatus.Running:
                 enc.DownloadStatus = FeedDownloadStatus.Downloading;
-                //enc.Item.Feed.IncrementActiveDownloadCount ();                    
+                //enc.Item.Feed.IncrementActiveDownloadCount ();
                 break;
             case TaskStatus.Succeeded:
                 break;
             }
-            
+
             FeedsManager.Instance.FeedManager.OnItemChanged (enc.Item);
 
             if (statusInfo.OldStatus == TaskStatus.Running) {
-                //enc.Item.Feed.DecrementActiveDownloadCount ();                    
+                //enc.Item.Feed.DecrementActiveDownloadCount ();
             }
         }
 
@@ -465,9 +465,9 @@ namespace Migo.Syndication
             } else {
                 lock (sync) {
                     foreach (TaskStatusChangedInfo statusInfo in e.StatusesChanged) {
-                        TaskStatusChanged (statusInfo);                        
+                        TaskStatusChanged (statusInfo);
                     }
-                }                
+                }
             }
         }
     }
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS.cs
index 212da3b..3c84635 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_ITEM_COUNT_FLAGS.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_ITEM_COUNT_FLAGS.cs
index 7c9deec..612f409 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_ITEM_COUNT_FLAGS.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FEEDS_EVENTS_ITEM_COUNT_FLAGS.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_EVENTS_ITEM_COUNT_FLAGS.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncAction.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncAction.cs
index f4dda46..769285a 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncAction.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncAction.cs
@@ -1,32 +1,32 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_BACKGROUNDSYNC_ACTION.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
- namespace Migo.Syndication 
+
+ namespace Migo.Syndication
  {
     public enum FeedBackgroundSyncAction : int
     {
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncStatus.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncStatus.cs
index a1b1592..6c2a6cd 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncStatus.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedBackgroundSyncStatus.cs
@@ -1,34 +1,34 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_BACKGROUNDSYNC_STATUS.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
- namespace Migo.Syndication 
+ namespace Migo.Syndication
  {
-    public enum FeedBackgroundSyncStatus : int 
+    public enum FeedBackgroundSyncStatus : int
     {
         Disabled = 0,
         Enabled = 1
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadError.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadError.cs
index 4ade23f..50a516d 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadError.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadError.cs
@@ -1,32 +1,32 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_DOWNLOAD_ERROR.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
- namespace Migo.Syndication 
+
+ namespace Migo.Syndication
  {
     public enum FeedDownloadError : int
     {
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadStatus.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadStatus.cs
index bc9740b..706f01a 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadStatus.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedDownloadStatus.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_DOWNLOAD_STATUS.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedSyncSetting.cs b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedSyncSetting.cs
index c5b43d6..b3e6c1d 100644
--- a/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedSyncSetting.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Enumerations/FeedSyncSetting.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FEEDS_SYNC_SETTING.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -32,6 +32,6 @@ namespace Migo.Syndication
     {
         Default = 0,
         Interval = 1,
-        Manual = 2      
+        Manual = 2
     };
 }
diff --git a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCompletedEventArgs.cs b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCompletedEventArgs.cs
index 318c5f4..1d5d7c7 100644
--- a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCompletedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCompletedEventArgs.cs
@@ -1,52 +1,52 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FeedDownloadCompletedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 using System;
 
 namespace Migo.Syndication
-{    
+{
     public class FeedDownloadCompletedEventArgs : FeedEventArgs
     {
         private readonly FeedDownloadError error;
-        
+
         public FeedDownloadError Error
         {
-            get { return error; }   
+            get { return error; }
         }
-        
-        public FeedDownloadCompletedEventArgs (Feed feed, 
-                                               FeedDownloadError error) : base (feed) 
+
+        public FeedDownloadCompletedEventArgs (Feed feed,
+                                               FeedDownloadError error) : base (feed)
         {
             if (error < FeedDownloadError.None ||
                 error > FeedDownloadError.DownloadSizeLimitExceeded) {
             	throw new ArgumentException ("error:  Value out of range");            	
             }
-            
+
             this.error = error;
         }
     }
diff --git a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCountChangedEventArgs.cs b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCountChangedEventArgs.cs
index cee7422..6f84058 100644
--- a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCountChangedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedDownloadCountChangedEventArgs.cs
@@ -1,44 +1,44 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FeedDownloadCountChangedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 namespace Migo.Syndication
-{    
+{
     public class FeedDownloadCountChangedEventArgs : FeedEventArgs
     {
         private readonly FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS flags;
-        
+
         public FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS Flags
         {
-            get { return flags; }   
+            get { return flags; }
         }
-        
-        public FeedDownloadCountChangedEventArgs (Feed feed, 
-                                                  FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS flags) : base (feed) 
+
+        public FeedDownloadCountChangedEventArgs (Feed feed,
+                                                  FEEDS_EVENTS_DOWNLOAD_COUNT_FLAGS flags) : base (feed)
         {
             this.flags = flags;
         }
diff --git a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedEventArgs.cs b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedEventArgs.cs
index f9feeec..7dd477e 100644
--- a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedEventArgs.cs
@@ -1,48 +1,48 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FeedAddedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 using System;
 
 namespace Migo.Syndication
-{    
+{
     public class FeedEventArgs : EventArgs
     {
         private readonly Feed feed;
         public Feed Feed {
-            get { return feed; }   
+            get { return feed; }
         }
-        
-        public FeedEventArgs (Feed feed) 
+
+        public FeedEventArgs (Feed feed)
         {
             if (feed == null) {
             	throw new ArgumentNullException ("feed");
             }
-            
+
             this.feed = feed;
         }
     }
diff --git a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemCountChangedEventArgs.cs b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemCountChangedEventArgs.cs
index 4694c20..d47dde6 100644
--- a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemCountChangedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemCountChangedEventArgs.cs
@@ -1,46 +1,46 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FeedItemCountChangedEventArgs.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 using System;
 
 namespace Migo.Syndication
-{    
+{
     public class FeedItemCountChangedEventArgs : FeedEventArgs
     {
         private readonly FEEDS_EVENTS_ITEM_COUNT_FLAGS flags;
-        
+
         public FEEDS_EVENTS_ITEM_COUNT_FLAGS Flags
         {
-            get { return flags; }   
+            get { return flags; }
         }
-        
-        public FeedItemCountChangedEventArgs (Feed feed, 
-                                              FEEDS_EVENTS_ITEM_COUNT_FLAGS flags) : base (feed) 
+
+        public FeedItemCountChangedEventArgs (Feed feed,
+                                              FEEDS_EVENTS_ITEM_COUNT_FLAGS flags) : base (feed)
         {
             this.flags = flags;
         }
diff --git a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs
index e85364d..7f37cfa 100644
--- a/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs
+++ b/src/Libraries/Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs
@@ -5,40 +5,40 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections.Generic;
 
 namespace Migo.Syndication
-{    
+{
     public class FeedItemEventArgs
     {
         private readonly IEnumerable<FeedItem> items;
 
         public IEnumerable<FeedItem> Items {
-            get { return items; }   
+            get { return items; }
         }
-        
+
         public FeedItemEventArgs (Feed feed, IEnumerable<FeedItem> items)
         {
             this.items = items;
diff --git a/src/Libraries/Migo/Migo.Syndication/Feed.cs b/src/Libraries/Migo/Migo.Syndication/Feed.cs
index 9da25e5..9b93636 100644
--- a/src/Libraries/Migo/Migo.Syndication/Feed.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Feed.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  Feed.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -46,7 +46,7 @@ using Migo.DownloadCore;
 
 namespace Migo.Syndication
 {
-    public enum FeedAutoDownload : int 
+    public enum FeedAutoDownload : int
     {
         All = 0,
         One = 1,
@@ -56,26 +56,26 @@ namespace Migo.Syndication
     // TODO remove this, way too redundant with DownloadStatus
     public enum PodcastFeedActivity : int {
         Updating = 0,
-        UpdatePending = 1,        
+        UpdatePending = 1,
         UpdateFailed = 2,
-        ItemsDownloading = 4,        
-        ItemsQueued = 5,        
-        None = 6        
+        ItemsDownloading = 4,
+        ItemsQueued = 5,
+        None = 6
     }
-    
+
     public class FeedProvider : MigoModelProvider<Feed>
     {
         public FeedProvider (HyenaSqliteConnection connection) : base (connection, "PodcastSyndications")
         {
         }
-        
+
         protected override void CreateTable ()
         {
             base.CreateTable ();
-            
+
             CreateIndex ("PodcastSyndicationsIndex", "IsSubscribed, Title");
         }
-        
+
         protected override int ModelVersion {
             get { return 3; }
         }
@@ -87,7 +87,7 @@ namespace Migo.Syndication
             if (old_version < 2) {
                 Connection.Execute (String.Format ("UPDATE {0} SET IsSubscribed=1", TableName));
             }
-            
+
             if (old_version < 3) {
                 CreateIndex ("PodcastSyndicationsIndex", "IsSubscribed, Title");
             }
@@ -100,7 +100,7 @@ namespace Migo.Syndication
         public static FeedProvider Provider {
             get { return provider; }
         }
-        
+
         public static void Init () {
             provider = new FeedProvider (FeedsManager.Instance.Connection);
         }
@@ -111,13 +111,13 @@ namespace Migo.Syndication
         }
 
         //private bool canceled;
-        //private bool deleted; 
+        //private bool deleted;
         //private bool updating;
-        
+
         //private ManualResetEvent updatingHandle = new ManualResetEvent (true);
-        
+
         private readonly object sync = new object ();
-        
+
         private string copyright;
         private string description;
         private string image_url;
@@ -135,23 +135,23 @@ namespace Migo.Syndication
         private string title;
         private string url;
         private string keywords, category;
-        
+
 #region Database-bound Properties
 
         [DatabaseColumn ("FeedID", Constraints = DatabaseColumnConstraints.PrimaryKey)]
-        public override long DbId { 
+        public override long DbId {
             get { return dbid; }
             protected set { dbid = value; }
         }
-        
+
         [DatabaseColumn]
         public string Title {
             get { return title ?? Catalog.GetString ("Unknown Podcast"); }
             set { title = value; }
         }
-        
+
         [DatabaseColumn]
-        public string Description { 
+        public string Description {
             get { return description; }
             set { description = value; }
         }
@@ -161,25 +161,25 @@ namespace Migo.Syndication
             get { return url; }
             set { url = value; }
         }
-        
+
         [DatabaseColumn]
         public string Keywords {
             get { return keywords; }
             set { keywords = value; }
         }
-        
+
         [DatabaseColumn]
         public string Category {
             get { return category; }
             set { category = value; }
         }
-        
+
         [DatabaseColumn]
-        public string Copyright { 
+        public string Copyright {
             get { return copyright; }
             set { copyright = value; }
         }
-        
+
         [DatabaseColumn]
         public string ImageUrl {
             get { return image_url; }
@@ -187,35 +187,35 @@ namespace Migo.Syndication
         }
 
         [DatabaseColumn]
-        public int UpdatePeriodMinutes { 
+        public int UpdatePeriodMinutes {
             get { return update_period_minutes; }
-            set { update_period_minutes = value; } 
+            set { update_period_minutes = value; }
         }
-        
+
         [DatabaseColumn]
-        public string Language { 
+        public string Language {
             get { return language; }
             set { language = value; }
         }
 
         [DatabaseColumn]
-        public FeedDownloadError LastDownloadError { 
+        public FeedDownloadError LastDownloadError {
             get { return lastDownloadError; }
             set { lastDownloadError = value; }
         }
-        
+
         [DatabaseColumn]
-        public DateTime LastDownloadTime { 
+        public DateTime LastDownloadTime {
             get { return last_download_time; }
             set { last_download_time = value; }
         }
-        
+
         [DatabaseColumn]
-        public string Link { 
+        public string Link {
             get { return link; }
             set { link = value; }
         }
-        
+
         //[DatabaseColumn]
         public string LocalEnclosurePath {
             get {
@@ -230,32 +230,32 @@ namespace Migo.Syndication
             get { return maxItemCount; }
             set { maxItemCount = value; }
         }
-        
+
         [DatabaseColumn]
         public DateTime PubDate {
             get { return pubDate; }
             set { pubDate = value; }
         }
-        
+
         [DatabaseColumn]
         public DateTime LastBuildDate {
             get { return last_build_date; }
             set { last_build_date = value; }
         }
-        
+
         /*private DateTime last_downloaded;
         [DatabaseColumn]
         public DateTime LastDownloaded {
             get { return last_downloaded; }
             set { last_downloaded = value; }
         }*/
-        
+
         [DatabaseColumn]
 		public FeedSyncSetting SyncSetting {
             get { return syncSetting; }
             set { syncSetting = value; }
         }
-        
+
         [DatabaseColumn]
         protected DateTime last_auto_download = DateTime.MinValue;
         public DateTime LastAutoDownload {
@@ -275,47 +275,47 @@ namespace Migo.Syndication
                 CheckForItemsToDownload ();
             }
         }
-        
+
         [DatabaseColumn("DownloadStatus")]
         private FeedDownloadStatus download_status;
-        public FeedDownloadStatus DownloadStatus { 
+        public FeedDownloadStatus DownloadStatus {
             get { return download_status; }
             set { download_status = value; }
         }
-        
+
         [DatabaseColumn("IsSubscribed")]
         private bool is_subscribed;
         public bool IsSubscribed {
             get { return is_subscribed; }
             set { is_subscribed = value; }
         }
-        
+
 #endregion
 
-#region Other Properties  
+#region Other Properties
 
         // TODO remove this, way too redundant with DownloadStatus
         /*public PodcastFeedActivity Activity {
             get { return activity; }
-            
+
                 PodcastFeedActivity ret = PodcastFeedActivity.None;
-                
+
                 if (this == All) {
                     return ret;
                 }
-                
+
                 switch (DownloadStatus) {
-                case FeedDownloadStatus.Pending: 
+                case FeedDownloadStatus.Pending:
                     ret = PodcastFeedActivity.UpdatePending;
                     break;
-                case FeedDownloadStatus.Downloading: 
+                case FeedDownloadStatus.Downloading:
                     ret = PodcastFeedActivity.Updating;
-                    break;    
-                case FeedDownloadStatus.DownloadFailed: 
+                    break;
+                case FeedDownloadStatus.DownloadFailed:
                     ret = PodcastFeedActivity.UpdateFailed;
-                    break;                         
+                    break;
                 }
-                
+
                 if (ret != PodcastFeedActivity.Updating) {
                     if (ActiveDownloadCount > 0) {
                         ret = PodcastFeedActivity.ItemsDownloading;
@@ -327,11 +327,11 @@ namespace Migo.Syndication
                 return ret;
             }
         }*/
-        
+
         public IEnumerable<FeedItem> Items {
             get {
                 if (DbId > 0) {
-                    foreach (FeedItem item in 
+                    foreach (FeedItem item in
                         FeedItem.Provider.FetchAllMatching (String.Format ("{0}.FeedID = {1} ORDER BY {0}.PubDate DESC", FeedItem.Provider.TableName, DbId)))
                     {
                         yield return item;
@@ -339,7 +339,7 @@ namespace Migo.Syndication
                 }
             }
         }
-        
+
 #endregion
 
         private static FeedManager Manager {
@@ -357,50 +357,50 @@ namespace Migo.Syndication
         public Feed ()
         {
         }
-        
+
 #endregion
 
 #region Internal Methods
-       
+
         // Removing a FeedItem means removing the downloaded file.
         /*public void Remove (FeedItem item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-            
-           
+
+
                 if (items.Remove (item)) {
                     inactive_items.Add (item);
                     OnFeedItemRemoved (item);
                 }
             }
         }*/
-        
+
         /*public void Remove (IEnumerable<FeedItem> itms)
         {
                 if (removedItems.Count > 0) {
                     OnItemsChanged ();
-                }     
+                }
             }
         }*/
-        
+
 #endregion
 
 #region Private Methods
-        
+
         public void SetItems (IEnumerable<FeedItem> items)
         {
             bool added_any = false;
             foreach (FeedItem item in items) {
                 added_any |= AddItem (item);
             }
-            
+
             if (added_any) {
                CheckForItemsToDownload ();
             }
         }
-        
+
         private bool AddItem (FeedItem item)
         {
             try {
@@ -414,21 +414,21 @@ namespace Migo.Syndication
             }
             return false;
         }
-        
+
         /*private void UpdateItems (IEnumerable<FeedItem> new_items)
         {
-            ICollection<FeedItem> tmpNew = null;         
+            ICollection<FeedItem> tmpNew = null;
             List<FeedItem> zombies = new List<FeedItem> ();
-         
+
             if (items.Count == 0 && inactive_items.Count == 0) {
                 tmpNew = new List<FeedItem> (new_items);
             } else {
                 // Get remote items that aren't in the items list
                 tmpNew = Diff (items, new_items);
-                
+
                 // Of those, remove the ones that are in our inactive list
                 tmpNew = Diff (inactive_items, tmpNew);
-                
+
                 // Get a list of inactive items that aren't in the remote list any longer
                 ICollection<FeedItem> doubleKilledZombies = Diff (
                     new_items, inactive_items
@@ -437,47 +437,47 @@ namespace Migo.Syndication
                 foreach (FeedItem zombie in doubleKilledZombies) {
                     inactive_items.Remove (zombie);
                 }
-                
-                zombies.AddRange (doubleKilledZombies);                    
-                
+
+                zombies.AddRange (doubleKilledZombies);
+
                 foreach (FeedItem fi in Diff (new_items, items)) {
                     if (fi.Enclosure != null &&
                         !String.IsNullOrEmpty (fi.Enclosure.LocalPath)) {
-                        // A hack for the podcast plugin, keeps downloaded items 
+                        // A hack for the podcast plugin, keeps downloaded items
                         // from being deleted when they are no longer in the feed.
                         continue;
                     }
-                    
+
                     zombies.Add (fi);
                 }
             }
-            
+
             if (tmpNew.Count > 0) {
-                Add (tmpNew);                
+                Add (tmpNew);
             }
-            
+
             // TODO merge...should we really be deleting these items?
             if (zombies.Count > 0) {
                 foreach (FeedItem item in zombies) {
                     if (item.Active) {
-                        zombie.Delete ();                        
-                    } 
+                        zombie.Delete ();
+                    }
                 }
-                
+
                 // TODO merge
                 //ItemsTableManager.Delete (zombies);
             }
-        }    
+        }
 
         // Written before LINQ, will update.
-        private ICollection<FeedItem> Diff (IEnumerable<FeedItem> baseSet, 
+        private ICollection<FeedItem> Diff (IEnumerable<FeedItem> baseSet,
                                             IEnumerable<FeedItem> overlay) {
             bool found;
             List<FeedItem> diff = new List<FeedItem> ();
-            
+
             foreach (FeedItem opi in overlay) {
                 found = false;
-                
+
                 foreach (FeedItem bpi in baseSet) {
                     if (opi.Title == bpi.Title &&
                         opi.Description == bpi.Description) {
@@ -486,14 +486,14 @@ namespace Migo.Syndication
                     }
                 }
 
-                if (!found) {  
+                if (!found) {
                     diff.Add (opi);
                 }
             }
 
             return diff;
         }*/
-        
+
 #endregion
 
 #region Public Methods
@@ -507,17 +507,17 @@ namespace Migo.Syndication
         public void Delete ()
         {
             Delete (true);
-            Manager.OnFeedsChanged ();                    
+            Manager.OnFeedsChanged ();
         }
-            
+
         public void Delete (bool deleteEnclosures)
         {
             lock (sync) {
                 //if (deleted)
                 //    return;
-                
+
                 //if (updating) {
-                //    Manager.CancelUpdate (this);                 
+                //    Manager.CancelUpdate (this);
                 //}
 
                 foreach (FeedItem item in Items) {
@@ -526,7 +526,7 @@ namespace Migo.Syndication
 
                 Provider.Delete (this);
             }
-            
+
             //updatingHandle.WaitOne ();
             Manager.OnFeedsChanged ();
         }
@@ -542,7 +542,7 @@ namespace Migo.Syndication
 
         public override string ToString ()
         {
-            return String.Format ("Title:  {0} - Url:  {1}", Title, Url);   
+            return String.Format ("Title:  {0} - Url:  {1}", Title, Url);
         }
 
         public void Save ()
@@ -553,7 +553,7 @@ namespace Migo.Syndication
         public void Save (bool notify)
         {
             Provider.Save (this);
-            
+
             if (LastBuildDate > LastAutoDownload) {
                 CheckForItemsToDownload ();
             }
@@ -562,17 +562,17 @@ namespace Migo.Syndication
                 Manager.OnFeedsChanged ();
             }
         }
-        
+
         private void CheckForItemsToDownload ()
         {
             if (LastDownloadError != FeedDownloadError.None || AutoDownload == FeedAutoDownload.None)
                 return;
-                
+
             bool only_first = (AutoDownload == FeedAutoDownload.One);
-            
+
             bool any = false;
             foreach (FeedItem item in Items) {
-                if (item.Enclosure != null && item.Active && 
+                if (item.Enclosure != null && item.Active &&
                     item.Enclosure.DownloadStatus != FeedDownloadStatus.Downloaded && item.PubDate > LastAutoDownload)
                 {
                     item.Enclosure.AsyncDownload ();
@@ -581,7 +581,7 @@ namespace Migo.Syndication
                         break;
                 }
             }
-            
+
             if (any) {
                 LastAutoDownload = DateTime.Now;
                 Save ();
@@ -591,15 +591,15 @@ namespace Migo.Syndication
         /*private bool SetCanceled ()
         {
             bool ret = false;
-            
+
             if (!canceled && updating) {
                 ret = canceled = true;
             }
-            
+
             return ret;
         }*/
-        
-#endregion  
+
+#endregion
 
     }
-}    
+}
diff --git a/src/Libraries/Migo/Migo.Syndication/FeedEnclosure.cs b/src/Libraries/Migo/Migo.Syndication/FeedEnclosure.cs
index 98baa5a..9fa2130 100644
--- a/src/Libraries/Migo/Migo.Syndication/FeedEnclosure.cs
+++ b/src/Libraries/Migo/Migo.Syndication/FeedEnclosure.cs
@@ -42,36 +42,36 @@ namespace Migo.Syndication
         public static SqliteModelProvider<FeedEnclosure> Provider {
             get { return provider; }
         }
-        
+
         public static void Init () {
             provider = new MigoModelProvider<FeedEnclosure> (FeedsManager.Instance.Connection, "PodcastEnclosures");
         }
-        
+
         private string mimetype;
-        private FeedDownloadStatus download_status;        
+        private FeedDownloadStatus download_status;
         private FeedDownloadError last_download_error;
         private long file_size;
         private TimeSpan duration;
         private string keywords;
-        
+
         private string local_path;
         private FeedItem item;
         private string url;
-        
+
         private readonly object sync = new object ();
-        
+
 #region Constructors
 
         public FeedEnclosure ()
         {
         }
-        
+
 #endregion
 
 #region Public Properties
 
-        public FeedItem Item { 
-            get { return item ?? (item = FeedItem.Provider.FetchSingle (item_id)); } 
+        public FeedItem Item {
+            get { return item ?? (item = FeedItem.Provider.FetchSingle (item_id)); }
             internal set {
                 item = value;
                 if (item != null && item.DbId > 0) {
@@ -92,21 +92,21 @@ namespace Migo.Syndication
         }
 
 #region Public Methods
-        
+
         public void Save (bool save_item)
         {
             Provider.Save (this);
-            
+
             if (save_item) {
                 Item.Save ();
             }
         }
-        
+
         public void Save ()
         {
             Save (true);
         }
-        
+
         public void Delete (bool and_delete_file)
         {
             if (and_delete_file) {
@@ -114,14 +114,14 @@ namespace Migo.Syndication
             }
             Provider.Delete (this);
         }
-        
+
         public void AsyncDownload ()
         {
             if (DownloadedAt == DateTime.MinValue && DownloadStatus == FeedDownloadStatus.None) {
                 Manager.QueueDownload (this);
             }
         }
-        
+
         public void CancelAsyncDownload ()
         {
             Manager.CancelDownload (this);
@@ -131,7 +131,7 @@ namespace Migo.Syndication
         {
             Manager.StopDownload (this);
         }
-        
+
         // Deletes file associated with enclosure.
         // Does not cancel an active download like the WRP.
         public void DeleteFile ()
@@ -144,7 +144,7 @@ namespace Migo.Syndication
                         Directory.Delete (Path.GetDirectoryName (local_path));
                     } catch {}
                 }
-                
+
                 LocalPath = null;
                 DownloadStatus = FeedDownloadStatus.None;
                 LastDownloadError = FeedDownloadError.None;
@@ -161,17 +161,17 @@ namespace Migo.Syndication
             string tmpLocalPath;
             string fullPath = path;
             string localEnclosurePath = Item.Feed.LocalEnclosurePath;
-            
+
             if (!localEnclosurePath.EndsWith (Path.DirectorySeparatorChar.ToString ())) {
                 localEnclosurePath += Path.DirectorySeparatorChar;
             }
-            
+
             if (!fullPath.EndsWith (Path.DirectorySeparatorChar.ToString ())) {
                 fullPath += Path.DirectorySeparatorChar;
-            }           
-            
+            }
+
             fullPath += filename;
-            tmpLocalPath = localEnclosurePath+filename;            
+            tmpLocalPath = localEnclosurePath+filename;
 
             try {
                 if (!Directory.Exists (path)) {
@@ -188,24 +188,24 @@ namespace Migo.Syndication
 
                 if (File.Exists (tmpLocalPath)) {
                     int lastDot = tmpLocalPath.LastIndexOf (".");
-                    
+
                     if (lastDot == -1) {
                         lastDot = tmpLocalPath.Length-1;
                     }
-                    
+
                     string rep = String.Format (
-                        "-{0}", 
+                        "-{0}",
                         Guid.NewGuid ().ToString ()
                                        .Replace ("-", String.Empty)
                                        .ToLower ()
                     );
-                    
+
                     tmpLocalPath = tmpLocalPath.Insert (lastDot, rep);
                 }
-            
+
                 File.Move (fullPath, tmpLocalPath);
                 File.SetAttributes (tmpLocalPath, FileAttributes.ReadOnly);
-                
+
                 try {
                     Directory.Delete (path);
                 } catch {}
@@ -219,59 +219,59 @@ namespace Migo.Syndication
             LocalPath = tmpLocalPath;
             Url = url;
             MimeType = mimeType;
-                            
+
             DownloadStatus = FeedDownloadStatus.Downloaded;
             LastDownloadError = FeedDownloadError.None;
             Save ();
         }
-        
+
 #endregion
 
 #region Database Columns
-        
+
         private long dbid;
         [DatabaseColumn ("EnclosureID", Constraints = DatabaseColumnConstraints.PrimaryKey)]
-        public override long DbId { 
+        public override long DbId {
             get { return dbid; }
             protected set { dbid = value; }
         }
-        
+
         [DatabaseColumn ("ItemID", Index = "PodcastEnclosuresItemIDIndex")]
         protected long item_id;
         public long ItemId {
             get { return Item.DbId; }
         }
-        
+
         [DatabaseColumn]
-        public string LocalPath { 
+        public string LocalPath {
             get { return local_path; }
             set { local_path = value; }
         }
-        
+
         [DatabaseColumn]
-        public string Url { 
-            get { return url; } 
+        public string Url {
+            get { return url; }
             set { url = value; }
         }
-        
+
         [DatabaseColumn]
-        public string Keywords { 
-            get { return keywords; } 
+        public string Keywords {
+            get { return keywords; }
             set { keywords = value; }
         }
-        
+
         [DatabaseColumn]
-        public TimeSpan Duration { 
-            get { return duration; } 
+        public TimeSpan Duration {
+            get { return duration; }
             set { duration = value; }
         }
-        
+
         [DatabaseColumn]
-        public long FileSize { 
-            get { return file_size; } 
+        public long FileSize {
+            get { return file_size; }
             set { file_size = value; }
         }
-        
+
         [DatabaseColumn]
         public string MimeType {
             get { return mimetype; }
@@ -282,23 +282,23 @@ namespace Migo.Syndication
                 }
             }
         }
-        
+
         private DateTime downloaded_at;
         [DatabaseColumn]
         public DateTime DownloadedAt {
             get { return downloaded_at; }
             internal set { downloaded_at = value; }
         }
-        
+
         [DatabaseColumn]
-        public FeedDownloadStatus DownloadStatus { 
+        public FeedDownloadStatus DownloadStatus {
             get {
                 lock (sync) {
                     return download_status;
                 }
             }
-            
-            internal set { 
+
+            internal set {
                 lock (sync) {
                     download_status = value;
                 }
diff --git a/src/Libraries/Migo/Migo.Syndication/FeedItem.cs b/src/Libraries/Migo/Migo.Syndication/FeedItem.cs
index 7c68446..0f479ee 100644
--- a/src/Libraries/Migo/Migo.Syndication/FeedItem.cs
+++ b/src/Libraries/Migo/Migo.Syndication/FeedItem.cs
@@ -49,7 +49,7 @@ namespace Migo.Syndication
         public static SqliteModelProvider<FeedItem> Provider {
             get { return provider; }
         }
-        
+
         public static bool Exists (long feed_id, string guid)
         {
             return Provider.Connection.Query<int> (
@@ -57,7 +57,7 @@ namespace Migo.Syndication
                 feed_id, guid
             ) != 0;
         }
-        
+
         public static void Init () {
             provider = new FeedItemProvider (FeedsManager.Instance.Connection);
         }
@@ -72,11 +72,11 @@ namespace Migo.Syndication
         private bool isRead;
         private string link;
         private long dbid;
-        private DateTime modified;     
+        private DateTime modified;
         private Feed feed;
-        private DateTime pubDate;       
-        private string title;        
-        
+        private DateTime pubDate;
+        private string title;
+
         public event Action<FeedItem> ItemAdded;
         public event Action<FeedItem> ItemChanged;
         public event Action<FeedItem> ItemRemoved;
@@ -98,25 +98,25 @@ namespace Migo.Syndication
         [DatabaseColumn]
         internal bool Active {
             get { return active;}
-            set {          
+            set {
                 if (value != active) {
                     active = value;
                 }
             }
         }
-        
+
         [DatabaseColumn]
         public string Author {
             get { return author; }
             set { author = value; }
         }
-        
+
         [DatabaseColumn]
         public string Comments {
-            get { return comments; } 
+            get { return comments; }
             set { comments = value; }
         }
-        
+
         [DatabaseColumn]
         public string Description {
             get { return description; }
@@ -130,7 +130,7 @@ namespace Migo.Syndication
             get { return stripped_description; }
             set { stripped_description = value; }
         }
-        
+
         [DatabaseColumn("Guid", Index = "PodcastItemsGuidIndex")]
         public string Guid {
             get {
@@ -149,31 +149,31 @@ namespace Migo.Syndication
             get { return isRead; }
             set { isRead = value; }
         }
-        
+
         [DatabaseColumn]
         public string Link {
             get { return link; }
             set { link = value; }
         }
-        
+
         [DatabaseColumn]
-        public DateTime Modified { 
-            get { return modified; } 
+        public DateTime Modified {
+            get { return modified; }
             set { modified = value; }
-        }      
-        
+        }
+
         [DatabaseColumn]
         public DateTime PubDate {
-            get { return pubDate; } 
+            get { return pubDate; }
             set { pubDate = value; }
-        }       
-        
+        }
+
         [DatabaseColumn]
         public string Title {
-            get { return title; } 
+            get { return title; }
             set { title = value; }
         }
-        
+
         [DatabaseColumn("LicenseUri")]
         protected string license_uri;
         public string LicenseUri {
@@ -209,15 +209,15 @@ namespace Migo.Syndication
                     enclosure.Item = this;
             }
         }
-        
+
 #endregion
 
 #region Constructor
- 
+
         public FeedItem ()
         {
         }
-        
+
 #endregion
 
         private static FeedManager Manager {
@@ -248,7 +248,7 @@ namespace Migo.Syndication
             else
                 Manager.OnItemChanged (this);
         }
-        
+
         public void Delete (bool delete_file)
         {
             if (enclosure != null) {
@@ -258,7 +258,7 @@ namespace Migo.Syndication
             Provider.Delete (this);
             Manager.OnItemRemoved (this);
         }
-        
+
 #endregion
 
         private bool enclosure_loaded;
@@ -268,12 +268,12 @@ namespace Migo.Syndication
                 FeedEnclosure enclosure = FeedEnclosure.Provider.FetchFirstMatching (String.Format (
                     "{0}.ItemID = {1}", FeedEnclosure.Provider.TableName, DbId
                 ));
-                
+
                 if (enclosure != null) {
                     enclosure.Item = this;
                     this.enclosure = enclosure;
                 }
-                enclosure_loaded = true; 
+                enclosure_loaded = true;
             }
         }
     }
diff --git a/src/Libraries/Migo/Migo.Syndication/FeedManager.cs b/src/Libraries/Migo/Migo.Syndication/FeedManager.cs
index e480872..047042a 100644
--- a/src/Libraries/Migo/Migo.Syndication/FeedManager.cs
+++ b/src/Libraries/Migo/Migo.Syndication/FeedManager.cs
@@ -41,7 +41,7 @@ namespace Migo.Syndication
         private Dictionary<Feed, FeedUpdateTask> update_feed_map;
         private TaskList<FeedUpdateTask> update_task_list;
         private TaskGroup<FeedUpdateTask> update_task_group;
-        
+
 #region Public Properties and Events
 
         public event Action<FeedItem> ItemAdded;
@@ -50,33 +50,33 @@ namespace Migo.Syndication
         public event EventHandler FeedsChanged;
 
 #endregion
-        
+
 #region Constructor
-        
+
         public FeedManager ()
         {
             update_feed_map = new Dictionary<Feed, FeedUpdateTask> ();
             update_task_list = new TaskList<FeedUpdateTask> ();
-            
+
             // Limit to 4 feeds downloading at a time
             update_task_group = new TaskGroup<FeedUpdateTask> (2, update_task_list);
-            
+
             update_task_group.TaskStopped += OnUpdateTaskStopped;
             update_task_group.TaskAssociated += OnUpdateTaskAdded;
-            
+
             // TODO
             // Start timeout to refresh feeds every so often
         }
 
 #endregion
-        
+
 #region Public Methods
 
         public bool IsUpdating (Feed feed)
         {
             return update_feed_map.ContainsKey (feed);
         }
-        
+
         public Feed CreateFeed (string url, FeedAutoDownload autoDownload)
         {
             return CreateFeed (url, autoDownload, true);
@@ -93,7 +93,7 @@ namespace Migo.Syndication
                 feed.Save ();
                 feed.Update ();
             }
-            
+
             return feed;
         }
 
@@ -103,17 +103,17 @@ namespace Migo.Syndication
                 if (disposed) {
                     return;
                 }
-                
+
                 if (!update_feed_map.ContainsKey (feed)) {
                     FeedUpdateTask task = new FeedUpdateTask (feed);
                     update_feed_map[feed] = task;
-                    lock (update_task_list.SyncRoot) { 
+                    lock (update_task_list.SyncRoot) {
                         update_task_list.Add (task);
                     }
                 }
-            }        
+            }
         }
-        
+
         public void CancelUpdate (Feed feed)
         {
             lock (update_task_group.SyncRoot) {
@@ -122,7 +122,7 @@ namespace Migo.Syndication
                 }
             }
         }
-        
+
         public void Dispose (System.Threading.AutoResetEvent disposeHandle)
         {
             lock (update_task_group.SyncRoot) {
@@ -131,17 +131,17 @@ namespace Migo.Syndication
                     //update_task_group.Handle.WaitOne ();
                     update_task_group.Dispose ();
                     //disposeHandle.WaitOne ();
-                    
+
                     update_task_group.TaskStopped -= OnUpdateTaskStopped;
                     update_task_group.TaskAssociated -= OnUpdateTaskAdded;
                     update_task_group = null;
                 }
-               
+
                 update_task_list = null;
                 disposed = true;
             }
-        }        
-                
+        }
+
 #endregion
 
 #region Internal Methods
@@ -153,7 +153,7 @@ namespace Migo.Syndication
                 handler (this, EventArgs.Empty);
             }
         }
-        
+
         internal void OnItemAdded (FeedItem item)
         {
             Action<FeedItem> handler = ItemAdded;
@@ -161,7 +161,7 @@ namespace Migo.Syndication
                 handler (item);
             }
         }
-        
+
         internal void OnItemChanged (FeedItem item)
         {
             Action<FeedItem> handler = ItemChanged;
@@ -169,7 +169,7 @@ namespace Migo.Syndication
                 handler (item);
             }
         }
-        
+
         internal void OnItemRemoved (FeedItem item)
         {
             Action<FeedItem> handler = ItemRemoved;
@@ -183,7 +183,7 @@ namespace Migo.Syndication
 #region Private Methods
 
         private void OnUpdateTaskAdded (object sender, TaskEventArgs<FeedUpdateTask> e)
-        {   
+        {
             lock (update_task_group.SyncRoot) {
                 update_task_group.Execute ();
             }
@@ -194,13 +194,13 @@ namespace Migo.Syndication
             lock (update_task_group.SyncRoot) {
                 FeedUpdateTask fut = e.Task as FeedUpdateTask;
                 update_feed_map.Remove (fut.Feed);
-                
+
                 lock (update_task_list.SyncRoot) {
                     update_task_list.Remove (e.Task);
                 }
             }
         }
-        
+
 #endregion
 
     }
diff --git a/src/Libraries/Migo/Migo.Syndication/FeedUpdateTask.cs b/src/Libraries/Migo/Migo.Syndication/FeedUpdateTask.cs
index 7d3064d..4097c2c 100644
--- a/src/Libraries/Migo/Migo.Syndication/FeedUpdateTask.cs
+++ b/src/Libraries/Migo/Migo.Syndication/FeedUpdateTask.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Threading;
 using System.ComponentModel;
@@ -71,7 +71,7 @@ namespace Migo.Syndication
 
             this.feed = feed;
             this.Name = feed.Link;
-            
+
             feed.DownloadStatus = FeedDownloadStatus.Pending;
         }
 
@@ -80,11 +80,11 @@ namespace Migo.Syndication
 #region Public Methods
 
         public override void CancelAsync ()
-        { 
+        {
             lock (SyncRoot) {
                 if (!completed) {
                     cancelled = true;
-    
+
                     if (wc != null) {
                         wc.CancelAsync ();
                     }
@@ -93,18 +93,18 @@ namespace Migo.Syndication
                 }
             }
         }
-    
+
         public void Dispose ()
         {
             lock (SyncRoot) {
                 if (!disposed) {
                     if (mre != null) {
                         mre.Close ();
-                        mre = null;                    
+                        mre = null;
                     }
-                    
+
                     disposed = true;
-                }   
+                }
             }
         }
 
@@ -112,35 +112,35 @@ namespace Migo.Syndication
         {
             lock (SyncRoot) {
                 SetStatus (TaskStatus.Running);
-                
+
                 if (mre != null) {
-                    mre.Reset ();                    
-                }          
+                    mre.Reset ();
+                }
             }
-            
-            try {                                                                       
-                wc = new AsyncWebClient ();                  
-                wc.Timeout = (30 * 1000); // 30 Seconds  
+
+            try {
+                wc = new AsyncWebClient ();
+                wc.Timeout = (30 * 1000); // 30 Seconds
                 if (feed.LastDownloadTime != DateTime.MinValue) {
                     wc.IfModifiedSince = feed.LastDownloadTime.ToUniversalTime ();
                 }
                 wc.DownloadStringCompleted += OnDownloadDataReceived;
-                
+
                 feed.DownloadStatus = FeedDownloadStatus.Downloading;
                 wc.DownloadStringAsync (new Uri (feed.Url));
             } catch (Exception e) {
                 if (wc != null) {
                     wc.DownloadStringCompleted -= OnDownloadDataReceived;
                 }
-                
+
                 EmitCompletionEvents (FeedDownloadError.DownloadFailed);
                 Log.Exception (e);
             }
         }
-        
+
 #endregion
 
-        private void OnDownloadDataReceived (object sender, Migo.Net.DownloadStringCompletedEventArgs args) 
+        private void OnDownloadDataReceived (object sender, Migo.Net.DownloadStringCompletedEventArgs args)
         {
             bool notify_on_save = true;
             lock (SyncRoot) {
@@ -149,7 +149,7 @@ namespace Migo.Syndication
 
                 wc.DownloadStringCompleted -= OnDownloadDataReceived;
                 FeedDownloadError error;
-                
+
                 WebException we = args.Error as WebException;
                 if (we == null) {
                      try {
@@ -171,36 +171,36 @@ namespace Migo.Syndication
                         case HttpStatusCode.NotFound:
                         case HttpStatusCode.Gone:
                             error = FeedDownloadError.DoesNotExist;
-                            break;                                
+                            break;
                         case HttpStatusCode.NotModified:
                             notify_on_save = false;
                             error = FeedDownloadError.None;
                             break;
                         case HttpStatusCode.Unauthorized:
                             error = FeedDownloadError.UnsupportedAuth;
-                            break;                                
+                            break;
                         default:
                             error = FeedDownloadError.DownloadFailed;
                             break;
                         }
                     }
                 }
-                
+
                 feed.LastDownloadError = error;
                 if (error == FeedDownloadError.None) {
                     feed.LastDownloadTime = DateTime.Now;
                 }
-                    
+
                 feed.Save (notify_on_save);
-                
+
                 EmitCompletionEvents (error);
                 completed = true;
             }
         }
-        
+
         private void EmitCompletionEvents (FeedDownloadError err)
         {
-            switch (err) {                
+            switch (err) {
                 case FeedDownloadError.None:
                     SetStatus (TaskStatus.Succeeded);
                     feed.DownloadStatus = FeedDownloadStatus.Downloaded;
@@ -218,8 +218,8 @@ namespace Migo.Syndication
             OnTaskCompleted (null, (Status == TaskStatus.Cancelled));
 
             if (mre != null) {
-                mre.Set ();   
-            }                 
+                mre.Set ();
+            }
         }
 	}
 }
diff --git a/src/Libraries/Migo/Migo.Syndication/FeedsManager.cs b/src/Libraries/Migo/Migo.Syndication/FeedsManager.cs
index 78c0942..185773e 100644
--- a/src/Libraries/Migo/Migo.Syndication/FeedsManager.cs
+++ b/src/Libraries/Migo/Migo.Syndication/FeedsManager.cs
@@ -1,37 +1,37 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FeedsManager.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 /*
     This needs to be completed and fixed.
-    
-    When I was writing this I was interrupted and wasn't able to get back to it 
-    for six months.  There are numerous issues with race conditions.  I'm 
-    resisting the urge to put in a bunch of hacks to patch the problem in favor 
+
+    When I was writing this I was interrupted and wasn't able to get back to it
+    for six months.  There are numerous issues with race conditions.  I'm
+    resisting the urge to put in a bunch of hacks to patch the problem in favor
     of going over it line by line and actually fixing it.
 */
 
@@ -52,31 +52,31 @@ using Migo.TaskCore.Collections;
 namespace Migo.Syndication
 {
     public class FeedsManager : IDisposable
-    {        
+    {
         private bool disposed;
 
         private AsyncCommandQueue command_queue;
-        
+
         private FeedManager feed_manager;
         private EnclosureManager enclosure_manager;
-        
-        private readonly object sync = new object (); 
-        
+
+        private readonly object sync = new object ();
+
         /*public event EventHandler<FeedEventArgs> FeedAdded;
         public event EventHandler<FeedEventArgs> FeedDeleted;
         public event EventHandler<FeedItemCountChangedEventArgs> FeedItemCountChanged;
         public event EventHandler<FeedEventArgs> FeedRenamed;
-        public event EventHandler<FeedEventArgs> FeedUrlChanged;        
-        
+        public event EventHandler<FeedEventArgs> FeedUrlChanged;
+
         public event EventHandler<FeedItemEventArgs> FeedItemAdded;
         public event EventHandler<FeedItemEventArgs> FeedItemRemoved;*/
-        
+
         public static FeedsManager Instance;
-        
+
         internal AsyncCommandQueue CommandQueue {
             get { return command_queue; }
         }
-        
+
 #region Public Properties
 
         public FeedBackgroundSyncStatus BackgroundSyncStatus {
@@ -85,35 +85,35 @@ namespace Migo.Syndication
                     return FeedBackgroundSyncStatus.Disabled;
                 }
             }
-        }        
-        
+        }
+
         // TODO interval for what, and in what unit?
         public long DefaultInterval {
             get { lock (sync) { return 15; } }
         }
-        
+
         /*private ReadOnlyCollection<Feed> ro_feeds;
-        public ReadOnlyCollection<Feed> Feeds {             
-            get { 
+        public ReadOnlyCollection<Feed> Feeds {
+            get {
                 lock (sync) {
                     return ro_feeds ?? ro_feeds = new ReadOnlyCollection<Feed> (feeds);
                 }
             }
         }*/
-        
+
         public FeedManager FeedManager {
             get { return feed_manager; }
         }
-        
+
         public EnclosureManager EnclosureManager {
             get { return enclosure_manager; }
         }
-        
+
         private HyenaSqliteConnection connection;
         public HyenaSqliteConnection Connection {
             get { return connection; }
         }
-        
+
         private string podcast_base_dir;
         public string PodcastStorageDirectory {
             get { return podcast_base_dir; }
@@ -123,9 +123,9 @@ namespace Migo.Syndication
 #endregion
 
 #region Constructor
-        
+
         public FeedsManager (HyenaSqliteConnection connection, DownloadManager downloadManager, string podcast_base_dir)
-        {            
+        {
             // Hack to work around Feeds being needy and having to call all our internal methods, instead
             // of us just listening for their events.
             Instance = this;
@@ -134,21 +134,21 @@ namespace Migo.Syndication
 
             feed_manager = new FeedManager ();
             enclosure_manager = new EnclosureManager (downloadManager);
-            
+
             Feed.Init ();
             FeedItem.Init ();
             FeedEnclosure.Init ();
-            
+
             command_queue = new AsyncCommandQueue ();
         }
-        
+
 #endregion
 
 #region Public Methods
 
-        public void Dispose () 
+        public void Dispose ()
         {
-            if (SetDisposed ()) {               
+            if (SetDisposed ()) {
                 AutoResetEvent disposeHandle = new AutoResetEvent (false);
 
                 feed_manager.Dispose (disposeHandle);
@@ -158,7 +158,7 @@ namespace Migo.Syndication
                     command_queue.Dispose ();
                     command_queue = null;
                 }
-                
+
                 disposeHandle.Close ();
             }
         }
@@ -166,10 +166,10 @@ namespace Migo.Syndication
 #endregion
 
 #region Private Methods
-        
 
 
-        /*private void OnFeedItemEvent (EventHandler<FeedItemEventArgs> handler, 
+
+        /*private void OnFeedItemEvent (EventHandler<FeedItemEventArgs> handler,
                                       FeedItemEventArgs e)
         {
             if (handler == null) {
@@ -177,22 +177,22 @@ namespace Migo.Syndication
             } else if (e == null) {
                 throw new ArgumentNullException ("e");
             }
-            
+
             command_queue.Register (
                 new EventWrapper<FeedItemEventArgs> (handler, this, e)
-            );            
-            
-            //handler (this, e);           
-        }        
-        
+            );
+
+            //handler (this, e);
+        }
+
         private void OnFeedEventRaised (Feed feed, EventHandler<FeedEventArgs> handler)
         {
             if (feed == null) {
                 throw new ArgumentNullException ("feed");	
             }
-            
+
             EventHandler<FeedEventArgs> handlerCpy = handler;
-            
+
             if (handlerCpy != null) {
                 command_queue.Register (
                     new EventWrapper<FeedEventArgs> (
@@ -202,41 +202,41 @@ namespace Migo.Syndication
             	//handler (this, new FeedEventArgs (feed));
             }
         }  */
-        
+
         private bool SetDisposed ()
         {
             bool ret = false;
-                
+
             lock (sync) {
                 if (!disposed) {
-                    ret = disposed = true;   
+                    ret = disposed = true;
                 }
             }
-                
+
             return ret;
-        }   
+        }
 
         /*private IEnumerable<HttpFileDownloadTask> FindDownloadTasks (IEnumerable<FeedEnclosure> enclosures)
-        {            
-            ICollection<HttpFileDownloadTask> encsCol = 
+        {
+            ICollection<HttpFileDownloadTask> encsCol =
                 enclosures as ICollection<HttpFileDownloadTask>;
-            
+
             List<HttpFileDownloadTask> ret = (encsCol == null) ?
-                new List<HttpFileDownloadTask> () : 
+                new List<HttpFileDownloadTask> () :
                 new List<HttpFileDownloadTask> (encsCol.Count);
-            
+
             HttpFileDownloadTask tmpTask = null;
-            
+
             lock (sync) {
                 foreach (FeedEnclosure enc in enclosures) {
                     tmpTask = FindDownloadTaskImpl ((FeedEnclosure)enc);
-                    
+
                     if (tmpTask != null) {
                         ret.Add (tmpTask);
                     }
                 }
             }
-            
+
             return ret;
         }*/
 
@@ -248,28 +248,28 @@ namespace Migo.Syndication
 /*        internal void RegisterCommand (ICommand command)
         {
              AsyncCommandQueue<ICommand> cmdQCpy = command_queue;
-            
+
             if (cmdQCpy != null && command != null) {
             	cmdQCpy.Register (command);
             }
         }
-        
+
         private void OnFeedAdded (Feed feed)
         {
             AsyncCommandQueue<ICommand> cmdQCpy = command_queue;
-            
-            if (cmdQCpy != null) {            
+
+            if (cmdQCpy != null) {
                 cmdQCpy.Register (new CommandWrapper (delegate {
                     OnFeedEventRaised (feed, FeedAdded);
                 }));
             }
         }
-        
+
         internal void OnFeedDeleted (Feed feed)
         {
             OnFeedEventRaised (feed, FeedDeleted);
         }
-        
+
         internal void OnFeedItemAdded (Feed feed, FeedItem item)
         {
             if (feed == null) {
@@ -278,26 +278,26 @@ namespace Migo.Syndication
                 throw new ArgumentNullException ("item");
             }
 
-            EventHandler<FeedItemEventArgs> handler = FeedItemAdded;            
-            
+            EventHandler<FeedItemEventArgs> handler = FeedItemAdded;
+
             if (handler != null) {
                 OnFeedItemEvent (handler, new FeedItemEventArgs (feed, item));
-            }                           
+            }
         }
-        
+
         internal void OnFeedItemsAdded (Feed feed, IEnumerable<FeedItem> items)
         {
             if (feed == null) {
                 throw new ArgumentNullException ("feed");
             } else if (items == null) {
                 throw new ArgumentNullException ("items");
-            } 
+            }
+
+            EventHandler<FeedItemEventArgs> handler = FeedItemAdded;
 
-            EventHandler<FeedItemEventArgs> handler = FeedItemAdded;            
-            
             if (handler != null) {
                 OnFeedItemEvent (handler, new FeedItemEventArgs (feed, items));
-            }               
+            }
         }
 
         internal void OnFeedItemCountChanged (Feed feed, FEEDS_EVENTS_ITEM_COUNT_FLAGS flags)
@@ -307,29 +307,29 @@ namespace Migo.Syndication
                     throw new ArgumentNullException ("feed");	
                 }
 
-                EventHandler<FeedItemCountChangedEventArgs> handler = FeedItemCountChanged;                
-                
+                EventHandler<FeedItemCountChangedEventArgs> handler = FeedItemCountChanged;
+
                 if (handler != null) {
                     command_queue.Register (
                         new EventWrapper<FeedItemCountChangedEventArgs> (
-                            handler, this, 
+                            handler, this,
                             new FeedItemCountChangedEventArgs (feed, flags)
                         )
-                    );       
+                    );
                 }
-            }    
-        }                
-                
+            }
+        }
+
         internal void OnFeedRenamed (Feed feed)
         {
             OnFeedEventRaised (feed, FeedRenamed);
         }
-        
+
         internal void OnFeedUrlChanged (Feed feed)
         {
             OnFeedEventRaised (feed, FeedUrlChanged);
         }*/
-        
-#endregion 
-    }   
-}    
+
+#endregion
+    }
+}
diff --git a/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/EnclosuresTableManager.cs b/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/EnclosuresTableManager.cs
index aafb3f9..aedc431 100644
--- a/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/EnclosuresTableManager.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/EnclosuresTableManager.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  EnclosuresTableManager.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -32,14 +32,14 @@ using System.Collections;
 using System.Collections.Generic;
 
 namespace Migo.Syndication.Data
-{    
+{
     /*static class EnclosuresTableManager
-    {        
+    {
         private const string initQuery = @"
             CREATE TABLE IF NOT EXISTS enclosures (
-            	'local_id' INTEGER  PRIMARY KEY, 
+            	'local_id' INTEGER  PRIMARY KEY,
             	'parent_id' INTEGER NOT NULL DEFAULT '-1',	
-            	'active' INTEGER NOT NULL DEFAULT '0', 
+            	'active' INTEGER NOT NULL DEFAULT '0',
             	'download_mime_type' TEXT NOT NULL DEFAULT '',
                 'download_url' TEXT NOT NULL DEFAULT '',
                 'last_download_error' INTEGER NOT NULL DEFAULT '0',
@@ -48,20 +48,20 @@ namespace Migo.Syndication.Data
             	'type' TEXT NOT NULL DEFAULT '',
             	'url' TEXT NOT NULL DEFAULT ''
             );
-            
+
             CREATE INDEX IF NOT EXISTS enclosures_local_id_index ON enclosures(local_id);
-            CREATE INDEX IF NOT EXISTS enclosures_parent_id_index ON enclosures(parent_id);            
+            CREATE INDEX IF NOT EXISTS enclosures_parent_id_index ON enclosures(parent_id);
         ";
-        
-        private static readonly string insertIntoEnclosuresQuery =             
-            String.Format ( 
+
+        private static readonly string insertIntoEnclosuresQuery =
+            String.Format (
                 @"INSERT INTO enclosures VALUES (
                     NULL, {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}
                 ); {9}",
-                DbDefines.EnclosuresTableColumns.ParentIDParameter, 
+                DbDefines.EnclosuresTableColumns.ParentIDParameter,
                 DbDefines.EnclosuresTableColumns.ActiveParameter,
-                DbDefines.EnclosuresTableColumns.DownloadMimeTypeParameter, 
-                DbDefines.EnclosuresTableColumns.DownloadUrlParameter, 
+                DbDefines.EnclosuresTableColumns.DownloadMimeTypeParameter,
+                DbDefines.EnclosuresTableColumns.DownloadUrlParameter,
                 DbDefines.EnclosuresTableColumns.LastDownloadErrorParameter,
                 DbDefines.EnclosuresTableColumns.LengthParameter,
                 DbDefines.EnclosuresTableColumns.LocalPathParameter,
@@ -70,195 +70,195 @@ namespace Migo.Syndication.Data
                 DbDefines.LastInsertIDQuery
             );
 
-        private static readonly string updateEnclosuresQuery = 
+        private static readonly string updateEnclosuresQuery =
             String.Format (
-                @"UPDATE enclosures SET 
-                    {2}={3}, {4}={5}, {6}={7}, {8}={9}, {10}={11}, 
+                @"UPDATE enclosures SET
+                    {2}={3}, {4}={5}, {6}={7}, {8}={9}, {10}={11},
                     {12}={13}, {14}={15}, {16}={17}, {18}={19}
                   WHERE {0}={1}",
-                    DbDefines.EnclosuresTableColumns.LocalID, 
+                    DbDefines.EnclosuresTableColumns.LocalID,
                     DbDefines.EnclosuresTableColumns.LocalIDParameter,
                     DbDefines.EnclosuresTableColumns.ParentID,
-                    DbDefines.EnclosuresTableColumns.ParentIDParameter,   
+                    DbDefines.EnclosuresTableColumns.ParentIDParameter,
                     DbDefines.EnclosuresTableColumns.Active,
-                    DbDefines.EnclosuresTableColumns.ActiveParameter,                       
-                    DbDefines.EnclosuresTableColumns.DownloadMimeType, 
-                    DbDefines.EnclosuresTableColumns.DownloadMimeTypeParameter,                           
-                    DbDefines.EnclosuresTableColumns.DownloadUrl, 
-                    DbDefines.EnclosuresTableColumns.DownloadUrlParameter, 
-                    DbDefines.EnclosuresTableColumns.LastDownloadError, 
-                    DbDefines.EnclosuresTableColumns.LastDownloadErrorParameter,                            
-                    DbDefines.EnclosuresTableColumns.Length, 
-                    DbDefines.EnclosuresTableColumns.LengthParameter,                            
-                    DbDefines.EnclosuresTableColumns.LocalPath, 
-                    DbDefines.EnclosuresTableColumns.LocalPathParameter,                            
+                    DbDefines.EnclosuresTableColumns.ActiveParameter,
+                    DbDefines.EnclosuresTableColumns.DownloadMimeType,
+                    DbDefines.EnclosuresTableColumns.DownloadMimeTypeParameter,
+                    DbDefines.EnclosuresTableColumns.DownloadUrl,
+                    DbDefines.EnclosuresTableColumns.DownloadUrlParameter,
+                    DbDefines.EnclosuresTableColumns.LastDownloadError,
+                    DbDefines.EnclosuresTableColumns.LastDownloadErrorParameter,
+                    DbDefines.EnclosuresTableColumns.Length,
+                    DbDefines.EnclosuresTableColumns.LengthParameter,
+                    DbDefines.EnclosuresTableColumns.LocalPath,
+                    DbDefines.EnclosuresTableColumns.LocalPathParameter,
                     DbDefines.EnclosuresTableColumns.Type,
-                    DbDefines.EnclosuresTableColumns.TypeParameter,                            
-                    DbDefines.EnclosuresTableColumns.Url,  
-                    DbDefines.EnclosuresTableColumns.UrlParameter                          
+                    DbDefines.EnclosuresTableColumns.TypeParameter,
+                    DbDefines.EnclosuresTableColumns.Url,
+                    DbDefines.EnclosuresTableColumns.UrlParameter
             );
-        
+
         public static void Init ()
         {
-            DatabaseManager.ExecuteNonQuery (initQuery); 
+            DatabaseManager.ExecuteNonQuery (initQuery);
         }
-        
+
         public static bool Commit (IEnumerable<FeedEnclosure> enclosures)
         {
             if (enclosures == null) {
                 throw new ArgumentNullException ("enclosures");
-            }    
-            
+            }
+
             bool ret = false;
-        
-            try {            
-                ICollection<FeedEnclosure> enclosureCol = 
+
+            try {
+                ICollection<FeedEnclosure> enclosureCol =
                     enclosures as ICollection<FeedEnclosure>;
-            
-                Dictionary<QueuedDbCommand,FeedEnclosure> enclosureCommandPairs = 
-                    (enclosureCol == null) ? new Dictionary<QueuedDbCommand,FeedEnclosure> () : 
+
+                Dictionary<QueuedDbCommand,FeedEnclosure> enclosureCommandPairs =
+                    (enclosureCol == null) ? new Dictionary<QueuedDbCommand,FeedEnclosure> () :
                     new Dictionary<QueuedDbCommand,FeedEnclosure> (enclosureCol.Count);
-                
+
                 foreach (FeedEnclosure enc in enclosures) {
                     enclosureCommandPairs.Add (
                         QueuedDbCommand.CreateScalar (
                             EnclosuresTableManager.CreateInsertCommand (enc)
                         ), enc
-                    );          
+                    );
                 }
-                
+
                 DatabaseManager.Enqueue (enclosureCommandPairs.Keys);
-                
+
                 foreach (KeyValuePair<QueuedDbCommand,FeedEnclosure> kvp in enclosureCommandPairs) {
                     kvp.Value.DbId = Convert.ToInt64 (kvp.Key.ScalarResult);
-                }  
+                }
             } catch {}
-        
+
             return ret;
-        }        
-        
+        }
+
         public static IDbCommand CreateInsertCommand (FeedEnclosure enclosure)
         {
             if (enclosure == null) {
                 throw new ArgumentNullException ("enclosure");
             }
-            
+
             return CreateInsertCommandImpl (enclosure);
         }
-        
+
         private static IDbCommand CreateInsertCommandImpl (FeedEnclosure enclosure)
         {
             return DatabaseManager.CreateCommand (
                 insertIntoEnclosuresQuery,
-                DbDefines.EnclosuresTableColumns.ParentID, 
+                DbDefines.EnclosuresTableColumns.ParentID,
                 enclosure.Parent.LocalID.ToString (),
                 DbDefines.EnclosuresTableColumns.Active,
-                (enclosure.Active) ? "1" : "0",                                               
-                DbDefines.EnclosuresTableColumns.DownloadMimeType, 
+                (enclosure.Active) ? "1" : "0",
+                DbDefines.EnclosuresTableColumns.DownloadMimeType,
                 enclosure.MimeType,
-                DbDefines.EnclosuresTableColumns.DownloadUrl, 
+                DbDefines.EnclosuresTableColumns.DownloadUrl,
                 enclosure.DownloadUrl,
                 DbDefines.EnclosuresTableColumns.LastDownloadError,
                 ((int)enclosure.LastDownloadError).ToString (),
-                DbDefines.EnclosuresTableColumns.Length, 
+                DbDefines.EnclosuresTableColumns.Length,
                 enclosure.Length.ToString (),
-                DbDefines.EnclosuresTableColumns.LocalPath, 
+                DbDefines.EnclosuresTableColumns.LocalPath,
                 enclosure.LocalPath,
-                DbDefines.EnclosuresTableColumns.Type, 
+                DbDefines.EnclosuresTableColumns.Type,
                 enclosure.Type,
-                DbDefines.EnclosuresTableColumns.Url, 
-                enclosure.Url 
+                DbDefines.EnclosuresTableColumns.Url,
+                enclosure.Url
             );
         }
-        
+
         public static long Insert (FeedEnclosure enclosure)
         {
             if (enclosure == null) {
                 throw new ArgumentNullException ("enclosure");
             }
-            
+
             long ret = -1;
-            
+
             if (enclosure.Parent == null) {
                 return ret;
-            }            
-            
+            }
+
             ret = Convert.ToInt64 (
                 DatabaseManager.ExecuteScalar (
                     CreateInsertCommandImpl (enclosure)
                 )
-            );             
-            
+            );
+
             return ret;
         }
-        
+
         public static bool Insert (IEnumerable<FeedEnclosure> enclosures)
         {
             if (enclosures == null) {
                 throw new ArgumentNullException ("enclosures");
-            }    
-            
+            }
+
             bool ret = false;
-        
+
             try {
-                foreach (FeedEnclosure e in enclosures) {                
+                foreach (FeedEnclosure e in enclosures) {
                     Insert (e);
                 }
-                
+
                 ret = true;
-            } catch {}     
-            
+            } catch {}
+
             return ret;
-        }           
+        }
 
         public static void Update (FeedEnclosure enclosure)
         {
             if (enclosure == null) {
-                throw new ArgumentNullException ("enclosure");       
-            }   
+                throw new ArgumentNullException ("enclosure");
+            }
 
             DatabaseManager.ExecuteNonQuery (
-                updateEnclosuresQuery, 
-                DbDefines.EnclosuresTableColumns.LocalID, 
+                updateEnclosuresQuery,
+                DbDefines.EnclosuresTableColumns.LocalID,
                 enclosure.DbId.ToString (),
-                DbDefines.EnclosuresTableColumns.ParentID, 
+                DbDefines.EnclosuresTableColumns.ParentID,
                 (enclosure.Parent != null) ? enclosure.Parent.LocalID.ToString () : "-1",
                 DbDefines.EnclosuresTableColumns.Active,
-                (enclosure.Active) ? "1" : "0",                                                                                            
-                DbDefines.EnclosuresTableColumns.DownloadMimeType, 
+                (enclosure.Active) ? "1" : "0",
+                DbDefines.EnclosuresTableColumns.DownloadMimeType,
                 enclosure.MimeType,
-                DbDefines.EnclosuresTableColumns.DownloadUrl, 
+                DbDefines.EnclosuresTableColumns.DownloadUrl,
                 enclosure.DownloadUrl,
                 DbDefines.EnclosuresTableColumns.LastDownloadError,
                 ((int)enclosure.LastDownloadError).ToString (),
-                DbDefines.EnclosuresTableColumns.Length, 
+                DbDefines.EnclosuresTableColumns.Length,
                 enclosure.Length.ToString (),
-                DbDefines.EnclosuresTableColumns.LocalPath, 
+                DbDefines.EnclosuresTableColumns.LocalPath,
                 enclosure.LocalPath,
-                DbDefines.EnclosuresTableColumns.Type, 
+                DbDefines.EnclosuresTableColumns.Type,
                 enclosure.Type,
-                DbDefines.EnclosuresTableColumns.Url, 
+                DbDefines.EnclosuresTableColumns.Url,
                 enclosure.Url
             );
-        }    
-        
+        }
+
         public static bool Update (IEnumerable<FeedEnclosure> enclosures)
         {
             if (enclosures == null) {
                 throw new ArgumentNullException ("enclosures");
-            }    
-            
+            }
+
             bool ret = false;
-        
+
             try {
-                foreach (FeedEnclosure e in enclosures) {                
+                foreach (FeedEnclosure e in enclosures) {
                     Update (e);
                 }
-                
+
                 ret = true;
-            } catch {}   
-            
+            } catch {}
+
             return ret;
-        }           
+        }
     }*/
 }
diff --git a/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/FeedsTableManager.cs b/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/FeedsTableManager.cs
index 315894b..6a28a3e 100644
--- a/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/FeedsTableManager.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/FeedsTableManager.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  FeedsTableManager.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -34,35 +34,35 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 
 namespace Migo.Syndication.Data
-{    
+{
     /*class FeedsTableManager
-    {     
-        public static readonly string initQuery = @" 
+    {
+        public static readonly string initQuery = @"
             CREATE TABLE IF NOT EXISTS feeds (
-            	'local_id' INTEGER  PRIMARY KEY, 
-            	'copyright' TEXT NOT NULL DEFAULT '', 
-            	'description' TEXT NOT NULL DEFAULT '', 
-            	'download_enclosures_automatically' INTEGER NOT NULL DEFAULT '0', 
-            	'download_url' TEXT NOT NULL DEFAULT '', 
-            	'image' TEXT NOT NULL DEFAULT '', 
-            	'interval' INTEGER NOT NULL DEFAULT '1440', 
-            	'is_list' INTEGER NOT NULL DEFAULT '0', 
-            	'language' TEXT NOT NULL DEFAULT '', 
-            	'last_build_date' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 
-            	'last_download_error' INTEGER NOT NULL DEFAULT '0', 
-            	'last_download_time' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 
-            	'last_write_time' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 
-            	'link' TEXT NOT NULL DEFAULT '', 
-            	'local_enclosure_path' TEXT NOT NULL DEFAULT '', 
-            	'max_item_count' INTEGER NOT NULL DEFAULT '200', 
-            	'name' TEXT NOT NULL DEFAULT '', 
-            	'pubdate' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 
-            	'sync_setting' INTEGER NOT NULL DEFAULT '0', 
-            	'title' TEXT NOT NULL DEFAULT '', 
-            	'ttl' INTEGER NOT NULL DEFAULT '0', 
+            	'local_id' INTEGER  PRIMARY KEY,
+            	'copyright' TEXT NOT NULL DEFAULT '',
+            	'description' TEXT NOT NULL DEFAULT '',
+            	'download_enclosures_automatically' INTEGER NOT NULL DEFAULT '0',
+            	'download_url' TEXT NOT NULL DEFAULT '',
+            	'image' TEXT NOT NULL DEFAULT '',
+            	'interval' INTEGER NOT NULL DEFAULT '1440',
+            	'is_list' INTEGER NOT NULL DEFAULT '0',
+            	'language' TEXT NOT NULL DEFAULT '',
+            	'last_build_date' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
+            	'last_download_error' INTEGER NOT NULL DEFAULT '0',
+            	'last_download_time' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
+            	'last_write_time' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
+            	'link' TEXT NOT NULL DEFAULT '',
+            	'local_enclosure_path' TEXT NOT NULL DEFAULT '',
+            	'max_item_count' INTEGER NOT NULL DEFAULT '200',
+            	'name' TEXT NOT NULL DEFAULT '',
+            	'pubdate' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
+            	'sync_setting' INTEGER NOT NULL DEFAULT '0',
+            	'title' TEXT NOT NULL DEFAULT '',
+            	'ttl' INTEGER NOT NULL DEFAULT '0',
             	'url' TEXT NOT NULL DEFAULT ''
             );
-            
+
             CREATE TRIGGER IF NOT EXISTS feed_deleted_trigger
                AFTER DELETE ON feeds
             BEGIN
@@ -71,14 +71,14 @@ namespace Migo.Syndication.Data
 
             CREATE INDEX IF NOT EXISTS feeds_local_id_index ON feeds(local_id);";
 
-        private static readonly string deleteFromFeedsBaseQuery = "DELETE FROM feeds WHERE";        
-        private static readonly string insertIntoFeedsQuery = 
-            String.Format ( 
+        private static readonly string deleteFromFeedsBaseQuery = "DELETE FROM feeds WHERE";
+        private static readonly string insertIntoFeedsQuery =
+            String.Format (
                 @"INSERT INTO feeds VALUES (
-                    NULL, {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, 
+                    NULL, {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10},
                     {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}
                 ); {21}",
-                DbDefines.FeedsTableColumns.CopyrightParameter, DbDefines.FeedsTableColumns.DescriptionParameter, 
+                DbDefines.FeedsTableColumns.CopyrightParameter, DbDefines.FeedsTableColumns.DescriptionParameter,
                 DbDefines.FeedsTableColumns.DownloadEnclosuresAutomaticallyParameter,
                 DbDefines.FeedsTableColumns.DownloadUrlParameter, DbDefines.FeedsTableColumns.ImageParameter,
                 DbDefines.FeedsTableColumns.IntervalParameter, DbDefines.FeedsTableColumns.IsListParameter,
@@ -88,88 +88,88 @@ namespace Migo.Syndication.Data
                 DbDefines.FeedsTableColumns.LocalEnclosurePathParameter, DbDefines.FeedsTableColumns.MaxItemCountParameter,
                 DbDefines.FeedsTableColumns.NameParameter, DbDefines.FeedsTableColumns.PubDateParameter,
                 DbDefines.FeedsTableColumns.SyncSettingParameter, DbDefines.FeedsTableColumns.TitleParameter,
-                DbDefines.FeedsTableColumns.TtlParameter, DbDefines.FeedsTableColumns.UrlParameter, 
+                DbDefines.FeedsTableColumns.TtlParameter, DbDefines.FeedsTableColumns.UrlParameter,
                 DbDefines.LastInsertIDQuery
             );
-                           
+
         private static readonly string selectAllFeedsQuery = "SELECT * FROM feeds;";
-        private static readonly string selectAllFeedItemsQuery = "SELECT * FROM items;";      
-        private static readonly string selectAllFeedEnclosuresQuery = "SELECT * FROM enclosures;";                
-             
-        private static readonly string updateFeedQuery = 
+        private static readonly string selectAllFeedItemsQuery = "SELECT * FROM items;";
+        private static readonly string selectAllFeedEnclosuresQuery = "SELECT * FROM enclosures;";
+
+        private static readonly string updateFeedQuery =
             String.Format (
-                @"UPDATE feeds SET 
+                @"UPDATE feeds SET
                     {2}={3}, {4}={5}, {6}={7}, {8}={9}, {10}={11}, {12}={13}, {14}={15}, {16}={17},
                     {18}={19}, {20}={21}, {22}={23}, {24}={25}, {26}={27}, {28}={29}, {30}={31},
-                    {32}={33}, {34}={35}, {36}={37}, {38}={39}, {40}={41}, {42}={43} 
+                    {32}={33}, {34}={35}, {36}={37}, {38}={39}, {40}={41}, {42}={43}
                     WHERE {0}={1};",
-                    DbDefines.FeedsTableColumns.LocalID, DbDefines.FeedsTableColumns.LocalIDParameter,                                                     
-                    DbDefines.FeedsTableColumns.Copyright, DbDefines.FeedsTableColumns.CopyrightParameter, 
-                    DbDefines.FeedsTableColumns.Description, DbDefines.FeedsTableColumns.DescriptionParameter, 
-                    DbDefines.FeedsTableColumns.DownloadEnclosuresAutomatically,                    
+                    DbDefines.FeedsTableColumns.LocalID, DbDefines.FeedsTableColumns.LocalIDParameter,
+                    DbDefines.FeedsTableColumns.Copyright, DbDefines.FeedsTableColumns.CopyrightParameter,
+                    DbDefines.FeedsTableColumns.Description, DbDefines.FeedsTableColumns.DescriptionParameter,
+                    DbDefines.FeedsTableColumns.DownloadEnclosuresAutomatically,
                     DbDefines.FeedsTableColumns.DownloadEnclosuresAutomaticallyParameter,
-                    DbDefines.FeedsTableColumns.DownloadUrl, DbDefines.FeedsTableColumns.DownloadUrlParameter, 
+                    DbDefines.FeedsTableColumns.DownloadUrl, DbDefines.FeedsTableColumns.DownloadUrlParameter,
                     DbDefines.FeedsTableColumns.Image, DbDefines.FeedsTableColumns.ImageParameter,
-                    DbDefines.FeedsTableColumns.Interval, DbDefines.FeedsTableColumns.IntervalParameter, 
+                    DbDefines.FeedsTableColumns.Interval, DbDefines.FeedsTableColumns.IntervalParameter,
                     DbDefines.FeedsTableColumns.IsList, DbDefines.FeedsTableColumns.IsListParameter,
-                    DbDefines.FeedsTableColumns.Language, DbDefines.FeedsTableColumns.LanguageParameter, 
+                    DbDefines.FeedsTableColumns.Language, DbDefines.FeedsTableColumns.LanguageParameter,
                     DbDefines.FeedsTableColumns.LastBuildDate, DbDefines.FeedsTableColumns.LastBuildDateParameter,
-                    DbDefines.FeedsTableColumns.LastDownloadError, DbDefines.FeedsTableColumns.LastDownloadErrorParameter, 
+                    DbDefines.FeedsTableColumns.LastDownloadError, DbDefines.FeedsTableColumns.LastDownloadErrorParameter,
                     DbDefines.FeedsTableColumns.LastDownloadTime, DbDefines.FeedsTableColumns.LastDownloadTimeParameter,
-                    DbDefines.FeedsTableColumns.LastWriteTime, DbDefines.FeedsTableColumns.LastWriteTimeParameter, 
+                    DbDefines.FeedsTableColumns.LastWriteTime, DbDefines.FeedsTableColumns.LastWriteTimeParameter,
                     DbDefines.FeedsTableColumns.Link, DbDefines.FeedsTableColumns.LinkParameter,
-                    DbDefines.FeedsTableColumns.LocalEnclosurePath, DbDefines.FeedsTableColumns.LocalEnclosurePathParameter, 
+                    DbDefines.FeedsTableColumns.LocalEnclosurePath, DbDefines.FeedsTableColumns.LocalEnclosurePathParameter,
                     DbDefines.FeedsTableColumns.MaxItemCount, DbDefines.FeedsTableColumns.MaxItemCountParameter,
-                    DbDefines.FeedsTableColumns.Name, DbDefines.FeedsTableColumns.NameParameter, 
+                    DbDefines.FeedsTableColumns.Name, DbDefines.FeedsTableColumns.NameParameter,
                     DbDefines.FeedsTableColumns.PubDate, DbDefines.FeedsTableColumns.PubDateParameter,
-                    DbDefines.FeedsTableColumns.SyncSetting, DbDefines.FeedsTableColumns.SyncSettingParameter, 
+                    DbDefines.FeedsTableColumns.SyncSetting, DbDefines.FeedsTableColumns.SyncSettingParameter,
                     DbDefines.FeedsTableColumns.Title, DbDefines.FeedsTableColumns.TitleParameter,
-                    DbDefines.FeedsTableColumns.Ttl, DbDefines.FeedsTableColumns.TtlParameter, 
+                    DbDefines.FeedsTableColumns.Ttl, DbDefines.FeedsTableColumns.TtlParameter,
                     DbDefines.FeedsTableColumns.Url, DbDefines.FeedsTableColumns.UrlParameter
             );
-      
-        
+
+
         public static bool Commit (IEnumerable<Feed> feeds)
         {
             if (feeds == null) {
                 throw new ArgumentNullException ("feeds");
-            }    
-            
+            }
+
             bool ret = false;
-            
+
             try {
-                foreach (Feed f in feeds) {                
+                foreach (Feed f in feeds) {
                     f.Commit ();
                 }
-                
+
                 ret = true;
-            } catch {} 
-            
+            } catch {}
+
             return ret;
-        }          
-        
+        }
+
         public static List<Feed> GetAllFeeds (FeedsManager manager)
         {
             if (manager == null) {
                 throw new ArgumentNullException ("manager");
             }
-            
+
             DateTime start = DateTime.Now;
             Console.WriteLine (start);
-            
-            List<Feed> feeds;       
+
+            List<Feed> feeds;
             Dictionary<long,ICollection<FeedItem>> feedItems;
-            Dictionary<long,FeedEnclosure> feedEnclosures;               
-                        
-            feedEnclosures = BuildEnclosuresDict ();            
+            Dictionary<long,FeedEnclosure> feedEnclosures;
+
+            feedEnclosures = BuildEnclosuresDict ();
             feedItems = BuildItemsDict (feedEnclosures);
             feeds = BuildFeedsList (manager, feedItems);
-                        
+
             feedItems.Clear ();
             feedEnclosures.Clear ();
-            
+
             Console.WriteLine (DateTime.Now - start);
-            return feeds;    
+            return feeds;
         }
 
         public static void Delete (Feed feed)
@@ -181,61 +181,61 @@ namespace Migo.Syndication.Data
             DatabaseManager.ExecuteNonQuery (
                 String.Format (
                     "{0} {1}={2};",
-                    deleteFromFeedsBaseQuery, 
-                    DbDefines.FeedsTableColumns.LocalID, 
+                    deleteFromFeedsBaseQuery,
+                    DbDefines.FeedsTableColumns.LocalID,
                     DbDefines.FeedsTableColumns.LocalIDParameter
-                ), 
-                DbDefines.FeedsTableColumns.LocalID, 
+                ),
+                DbDefines.FeedsTableColumns.LocalID,
                 feed.LocalID.ToString ()
             );
         }
-        
+
         public static void Delete (IEnumerable<Feed> feeds)
         {
             if (feeds == null) {
             	throw new ArgumentNullException ("feeds");
             }
-            
+
             List<long> ids = new List<long> ();
-            
+
             foreach (Feed f in feeds) {
                 if (f != null) {
                     ids.Add (f.LocalID);
                 }
             }
-            
+
             if (ids.Count > 0) {
                 string query = DataUtility.MultipleOnIDQuery (
                     deleteFromFeedsBaseQuery, DbDefines.FeedsTableColumns.LocalID, ids.ToArray ()
                 );
-                
+
                 DatabaseManager.ExecuteNonQuery (query);
             }
-        }        
-        
+        }
+
         public static void Init ()
         {
-            DatabaseManager.ExecuteNonQuery (initQuery);               
+            DatabaseManager.ExecuteNonQuery (initQuery);
         }
-        
+
         public static long Insert (Feed feed)
         {
             if (feed == null) {
                 throw new ArgumentNullException ("feed");
             } else if (feed.LocalID > 0) {
                 return feed.LocalID;
-            }   
-            
+            }
+
             long ret = -1;
-                        
-            try {            
+
+            try {
                 ret = Convert.ToInt64 (
-                    DatabaseManager.ExecuteScalar (                
+                    DatabaseManager.ExecuteScalar (
                         insertIntoFeedsQuery,
                         DbDefines.FeedsTableColumns.Copyright, feed.Copyright == null ? String.Empty : feed.Copyright,
                         DbDefines.FeedsTableColumns.Description, feed.Description == null ? String.Empty : feed.Description,
-                        DbDefines.FeedsTableColumns.DownloadEnclosuresAutomatically.ToString (), 
-                        feed.DownloadEnclosuresAutomatically.ToString (),  
+                        DbDefines.FeedsTableColumns.DownloadEnclosuresAutomatically.ToString (),
+                        feed.DownloadEnclosuresAutomatically.ToString (),
                         DbDefines.FeedsTableColumns.DownloadUrl, feed.DownloadUrl == null ? String.Empty : feed.DownloadUrl,
                         DbDefines.FeedsTableColumns.Image, feed.Image == null ? String.Empty : feed.Image,
                         DbDefines.FeedsTableColumns.Interval, feed.Interval.ToString (),
@@ -246,10 +246,10 @@ namespace Migo.Syndication.Data
                         DbDefines.FeedsTableColumns.LastDownloadTime, feed.LastDownloadTime.ToUniversalTime ().ToString ("u"),
                         DbDefines.FeedsTableColumns.LastWriteTime, feed.LastWriteTime.ToUniversalTime ().ToString ("u"),
                         DbDefines.FeedsTableColumns.Link, feed.Link == null ? String.Empty : feed.Link,
-                        DbDefines.FeedsTableColumns.LocalEnclosurePath, feed.LocalEnclosurePath == null ? String.Empty : feed.LocalEnclosurePath,  
+                        DbDefines.FeedsTableColumns.LocalEnclosurePath, feed.LocalEnclosurePath == null ? String.Empty : feed.LocalEnclosurePath,
                         DbDefines.FeedsTableColumns.MaxItemCount, feed.MaxItemCount.ToString (),
                         DbDefines.FeedsTableColumns.Name, feed.Name == null ? String.Empty : feed.Name,
-                        DbDefines.FeedsTableColumns.PubDate, feed.PubDate.ToUniversalTime ().ToString ("u"), 
+                        DbDefines.FeedsTableColumns.PubDate, feed.PubDate.ToUniversalTime ().ToString ("u"),
                         DbDefines.FeedsTableColumns.SyncSetting, ((int)feed.SyncSetting).ToString (),
                         DbDefines.FeedsTableColumns.Title, feed.Title == null ? String.Empty : feed.Title,
                         DbDefines.FeedsTableColumns.Ttl, feed.Ttl.ToString (),
@@ -257,44 +257,44 @@ namespace Migo.Syndication.Data
                     )
                 );
             } catch {}
-            
+
             Console.WriteLine ("feed.LocalID:  {0}", ret);
-            
+
             return ret;
         }
-        
+
         public static bool Insert (IEnumerable<Feed> feeds)
         {
             if (feeds == null) {
                 throw new ArgumentNullException ("feeds");
-            }    
-            
+            }
+
             bool ret = false;
-            
+
             try {
-                foreach (Feed f in feeds) {                
+                foreach (Feed f in feeds) {
                     Insert (f);
                 }
-                
+
                 ret = true;
             } catch {}
-        
+
             return ret;
-        }          
-        
+        }
+
         public static void Update (Feed feed)
         {
             if (feed == null) {
-                throw new ArgumentNullException ("feed");       
-            }   
+                throw new ArgumentNullException ("feed");
+            }
 
             DatabaseManager.ExecuteNonQuery (
                 updateFeedQuery,
-                DbDefines.FeedsTableColumns.LocalID, feed.LocalID.ToString (),                                             
+                DbDefines.FeedsTableColumns.LocalID, feed.LocalID.ToString (),
                 DbDefines.FeedsTableColumns.Copyright, feed.Copyright == null ? String.Empty : feed.Copyright,
                 DbDefines.FeedsTableColumns.Description, feed.Description == null ? String.Empty : feed.Description,
-                DbDefines.FeedsTableColumns.DownloadEnclosuresAutomatically.ToString (), 
-                feed.DownloadEnclosuresAutomatically.ToString (),  
+                DbDefines.FeedsTableColumns.DownloadEnclosuresAutomatically.ToString (),
+                feed.DownloadEnclosuresAutomatically.ToString (),
                 DbDefines.FeedsTableColumns.DownloadUrl, feed.DownloadUrl == null ? String.Empty : feed.DownloadUrl,
                 DbDefines.FeedsTableColumns.Image, feed.Image == null ? String.Empty : feed.Image,
                 DbDefines.FeedsTableColumns.Interval, feed.Interval.ToString (),
@@ -305,128 +305,128 @@ namespace Migo.Syndication.Data
                 DbDefines.FeedsTableColumns.LastDownloadTime, feed.LastDownloadTime.ToUniversalTime ().ToString ("u"),
                 DbDefines.FeedsTableColumns.LastWriteTime, feed.LastWriteTime.ToUniversalTime ().ToString ("u"),
                 DbDefines.FeedsTableColumns.Link, feed.Link == null ? String.Empty : feed.Link,
-                DbDefines.FeedsTableColumns.LocalEnclosurePath, feed.LocalEnclosurePath == null ? String.Empty : feed.LocalEnclosurePath,  
+                DbDefines.FeedsTableColumns.LocalEnclosurePath, feed.LocalEnclosurePath == null ? String.Empty : feed.LocalEnclosurePath,
                 DbDefines.FeedsTableColumns.MaxItemCount, feed.MaxItemCount.ToString (),
                 DbDefines.FeedsTableColumns.Name, feed.Name == null ? String.Empty : feed.Name,
-                DbDefines.FeedsTableColumns.PubDate, feed.PubDate.ToUniversalTime ().ToString ("u"), 
+                DbDefines.FeedsTableColumns.PubDate, feed.PubDate.ToUniversalTime ().ToString ("u"),
                 DbDefines.FeedsTableColumns.SyncSetting, ((int)feed.SyncSetting).ToString (),
                 DbDefines.FeedsTableColumns.Title, feed.Title == null ? String.Empty : feed.Title,
                 DbDefines.FeedsTableColumns.Ttl, feed.Ttl.ToString (),
                 DbDefines.FeedsTableColumns.Url, feed.Url == null ? String.Empty : feed.Url
             );
         }
-        
+
         public static bool Update (IEnumerable<Feed> feeds)
         {
             if (feeds == null) {
                 throw new ArgumentNullException ("feeds");
-            }    
-            
+            }
+
             bool ret = false;
-            
+
             try {
-                foreach (Feed f in feeds) {                
+                foreach (Feed f in feeds) {
                     Update (f);
                     ret = true;
                 }
             } catch {}
-           
+
             return ret;
-        }           
-        
+        }
+
         private static Dictionary<long,FeedEnclosure> BuildEnclosuresDict ()
         {
-            IDataReader reader = null;            
-            Dictionary<long,FeedEnclosure> ret = 
-                new Dictionary<long,FeedEnclosure> ();            
-            
+            IDataReader reader = null;
+            Dictionary<long,FeedEnclosure> ret =
+                new Dictionary<long,FeedEnclosure> ();
+
             try {
                 FeedEnclosure tmpFE;
                 reader = DatabaseManager.ExecuteReader (selectAllFeedEnclosuresQuery);
                 FeedEnclosureDataWrapper fedw = new FeedEnclosureDataWrapper (reader);
-                        
+
                 while (fedw.Read ()) {
                     tmpFE = new FeedEnclosure (fedw);
                     ret.Add (fedw.ParentID, tmpFE);
                 }
-            } finally {                
+            } finally {
                 if (reader != null) {
                     reader.Dispose ();
-                    reader = null;                    
+                    reader = null;
                 }
             }
-            
+
             return ret;
         }
-        
-        private static Dictionary<long,ICollection<FeedItem>> 
+
+        private static Dictionary<long,ICollection<FeedItem>>
             BuildItemsDict (Dictionary<long,FeedEnclosure> feedEnclosures)
         {
-            IDataReader reader = null;            
+            IDataReader reader = null;
             Dictionary<long,ICollection<FeedItem>> ret =
                 new Dictionary<long,ICollection<FeedItem>> ();
-            
+
             try {
-                FeedItem tmpItem;            
-                
+                FeedItem tmpItem;
+
                 DateTime start = DateTime.Now;
                 reader = DatabaseManager.ExecuteReader (selectAllFeedItemsQuery);
                 Console.WriteLine ("Time to select all feed items:  {0}", DateTime.Now-start);
 
                 FeedItemDataWrapper fidw = new FeedItemDataWrapper (reader);
-                        
+
                 while (fidw.Read ()) {
                     tmpItem = new FeedItem (fidw);
-                            
+
                     if (!ret.ContainsKey (fidw.ParentID)) {
                         ret.Add (fidw.ParentID, new List<FeedItem> ());
                     }
-                        
+
                     ret[fidw.ParentID].Add (tmpItem);
-                    
+
                     if (feedEnclosures.ContainsKey (tmpItem.LocalID)) {
                         tmpItem.Enclosure = feedEnclosures[tmpItem.LocalID];
-                    }                       
-                } 
-            } finally {                
+                    }
+                }
+            } finally {
                 if (reader != null) {
                     reader.Dispose ();
-                    reader = null;                    
+                    reader = null;
                 }
-            } 
-  
+            }
+
             return ret;
         }
-        
+
         private static List<Feed> BuildFeedsList (FeedsManager manager, Dictionary<long,ICollection<FeedItem>> feedItems)
         {
-            IDataReader reader = null;            
+            IDataReader reader = null;
             List<Feed> ret = new List<Feed> ();
-            
+
             try {
                 Feed tmpFeed;
                 ICollection<FeedItem> tmpCollection;
-                
-                reader = DatabaseManager.ExecuteReader (selectAllFeedsQuery);                       
+
+                reader = DatabaseManager.ExecuteReader (selectAllFeedsQuery);
                 FeedDataWrapper fdw = new FeedDataWrapper (reader);
-                      
+
                 while (fdw.Read ()) {
                     tmpFeed = new Feed (manager, fdw);
 
                     if (feedItems.TryGetValue (tmpFeed.LocalID, out tmpCollection)) {
-                        tmpFeed.SetItems (tmpCollection);                        
+                        tmpFeed.SetItems (tmpCollection);
                     }
 
-                    ret.Add (tmpFeed);                        
-                }   
-            } finally {                
+                    ret.Add (tmpFeed);
+                }
+            } finally {
                 if (reader != null) {
                     reader.Dispose ();
-                    reader = null;                    
+                    reader = null;
                 }
-            }       
-            
+            }
+
             return ret;
-        }    
+        }
     }*/
 }
diff --git a/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/ItemsTableManager.cs b/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/ItemsTableManager.cs
index c4c34e5..31dd51e 100644
--- a/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/ItemsTableManager.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/ItemsTableManager.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  ItemsTableManager.cs
  *
  *  Copyright (C) 2007 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
- 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -32,22 +32,22 @@ using System.Collections;
 using System.Collections.Generic;
 
 namespace Migo.Syndication.Data
-{    
+{
     /*static class ItemsTableManager
-    {        
-        public static readonly string initQuery = @" 
+    {
+        public static readonly string initQuery = @"
             CREATE TABLE IF NOT EXISTS items (
-            	'local_id' INTEGER  PRIMARY KEY, 
+            	'local_id' INTEGER  PRIMARY KEY,
             	'parent_id' INTEGER NOT NULL DEFAULT '-1',
-            	'active' INTEGER NOT NULL DEFAULT '0', 
-            	'author' TEXT NOT NULL DEFAULT '', 
-            	'comments' TEXT NOT NULL DEFAULT '', 
-            	'description' TEXT NOT NULL DEFAULT '', 
-            	'guid' TEXT NOT NULL DEFAULT '', 
+            	'active' INTEGER NOT NULL DEFAULT '0',
+            	'author' TEXT NOT NULL DEFAULT '',
+            	'comments' TEXT NOT NULL DEFAULT '',
+            	'description' TEXT NOT NULL DEFAULT '',
+            	'guid' TEXT NOT NULL DEFAULT '',
             	'is_read' INTEGER NOT NULL DEFAULT '0',
-            	'last_download_time' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 
-            	'link' TEXT NOT NULL DEFAULT '', 
-            	'modified' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 
+            	'last_download_time' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
+            	'link' TEXT NOT NULL DEFAULT '',
+            	'modified' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
             	'pubdate' DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00', 	
             	'title' TEXT NOT NULL DEFAULT ''	
             );
@@ -57,219 +57,219 @@ namespace Migo.Syndication.Data
             BEGIN
                 DELETE FROM enclosures WHERE parent_id=old.local_id;
             END;
-            
+
             CREATE INDEX IF NOT EXISTS items_local_id_index ON items(local_id);
-            CREATE INDEX IF NOT EXISTS items_parent_id_index ON items(parent_id);                                                       
+            CREATE INDEX IF NOT EXISTS items_parent_id_index ON items(parent_id);
         ";
-        
-        private const string deactivateItemsBaseQuery = "UPDATE items SET active='0' WHERE";        
-        private static readonly string deleteFromItemsBaseQuery = "DELETE FROM items WHERE";        
-        private static readonly string insertIntoItemsQuery = 
-            String.Format ( 
+
+        private const string deactivateItemsBaseQuery = "UPDATE items SET active='0' WHERE";
+        private static readonly string deleteFromItemsBaseQuery = "DELETE FROM items WHERE";
+        private static readonly string insertIntoItemsQuery =
+            String.Format (
                 @"INSERT INTO items VALUES (
                     NULL, {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}
                 ); {12}",
-                DbDefines.ItemsTableColumns.ParentIDParameter, 
-                DbDefines.ItemsTableColumns.ActiveParameter, DbDefines.ItemsTableColumns.AuthorParameter,                
-                DbDefines.ItemsTableColumns.CommentsParameter, DbDefines.ItemsTableColumns.DescriptionParameter, 
-                DbDefines.ItemsTableColumns.GuidParameter, DbDefines.ItemsTableColumns.IsReadParameter, 
-                DbDefines.ItemsTableColumns.LastDownloadTimeParameter, DbDefines.ItemsTableColumns.LinkParameter, 
-                DbDefines.ItemsTableColumns.ModifiedParameter, DbDefines.ItemsTableColumns.PubDateParameter, 
+                DbDefines.ItemsTableColumns.ParentIDParameter,
+                DbDefines.ItemsTableColumns.ActiveParameter, DbDefines.ItemsTableColumns.AuthorParameter,
+                DbDefines.ItemsTableColumns.CommentsParameter, DbDefines.ItemsTableColumns.DescriptionParameter,
+                DbDefines.ItemsTableColumns.GuidParameter, DbDefines.ItemsTableColumns.IsReadParameter,
+                DbDefines.ItemsTableColumns.LastDownloadTimeParameter, DbDefines.ItemsTableColumns.LinkParameter,
+                DbDefines.ItemsTableColumns.ModifiedParameter, DbDefines.ItemsTableColumns.PubDateParameter,
                 DbDefines.ItemsTableColumns.TitleParameter, DbDefines.LastInsertIDQuery
             );
 
-        private static readonly string updateItemsQuery = 
+        private static readonly string updateItemsQuery =
             String.Format (
-                @"UPDATE items SET 
-                    {2}={3}, {4}={5}, {6}={7}, {8}={9}, {10}={11}, {12}={13}, 
+                @"UPDATE items SET
+                    {2}={3}, {4}={5}, {6}={7}, {8}={9}, {10}={11}, {12}={13},
                     {14}={15}, {16}={17}, {18}={19}, {20}={21}, {22}={23}, {24}={25}
                 WHERE {0}={1};",
-                DbDefines.ItemsTableColumns.LocalID, DbDefines.ItemsTableColumns.LocalIDParameter,                           
-                DbDefines.ItemsTableColumns.ParentID, DbDefines.ItemsTableColumns.ParentIDParameter, 
-                DbDefines.ItemsTableColumns.Active, DbDefines.ItemsTableColumns.ActiveParameter, 
-                DbDefines.ItemsTableColumns.Author, DbDefines.ItemsTableColumns.AuthorParameter, 
-                DbDefines.ItemsTableColumns.Comments, DbDefines.ItemsTableColumns.CommentsParameter, 
-                DbDefines.ItemsTableColumns.Description, DbDefines.ItemsTableColumns.DescriptionParameter, 
-                DbDefines.ItemsTableColumns.Guid, DbDefines.ItemsTableColumns.GuidParameter, 
-                DbDefines.ItemsTableColumns.IsRead, DbDefines.ItemsTableColumns.IsReadParameter, 
-                DbDefines.ItemsTableColumns.LastDownloadTime, DbDefines.ItemsTableColumns.LastDownloadTimeParameter, 
-                DbDefines.ItemsTableColumns.Link, DbDefines.ItemsTableColumns.LinkParameter, 
+                DbDefines.ItemsTableColumns.LocalID, DbDefines.ItemsTableColumns.LocalIDParameter,
+                DbDefines.ItemsTableColumns.ParentID, DbDefines.ItemsTableColumns.ParentIDParameter,
+                DbDefines.ItemsTableColumns.Active, DbDefines.ItemsTableColumns.ActiveParameter,
+                DbDefines.ItemsTableColumns.Author, DbDefines.ItemsTableColumns.AuthorParameter,
+                DbDefines.ItemsTableColumns.Comments, DbDefines.ItemsTableColumns.CommentsParameter,
+                DbDefines.ItemsTableColumns.Description, DbDefines.ItemsTableColumns.DescriptionParameter,
+                DbDefines.ItemsTableColumns.Guid, DbDefines.ItemsTableColumns.GuidParameter,
+                DbDefines.ItemsTableColumns.IsRead, DbDefines.ItemsTableColumns.IsReadParameter,
+                DbDefines.ItemsTableColumns.LastDownloadTime, DbDefines.ItemsTableColumns.LastDownloadTimeParameter,
+                DbDefines.ItemsTableColumns.Link, DbDefines.ItemsTableColumns.LinkParameter,
                 DbDefines.ItemsTableColumns.Modified, DbDefines.ItemsTableColumns.ModifiedParameter,
-                DbDefines.ItemsTableColumns.PubDate, DbDefines.ItemsTableColumns.PubDateParameter, 
+                DbDefines.ItemsTableColumns.PubDate, DbDefines.ItemsTableColumns.PubDateParameter,
                 DbDefines.ItemsTableColumns.Title, DbDefines.ItemsTableColumns.TitleParameter
             );
-        
+
         public static void Commit (IEnumerable<FeedItem> items)
         {
             if (items == null) {
                 throw new ArgumentNullException ("items");
-            }    
+            }
 
             FeedEnclosure tmpEnc;
             ICollection<FeedItem> itemCol = items as ICollection<FeedItem>;
-            
+
             Dictionary<QueuedDbCommand,FeedItem> itemCommandPairs = (itemCol == null) ?
-                new Dictionary<QueuedDbCommand,FeedItem> () : 
+                new Dictionary<QueuedDbCommand,FeedItem> () :
                 new Dictionary<QueuedDbCommand,FeedItem> (itemCol.Count);
-            
-            List<FeedEnclosure> enclosures = 
+
+            List<FeedEnclosure> enclosures =
                 new List<FeedEnclosure> (itemCommandPairs.Count);
-            
+
             foreach (FeedItem i in items) {
                 itemCommandPairs.Add (QueuedDbCommand.CreateScalar (
                     CreateInsertCommandImpl (i)), i
                 );
             }
-            
-            foreach (FeedItem i in items) {                
+
+            foreach (FeedItem i in items) {
                 if (i.Enclosure != null) {
                     tmpEnc = i.Enclosure as FeedEnclosure;
                     if (tmpEnc != null) {
                         enclosures.Add (tmpEnc);
                     }
-                }            
-            }            
-            
+                }
+            }
+
             DatabaseManager.Enqueue (itemCommandPairs.Keys);
-            
+
             foreach (KeyValuePair<QueuedDbCommand,FeedItem> kvp in itemCommandPairs) {
                 kvp.Value.LocalID = Convert.ToInt64 (kvp.Key.ScalarResult);
             }
-                            
+
             if (enclosures.Count > 0) {
                 EnclosuresTableManager.Commit (enclosures);
             }
         }
-        
+
         public static IDbCommand CreateInsertCommand (FeedItem item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-            
+
             return CreateInsertCommandImpl (item);
         }
-        
+
         private static IDbCommand CreateInsertCommandImpl (FeedItem item)
         {
             return DatabaseManager.CreateCommand (
                 insertIntoItemsQuery,
                 DbDefines.ItemsTableColumns.ParentID, item.Parent.LocalID.ToString (),
-                DbDefines.ItemsTableColumns.Active, (item.Active) ? "1" : "0",                                              
-                DbDefines.ItemsTableColumns.Author, item.Author, 
-                DbDefines.ItemsTableColumns.Comments, item.Comments, 
-                DbDefines.ItemsTableColumns.Description, item.Description, 
-                DbDefines.ItemsTableColumns.Guid, item.Guid.ToString (), 
-                DbDefines.ItemsTableColumns.IsRead, item.IsRead.ToString (), 
-                DbDefines.ItemsTableColumns.LastDownloadTime, item.LastDownloadTime.ToUniversalTime ().ToString ("u"), 
-                DbDefines.ItemsTableColumns.Link, item.Link, 
+                DbDefines.ItemsTableColumns.Active, (item.Active) ? "1" : "0",
+                DbDefines.ItemsTableColumns.Author, item.Author,
+                DbDefines.ItemsTableColumns.Comments, item.Comments,
+                DbDefines.ItemsTableColumns.Description, item.Description,
+                DbDefines.ItemsTableColumns.Guid, item.Guid.ToString (),
+                DbDefines.ItemsTableColumns.IsRead, item.IsRead.ToString (),
+                DbDefines.ItemsTableColumns.LastDownloadTime, item.LastDownloadTime.ToUniversalTime ().ToString ("u"),
+                DbDefines.ItemsTableColumns.Link, item.Link,
                 DbDefines.ItemsTableColumns.Modified, item.Modified.ToUniversalTime ().ToString ("u"),
-                DbDefines.ItemsTableColumns.PubDate, item.PubDate.ToUniversalTime ().ToString ("u"), 
-                DbDefines.ItemsTableColumns.Title, item.Title            
+                DbDefines.ItemsTableColumns.PubDate, item.PubDate.ToUniversalTime ().ToString ("u"),
+                DbDefines.ItemsTableColumns.Title, item.Title
             );
-        }        
-        
+        }
+
         public static void Deactivate (FeedItem item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
-            }    
-            
+            }
+
              DatabaseManager.ExecuteNonQuery (
                 String.Format (
                     "{0} {1}={2};",
-                    deactivateItemsBaseQuery, 
-                    DbDefines.ItemsTableColumns.LocalID, 
+                    deactivateItemsBaseQuery,
+                    DbDefines.ItemsTableColumns.LocalID,
                     DbDefines.ItemsTableColumns.LocalIDParameter
                 )
-            );                 
+            );
         }
-        
+
         public static void Deactivate (IEnumerable<FeedItem> items)
         {
             if (items == null) {
                 throw new ArgumentNullException ("items");
-            }        
+            }
 
             List<long> ids = new List<long> ();
-            
+
             foreach (FeedItem i in items) {
                 if (i != null) {
                     ids.Add (i.LocalID);
                 }
             }
-            
+
             if (ids.Count > 0) {
                 string query = DataUtility.MultipleOnIDQuery (
-                    deactivateItemsBaseQuery, 
-                    DbDefines.ItemsTableColumns.LocalID, 
+                    deactivateItemsBaseQuery,
+                    DbDefines.ItemsTableColumns.LocalID,
                     ids.ToArray ()
                 );
-                
+
                 DatabaseManager.ExecuteNonQuery (query);
-            }      
-        }        
-        
+            }
+        }
+
         public static void Delete (FeedItem item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
             }
-                        
+
             DatabaseManager.ExecuteNonQuery (
                 String.Format (
                     "{0} {1}={2};",
-                    deleteFromItemsBaseQuery, 
-                    DbDefines.ItemsTableColumns.LocalID, 
+                    deleteFromItemsBaseQuery,
+                    DbDefines.ItemsTableColumns.LocalID,
                     DbDefines.ItemsTableColumns.LocalIDParameter
                 )
             );
         }
-        
+
         public static void Delete (IEnumerable<FeedItem> items)
         {
             if (items == null) {
             	throw new ArgumentNullException ("items");
             }
-            
+
             List<long> ids = new List<long> ();
-            
+
             foreach (FeedItem i in items) {
                 if (i != null) {
                     ids.Add (i.LocalID);
                 }
             }
-            
+
             if (ids.Count > 0) {
                 string query = DataUtility.MultipleOnIDQuery (
                     deleteFromItemsBaseQuery, DbDefines.ItemsTableColumns.LocalID, ids.ToArray ()
                 );
-                
+
                 DatabaseManager.ExecuteNonQuery (query);
             }
-        }           
-     
+        }
+
         public static void Init ()
         {
-            DatabaseManager.ExecuteNonQuery (initQuery);               
-        }        
-        
+            DatabaseManager.ExecuteNonQuery (initQuery);
+        }
+
         public static long Insert (FeedItem item)
         {
             if (item == null) {
                 throw new ArgumentNullException ("item");
             } else if (item.LocalID > 0) {
                 return item.LocalID;
-            }   
+            }
 
             long ret = -1;
-            
+
             if (item.Parent == null) {
                 return ret;
             }
-            
+
             ret = Convert.ToInt64 (CreateInsertCommandImpl (item));
-                        
+
             return ret;
         }
 
@@ -277,62 +277,62 @@ namespace Migo.Syndication.Data
         {
             if (items == null) {
                 throw new ArgumentNullException ("items");
-            }    
-            
+            }
+
             bool ret = false;
-        
+
             try {
-                foreach (FeedItem i in items) {                
+                foreach (FeedItem i in items) {
                     Insert (i);
                 }
-                
+
                 ret = true;
-            } catch {}   
-        
+            } catch {}
+
             return ret;
         }
 
         public static void Update (FeedItem item)
         {
             if (item == null) {
-                throw new ArgumentNullException ("item");       
-            }   
-            
+                throw new ArgumentNullException ("item");
+            }
+
             DatabaseManager.ExecuteNonQuery (
                 updateItemsQuery,
-                DbDefines.ItemsTableColumns.LocalID, item.LocalID.ToString (),                
-                DbDefines.ItemsTableColumns.ParentID, item.Parent.LocalID.ToString (), 
-                DbDefines.ItemsTableColumns.Active, (item.Active) ? "1" : "0",                 
-                DbDefines.ItemsTableColumns.Author, item.Author, 
-                DbDefines.ItemsTableColumns.Comments, item.Comments, 
-                DbDefines.ItemsTableColumns.Description, item.Description, 
-                DbDefines.ItemsTableColumns.Guid, item.Guid.ToString (), 
-                DbDefines.ItemsTableColumns.IsRead, item.IsRead.ToString (), 
-                DbDefines.ItemsTableColumns.LastDownloadTime, item.LastDownloadTime.ToUniversalTime ().ToString ("u"), 
-                DbDefines.ItemsTableColumns.Link, item.Link, 
+                DbDefines.ItemsTableColumns.LocalID, item.LocalID.ToString (),
+                DbDefines.ItemsTableColumns.ParentID, item.Parent.LocalID.ToString (),
+                DbDefines.ItemsTableColumns.Active, (item.Active) ? "1" : "0",
+                DbDefines.ItemsTableColumns.Author, item.Author,
+                DbDefines.ItemsTableColumns.Comments, item.Comments,
+                DbDefines.ItemsTableColumns.Description, item.Description,
+                DbDefines.ItemsTableColumns.Guid, item.Guid.ToString (),
+                DbDefines.ItemsTableColumns.IsRead, item.IsRead.ToString (),
+                DbDefines.ItemsTableColumns.LastDownloadTime, item.LastDownloadTime.ToUniversalTime ().ToString ("u"),
+                DbDefines.ItemsTableColumns.Link, item.Link,
                 DbDefines.ItemsTableColumns.Modified, item.Modified.ToUniversalTime ().ToString ("u"),
-                DbDefines.ItemsTableColumns.PubDate, item.PubDate.ToUniversalTime ().ToString ("u"), 
+                DbDefines.ItemsTableColumns.PubDate, item.PubDate.ToUniversalTime ().ToString ("u"),
                 DbDefines.ItemsTableColumns.Title, item.Title
             );
         }
-        
+
         public static bool Update (IEnumerable<FeedItem> items)
         {
             if (items == null) {
                 throw new ArgumentNullException ("items");
-            }    
-            
+            }
+
             bool ret = false;
-            
+
             try {
-                foreach (FeedItem i in items) {                
+                foreach (FeedItem i in items) {
                     Update (i);
                 }
-                
+
                 ret = true;
-            } catch {}     
-            
+            } catch {}
+
             return ret;
-        }        
+        }
     }*/
 }
diff --git a/src/Libraries/Migo/Migo.Syndication/MigoItem.cs b/src/Libraries/Migo/Migo.Syndication/MigoItem.cs
index 4b14e06..90e6040 100644
--- a/src/Libraries/Migo/Migo.Syndication/MigoItem.cs
+++ b/src/Libraries/Migo/Migo.Syndication/MigoItem.cs
@@ -48,7 +48,7 @@ namespace Migo.Syndication
             get { return cache_model_id; }
             set { cache_model_id = value; }
         }
-        
+
         public abstract long DbId { get; protected set;}
     }
 }
\ No newline at end of file
diff --git a/src/Libraries/Migo/Migo.Syndication/MigoModelProvider.cs b/src/Libraries/Migo/Migo.Syndication/MigoModelProvider.cs
index 665c6cf..f0689a8 100644
--- a/src/Libraries/Migo/Migo.Syndication/MigoModelProvider.cs
+++ b/src/Libraries/Migo/Migo.Syndication/MigoModelProvider.cs
@@ -40,18 +40,18 @@ namespace Migo.Syndication
     public class MigoModelProvider<T> : SqliteModelProvider<T> where T : MigoItem<T>, ICacheableItem, new()
     {
         private Dictionary<long, T> full_cache = new Dictionary<long, T> ();
-        
+
         public MigoModelProvider (HyenaSqliteConnection connection, string table_name) : base (connection, table_name)
         {
         }
 
 #region Overrides
-                
+
         public override T FetchSingle (long id)
         {
             return GetCached (id) ?? CacheResult (base.FetchSingle (id));
         }
-        
+
         public override void Save (T target)
         {
             base.Save (target);
@@ -64,23 +64,23 @@ namespace Migo.Syndication
         {
             return GetCached (PrimaryKeyFor (reader)) ?? CacheResult (base.Load (reader));
         }
-        
+
         public override void Delete (long id)
         {
             full_cache.Remove (id);
             base.Delete (id);
         }
-        
+
         public override void Delete (IEnumerable<T> items)
         {
             foreach (T item in items) {
                 if (item != null)
                     full_cache.Remove (PrimaryKeyFor (item));
             }
-                
+
             base.Delete (items);
         }
-        
+
 #endregion
 
 #region Utility Methods
@@ -93,7 +93,7 @@ namespace Migo.Syndication
                 return null;
             }
         }
-        
+
         private T CacheResult (T item)
         {
             full_cache[item.DbId] = item;
@@ -101,6 +101,6 @@ namespace Migo.Syndication
         }
 
 #endregion
-        
+
     }
 }
\ No newline at end of file
diff --git a/src/Libraries/Migo/Migo.Syndication/Rfc822DateTime.cs b/src/Libraries/Migo/Migo.Syndication/Rfc822DateTime.cs
index 7099398..c28a1d7 100644
--- a/src/Libraries/Migo/Migo.Syndication/Rfc822DateTime.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Rfc822DateTime.cs
@@ -8,21 +8,21 @@
 /*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -33,15 +33,15 @@ namespace Migo.Syndication
 {
     public static class Rfc822DateTime
     {
-        private const string monthsStr = 
+        private const string monthsStr =
             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|" +
             "January|February|March|April|May|June|July|August|" +
             "September|October|November|December";
-        
-        private const string daysOfWeek = 
+
+        private const string daysOfWeek =
             "Mon|Tue|Wed|Thu|Fri|Sat|Sun|" +
             "Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday";
-        
+
         private const string rfc822DTExp =
             @"^(?<dayofweek>(" + daysOfWeek + "), )?" +
             @"(?<day>\d\d?) " +
@@ -56,7 +56,7 @@ namespace Migo.Syndication
         static Rfc822DateTime()
         {
             months = monthsStr.Split ('|');
-            rfc822DTRegex = new Regex (rfc822DTExp, 
+            rfc822DTRegex = new Regex (rfc822DTExp,
                 RegexOptions.Compiled | RegexOptions.IgnoreCase);
         }
 
@@ -92,7 +92,7 @@ namespace Migo.Syndication
                 }
 				
 				ret = new DateTime (year, month, day, hours, minutes, seconds);
-                                
+
                 if (timeZone != String.Empty) {
                     ret -= ParseGmtOffset (timeZone);
                 }
@@ -107,15 +107,15 @@ namespace Migo.Syndication
         {
             bool ret = false;
             result = DateTime.MinValue;
-            
+
             try {
                 result = Parse (dateTime);
                 ret = true;
             } catch {}
-                
+
             return ret;
         }
-        
+
         private static int MonthToInt32 (string month)
         {
             int i = 1;
@@ -124,7 +124,7 @@ namespace Migo.Syndication
                 if (month == s) {
                     break;
                 }
-                
+
                 if (++i % 13 == 0) {
                     i = 1;
                 }
@@ -167,12 +167,12 @@ namespace Migo.Syndication
                     case "G": offsetHours = -7; break;
                     case "H": offsetHours = -8; break;
                     case "I": offsetHours = -9; break;
-                    
+
                     // Q.  Why was 'J' left out of Z-Time?
-                    // A.  http://www.maybeck.com/ztime/  
-                    
+                    // A.  http://www.maybeck.com/ztime/
+
                     // That's what I like about this job, you learn stuff.
-                    
+
                     case "K": offsetHours = -10; break;
                     case "L": offsetHours = -11; break;
                     case "M": offsetHours = -12; break;				
@@ -188,7 +188,7 @@ namespace Migo.Syndication
                     case "W": offsetHours = 10; break;
                     case "X": offsetHours = 11; break;
                     case "Y": offsetHours = 12; break;
-                }   
+                }
             }
 
             return TimeSpan.FromTicks (
diff --git a/src/Libraries/Migo/Migo.Syndication/RssParser.cs b/src/Libraries/Migo/Migo.Syndication/RssParser.cs
index d5d4cfe..bd2112f 100644
--- a/src/Libraries/Migo/Migo.Syndication/RssParser.cs
+++ b/src/Libraries/Migo/Migo.Syndication/RssParser.cs
@@ -41,7 +41,7 @@ namespace Migo.Syndication
     {
         private XmlDocument doc;
         private XmlNamespaceManager mgr;
-        
+
         public RssParser (string url, string xml)
         {
             xml = xml.TrimStart ();
@@ -71,23 +71,23 @@ namespace Migo.Syndication
 
                 if (!loaded) {
                     Hyena.Log.Exception (e);
-                    throw new FormatException ("Invalid XML document.");                                  
+                    throw new FormatException ("Invalid XML document.");
                 }
             }
             CheckRss ();
         }
-        
+
         public RssParser (string url, XmlDocument doc)
         {
             this.doc = doc;
             CheckRss ();
         }
-    
+
         public Feed CreateFeed ()
         {
             return UpdateFeed (new Feed ());
         }
-        
+
         public Feed UpdateFeed (Feed feed)
         {
             try {
@@ -100,19 +100,19 @@ namespace Migo.Syndication
                 }
                 feed.Language         = GetXmlNodeText (doc, "/rss/channel/language");
                 feed.LastBuildDate    = GetRfc822DateTime (doc, "/rss/channel/lastBuildDate");
-                feed.Link             = GetXmlNodeText (doc, "/rss/channel/link"); 
+                feed.Link             = GetXmlNodeText (doc, "/rss/channel/link");
                 feed.PubDate          = GetRfc822DateTime (doc, "/rss/channel/pubDate");
                 feed.Keywords         = GetXmlNodeText (doc, "/rss/channel/itunes:keywords");
                 feed.Category         = GetXmlNodeText (doc, "/rss/channel/itunes:category/@text");
-                
+
                 return feed;
             } catch (Exception e) {
                  Hyena.Log.Exception ("Caught error parsing RSS channel", e);
             }
-             
+
             return null;
         }
-        
+
         public IEnumerable<FeedItem> GetFeedItems (Feed feed)
         {
             XmlNodeList nodes = null;
@@ -121,11 +121,11 @@ namespace Migo.Syndication
             } catch (Exception e) {
                 Hyena.Log.Exception ("Unable to get any RSS items", e);
             }
-            
+
             if (nodes != null) {
                 foreach (XmlNode node in nodes) {
                     FeedItem item = null;
-                    
+
                     try {
                         item = ParseItem (node);
                         if (item != null) {
@@ -134,14 +134,14 @@ namespace Migo.Syndication
                     } catch (Exception e) {
                         Hyena.Log.Exception (e);
                     }
-                    
+
                     if (item != null) {
                         yield return item;
                     }
                 }
             }
         }
-        
+
         private FeedItem ParseItem (XmlNode node)
         {
             try {
@@ -149,11 +149,11 @@ namespace Migo.Syndication
                 item.Description = StringUtil.RemoveNewlines (GetXmlNodeText (node, "description"));
                 item.UpdateStrippedDescription ();
                 item.Title = StringUtil.RemoveNewlines (GetXmlNodeText (node, "title"));
-            
+
                 if (String.IsNullOrEmpty (item.Description) && String.IsNullOrEmpty (item.Title)) {
                     throw new FormatException ("node:  Either 'title' or 'description' node must exist.");
                 }
-                
+
                 item.Author            = GetXmlNodeText (node, "author");
                 item.Comments          = GetXmlNodeText (node, "comments");
                 // Removed, since we form our own Guid, since feeds don't seem to be consistent
@@ -166,15 +166,15 @@ namespace Migo.Syndication
 
                 // TODO prefer <media:content> nodes over <enclosure>?
                 item.Enclosure = ParseEnclosure (node) ?? ParseMediaContent (node);
-                
+
                 return item;
              } catch (Exception e) {
                  Hyena.Log.Exception ("Caught error parsing RSS item", e);
              }
-             
+
              return null;
         }
-        
+
         private FeedEnclosure ParseEnclosure (XmlNode node)
         {
             try {
@@ -183,7 +183,7 @@ namespace Migo.Syndication
                 enclosure.Url = GetXmlNodeText (node, "enclosure/@url");
                 if (enclosure.Url == null)
                     return null;
-                
+
                 enclosure.FileSize = Math.Max (0, GetInt64 (node, "enclosure/@length"));
                 enclosure.MimeType = GetXmlNodeText (node, "enclosure/@type");
                 enclosure.Duration = GetITunesDuration (node);
@@ -192,17 +192,17 @@ namespace Migo.Syndication
              } catch (Exception e) {
                  Hyena.Log.Exception ("Caught error parsing RSS enclosure", e);
              }
-             
+
              return null;
         }
-        
+
         // Parse one Media RSS media:content node
         // http://search.yahoo.com/mrss/
         private FeedEnclosure ParseMediaContent (XmlNode item_node)
         {
             try {
                 XmlNode node = null;
-                
+
                 // Get the highest bitrate "full" content item
                 // TODO allow a user-preference for a feed to decide what quality to get, if there
                 // are options?
@@ -211,61 +211,61 @@ namespace Migo.Syndication
                     string expr = GetXmlNodeText (test_node, "@expression");
                     if (!(String.IsNullOrEmpty (expr) || expr == "full"))
                         continue;
-                    
+
                     int bitrate = GetInt32 (test_node, "@bitrate");
                     if (node == null || bitrate > max_bitrate) {
                         node = test_node;
                         max_bitrate = bitrate;
                     }
                 }
-                
+
                 if (node == null)
                     return null;
-                    
+
                 FeedEnclosure enclosure = new FeedEnclosure ();
                 enclosure.Url = GetXmlNodeText (node, "@url");
                 if (enclosure.Url == null)
                     return null;
-                
+
                 enclosure.FileSize = Math.Max (0, GetInt64 (node, "@fileSize"));
                 enclosure.MimeType = GetXmlNodeText (node, "@type");
                 enclosure.Duration = TimeSpan.FromSeconds (GetInt64 (node, "@duration"));
                 enclosure.Keywords = GetXmlNodeText (item_node, "itunes:keywords");
-                
+
                 // TODO get the thumbnail URL
-                
+
                 return enclosure;
              } catch (Exception e) {
                  Hyena.Log.Exception ("Caught error parsing RSS media:content", e);
              }
-             
+
              return null;
         }
-        
+
         private void CheckRss ()
-        {            
+        {
             if (doc.SelectSingleNode ("/rss") == null) {
                 throw new FormatException ("Invalid RSS document.");
             }
-            
+
             if (GetXmlNodeText (doc, "/rss/channel/title") == String.Empty) {
                 throw new FormatException (
                     "node: 'title', 'description', and 'link' nodes must exist."
-                );                
+                );
             }
-            
+
             mgr = new XmlNamespaceManager (doc.NameTable);
             mgr.AddNamespace ("itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd";);
             mgr.AddNamespace ("creativeCommons", "http://backend.userland.com/creativeCommonsRssModule";);
             mgr.AddNamespace ("media", "http://search.yahoo.com/mrss/";);
             mgr.AddNamespace ("dcterms", "http://purl.org/dc/terms/";);
         }
-        
+
         public TimeSpan GetITunesDuration (XmlNode node)
         {
             return GetITunesDuration (GetXmlNodeText (node, "itunes:duration"));
         }
-        
+
         public static TimeSpan GetITunesDuration (string duration)
         {
             if (String.IsNullOrEmpty (duration)) {
@@ -274,27 +274,27 @@ namespace Migo.Syndication
 
             int hours = 0, minutes = 0, seconds = 0;
             string [] parts = duration.Split (':');
-            
+
             if (parts.Length > 0)
                 seconds = Int32.Parse (parts[parts.Length - 1]);
-                
+
             if (parts.Length > 1)
                 minutes = Int32.Parse (parts[parts.Length - 2]);
-                
+
             if (parts.Length > 2)
                 hours = Int32.Parse (parts[parts.Length - 3]);
-            
+
             return TimeSpan.FromSeconds (hours * 3600 + minutes * 60 + seconds);
         }
 
 #region Xml Convienience Methods
-    
+
         public string GetXmlNodeText (XmlNode node, string tag)
         {
             XmlNode n = node.SelectSingleNode (tag, mgr);
             return (n == null) ? null : n.InnerText.Trim ();
         }
-        
+
         public DateTime GetRfc822DateTime (XmlNode node, string tag)
         {
             DateTime ret = DateTime.MinValue;
@@ -309,10 +309,10 @@ namespace Migo.Syndication
                     return ret;
                 }
             }
-                    
-            return ret;              
+
+            return ret;
         }
-        
+
         public long GetInt64 (XmlNode node, string tag)
         {
             long ret = 0;
@@ -321,8 +321,8 @@ namespace Migo.Syndication
             if (!String.IsNullOrEmpty (result)) {
                 Int64.TryParse (result, out ret);
             }
-                    
-            return ret;              
+
+            return ret;
         }
 
         public int GetInt32 (XmlNode node, string tag)
@@ -333,8 +333,8 @@ namespace Migo.Syndication
             if (!String.IsNullOrEmpty (result)) {
                 Int32.TryParse (result, out ret);
             }
-                    
-            return ret;              
+
+            return ret;
         }
 
 #endregion
diff --git a/src/Libraries/Migo/Migo.Syndication/Tests/XmlTests.cs b/src/Libraries/Migo/Migo.Syndication/Tests/XmlTests.cs
index 62b9db3..e89d670 100644
--- a/src/Libraries/Migo/Migo.Syndication/Tests/XmlTests.cs
+++ b/src/Libraries/Migo/Migo.Syndication/Tests/XmlTests.cs
@@ -57,12 +57,12 @@ namespace Migo.Syndication.Tests
                 "Sat, 17 May 2008 20:47:57 +0000",      DateTime.Parse ("17/05/2008 15.47.57"),
                 "Sat, 17 May 2008 19:33:42 +0000",      DateTime.Parse ("17/05/2008 14.33.42")
             );
-    
+
             AssertForEach (pairs, delegate (TransformPair<string, DateTime> pair) {
                 Assert.AreEqual (pair.To, Rfc822DateTime.Parse (pair.From));
             });
         }
-    
+
         [Test]
         public void TestParseITunesDuration ()
         {
@@ -78,7 +78,7 @@ namespace Migo.Syndication.Tests
                 "1:02:22", new TimeSpan (1, 2, 22),
                 "9:0:0",   new TimeSpan (9, 0, 0)
             );
-    
+
             AssertForEach (pairs, delegate (TransformPair<string, TimeSpan> pair) {
                 Assert.AreEqual (pair.To, RssParser.GetITunesDuration (pair.From));
             });
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs
index 8d02efc..1346602 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs
@@ -5,33 +5,33 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Threading;
 using System.Collections.Generic;
 
 namespace Migo.TaskCore
-{        
+{
     delegate void ExecuteCommand (ICommand command);
 
     public class AsyncCommandQueue : IDisposable
@@ -43,15 +43,15 @@ namespace Migo.TaskCore
         private RegisteredWaitHandle registeredHandle;
         private AutoResetEvent are = new AutoResetEvent (false);
         private ManualResetEvent executingHandle = new ManualResetEvent (true);
-        
+
         private readonly ExecuteCommand execCommand;
-        
+
         private readonly object userSync;
         private readonly object sync = new object ();
-                
-        public EventHandler<EventArgs> QueueProcessed;        
-        public EventHandler<EventArgs> QueueProcessing; 
-        
+
+        public EventHandler<EventArgs> QueueProcessed;
+        public EventHandler<EventArgs> QueueProcessing;
+
         private bool IsProcessed {
             get {
                 bool ret = false;
@@ -59,13 +59,13 @@ namespace Migo.TaskCore
                 lock (sync) {
                     if (eventQueue.Count == 0) {
                         ret = true;
-                    }                
+                    }
                 }
-                
+
                 return ret;
             }
-        }        
-        
+        }
+
         public virtual WaitHandle WaitHandle {
             get { return executingHandle; }
         }
@@ -73,11 +73,11 @@ namespace Migo.TaskCore
         public AsyncCommandQueue () : this (null)
         {
         }
-        
+
         public AsyncCommandQueue (object sync)
         {
             userSync = sync;
-            
+
             if (userSync == null) {
                 execCommand = delegate (ICommand command) {
                     command.Execute ();
@@ -87,60 +87,60 @@ namespace Migo.TaskCore
                     lock (userSync) {
                         command.Execute ();
                     }
-                };                    
+                };
             }
-            
+
             eventQueue = new Queue<ICommand> ();
 
             registeredHandle = ThreadPool.RegisterWaitForSingleObject (
                 are, ProcessEventQueue, null, -1, false
             );
         }
-        
+
         public virtual void Dispose ()
         {
             if (SetDisposed ()) {
-                
+
                 executingHandle.WaitOne ();
-                
+
                 if (registeredHandle != null) {
                     registeredHandle.Unregister (null);
                     registeredHandle = null;
                 }
-                        
+
                 if (are != null) {
                     are.Close ();
                     are = null;
                 }
-                
+
                 if (executingHandle != null) {
                     executingHandle.Close ();
                     executingHandle = null;
-                }                
-                
+                }
+
                 eventQueue = null;
             }
         }
-    
+
         public virtual bool Register (ICommand command)
         {
-            lock (sync) {   
+            lock (sync) {
                 if (disposed) {
                     return false;
                 }
-            
+
                 return Register (command, true);
             }
         }
-        
+
         protected virtual bool Register (ICommand command, bool pumpQueue)
         {
             if (command == null) {
                 throw new ArgumentNullException ("command");
             }
-           
+
             eventQueue.Enqueue (command);
-            
+
             if (!executing && pumpQueue) {
                 SetExecuting (true);
             }
@@ -153,40 +153,40 @@ namespace Migo.TaskCore
             if (commands == null) {
                 throw new ArgumentNullException ("commands");
             }
-            
+
             lock (sync) {
                 if (disposed) {
                     return false;
                 }
-                
+
                 foreach (ICommand c in commands) {
                     Register (c, false);
                 }
-                
+
                 if (!executing) {
                     SetExecuting (true);
-                }                
+                }
             }
-            
+
             return true;
         }
 
-        protected virtual void SetExecuting (bool exec) 
+        protected virtual void SetExecuting (bool exec)
         {
             if (exec) {
                 executing = true;
-                are.Set ();                
+                are.Set ();
                 executingHandle.Reset ();
             } else {
                 executing = false;
                 executingHandle.Set ();
             }
         }
-        
+
         protected virtual bool SetDisposed ()
         {
             bool ret = false;
-            
+
             lock (sync) {
                 if (!disposed) {
                     ret = disposed = true;
@@ -194,12 +194,12 @@ namespace Migo.TaskCore
             }
             return ret;
         }
-        
+
         protected virtual void ProcessEventQueue (object state, bool timedOut)
-        {     
+        {
             ICommand e;
             bool done = false;
-           
+
             while (!done) {
                 RaiseEvent (QueueProcessing);
 
@@ -207,21 +207,21 @@ namespace Migo.TaskCore
                     lock (sync) {
                         e = eventQueue.Dequeue ();
                     }
-                    
+
                     if (e != null) {
                         try {
                             execCommand (e);
                         } catch (Exception ex) {
                             Hyena.Log.Exception (ex);
                         }
-                    } 
-                                       
+                    }
+
                     if (IsProcessed) {
                         RaiseEvent (QueueProcessed);
                         done = true;
-                    }                
+                    }
 
-                    if (done) {                
+                    if (done) {
                         lock (sync) {
                             if (eventQueue.Count == 0) {
                                 SetExecuting (false);
@@ -229,7 +229,7 @@ namespace Migo.TaskCore
                                 done = false;
                             }
                         }
-                        
+
                         break;
                     }
                 }
@@ -245,8 +245,8 @@ namespace Migo.TaskCore
                     handler (this, new EventArgs ());
                 } catch (Exception ex) {
                     Hyena.Log.Exception (ex);
-                }                
-            }            
+                }
+            }
         }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandDelegate.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandDelegate.cs
index 34418f2..951152b 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandDelegate.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandDelegate.cs
@@ -5,30 +5,30 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 using System;
 
 namespace Migo.TaskCore
-{    
-    public delegate void CommandDelegate ();        
+{
+    public delegate void CommandDelegate ();
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandQueueManager.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandQueueManager.cs
index 10612cc..0ef3bef 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandQueueManager.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandQueueManager.cs
@@ -1,28 +1,28 @@
-/*************************************************************************** 
+/***************************************************************************
  *  CommandQueueManager.cs
  *
  *  Copyright (C) 2008 Michael C. Urbanski
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -30,19 +30,19 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 
-namespace Migo.TaskCore 
+namespace Migo.TaskCore
 {
     public static class CommandQueueManager
     {
-        private static readonly object sync;    
+        private static readonly object sync;
         private static Dictionary<Guid,AsyncCommandQueue> queues;
-        
+
         static CommandQueueManager ()
         {
             queues = new Dictionary<Guid,AsyncCommandQueue> ();
             sync = ((ICollection)queues).SyncRoot;
         }
-        
+
         public static AsyncCommandQueue GetCommandQueue (Guid guid)
         {
             lock (sync) {
@@ -50,22 +50,22 @@ namespace Migo.TaskCore
                     return queues[guid];
                 }
             }
-            
+
             return null;
         }
-        
+
         public static Guid Register (AsyncCommandQueue queue)
         {
             if (queue == null) {
                 throw new ArgumentNullException ("queue");
             }
-            
+
             Guid guid = Guid.NewGuid ();
-            
+
             lock (sync) {
-                queues.Add (guid, queue);        
+                queues.Add (guid, queue);
             }
-            
+
             return guid;
         }
     }
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandWrapper.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandWrapper.cs
index c6fe1f5..4270fce 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandWrapper.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/CommandWrapper.cs
@@ -5,41 +5,41 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 using System;
 
 namespace Migo.TaskCore
-{           
+{
     public class CommandWrapper : ICommand
     {
         protected readonly CommandDelegate d;
 
-        public CommandWrapper (CommandDelegate del) 
+        public CommandWrapper (CommandDelegate del)
         {
             if (del == null) {
                 throw new ArgumentNullException ("del");
             }
-            
+
             this.d = del;
         }
 
@@ -47,6 +47,6 @@ namespace Migo.TaskCore
         public void Execute ()
         {
             d ();
-        }    
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/EventWrapper.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/EventWrapper.cs
index 9a91c74..f52ba73 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/EventWrapper.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/EventWrapper.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -36,13 +36,13 @@ namespace Migo.TaskCore
         private readonly object sender;
         private readonly EventHandler<T> handler;
 
-        public EventWrapper (EventHandler<T> handler, object sender, T e) 
+        public EventWrapper (EventHandler<T> handler, object sender, T e)
         {
             if (handler == null) {
                 throw new ArgumentNullException ("handler");
             } else if (e == null) {
                 throw new ArgumentNullException ("e");
-            } 
+            }
 
             this.e = e;
             this.sender = sender;
@@ -52,7 +52,7 @@ namespace Migo.TaskCore
 
         public void Execute ()
         {
-            handler (sender, e);             
-        }    
+            handler (sender, e);
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/ICommand.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/ICommand.cs
index f9b96dd..6e389f5 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/ICommand.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncCommandQueue/ICommand.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -31,5 +31,5 @@ namespace Migo.TaskCore
     public interface ICommand
     {
         void Execute ();
-    }    
+    }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/AsyncTaskScheduler.cs b/src/Libraries/Migo/Migo.TaskCore/AsyncTaskScheduler.cs
index 55377a8..22e392a 100644
--- a/src/Libraries/Migo/Migo.TaskCore/AsyncTaskScheduler.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/AsyncTaskScheduler.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWare IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWare OR THE USE OR OTHER 
+ *  THE SOFTWare IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWare OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -35,48 +35,48 @@ using System.Collections.Generic;
 using C5;
 
 namespace Migo.TaskCore
-{   
+{
     class ScheduledCommandWrapperComparer : IComparer<ScheduledCommandWrapper>
     {
         public int Compare (ScheduledCommandWrapper left,
                             ScheduledCommandWrapper right)
         {
             return DateTime.Compare (left.ScheduledFor, right.ScheduledFor);
-        }         
+        }
     }
-    
-    public class ScheduledCommandWrapper : CommandWrapper 
+
+    public class ScheduledCommandWrapper : CommandWrapper
     {
-        private readonly DateTime scheduledFor;        
-        
+        private readonly DateTime scheduledFor;
+
         public DateTime ScheduledFor {
             get { return scheduledFor; }
         }
-        
+
         public ScheduledCommandWrapper (DateTime t, CommandDelegate d) : base (d)
         {
             scheduledFor = t;
         }
     }
 
-    public static class TaskScheduler 
-    {        
+    public static class TaskScheduler
+    {
         private static Timer nextEventTimer;
-        private static ScheduledCommandWrapper nextTask;              
+        private static ScheduledCommandWrapper nextTask;
         private static IntervalHeap<ScheduledCommandWrapper> commands;
-        private static AutoResetEvent timerHandle = new AutoResetEvent (false);        
-        
-        private static bool disposed;                
-        private static readonly object sync = new object ();                
-        
-        static TaskScheduler () 
+        private static AutoResetEvent timerHandle = new AutoResetEvent (false);
+
+        private static bool disposed;
+        private static readonly object sync = new object ();
+
+        static TaskScheduler ()
         {
             commands = new IntervalHeap<ScheduledCommandWrapper> (
                 new ScheduledCommandWrapperComparer ()
             );
-            
+
             nextEventTimer = new Timer (TimerCallbackHandler);
-            ThreadPool.QueueUserWorkItem (BlahSignaledHandler);            
+            ThreadPool.QueueUserWorkItem (BlahSignaledHandler);
         }
 
         public static void Dispose ()
@@ -84,44 +84,44 @@ namespace Migo.TaskCore
             lock (sync) {
                 Console.WriteLine ("Dispose - start");
                 if (!disposed) {
-                    disposed = true;                    
+                    disposed = true;
 
                     if (nextEventTimer != null) {
                         nextEventTimer.Dispose ();
-                        nextEventTimer = null;                    
+                        nextEventTimer = null;
                     }
-                    
+
                     if (timerHandle != null) {
-                        timerHandle.Set ();                        
+                        timerHandle.Set ();
                     }
-                        
+
                     for (int i = commands.Count; i > 0; --i) {
                         commands.DeleteMin ();
                     }
                 }
-                Console.WriteLine ("Dispose - end");                
+                Console.WriteLine ("Dispose - end");
             }
         }
-        
+
         private static int count = 0;
         public static void Main ()
         {
-            
+
             ScheduledCommandWrapper[] commands = new ScheduledCommandWrapper[10];
             DateTime time = DateTime.Now.AddMilliseconds (1000);
-            
+
             for (int i = 0; i < 1000; ++i) {
                 TaskScheduler.Schedule (new ScheduledCommandWrapper (
                     time, delegate { lock (sync) { Console.WriteLine ("HI:  {0}", count++); } }
-                )); 
-            
+                ));
+
                 time = time.AddMilliseconds (100);
                 Console.WriteLine (time);
             }
 
             Thread.Sleep (100000);
-        }        
-                
+        }
+
         public static bool Cancel (IPriorityQueueHandle<ScheduledCommandWrapper> handle)
         {
 			bool ret = false;
@@ -129,7 +129,7 @@ namespace Migo.TaskCore
             if (handle == null) {
                 throw new ArgumentNullException ("handle");
             }
-            
+
             lock (sync) {
                 if (!disposed) {
 					ScheduledCommandWrapper command = commands.Delete (handle);
@@ -145,53 +145,53 @@ namespace Migo.TaskCore
             }
 			
 			return ret;
-        }        
-        
+        }
+
         public static IPriorityQueueHandle<ScheduledCommandWrapper> Schedule (ScheduledCommandWrapper scw)
         {
             if (scw == null) {
-                throw new ArgumentNullException ("scw");                
-            }            
-            
-            IPriorityQueueHandle<ScheduledCommandWrapper> handle = null;            
+                throw new ArgumentNullException ("scw");
+            }
+
+            IPriorityQueueHandle<ScheduledCommandWrapper> handle = null;
 
             lock (sync) {
                 if (!disposed) {
                     Console.WriteLine ("Scheduled");
                     commands.Add (ref handle, scw);
-                    
-                    if (nextTask == null || 
+
+                    if (nextTask == null ||
                         nextTask.ScheduledFor > scw.ScheduledFor) {
                         nextTask = scw;
 						ModifyTimer (nextTask.ScheduledFor);
                     }
                 }
             }
-            
+
             return handle;
         }
-         
+
         private static void ModifyTimer (DateTime newTime)
         {
             if (!disposed) {
                 TimeSpan span = newTime - DateTime.Now;
-                long time = span.TotalMilliseconds < 0 ? 0 : 
+                long time = span.TotalMilliseconds < 0 ? 0 :
                     Convert.ToInt64 (span.TotalMilliseconds);
                 nextEventTimer.Change (time, Timeout.Infinite);
             }
         }
-        
+
         private static void TimerCallbackHandler (object state)
         {
             Console.WriteLine ("TimerCallbackHandler");
 
             lock (sync) {
-                if (timerHandle != null) {                
+                if (timerHandle != null) {
                     timerHandle.Set ();
                 }
             }
         }
-        
+
         private static void BlahSignaledHandler (object state)
         {
             try {
@@ -207,7 +207,7 @@ namespace Migo.TaskCore
                 }
             }
         }
-        
+
         private static void BlahSignaledHandlerImpl ()
         {
             bool cont = false;			
@@ -216,9 +216,9 @@ namespace Migo.TaskCore
 			while (true) {
                 Console.WriteLine ("Waiting...");
                 timerHandle.WaitOne ();
-                Console.WriteLine ("Executing...");                
+                Console.WriteLine ("Executing...");
 				do {
-				    cont = false;                       
+				    cont = false;
 					command = null;
 					
 	                lock (sync) {
@@ -226,14 +226,14 @@ namespace Migo.TaskCore
                             Console.WriteLine ("Returned");
 	                        return;
 	                     } else {
-                            command = commands.DeleteMin ();                        
+                            command = commands.DeleteMin ();
                             if (commands.Count > 0) {								
                                 nextTask = commands.FindMin ();
                             } else {
                                 nextTask = null;
                             }
                         }
-                                
+
                         if (nextTask != null) {
                             if (nextTask.ScheduledFor <= DateTime.Now) {
     					        cont = true;
@@ -242,18 +242,18 @@ namespace Migo.TaskCore
                             }
 	                    }
 	                }
-	                
+	
 	                if (command != null) {
-                        try {	                   
+                        try {	
                             command.Execute ();
                         } catch (Exception e) {
                             Console.WriteLine (
                                 "ATS COMMAND EXCEPTION:  {0}", e.Message
-                            );                        
+                            );
                         }
 	                }
 				} while (cont);
-			}            
+			}
         }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskPriority.cs b/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskPriority.cs
index c17275f..498f2a6 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskPriority.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskPriority.cs
@@ -5,34 +5,34 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
 namespace Migo.TaskCore
 {
-    public enum TaskPriority : int 
+    public enum TaskPriority : int
     {
         Lowest,
         BelowNormal,
-        Normal, 
+        Normal,
         AboveNormal,
         Highest
     }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskStatus.cs b/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskStatus.cs
index 175cb96..e88fe2c 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskStatus.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Enumerations/TaskStatus.cs
@@ -5,30 +5,30 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 namespace Migo.TaskCore
 {
-    public enum TaskStatus : int 
+    public enum TaskStatus : int
     {
         Ready,
         Running,
diff --git a/src/Libraries/Migo/Migo.TaskCore/EventArgs/GroupStatusChangedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/EventArgs/GroupStatusChangedEventArgs.cs
index 72bd8fa..b6cdcc2 100644
--- a/src/Libraries/Migo/Migo.TaskCore/EventArgs/GroupStatusChangedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/EventArgs/GroupStatusChangedEventArgs.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 
 namespace Migo.TaskCore
@@ -35,19 +35,19 @@ namespace Migo.TaskCore
         private readonly int remainingTasks;
         private readonly int runningTasks;
         private readonly int completedTasks;
-        
+
         public int RemainingTasks {
             get { return remainingTasks; }
         }
-        
+
         public int RunningTasks {
             get { return runningTasks; }
         }
-        
+
         public int CompletedTasks {
             get { return completedTasks; }
-        }    
- 
+        }
+
         public GroupStatusChangedEventArgs (int remainingTasks,
                                             int runningTasks,
                                             int completedTasks)
@@ -56,5 +56,5 @@ namespace Migo.TaskCore
             this.runningTasks = runningTasks;
             this.completedTasks = completedTasks;
         }
-    }   
+    }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskCompletedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskCompletedEventArgs.cs
index db3e282..0f7c5dc 100644
--- a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskCompletedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskCompletedEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -34,8 +34,8 @@ namespace Migo.TaskCore
     public class TaskCompletedEventArgs: AsyncCompletedEventArgs
     {
         public TaskCompletedEventArgs (Exception error,
-                                       bool cancelled, 
+                                       bool cancelled,
                                        object userState)
                                        : base (error, cancelled, userState) {}
-    }   
+    }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskEventArgs.cs
index f07585b..93a647f 100644
--- a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -31,37 +31,37 @@ using System.Collections.Generic;
 
 namespace Migo.TaskCore
 {
-    public class TaskEventArgs<T> : EventArgs where T : Task 
+    public class TaskEventArgs<T> : EventArgs where T : Task
     {
         private readonly T task;
         private readonly IEnumerable<T> tasks;
-        
-        public T Task 
+
+        public T Task
         {
             get { return task; }
         }
-        
-        public IEnumerable<T> Tasks 
+
+        public IEnumerable<T> Tasks
         {
-            get { return tasks; } 
+            get { return tasks; }
         }
-        
+
         public TaskEventArgs (T task)
         {
             if (task == null) {
                 throw new ArgumentNullException ("task");
             }
-            
+
             this.task = task;
             this.tasks = null;
         }
-        
+
         public TaskEventArgs (IEnumerable<T> tasks)
         {
             if (tasks == null) {
                 throw new ArgumentNullException ("tasks");
             }
-            
+
             this.task = null;
             this.tasks = tasks;
         }
diff --git a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedEventArgs.cs
index 16466c8..e35f93d 100644
--- a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -34,20 +34,20 @@ namespace Migo.TaskCore
     {
         private readonly TaskStatusChangedInfo statusChanged;
         private readonly TaskStatusChangedInfo[] statusesChanged;
-        
-        public TaskStatusChangedInfo StatusChanged 
+
+        public TaskStatusChangedInfo StatusChanged
         {
             get { return statusChanged; }
         }
-        
-        public TaskStatusChangedInfo[] StatusesChanged 
+
+        public TaskStatusChangedInfo[] StatusesChanged
         {
             get { return statusesChanged; }
         }
-        
+
         public TaskStatusChangedEventArgs (TaskStatusChangedInfo status) : this (true, status, null){}
         public TaskStatusChangedEventArgs (TaskStatusChangedInfo[] statuses) : this (false, null, statuses){}
-        
+
         private TaskStatusChangedEventArgs (bool isSingle,
                                             TaskStatusChangedInfo status,
                                             TaskStatusChangedInfo[] statuses)
@@ -55,9 +55,9 @@ namespace Migo.TaskCore
             if (isSingle && status == null) {
                 throw new ArgumentNullException ("status");
             } else if (!isSingle && statuses == null) {
-                throw new ArgumentNullException ("statuses");            
+                throw new ArgumentNullException ("statuses");
             }
-        
+
             this.statusChanged = status;
             this.statusesChanged = statuses;
         }
diff --git a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedInfo.cs b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedInfo.cs
index a308691..f72bb3e 100644
--- a/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedInfo.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/EventArgs/TaskStatusChangedInfo.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -35,22 +35,22 @@ namespace Migo.TaskCore
         private readonly Task task;
         private readonly TaskStatus newStatus;
         private readonly TaskStatus oldStatus;
-        
+
         public TaskStatus NewStatus
         {
             get { return newStatus; }
         }
-        
+
         public TaskStatus OldStatus
         {
             get { return oldStatus; }
-        }   
-        
-        public Task Task 
+        }
+
+        public Task Task
         {
             get { return task; }
         }
-        
+
         public TaskStatusChangedInfo (Task task,
                                       TaskStatus oldStatus,
                                       TaskStatus newStatus)
@@ -58,10 +58,10 @@ namespace Migo.TaskCore
             if (task == null) {
                 throw new ArgumentNullException ("task");
             }
-            
+
             this.task = task;
             this.newStatus = newStatus;
             this.oldStatus = oldStatus;
-        }        
+        }
     }
 }
\ No newline at end of file
diff --git a/src/Libraries/Migo/Migo.TaskCore/Exceptions/TaskStatusException.cs b/src/Libraries/Migo/Migo.TaskCore/Exceptions/TaskStatusException.cs
index e1ffc49..d29de32 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Exceptions/TaskStatusException.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Exceptions/TaskStatusException.cs
@@ -5,32 +5,32 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
-using System; 
- 
+
+using System;
+
 namespace Migo.TaskCore
 {
-    public class TaskStatusException : ApplicationException 
+    public class TaskStatusException : ApplicationException
     {
         public TaskStatusException (string message) : base (message) {}
     }
diff --git a/src/Libraries/Migo/Migo.TaskCore/GroupProgressManager.cs b/src/Libraries/Migo/Migo.TaskCore/GroupProgressManager.cs
index 4855d90..9e37ef3 100644
--- a/src/Libraries/Migo/Migo.TaskCore/GroupProgressManager.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/GroupProgressManager.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.ComponentModel;
 using System.Collections.Generic;
@@ -33,60 +33,60 @@ using System.Collections.Generic;
 namespace Migo.TaskCore
 {
     public class GroupProgressManager<T> where T : Task
-    {   
+    {
         private int progress;
-        private int oldProgress;        
+        private int oldProgress;
 
         private int totalTicks;
         private int currentTicks;
-       
+
         private Dictionary<T,int> progDict;
-        
+
         public event EventHandler<ProgressChangedEventArgs> ProgressChanged;
-        
+
         public GroupProgressManager ()
         {
             progDict = new Dictionary<T,int> ();
         }
-        
+
         public virtual void Add (T task)
         {
             Add (task, true);
         }
-         
+
         public virtual void Add (IEnumerable<T> tasks)
         {
             foreach (T task in tasks) {
                 Add (task, false);
             }
-            
+
             OnProgressChanged ();
-        }        
-        
+        }
+
         protected virtual void Add (T task, bool update)
-        {   
+        {
             if (progDict.ContainsKey (task)) {
-                throw new ArgumentException ("Task was added previously");                 
-            } else if (task.Progress != 0 || 
+                throw new ArgumentException ("Task was added previously");
+            } else if (task.Progress != 0 ||
                        task.Status != TaskStatus.Ready) {
                 throw new InvalidOperationException (
                     "Progress Manager:  Task has already been, or is currently being executed"
-                );                
+                );
             }
-            
+
             totalTicks += 100;
             progDict.Add (task, 0);
-       
+
             if (update) {
                 OnProgressChanged ();
-            }            
+            }
         }
-        
+
         public virtual void Remove (T task)
         {
             Remove (task, true);
         }
-        
+
         public virtual void Remove (IEnumerable<T> tasks)
         {
             foreach (T task in tasks) {
@@ -94,25 +94,25 @@ namespace Migo.TaskCore
                     Remove (task, false);
                 } catch { continue; }
             }
-            
+
             OnProgressChanged ();
         }
-        
+
         protected virtual void Remove (T task, bool update)
         {
             if (task.Progress == 100) {
-                if (progDict.ContainsKey (task)) {                
+                if (progDict.ContainsKey (task)) {
                     progDict.Remove (task);
                 }
-            } else {            
+            } else {
                 int prog = 0;
-                
+
                 if (progDict.ContainsKey (task)) {
                     prog = progDict[task];
                     progDict.Remove (task);
 
                     currentTicks -= prog;
-                    totalTicks -= 100; 
+                    totalTicks -= 100;
                 }
 
                 if (update) {
@@ -121,30 +121,30 @@ namespace Migo.TaskCore
             }
         }
 
-        public virtual void Reset () 
+        public virtual void Reset ()
         {
             progress = 0;
-            oldProgress = 0;        
+            oldProgress = 0;
 
             totalTicks = 0;
             currentTicks = 0;
-            
+
             progDict.Clear ();
         }
-        
+
         public virtual void Update (T task, int newProg)
-        {            
+        {
             if (newProg < 0) {
                 throw new ArgumentOutOfRangeException (
                     "newProg must be greater than or equal to 0"
                 );
             }
-            
+
             int delta = 0;
-            
-            if (progDict.ContainsKey (task)) {      
-                int prog = progDict[task];              
-                
+
+            if (progDict.ContainsKey (task)) {
+                int prog = progDict[task];
+
                 if (prog != newProg) {
                     progDict[task] = newProg;
                     delta = newProg - prog;
@@ -154,9 +154,9 @@ namespace Migo.TaskCore
             if (delta != 0) {
                 currentTicks += delta;
                 OnProgressChanged ();
-            }            
+            }
         }
-        
+
         protected virtual void OnProgressChanged ()
         {
             if (totalTicks == 0) {
@@ -166,15 +166,15 @@ namespace Migo.TaskCore
                     (currentTicks * 100) / totalTicks
                 );
             }
-            
+
             if (progress != oldProgress) {
                 oldProgress = progress;
-                
-                EventHandler<ProgressChangedEventArgs> handler = ProgressChanged;                
-                
+
+                EventHandler<ProgressChangedEventArgs> handler = ProgressChanged;
+
                 if (handler != null) {
                     handler (
-                        this, new ProgressChangedEventArgs (progress, null) 
+                        this, new ProgressChangedEventArgs (progress, null)
                     );
                 }
             }
diff --git a/src/Libraries/Migo/Migo.TaskCore/GroupStatusManager.cs b/src/Libraries/Migo/Migo.TaskCore/GroupStatusManager.cs
index 03f66cc..7f48313 100644
--- a/src/Libraries/Migo/Migo.TaskCore/GroupStatusManager.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/GroupStatusManager.cs
@@ -5,43 +5,43 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
  using System;
  using System.Threading;
- 
+
 namespace Migo.TaskCore
  {
     public class GroupStatusManager : IDisposable
-    {            
-        private bool disposed;        
+    {
+        private bool disposed;
         private bool suspendUpdate;
 
-        private int runningTasks;        
+        private int runningTasks;
         private int completedTasks;
         private int remainingTasks;
         private int maxRunningTasks = 0;
 
-        private ManualResetEvent mre;     
+        private ManualResetEvent mre;
 
         public event EventHandler<GroupStatusChangedEventArgs> StatusChanged;
 
@@ -49,79 +49,79 @@ namespace Migo.TaskCore
         {
             get {
                 CheckDisposed ();
-                return completedTasks; 
+                return completedTasks;
             }
-        }        
-        
+        }
+
         public virtual int RunningTasks
         {
-            get { 
+            get {
                 CheckDisposed ();
                 return runningTasks;
             }
         }
-        
+
         public virtual bool SuspendUpdate
         {
-            get { 
+            get {
                 CheckDisposed ();
                 return suspendUpdate;
             }
-            
+
             set {
                 CheckDisposed ();
-                suspendUpdate = value; 
+                suspendUpdate = value;
             }
         }
-        
+
         public virtual int RemainingTasks
         {
-            get { 
+            get {
                 CheckDisposed ();
                 return remainingTasks;
             }
-            
-            set { 
+
+            set {
                 CheckDisposed ();
                 SetRemainingTasks (value);
             }
-        }        
-        
+        }
+
         public virtual int MaxRunningTasks
         {
-            get { 
+            get {
                 CheckDisposed ();
                 return maxRunningTasks;
             }
-            
+
             set {
                 CheckDisposed ();
-                SetMaxRunningTasks (value); 
+                SetMaxRunningTasks (value);
             }
         }
 
         public virtual WaitHandle Handle {
             get {
                 CheckDisposed ();
-                return mre; 
+                return mre;
             }
         }
 
-        public GroupStatusManager () : this (0, 0) {}        
-        public GroupStatusManager (int totalTasks) : this (totalTasks, 0) {}        
+        public GroupStatusManager () : this (0, 0) {}
+        public GroupStatusManager (int totalTasks) : this (totalTasks, 0) {}
         public GroupStatusManager (int maxRunningTasks, int totalTasks)
         {
             mre = new ManualResetEvent (false);
-            
+
             SetRemainingTasks (totalTasks);
             SetMaxRunningTasks (maxRunningTasks);
         }
 
         public virtual void Dispose ()
         {
-            if (!disposed) {                            
+            if (!disposed) {
                 disposed = true;
-                
+
                 if (mre != null) {
                     mre.Close ();
                     mre = null;
@@ -134,87 +134,87 @@ namespace Migo.TaskCore
             CheckDisposed ();
 
             ++completedTasks;
-            OnStatusChanged ();   
-            
+            OnStatusChanged ();
+
             return completedTasks;
         }
 
         public virtual int DecrementCompletedTaskCount ()
-        {          
+        {
             CheckDisposed ();
-            
+
             if (completedTasks == 0) {
                throw new InvalidOperationException (
                    "Completed task count cannot be less than 0"
                 );
             }
-            
+
             --completedTasks;
-            OnStatusChanged ();                    
-            
+            OnStatusChanged ();
+
             return completedTasks;
-        }        
-        
+        }
+
         public virtual int IncrementRunningTaskCount ()
         {
             CheckDisposed ();
-            
+
             if (runningTasks >= remainingTasks) {
                 throw new InvalidOperationException (
                     "Running task count cannot be > remaining task count"
                 );
-            }        
-        
+            }
+
             ++runningTasks;
-            OnStatusChanged ();      
+            OnStatusChanged ();
 
             Evaluate ();
-            
+
             return runningTasks;
         }
 
         public virtual int DecrementRunningTaskCount ()
         {
             CheckDisposed ();
-            
+
             if (runningTasks == 0) {
                throw new InvalidOperationException (
                    "Runing task count cannot be less than 0"
                 );
             }
-            
+
             --runningTasks;
             OnStatusChanged ();
             Evaluate ();
-            
+
             return runningTasks;
         }
 
         public virtual int IncrementRemainingTaskCount ()
         {
             CheckDisposed ();
-            
+
             SetRemainingTasks (remainingTasks + 1);
             Evaluate ();
-            
-            return remainingTasks;   
-        }        
+
+            return remainingTasks;
+        }
 
         public virtual int DecrementRemainingTaskCount ()
         {
             CheckDisposed ();
-            
+
             if (remainingTasks == 0) {
                 throw new InvalidOperationException (
                     "Remaining task count cannot be less than 0"
                 );
             }
-            
+
             SetRemainingTasks (remainingTasks - 1);
             Evaluate ();
-            
+
             return remainingTasks;
-        }        
+        }
 
         public virtual void ResetWait ()
         {
@@ -225,38 +225,38 @@ namespace Migo.TaskCore
         public virtual void Reset ()
         {
             completedTasks = 0;
-            suspendUpdate = false;            
+            suspendUpdate = false;
         }
 
         public virtual bool SetRemainingTasks (int newRemainingTasks)
-        {             
+        {
             CheckDisposed ();
             if (newRemainingTasks < 0) {
                 throw new ArgumentException ("newRemainingTasks must be >= 0");
             }
-             
-            bool ret = false; 
-             
+
+            bool ret = false;
+
             if (remainingTasks != newRemainingTasks) {
                 ret = true;
                 remainingTasks = newRemainingTasks;
                 OnStatusChanged ();
-                Evaluate ();                
+                Evaluate ();
             }
-                
-            return ret;            
-        }  
+
+            return ret;
+        }
 
         public virtual void Update ()
         {
             CheckDisposed ();
-            OnStatusChanged ();        	    
+            OnStatusChanged ();        	
             Evaluate ();
         }
-        
+
         public virtual void Wait ()
-        {           
-            CheckDisposed ();                
+        {
+            CheckDisposed ();
             mre.WaitOne ();
         }
 
@@ -264,18 +264,18 @@ namespace Migo.TaskCore
         {
             if (disposed) {
                 throw new ObjectDisposedException (GetType ().FullName);
-            }     
+            }
         }
-        
+
         public virtual void Evaluate ()
         {
             if (suspendUpdate) {
                 return;
             }
-                             
+
             if ((remainingTasks == 0 && maxRunningTasks > 0) ||
                (runningTasks < maxRunningTasks &&
-               (remainingTasks - runningTasks) > 0)) { 
+               (remainingTasks - runningTasks) > 0)) {
 
                 mre.Set ();
             }
@@ -284,17 +284,17 @@ namespace Migo.TaskCore
         protected virtual void SetMaxRunningTasks (int newMaxTasks)
         {
             CheckDisposed ();
-                
+
             if (newMaxTasks < 0) {
                 throw new ArgumentException ("newMaxTasks must be >= 0");
             }
-                
+
             if (maxRunningTasks != newMaxTasks) {
                 maxRunningTasks = newMaxTasks;
                 Evaluate ();
             }
-        }   
-        
+        }
+
         protected virtual void OnStatusChanged (GroupStatusChangedEventArgs e)
         {
             if (suspendUpdate) {
@@ -302,23 +302,23 @@ namespace Migo.TaskCore
             }
 
             EventHandler<GroupStatusChangedEventArgs> handler = StatusChanged;
-            
+
             if (handler != null) {
                 handler (this, e);
             }
         }
 
         protected virtual void OnStatusChanged ()
-        {            
+        {
             if (suspendUpdate) {
                 return;
             }
-            
+
             OnStatusChanged (
                 new GroupStatusChangedEventArgs (
                     remainingTasks, runningTasks, completedTasks
                 )
-            );            
-        }        
+            );
+        }
     }
  }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ManipulatedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ManipulatedEventArgs.cs
index 864d0b9..bb847d1 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ManipulatedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ManipulatedEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -31,38 +31,38 @@ using System.Collections.Generic;
 
 namespace Migo.TaskCore.Collections
 {
-    public class ManipulatedEventArgs<T> : EventArgs 
-    {  
+    public class ManipulatedEventArgs<T> : EventArgs
+    {
         private T task;
         private ICollection<T> tasks;
-        
+
         public T Task {
             get { return task; }
-            
+
             protected internal set {
                 TestCombination (value, tasks);
                 task = value;
-            }            
+            }
         }
-        
+
         public ICollection<T> Tasks {
             get { return tasks; }
-            
+
             protected internal set {
                 TestCombination (task, value);
                 tasks = value;
             }
         }
-        
+
         protected internal ManipulatedEventArgs () {}
-        
+
         protected ManipulatedEventArgs (T task, ICollection<T> tasks)
         {
             TestCombination (task, tasks);
             this.task = task;
             this.tasks = tasks;
         }
-        
+
         private void TestCombination (T task, ICollection<T> tasks)
         {
             if (task != null && tasks != null) {
@@ -77,4 +77,4 @@ namespace Migo.TaskCore.Collections
         }
     }
 }
-        
+
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ReorderedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ReorderedEventArgs.cs
index a4cfd47..e15386f 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ReorderedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/ReorderedEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -32,8 +32,8 @@ namespace Migo.TaskCore.Collections
 {
     public class ReorderedEventArgs : EventArgs
     {
-        private readonly int[] order; 
-        
+        private readonly int[] order;
+
         public int[] Order
         {
             get { return order; }
@@ -43,6 +43,6 @@ namespace Migo.TaskCore.Collections
         public ReorderedEventArgs (int[] order)
         {
             this.order = order;
-        }        
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskAddedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskAddedEventArgs.cs
index cd79d6a..0b1d4c7 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskAddedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskAddedEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -33,52 +33,52 @@ using Migo.TaskCore;
 
 namespace Migo.TaskCore.Collections
 {
-    public class TaskAddedEventArgs<T> : ManipulatedEventArgs<T> where T : Task 
-    {  
+    public class TaskAddedEventArgs<T> : ManipulatedEventArgs<T> where T : Task
+    {
         private readonly KeyValuePair<int,T> taskPair;
         private readonly ICollection<KeyValuePair<int,T>> taskPairs;
-        
+
         public KeyValuePair<int,T> TaskPair
         {
             get { return taskPair; }
         }
-        
-        // All indices are listed in ascending order from the start of the 
+
+        // All indices are listed in ascending order from the start of the
         // list so that in order addition will not affect indices.
         public ICollection<KeyValuePair<int,T>> TaskPairs
         {
             get { return taskPairs; }
         }
-        
+
         public TaskAddedEventArgs (int pos, T task) : base (task, null)
         {
             if (task == null) {
                 throw new ArgumentNullException ("task");
-            }            
-            
+            }
+
             this.taskPairs = null;
-            this.taskPair = new KeyValuePair<int,T> (pos, task);                       
+            this.taskPair = new KeyValuePair<int,T> (pos, task);
         }
-        
+
         public TaskAddedEventArgs (ICollection<KeyValuePair<int,T>> taskPairs)
         {
             if (taskPairs == null) {
                 throw new ArgumentNullException ("taskPairs");
             }
-            
+
             List<T> tsks = new List<T> (taskPairs.Count);
-            
-            foreach (KeyValuePair<int,T> kvp in taskPairs) {                
+
+            foreach (KeyValuePair<int,T> kvp in taskPairs) {
                 if (kvp.Value == null) {
                     throw new ArgumentNullException (
                         "No task in tasks may be null"
                     );
-                }                
-                
+                }
+
                 tsks.Add (kvp.Value);
             }
 
-            this.Tasks = tsks;            
+            this.Tasks = tsks;
             this.taskPairs = taskPairs;
             this.taskPair = default (KeyValuePair<int,T>);
         }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskRemovedEventArgs.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskRemovedEventArgs.cs
index 22ce033..1c9088c 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskRemovedEventArgs.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/EventArgs/TaskRemovedEventArgs.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -33,8 +33,8 @@ using Migo.TaskCore;
 
 namespace Migo.TaskCore.Collections
 {
-    public class TaskRemovedEventArgs<T> : ManipulatedEventArgs<T> where T : Task 
-    {  
+    public class TaskRemovedEventArgs<T> : ManipulatedEventArgs<T> where T : Task
+    {
         private readonly int index;
         private readonly IEnumerable<KeyValuePair<int,int>> indices;
 
@@ -42,10 +42,10 @@ namespace Migo.TaskCore.Collections
         {
             get { return index; }
         }
-        
-        // All indices are listed in descending order from the end of the 
+
+        // All indices are listed in descending order from the end of the
         // list so that in order removal will not affect indices.
-   
+
         // int - 0:  Index
         // int - 1:  Count
         public IEnumerable <KeyValuePair<int,int>> Indices
@@ -53,8 +53,8 @@ namespace Migo.TaskCore.Collections
             get { return indices; }
         }
 
-        protected TaskRemovedEventArgs (int index, T task, 
-                                        IEnumerable<KeyValuePair<int,int>> indices, ICollection<T> tasks) 
+        protected TaskRemovedEventArgs (int index, T task,
+                                        IEnumerable<KeyValuePair<int,int>> indices, ICollection<T> tasks)
                                         : base (task, tasks)
         {
             if (indices == null && index < 0) {
@@ -62,14 +62,14 @@ namespace Migo.TaskCore.Collections
                     "indices may not be null if index is < 0"
                 );
             }
-            
+
             this.index = index;
             this.indices = indices;
         }
-        
-        public TaskRemovedEventArgs (int index, T task) 
+
+        public TaskRemovedEventArgs (int index, T task)
             : this (index, task, null, null) {}
-        public TaskRemovedEventArgs (IEnumerable<KeyValuePair<int,int>> indices, ICollection<T> tasks) 
+        public TaskRemovedEventArgs (IEnumerable<KeyValuePair<int,int>> indices, ICollection<T> tasks)
             : this (-1, null, indices, tasks) {}
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/ITaskCollectionEnumerator.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/ITaskCollectionEnumerator.cs
index a024cfe..fe3a029 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/ITaskCollectionEnumerator.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/ITaskCollectionEnumerator.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -37,12 +37,12 @@ namespace Migo.TaskCore.Collections
     // This could cause issues for collections such as heaps.
     public interface ITaskCollectionEnumerator<T> : IEnumerator<T>
         where T : Task
-    {        
+    {
         // this needs to be looked at again.
         new T Current {
             get;
-        }   
-        
+        }
+
         bool MoveFirst (TaskStatus status);
         bool MoveLast (TaskStatus status);
     }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/PriorityQueue.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/PriorityQueue.cs
index ac0c443..26e472d 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/PriorityQueue.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/PriorityQueue.cs
@@ -5,24 +5,24 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskCollection.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskCollection.cs
index 1d98971..20bbd2f 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskCollection.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskCollection.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -33,83 +33,83 @@ using System.Collections.Generic;
 using Migo.TaskCore;
 
 namespace Migo.TaskCore.Collections
-{    
+{
     public abstract class TaskCollection<T> : ICollection<T>
         where T : Task
     {
-        private AsyncCommandQueue commandQueue;        
-        
+        private AsyncCommandQueue commandQueue;
+
         public EventHandler<ReorderedEventArgs> Reordered;
-    
+
         public EventHandler<TaskAddedEventArgs<T>> TaskAdded;
-        public EventHandler<TaskRemovedEventArgs<T>> TaskRemoved;        
-           
-        public abstract bool CanReorder 
+        public EventHandler<TaskRemovedEventArgs<T>> TaskRemoved;
+
+        public abstract bool CanReorder
         {
             get; // is Move implemented
         }
-    
+
         public virtual AsyncCommandQueue CommandQueue
         {
             get { return commandQueue; }
-            set { commandQueue = value; } 
+            set { commandQueue = value; }
         }
-    
+
         public abstract int Count {
             get;
         }
 
         public abstract bool IsReadOnly {
             get;
-        }          
-        
+        }
+
         public abstract bool IsSynchronized {
             get;
-        }          
-        
+        }
+
         public abstract object SyncRoot {
             get;
-        }        
-    
+        }
+
         public TaskCollection () {}
 
         public abstract IEnumerator<T> GetEnumerator ();
-        
+
         // This needs to be looked into.
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
-        public abstract T this [int index] 
+
+        public abstract T this [int index]
         {
             get; set;
         }
 
         public abstract void Add (T task);
-        public abstract bool Remove (T task);     
+        public abstract bool Remove (T task);
         public abstract void Remove (IEnumerable<T> tasks);
-        
-        public abstract void CopyTo (T[] array, int index);        
+
+        public abstract void CopyTo (T[] array, int index);
         public abstract void CopyTo (Array array, int index);
-        
-        public abstract void Clear ();                
-        public abstract bool Contains (T task); 
+
+        public abstract void Clear ();
+        public abstract bool Contains (T task);
 
         protected virtual IEnumerable<KeyValuePair<int,int>> DetectContinuity (int[] indices)
-        {                        
+        {
             if (indices == null) {
                 throw new ArgumentNullException ("indices");
             } else if (indices.Length == 0) {
                 return null;
             }
-            
+
             int cnt;
             int len = indices.Length;
-            List<KeyValuePair<int,int>> ret = new List<KeyValuePair<int,int>>();            
-            
+            List<KeyValuePair<int,int>> ret = new List<KeyValuePair<int,int>>();
+
             int i = len-1;
-            
+
             while (i > 0) {
                 cnt = 1;
                 while (indices[i] == indices[i-1]+1)
@@ -122,18 +122,18 @@ namespace Migo.TaskCore.Collections
 
                 ret.Add (new KeyValuePair<int,int>(indices[i--], cnt));
             }
-            
+
             return ret;
         }
-        
+
         protected virtual void OnReordered (int[] newOrder)
         {
             EventHandler<ReorderedEventArgs> handler = Reordered;
 
             if (handler != null) {
                 ReorderedEventArgs e = new ReorderedEventArgs (newOrder);
-                
-                if (commandQueue != null) {              
+
+                if (commandQueue != null) {
                 	commandQueue.Register (
                 	    new EventWrapper<ReorderedEventArgs> (handler, this, e)
                 	);
@@ -142,21 +142,21 @@ namespace Migo.TaskCore.Collections
                 }
             }
         }
-        
+
         protected virtual void OnTaskAdded (int pos, T task)
         {
             EventHandler<TaskAddedEventArgs<T>> handler = TaskAdded;
-            
+
             if (handler != null) {
-                TaskAddedEventArgs<T> e = new TaskAddedEventArgs<T> (pos, task);            
+                TaskAddedEventArgs<T> e = new TaskAddedEventArgs<T> (pos, task);
 
-                if (commandQueue != null) {  
+                if (commandQueue != null) {
                 	commandQueue.Register (
                 	    new EventWrapper<TaskAddedEventArgs<T>> (handler, this, e)
                 	);
                 } else {
                     handler (this, e);
-                } 
+                }
             }
         }
 
@@ -166,8 +166,8 @@ namespace Migo.TaskCore.Collections
 
             if (handler != null) {
                 TaskAddedEventArgs<T> e = new TaskAddedEventArgs<T> (pairs);
-            
-                if (commandQueue != null) {            
+
+                if (commandQueue != null) {
                 	commandQueue.Register (new EventWrapper<TaskAddedEventArgs<T>> (
                 	    handler, this, e)
                 	);
@@ -176,15 +176,15 @@ namespace Migo.TaskCore.Collections
                 }
             }
         }
-    
+
         protected virtual void OnTaskRemoved (int index, T task)
         {
             EventHandler<TaskRemovedEventArgs<T>> handler = TaskRemoved;
 
             if (handler != null) {
-                TaskRemovedEventArgs<T> e = 
+                TaskRemovedEventArgs<T> e =
                     new TaskRemovedEventArgs<T> (index, task);
-            
+
                 if (commandQueue != null) {
                 	commandQueue.Register (
                 	    new EventWrapper<TaskRemovedEventArgs<T>> (handler, this, e)
@@ -193,8 +193,8 @@ namespace Migo.TaskCore.Collections
             	    handler (this, e);
             	}
             }
-        }    
-    
+        }
+
         protected virtual void OnTasksRemoved (ICollection<T> tasks,
                                                IEnumerable<KeyValuePair<int,int>> indices)
         {
@@ -202,8 +202,8 @@ namespace Migo.TaskCore.Collections
 
             if (handler != null) {
                 TaskRemovedEventArgs<T> e = new TaskRemovedEventArgs<T> (indices, tasks);
-            
-                if (commandQueue != null) {            
+
+                if (commandQueue != null) {
                 	commandQueue.Register (
                 	    new EventWrapper<TaskRemovedEventArgs<T>> (handler, this, e)
                 	);
@@ -211,6 +211,6 @@ namespace Migo.TaskCore.Collections
                     handler (this, e);
                 }
             }
-        } 
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskList.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskList.cs
index 1a849e3..6ef697f 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskList.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskList.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -33,35 +33,35 @@ using System.Collections.Generic;
 using Migo.TaskCore;
 
 namespace Migo.TaskCore.Collections
-{    
-    public class TaskList<T> : TaskCollection<T>, IList<T>, IEnumerable<T>, IEnumerable 
+{
+    public class TaskList<T> : TaskCollection<T>, IList<T>, IEnumerable<T>, IEnumerable
         where T : Task
     {
         private List<T> list;
         internal int generation;
-        
+
         private readonly object syncRoot = new object ();
-        
+
         public override bool CanReorder {
             get { return true; }
         }
-        
+
         public override int Count {
             get { return list.Count; }
         }
-        
+
         public override bool IsReadOnly {
             get { return false; }
-        }        
-        
+        }
+
         public override bool IsSynchronized {
             get { return false; }
-        }        
-        
+        }
+
         public override object SyncRoot {
             get { return syncRoot; }
         }
-        
+
         public TaskList ()
         {
             list = new List<T> ();
@@ -69,84 +69,84 @@ namespace Migo.TaskCore.Collections
         }
 
         public override T this [int index] {
-            get { 
+            get {
                 CheckIndex (index);
                 return list[index];
             }
-            
+
             set {
                 CheckIndex (index);
-                list[index] = value; 
+                list[index] = value;
             }
-        }        
-        
+        }
+
         public override void Add (T task)
         {
             CheckTask (task);
-            
+
             int index = list.Count;
-            
+
             list.Add (task);
             ++generation;
 
             OnTaskAdded (index, task);
         }
-        
+
         public void AddRange (IEnumerable<T> tasks)
         {
             CheckTasks (tasks);
-        
+
             int index = list.Count;
             list.AddRange (tasks);
             ++generation;
-            
+
             OnTasksAdded (CreatePairs (index, tasks));
         }
-        
+
         public override void Clear ()
         {
             RemoveRange (0, list.Count);
         }
-        
+
         public override bool Contains (T task)
         {
             bool ret = false;
-            
+
             if (task != null) {
                 ret = list.Contains (task);
             }
-            
+
             return ret;
-        }        
-        
+        }
+
         public override void CopyTo (T[] array, int index)
         {
-            CheckCopyArgs (array, index);        
+            CheckCopyArgs (array, index);
             list.CopyTo (array, index);
         }
-        
+
         public override void CopyTo (Array array, int index)
         {
-            CheckCopyArgs (array, index);            
+            CheckCopyArgs (array, index);
             Array.Copy (list.ToArray (), 0, array, index, list.Count);
         }
-        
+
         public override IEnumerator<T> GetEnumerator ()
         {
             return new TaskListEnumerator<T> (this);
         }
-        
+
         public int IndexOf (T task)
         {
             int ret = -1;
-            
+
             if (task != null) {
                 ret = list.IndexOf (task);
             }
-            
+
             return ret;
         }
-        
+
         public void Insert (int index, T task)
         {
             CheckTask (task);
@@ -154,19 +154,19 @@ namespace Migo.TaskCore.Collections
 
             list.Insert (index, task);
             ++generation;
-            
+
             OnTaskAdded (index, task);
         }
-        
+
         public void InsertRange (int index, IEnumerable<T> tasks)
         {
-            CheckDestIndex (index);         
+            CheckDestIndex (index);
             CheckTasks (tasks);
-            
+
             list.InsertRange (index, tasks);
             ++generation;
-            
-            OnTasksAdded (CreatePairs (index, tasks));  
+
+            OnTasksAdded (CreatePairs (index, tasks));
         }
 
         public void Move (int sourceIndex, int destIndex)
@@ -174,80 +174,80 @@ namespace Migo.TaskCore.Collections
             if (sourceIndex == destIndex) {
                 return;
             } else if (sourceIndex >= list.Count || sourceIndex < 0) {
-                throw new ArgumentOutOfRangeException ("sourceIndex");    
+                throw new ArgumentOutOfRangeException ("sourceIndex");
             } else if (destIndex > list.Count || destIndex < 0) {
-                throw new ArgumentOutOfRangeException ("destIndex");    
+                throw new ArgumentOutOfRangeException ("destIndex");
             }
-                            
+
             Dictionary<Task,int> oldOrder = SaveOrder ();
-            
+
             T tmpTask;
-            
+
             tmpTask = list[sourceIndex];
             list.RemoveAt (sourceIndex);
-                
+
             int maxIndex = list.Count;
-               
+
             if (destIndex > maxIndex) {
-                list.Insert (maxIndex, tmpTask);                 
+                list.Insert (maxIndex, tmpTask);
             } else {
-                list.Insert (destIndex, tmpTask);                
+                list.Insert (destIndex, tmpTask);
             }
-            
+
             ++generation;
             OnReordered (NewOrder (oldOrder));
         }
-        
+
         public void Move (int destIndex, int[] sourceIndices)
         {
             if (destIndex > list.Count || destIndex < 0) {
-                throw new ArgumentOutOfRangeException ("destIndex");    
+                throw new ArgumentOutOfRangeException ("destIndex");
             }
-            
+
             int maxIndex = list.Count;
             List<T> tmpList = new List<T> (sourceIndices.Length);
-                        
-            foreach (int i in sourceIndices) 
+
+            foreach (int i in sourceIndices)
             {
                 if (i < 0 || i > maxIndex) {
                     throw new ArgumentOutOfRangeException ("sourceIndices");
                 }
-                
-                // A possible performance enhancement is to check for 
-                // contiguous regions in the source and remove those regions 
+
+                // A possible performance enhancement is to check for
+                // contiguous regions in the source and remove those regions
                 // at once.
                 tmpList.Add (list[i]);
             }
 
             Dictionary<Task,int> oldOrder = SaveOrder ();
 
-            if (tmpList.Count > 0) 
-            {            
+            if (tmpList.Count > 0)
+            {
                 int offset = 0;
                 Array.Sort (sourceIndices);
-                
+
                 foreach (int i in sourceIndices)
                 {
                     try {
                         list.RemoveAt (i-offset);
                     } catch { continue; }
-                    
+
                     ++offset;
                 }
-                              
-                maxIndex = list.Count;                              
-                              
+
+                maxIndex = list.Count;
+
                 if (destIndex > maxIndex) {
                     list.InsertRange (maxIndex, tmpList);
                 } else {
                     list.InsertRange (destIndex, tmpList);
                 }
-                
+
                 ++generation;
                 OnReordered (NewOrder (oldOrder));
             }
         }
-        
+
         public override bool Remove (T task)
         {
             bool ret = false;
@@ -255,76 +255,76 @@ namespace Migo.TaskCore.Collections
 
             if (index != -1) {
                 list.RemoveAt (index);
-                
+
                 ret = true;
                 ++generation;
                 OnTaskRemoved (index, task);
             }
-            
+
             return ret;
         }
-        
+
         public override void Remove (IEnumerable<T> tasks)
         {
             if (tasks == null) {
                 throw new ArgumentNullException ("tasks");
             }
-            
+
             int lastIndex;
             int currentIndex;
             List<int> indices = new List<int> ();
-            List<T> removedTasks = new List<T> ();            
+            List<T> removedTasks = new List<T> ();
             Dictionary<T,int> lastPosition = new Dictionary<T,int> ();
-            
+
             foreach (T task in tasks) {
-                lastIndex = lastPosition.ContainsKey (task) ? 
+                lastIndex = lastPosition.ContainsKey (task) ?
                     lastPosition[task] : -1;
-                    
+
                 currentIndex = list.IndexOf (task, lastIndex+1);
-                
+
                 if (currentIndex != -1) {
                     removedTasks.Add (task);
                     indices.Add (currentIndex);
-                    
+
                     if (lastIndex != -1) {
-                        lastPosition[task] = currentIndex;   
+                        lastPosition[task] = currentIndex;
                     } else {
                         lastPosition.Add (task, currentIndex);
                     }
                 }
-            }                        
-            
+            }
+
             if (indices.Count > 0) {
                 indices.Sort ();
-                
+
                 for (int i = indices.Count-1; i >= 0; --i) {
-                    list.RemoveAt (i);   
+                    list.RemoveAt (i);
                 }
-                
+
                 ++generation;
-                OnTasksRemoved (removedTasks, DetectContinuity (indices.ToArray ()));                            
+                OnTasksRemoved (removedTasks, DetectContinuity (indices.ToArray ()));
             }
         }
-        
+
         public void RemoveAt (int index)
         {
             CheckIndex (index);
-            
+
             T task = list[index];
             list.RemoveAt (index);
             ++generation;
-            
-            OnTaskRemoved (index, task);            
-        }        
-        
+
+            OnTaskRemoved (index, task);
+        }
+
         public void RemoveRange (int index, int count)
-        {            
+        {
             if (count == 0) {
                 return;
             }
-            
-            CheckIndex (index);            
-            
+
+            CheckIndex (index);
+
             if (count < 0 || count > list.Count) {
                 throw new ArgumentOutOfRangeException ("count");
             } else if (count+index > list.Count) {
@@ -332,12 +332,12 @@ namespace Migo.TaskCore.Collections
                     "index and count exceed length of list"
                 );
             }
-            
+
             List<T> tasks = list.GetRange (index, count);
-            
+
             list.RemoveRange (index, count);
             ++generation;
-            
+
             int[] indices = new int[count];
 
             for (int i = 0; i < count; ++i) {
@@ -363,14 +363,14 @@ namespace Migo.TaskCore.Collections
             } else if (index >= array.Length) {
                 throw new ArgumentException (
                     "index exceeds array length"
-                );            
+                );
             } else if (list.Count > (array.Length-index)) {
                 throw new ArgumentException (
                     "index and count exceed length of array"
-                );            
+                );
             }
         }
-        
+
         private void CheckDestIndex (int index)
         {
             if (index < 0 || index > list.Count) {
@@ -378,13 +378,13 @@ namespace Migo.TaskCore.Collections
             }
         }
 
-        private void CheckIndex (int index) 
+        private void CheckIndex (int index)
         {
             if (index < 0 || index >= list.Count) {
                 throw new ArgumentOutOfRangeException ("index");
-            }        
+            }
         }
-        
+
         private void CheckTask (T task)
         {
             if (task == null) {
@@ -397,7 +397,7 @@ namespace Migo.TaskCore.Collections
             if (tasks == null) {
                 throw new ArgumentNullException ("tasks");
             }
-            
+
             foreach (Task t in tasks) {
                 if (t == null) {
                     throw new ArgumentException (
@@ -410,37 +410,37 @@ namespace Migo.TaskCore.Collections
         private ICollection<KeyValuePair<int,T>> CreatePairs (int index, IEnumerable<T> tasks)
         {
             List<KeyValuePair<int,T>> pairs = new List<KeyValuePair<int,T>> ();
-            
+
             foreach (T task in tasks) {
                 pairs.Add (new KeyValuePair<int,T> (index++, task));
-            }        
-            
+            }
+
             return pairs;
         }
-        
+
         private int[] NewOrder (Dictionary<Task,int> oldOrder)
         {
             int i = -1;
             int[] newOrder = new int[list.Count];
-            
+
             foreach (Task t in list) {
                 newOrder[++i] = oldOrder[t];
             }
-            
+
             return newOrder;
-        }        
-        
+        }
+
         private Dictionary<Task,int> SaveOrder ()
         {
             Dictionary<Task,int> ret = new Dictionary<Task,int> (list.Count);
-            
+
             int i = -1;
-            
+
             foreach (Task t in list) {
                 ret[t] = ++i;
             }
-            
+
             return ret;
-        }        
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskListEnumerator.cs b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskListEnumerator.cs
index 6785efb..092326f 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskListEnumerator.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskListEnumerator.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -37,38 +37,38 @@ namespace Migo.TaskCore.Collections
     public class TaskListEnumerator<T> : ITaskCollectionEnumerator<T>
         where T : Task
     {
-        private TaskList<T> list;        
+        private TaskList<T> list;
 
         private int index;
-        private int generation;        
-                        
-        public T Current 
+        private int generation;
+
+        public T Current
         {
-            get { 
+            get {
                 Check ();
-                
+
                 if (index < 0 || index >= list.Count) {
                     throw new ArgumentOutOfRangeException ("index");
                 }
-                
+
                 return list[index];
-            }        
+            }
         }
-        
+
         T ITaskCollectionEnumerator<T>.Current {
             get { return Current; }
         }
 
         object IEnumerator.Current {
             get { return Current; }
-        } 
+        }
 
         public TaskListEnumerator (TaskList<T> taskList)
         {
             if (taskList == null) {
                 throw new ArgumentNullException ("taskList");
             }
-            
+
             list = taskList;
             index = -1;
             generation = list.generation;
@@ -86,22 +86,22 @@ namespace Migo.TaskCore.Collections
             index = -1;
             generation = list.generation;
         }
-        
+
         public bool MoveNext ()
         {
             Check ();
             return (++index < list.Count);
         }
-        
+
         public bool MoveFirst (TaskStatus status)
         {
             Check ();
-            
+
             int i;
             int retIndex;
-            
+
             retIndex = i = -1;
-            
+
             foreach (T t in list) {
                 ++i;
                 if (t != null) {
@@ -111,41 +111,41 @@ namespace Migo.TaskCore.Collections
                     }
                 }
             }
-            
-            return MoveIndex (retIndex);            
+
+            return MoveIndex (retIndex);
         }
-        
+
         public bool MoveLast (TaskStatus status)
         {
             Check ();
-            
+
             T t;
             int i = list.Count;
 
             while (--i > -1) {
                 t = list[i];
-                
+
                 if (t != null) {
                     if (t.Status == status) {
                         break;
                     }
                 }
             }
-            
-            return MoveIndex (i);            
-        }        
-         
+
+            return MoveIndex (i);
+        }
+
         private bool MoveIndex (int index)
         {
             bool ret = false;
             if (index < list.Count && index > -1) {
                 this.index = index;
                 ret = true;
-            } 
-            
+            }
+
             return ret;
         }
-        
+
         private void Check ()
         {
             if (list == null) {
diff --git a/src/Libraries/Migo/Migo.TaskCore/Task.cs b/src/Libraries/Migo/Migo.TaskCore/Task.cs
index 6b62197..420523d 100644
--- a/src/Libraries/Migo/Migo.TaskCore/Task.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/Task.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Threading;
 using System.ComponentModel;
@@ -33,76 +33,76 @@ using System.ComponentModel;
 namespace Migo.TaskCore
 {
     public abstract class Task
-    {    
+    {
         private string name;
-        private int progress;        
-        
+        private int progress;
+
         private Guid groupID;
         private AsyncCommandQueue commandQueue;
-        
+
         private TaskStatus status;
-        
-        private readonly object userState;        
-        private readonly object syncRoot = new object ();            
-        
-        public EventHandler<TaskCompletedEventArgs> Completed;                        
-        public EventHandler<ProgressChangedEventArgs> ProgressChanged;            
-        public EventHandler<TaskStatusChangedEventArgs> StatusChanged;            
-        
-        public bool IsCompleted 
+
+        private readonly object userState;
+        private readonly object syncRoot = new object ();
+
+        public EventHandler<TaskCompletedEventArgs> Completed;
+        public EventHandler<ProgressChangedEventArgs> ProgressChanged;
+        public EventHandler<TaskStatusChangedEventArgs> StatusChanged;
+
+        public bool IsCompleted
         {
             get {
                 bool ret = false;
                 TaskStatus status = Status;
-                
+
                 if (status == TaskStatus.Cancelled ||
                     status == TaskStatus.Failed    ||
                     status == TaskStatus.Succeeded ||
                     status == TaskStatus.Stopped
                 ) {
                     ret = true;
-                }   
-                
+                }
+
                 return ret;
             }
         }
-        
-        public string Name 
+
+        public string Name
         {
             get { return name; }
             set { name = value; }
         }
 
-        public int Progress 
+        public int Progress
         {
             get { return progress; }
             protected set {
                 SetProgress (value);
             }
-        }   
+        }
 
-        public TaskStatus Status 
+        public TaskStatus Status
         {
             get { return status; }
-            protected set { SetStatus (value); } 
+            protected set { SetStatus (value); }
         }
 
-        public object SyncRoot 
+        public object SyncRoot
         {
             get { return syncRoot; }
-        }        
-        
+        }
+
         public object UserState {
             get { return userState; }
         }
-        
+
         public abstract WaitHandle WaitHandle {
             get;
-        }        
-     
+        }
+
         internal Guid GroupID {
             get { return groupID; }
-            set { 
+            set {
                 lock (syncRoot) {
                     groupID = value;
                     commandQueue = CommandQueueManager.GetCommandQueue (groupID);
@@ -113,15 +113,15 @@ namespace Migo.TaskCore
         protected Task () : this (String.Empty, null) {}
         protected Task (string name, object userState)
         {
-            GroupID = Guid.Empty;                                    
+            GroupID = Guid.Empty;
 
             this.name = name;
             this.userState = userState;
-            
+
             progress = 0;
-            status = TaskStatus.Ready;            
-        }     
-        
+            status = TaskStatus.Ready;
+        }
+
         public abstract void CancelAsync ();
         public abstract void ExecuteAsync ();
 
@@ -137,12 +137,12 @@ namespace Migo.TaskCore
 
         public virtual void Stop ()
         {
-            throw new NotImplementedException ("Stop");            
+            throw new NotImplementedException ("Stop");
         }
 
         public override string ToString ()
         {
-            return Name;  
+            return Name;
         }
 
         protected virtual void SetProgress (int progress)
@@ -157,20 +157,20 @@ namespace Migo.TaskCore
 
         protected internal virtual void SetStatus (TaskStatus status)
         {
-            SetStatus (status, true);              
-        }                
-                
-        protected internal virtual void SetStatus (TaskStatus status, 
+            SetStatus (status, true);
+        }
+
+        protected internal virtual void SetStatus (TaskStatus status,
                                                    bool emitStatusChangedEvent)
         {
             if (this.status != status) {
                 TaskStatus oldStatus = this.status;
                 this.status = status;
-                
+
                 if (emitStatusChangedEvent) {
                     OnStatusChanged (oldStatus, status);
                 }
-            }                
+            }
         }
 
         protected virtual void OnProgressChanged (int progress)
@@ -184,21 +184,21 @@ namespace Migo.TaskCore
         {
             AsyncCommandQueue queue = commandQueue;
             EventHandler<ProgressChangedEventArgs> handler = ProgressChanged;
-            
+
             if (queue != null) {
-                queue.Register (new CommandWrapper (delegate {     
+                queue.Register (new CommandWrapper (delegate {
                     if (handler != null) {
-                        handler (this, e);                
+                        handler (this, e);
                     }
-                }));                    
+                }));
             } else if (handler != null) {
-                ThreadPool.QueueUserWorkItem (delegate {                            
+                ThreadPool.QueueUserWorkItem (delegate {
                     handler (this, e);
                 });
             }
         }
 
-        protected virtual void OnStatusChanged (TaskStatus oldStatus, 
+        protected virtual void OnStatusChanged (TaskStatus oldStatus,
                                                 TaskStatus newStatus)
         {
             OnStatusChanged (
@@ -212,27 +212,27 @@ namespace Migo.TaskCore
             EventHandler<TaskStatusChangedEventArgs> handler = StatusChanged;
 
             if (queue != null) {
-                queue.Register (new CommandWrapper (delegate {            
-                    TaskStatusChangedEventArgs e = new TaskStatusChangedEventArgs (tsci);                      
+                queue.Register (new CommandWrapper (delegate {
+                    TaskStatusChangedEventArgs e = new TaskStatusChangedEventArgs (tsci);
                     if (handler != null) {
-                        handler (this, e);               
+                        handler (this, e);
                     }
                 }));
             } else if (handler != null) {
-                ThreadPool.QueueUserWorkItem (delegate {            
+                ThreadPool.QueueUserWorkItem (delegate {
                     handler (this, new TaskStatusChangedEventArgs (tsci));
                 });
             }
         }
-  
+
         protected virtual void OnTaskCompleted (Exception error, bool cancelled)
         {
             OnTaskCompleted (new TaskCompletedEventArgs (
                 error, cancelled, userState
-            ));               
+            ));
         }
-        
-        protected virtual void OnTaskCompleted (TaskCompletedEventArgs e) 
+
+        protected virtual void OnTaskCompleted (TaskCompletedEventArgs e)
         {
             AsyncCommandQueue queue = commandQueue;
             EventHandler<TaskCompletedEventArgs> handler = Completed;
@@ -248,6 +248,6 @@ namespace Migo.TaskCore
                     handler (this, e);
                 });
             }
-        }  
+        }
     }
 }
diff --git a/src/Libraries/Migo/Migo.TaskCore/TaskGroup.cs b/src/Libraries/Migo/Migo.TaskCore/TaskGroup.cs
index 0ab76d9..3c587a7 100644
--- a/src/Libraries/Migo/Migo.TaskCore/TaskGroup.cs
+++ b/src/Libraries/Migo/Migo.TaskCore/TaskGroup.cs
@@ -5,27 +5,27 @@
  *  Written by Mike Urbanski <michael c urbanski gmail com>
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLgsm, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLgsm, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
- 
+
 using System;
 using System.Threading;
 using System.ComponentModel;
@@ -34,43 +34,43 @@ using System.Collections.Generic;
 using Migo.TaskCore.Collections;
 
 namespace Migo.TaskCore
-{        
+{
     public class TaskGroup<T> where T : Task
-    {         
+    {
         private bool disposed;
         private bool executing;
         private bool cancelRequested;
-                
-        private readonly Guid id;                      
-        private readonly object sync;        
-        
-        private AsyncCommandQueue commandQueue;        
-        
-        private List<T> currentTasks;        
-        private TaskCollection<T> tasks;            
-           
+
+        private readonly Guid id;
+        private readonly object sync;
+
+        private AsyncCommandQueue commandQueue;
+
+        private List<T> currentTasks;
+        private TaskCollection<T> tasks;
+
         private GroupStatusManager gsm;
         private GroupProgressManager<T> gpm;
-        
+
         // Used to notify user after stopped event has fired
         private ManualResetEvent execHandle = new ManualResetEvent (true);
-        
+
         // mildly redundant but necessary
-        // Used to notify system when all tasks are completed       
+        // Used to notify system when all tasks are completed
         private AutoResetEvent executingHandle = new AutoResetEvent (false);
-        
+
         public event EventHandler<EventArgs> Started;
         public event EventHandler<EventArgs> Stopped;
-        
+
         public event EventHandler<TaskEventArgs<T>> TaskStarted;
-        public event EventHandler<TaskEventArgs<T>> TaskStopped;        
+        public event EventHandler<TaskEventArgs<T>> TaskStopped;
         public event EventHandler<TaskEventArgs<T>> TaskAssociated;
-        
+
         public event EventHandler<ProgressChangedEventArgs> ProgressChanged;
-        public event EventHandler<GroupStatusChangedEventArgs> StatusChanged;        
+        public event EventHandler<GroupStatusChangedEventArgs> StatusChanged;
 
         public event EventHandler<ProgressChangedEventArgs> TaskProgressChanged;
-        public event EventHandler<TaskStatusChangedEventArgs> TaskStatusChanged;        
+        public event EventHandler<TaskStatusChangedEventArgs> TaskStatusChanged;
 
         public virtual int CompletedTasks
         {
@@ -81,16 +81,16 @@ namespace Migo.TaskCore
                 }
             }
         }
-        
-        protected virtual bool Disposed 
+
+        protected virtual bool Disposed
         {
-            get { 
+            get {
                 lock (sync) {
                     return disposed;
                 }
             }
         }
-        
+
         public virtual bool IsExecuting
         {
             get {
@@ -100,26 +100,26 @@ namespace Migo.TaskCore
                 }
             }
         }
-        
+
         public Guid ID {
-            get { 
-                lock (sync) {            
-                    CheckDisposed ();                
+            get {
+                lock (sync) {
+                    CheckDisposed ();
                     return id;
                 }
             }
         }
-        
-        public virtual int RunningTasks 
+
+        public virtual int RunningTasks
         {
             get {
-                lock (sync) {            
+                lock (sync) {
                     CheckDisposed ();
                     return gsm.RunningTasks;
                 }
             }
-        }                
-        
+        }
+
         public virtual TaskCollection<T> Tasks
         {
             get {
@@ -130,45 +130,45 @@ namespace Migo.TaskCore
             }
         }
 
-        public virtual int RemainingTasks 
+        public virtual int RemainingTasks
         {
             get {
-                lock (sync) {                
+                lock (sync) {
                     CheckDisposed ();
                     return gsm.RemainingTasks;
                 }
             }
-        }     
+        }
 
         protected GroupProgressManager<T> ProgressManager
         {
             get {
                 return gpm;
             }
-            
+
             set {
-                SetProgressManager (value); 
+                SetProgressManager (value);
             }
         }
 
-        protected GroupStatusManager StatusManager 
+        protected GroupStatusManager StatusManager
         {
-            get { 
+            get {
                 if (gsm == null) {
                     SetStatusManager (new GroupStatusManager ());
                 }
-                
+
                 return gsm;
             }
-            
-            set { 
-                SetStatusManager (value); 
+
+            set {
+                SetStatusManager (value);
             }
         }
 
-        public IEnumerable<T> CurrentTasks 
+        public IEnumerable<T> CurrentTasks
         {
-            get { 
+            get {
                 lock (sync) {
 					CheckDisposed ();					
                     return currentTasks as IEnumerable<T>;
@@ -176,28 +176,28 @@ namespace Migo.TaskCore
             }
         }
 
-        public int MaxRunningTasks 
+        public int MaxRunningTasks
         {
             get {
                 lock (sync) {
-                    CheckDisposed ();                
-                    return gsm.MaxRunningTasks; 
+                    CheckDisposed ();
+                    return gsm.MaxRunningTasks;
                 }
             }
-            
-            set { 
+
+            set {
                 lock (sync) {
-                    CheckDisposed ();                
+                    CheckDisposed ();
                     gsm.MaxRunningTasks = value;
                 }
             }
-        }      
+        }
 
-        public WaitHandle Handle 
+        public WaitHandle Handle
         {
-            get { 
+            get {
                 lock (sync) {
-                    CheckDisposed ();            
+                    CheckDisposed ();
                     return execHandle;
                 }
             }
@@ -205,33 +205,33 @@ namespace Migo.TaskCore
 
         public object SyncRoot
         {
-            get {             
+            get {
                 return sync;
             }
         }
-        
+
         private bool IsDone
         {
             get {
                 return (Disposed || gsm.RemainingTasks == 0);
             }
-        }        
-        
+        }
+
         public TaskGroup (int maxRunningTasks, TaskCollection<T> tasks)
             : this (maxRunningTasks, tasks, null, null)
         {
         }
 
-        public TaskGroup (int maxRunningTasks, 
-                          TaskCollection<T> tasks, 
+        public TaskGroup (int maxRunningTasks,
+                          TaskCollection<T> tasks,
                           GroupStatusManager statusManager)
             : this (maxRunningTasks, tasks, statusManager, null)
         {
         }
-        
-        protected TaskGroup (int maxRunningTasks, 
+
+        protected TaskGroup (int maxRunningTasks,
                              TaskCollection<T> tasks,
-                             GroupStatusManager statusManager, 
+                             GroupStatusManager statusManager,
                              GroupProgressManager<T> progressManager)
         {
             if (maxRunningTasks < 0) {
@@ -239,64 +239,64 @@ namespace Migo.TaskCore
             } else if (tasks == null) {
                 throw new ArgumentNullException ("tasks");
             }
-            
+
             sync = tasks.SyncRoot;
             currentTasks = new List<T> (maxRunningTasks);
 
             commandQueue = new AsyncCommandQueue ();
             id = CommandQueueManager.Register (commandQueue);
-                     
+
             SetProgressManager (
                 progressManager ?? new GroupProgressManager<T> ()
-            );            
-                        
+            );
+
             SetStatusManager (
                 statusManager ?? new GroupStatusManager ()
-            );  
-                        
+            );
+
             try {
                 gsm.SuspendUpdate = true;
-                
+
                 gsm.RemainingTasks = tasks.Count;
-                gsm.MaxRunningTasks = maxRunningTasks;               
-                                
+                gsm.MaxRunningTasks = maxRunningTasks;
+
                 SetTaskCollection (tasks);
             } finally {
                 gsm.SuspendUpdate = false;
                 gsm.Update ();
-            }         
+            }
         }
-   
+
         public virtual void CancelAsync ()
         {
             if (SetCancelled ()) {
                 List<T> tasksCpy = null;
 
-                lock (sync) {                    
+                lock (sync) {
                     tasksCpy = new List<T> (tasks);
 
                     foreach (T task in tasksCpy) {
                         task.CancelAsync ();
                     }
-                }                      
+                }
             }
         }
-        
+
         public virtual void StopAsync ()
         {
             if (SetCancelled ()) {
                 List<T> tasksCpy = null;
 
-                lock (sync) {                    
+                lock (sync) {
                     tasksCpy = new List<T> (tasks);
-                    
+
                     foreach (T task in tasksCpy) {
                         task.Stop ();
                     }
-                }                      
-            } 
-        }        
-        
+                }
+            }
+        }
+
 		public virtual void Dispose ()
 		{
 		    Dispose (null);
@@ -304,42 +304,42 @@ namespace Migo.TaskCore
 		
         public virtual void Dispose (AutoResetEvent handle)
         {
-            if (SetDisposed ()) { 
-                commandQueue.Dispose ();                                
-                
+            if (SetDisposed ()) {
+                commandQueue.Dispose ();
+
                 try {
                     lock (sync) {
-                        tasks.TaskAdded -= OnTaskAddedHandler;            
-                        tasks.TaskRemoved -= OnTaskRemovedHandler; 
+                        tasks.TaskAdded -= OnTaskAddedHandler;
+                        tasks.TaskRemoved -= OnTaskRemovedHandler;
                         tasks.CommandQueue = null;
 
                         if (tasks.Count > 0) {
                             Disassociate (tasks);
-                        }                          
-                    }    
-                    
+                        }
+                    }
+
                     gsm.StatusChanged -= OnStatusChangedHandler;
                     gsm.Dispose ();
-                    
+
                     gpm.ProgressChanged -= OnProgressChangedHandler;
                     gpm.Reset ();
                 } finally {
                     gpm = null;
                     gsm = null;
                     tasks = null;
-                }            
-            
+                }
+
                 if (executingHandle != null) {
                     executingHandle.Close ();
-                    executingHandle = null;                    
+                    executingHandle = null;
                 }
-                
+
                 if (execHandle != null) {
                     execHandle.Close ();
                     execHandle = null;
                 }
             }
-            
+
             if (handle != null) {
                 handle.Set ();
             }
@@ -347,14 +347,14 @@ namespace Migo.TaskCore
 
         public void Execute ()
         {
-            if (SetExecuting (true)) {                
+            if (SetExecuting (true)) {
                 try {
                     OnStarted ();
                     SpawnExecutionThread ();
                 } catch (Exception e) {
                     Hyena.Log.Exception (e);
-                    SetExecuting (false);                
-                    Reset ();                                                                        
+                    SetExecuting (false);
+                    Reset ();
                     OnStopped ();
                 }
             }
@@ -364,33 +364,33 @@ namespace Migo.TaskCore
         {
             lock (sync) {
                 CheckDisposed ();
-                
+
                 if (executing && !cancelRequested) {
                     cancelRequested = true;
                     return true;
                 }
             }
-            
+
             return false;
         }
-        
+
         private bool SetDisposed ()
         {
             lock (sync) {
                 if (!disposed) {
                     disposed = true;
-                    return true; 
+                    return true;
                 }
             }
 
             return false;
         }
-        
+
         protected virtual bool SetExecuting (bool exec)
         {
             lock (sync) {
                 CheckDisposed ();
-                
+
                 if (exec) {
                     if (!executing && !cancelRequested) {
                         executing = true;
@@ -401,56 +401,56 @@ namespace Migo.TaskCore
                     cancelRequested = false;
                 }
             }
-            
+
             return false;
         }
 
-        protected virtual void SetProgressManager (GroupProgressManager<T> progressManager) 
+        protected virtual void SetProgressManager (GroupProgressManager<T> progressManager)
         {
-            CheckDisposed ();        
-            
+            CheckDisposed ();
+
             if (progressManager == null) {
                 throw new ArgumentNullException ("progressManager");
             } else if (gpm != null) {
                 throw new InvalidOperationException ("ProgressManager already set");
             }
-                                
+
             gpm = progressManager;
             gpm.ProgressChanged += OnProgressChangedHandler;
         }
-        
-        protected virtual void SetStatusManager (GroupStatusManager statusManager) 
+
+        protected virtual void SetStatusManager (GroupStatusManager statusManager)
         {
             CheckDisposed ();
-            
+
             if (statusManager == null) {
                 throw new ArgumentNullException ("statusManager");
             } else if (gsm != null) {
                 throw new InvalidOperationException ("StatusManager already set");
             }
-            
+
             gsm = statusManager;
             gsm.StatusChanged += OnStatusChangedHandler;
         }
-        
+
         protected virtual void SetTaskCollection (TaskCollection<T> collection)
         {
-            CheckDisposed ();                
-    
+            CheckDisposed ();
+
             if (tasks != null) {
                 throw new InvalidOperationException (
                     "Already associated with a task collection"
                 );
             }
-    
+
             tasks = collection;
             tasks.CommandQueue = commandQueue;
-            
-            tasks.TaskAdded += OnTaskAddedHandler;            
-            tasks.TaskRemoved += OnTaskRemovedHandler; 
-            
-            Associate (tasks);                   
-        }        
+
+            tasks.TaskAdded += OnTaskAddedHandler;
+            tasks.TaskRemoved += OnTaskRemovedHandler;
+
+            Associate (tasks);
+        }
 
         protected virtual void CheckDisposed ()
         {
@@ -463,42 +463,42 @@ namespace Migo.TaskCore
         {
             Associate (task, true);
         }
-                
+
         protected virtual void Associate (IEnumerable<T> tasks)
-        {          
+        {
             foreach (T task in tasks) {
                 if (task != null) {
                     Associate (task, false);
                 }
             }
-            
+
             gpm.Add (tasks);
         }
 
         protected virtual void Associate (T task, bool addToProgressGroup)
-        {            
-            CheckDisposed ();            
+        {
+            CheckDisposed ();
 
             if (task.GroupID != Guid.Empty) {
                 throw new ApplicationException (
                     "Task already associated with a group"
                 );
-            }             
-            
+            }
+
             task.GroupID = id;
-            
+
             task.Completed += OnTaskCompletedHandler;
             task.ProgressChanged += OnTaskProgressChangedHandler;
             task.StatusChanged += OnTaskStatusChangedHandler;
 
             if (addToProgressGroup) {
                 gpm.Add (task);
-            }      
+            }
         }
 
         protected virtual bool CheckID (T task)
         {
-            return (task.GroupID == id); 
+            return (task.GroupID == id);
         }
 
         protected virtual void Disassociate (IEnumerable<T> tasks)
@@ -516,21 +516,21 @@ namespace Migo.TaskCore
         {
             Disassociate (task, true);
         }
-        
+
         protected virtual void Disassociate (T task, bool removeFromProgressGroup)
         {
             if (CheckID (task)) {
                 task.GroupID = Guid.Empty;
-                
+
                 task.Completed -= OnTaskCompletedHandler;
                 task.ProgressChanged -= OnTaskProgressChangedHandler;
-                task.StatusChanged -= OnTaskStatusChangedHandler;  
-                
+                task.StatusChanged -= OnTaskStatusChangedHandler;
+
                 if (removeFromProgressGroup && gpm != null) {
                     gpm.Remove (task);
-                }              
+                }
             }
-        }    
+        }
 
         protected virtual void Reset ()
         {
@@ -548,13 +548,13 @@ namespace Migo.TaskCore
                 OnEvent (Started);
             }
         }
-        
+
         protected virtual void OnStopped ()
         {
             lock (sync) {
                 OnEvent (Stopped);
-                execHandle.Set ();                
-            }            
+                execHandle.Set ();
+            }
         }
 
         protected virtual void OnTaskStarted (T task)
@@ -593,94 +593,94 @@ namespace Migo.TaskCore
         }
 
         protected virtual void OnTaskCompletedHandler (object sender, TaskCompletedEventArgs e)
-        {   
+        {
             lock (sync) {
                 T t = sender as T;
-                
+
                 try {
                     gsm.SuspendUpdate = true;
-                    
+
                     if (currentTasks.Contains (t)) {
                         gsm.DecrementRunningTaskCount ();
-                        
+
                         if (t.IsCompleted) {
                             if (!e.Cancelled) {
                                 gsm.IncrementCompletedTaskCount ();
-                            }           
+                            }
                         }
                     }
-                    
+
                     if (t.IsCompleted) {
                         gsm.DecrementRemainingTaskCount ();
                     }
                 } finally {
                     gsm.SuspendUpdate = false;
                     gsm.Update ();
-                    OnTaskStopped (t);                                
+                    OnTaskStopped (t);
                 }
             }
-        }       
-        
+        }
+
         protected virtual void OnTaskProgressChangedHandler (object sender, ProgressChangedEventArgs e)
-        {     
-            EventHandler<ProgressChangedEventArgs> handler = TaskProgressChanged;                
-                
+        {
+            EventHandler<ProgressChangedEventArgs> handler = TaskProgressChanged;
+
             lock (sync) {
                 if (!cancelRequested) {
                     gpm.Update (sender as T, e.ProgressPercentage);
                 }
-            }   
-            
+            }
+
             if (handler != null) {
-                handler (this, e);          
-            }                           
-        }        
-        
+                handler (this, e);
+            }
+        }
+
         protected virtual void OnTaskStatusChangedHandler (object sender, TaskStatusChangedEventArgs e)
-        {         
-            EventHandler<TaskStatusChangedEventArgs> handler = TaskStatusChanged;                
-                
+        {
+            EventHandler<TaskStatusChangedEventArgs> handler = TaskStatusChanged;
+
             if (handler != null) {
-                handler (this, e);        
-            }            
-            
-            gsm.Evaluate ();       
-        } 
-        
+                handler (this, e);
+            }
+
+            gsm.Evaluate ();
+        }
+
         protected virtual void OnTaskAddedHandler (object sender, TaskAddedEventArgs<T> e)
-        {        
+        {
             lock (sync) {
                 if (e.Task != null) {
                     Associate (e.Task);
                     gsm.IncrementRemainingTaskCount ();
-                    OnTaskAssociated (e.Task);    
+                    OnTaskAssociated (e.Task);
                 } else if (e.Tasks != null) {
                     Associate (e.Tasks);
                     gsm.RemainingTasks += e.Tasks.Count;
                     OnTaskAssociated (e.Tasks);
-                }  
+                }
             }
-        }        
-        
+        }
+
         protected virtual void OnTaskRemovedHandler (object sender, TaskRemovedEventArgs<T> e)
         {
             lock (sync) {
                 if (e.Index != -1 && e.Task != null) {
                     T tsk = e.Task as T;
-                    
+
                     if (currentTasks.Contains (tsk)) {
                         tsk.CancelAsync ();
                         return;
-                    } else if (tsk.Status == TaskStatus.Ready || 
+                    } else if (tsk.Status == TaskStatus.Ready ||
                                tsk.Status == TaskStatus.Paused) {
                         gsm.DecrementRemainingTaskCount ();
-                    } 
-                    
-                    Disassociate (tsk);                    
-                } else if (e.Indices != null && e.Tasks != null) {           
+                    }
+
+                    Disassociate (tsk);
+                } else if (e.Indices != null && e.Tasks != null) {
                     int sub = e.Tasks.Count;
                     List<T> removeList = new List<T> (sub);
-                    
+
                     foreach (T tsk in e.Tasks) {
                         if (currentTasks.Contains (tsk)) {
                             tsk.CancelAsync ();
@@ -689,9 +689,9 @@ namespace Migo.TaskCore
                             removeList.Add (tsk);
                         }
                     }
-                    
+
                     if (sub > 0) {
-                        Disassociate (removeList);                        
+                        Disassociate (removeList);
                         gsm.RemainingTasks -= sub;
                     }
                 }
@@ -701,13 +701,13 @@ namespace Migo.TaskCore
         protected virtual void OnProgressChangedHandler (object sender, ProgressChangedEventArgs e)
         {
             lock (sync) {
-                if (!cancelRequested) {        
+                if (!cancelRequested) {
                     EventHandler<ProgressChangedEventArgs> handler = ProgressChanged;
-                    
+
                     if (handler != null) {
                     	commandQueue.Register (
                     	    new EventWrapper<ProgressChangedEventArgs> (handler, this, e)
-                    	);            
+                    	);
                     }
                 }
             }
@@ -717,121 +717,121 @@ namespace Migo.TaskCore
         {
             OnTaskEvent (task, TaskAssociated);
         }
-        
-        protected virtual void OnTaskAssociated (IEnumerable<T> tasks) 
+
+        protected virtual void OnTaskAssociated (IEnumerable<T> tasks)
         {
-            OnTaskEvent (tasks, TaskAssociated);            
+            OnTaskEvent (tasks, TaskAssociated);
         }
-        
+
         private void OnEvent (EventHandler<EventArgs> eventHandler)
         {
             EventHandler<EventArgs> handler = eventHandler;
-        
+
             if (handler != null) {
             	commandQueue.Register (new EventWrapper<EventArgs> (
             	    handler, this, new EventArgs ())
             	);
-            }                
+            }
         }
 
         private void OnTaskEvent (T task, EventHandler<TaskEventArgs<T>> eventHandler)
         {
             EventHandler<TaskEventArgs<T>> handler = eventHandler;
-        
+
             if (handler != null) {
             	commandQueue.Register (new EventWrapper<TaskEventArgs<T>> (
             	    handler, this, new TaskEventArgs<T> (task))
             	);
-            }                         
+            }
         }
 
         private void OnTaskEvent (IEnumerable<T> tasks, EventHandler<TaskEventArgs<T>> eventHandler)
         {
             EventHandler<TaskEventArgs<T>> handler = eventHandler;
-        
+
             if (handler != null) {
             	commandQueue.Register (new EventWrapper<TaskEventArgs<T>> (
             	    handler, this, new TaskEventArgs<T> (tasks))
             	);
-            }                         
-        }        
-        
+            }
+        }
+
         private void PumpQueue ()
         {
             try {
-                PumpQueueImpl (); 
+                PumpQueueImpl ();
             } finally {
                 executingHandle.WaitOne ();
-                
+
                 lock (sync) {
-                    SetExecuting (false); 
+                    SetExecuting (false);
                     OnStopped ();
                     Reset ();
                 }
             }
         }
-                
+
         private void PumpQueueImpl ()
         {
             T task;
-            
+
             while (true) {
                 gsm.Wait ();
-           
+
                 lock (sync) {
-                    gsm.ResetWait ();     
-                    
+                    gsm.ResetWait ();
+
                     if (IsDone) {
-                        executingHandle.Set ();                                                
+                        executingHandle.Set ();
                         return;
                     } else if (cancelRequested) {
                         continue;
                     }
-                    
+
                     task = null;
                     ITaskCollectionEnumerator<T> tce = Tasks.GetEnumerator ()
-                        as ITaskCollectionEnumerator<T>;   
-                        
+                        as ITaskCollectionEnumerator<T>;
+
                     if (tce.MoveFirst (TaskStatus.Ready)) {
                         task = tce.Current;
-  
-                        try {                            
-                            lock (task.SyncRoot) { 
+
+                        try {
+                            lock (task.SyncRoot) {
                                 if (task.Status != TaskStatus.Ready) {
                                 	continue;
                                 }
-                                
+
                                 currentTasks.Add (task);
                                 gsm.IncrementRunningTaskCount ();
-                            
+
                                 OnTaskStarted (task);
                                 task.ExecuteAsync ();
                             }
-                        } catch (Exception e) {        
+                        } catch (Exception e) {
                             Hyena.Log.Exception (e);
-                            
+
                             try {
                                 gsm.SuspendUpdate = true;
                                 gsm.DecrementRunningTaskCount ();
                                 gsm.IncrementCompletedTaskCount ();
                             } finally {
-                                OnTaskStopped (task);                             
+                                OnTaskStopped (task);
                                 gsm.SuspendUpdate = false;
                                 gsm.Update ();
-                            } 
+                            }
                         }
                     }
                 }
             }
-        } 
-        
+        }
+
         private void SpawnExecutionThread ()
-        {                     
+        {
             Thread t = new Thread (new ThreadStart (PumpQueue));
             t.Name = GetType ().ToString ();
             t.Priority = ThreadPriority.Normal;
             t.IsBackground = true;
-            t.Start ();       
-        }        
+            t.Start ();
+        }
     }
 }
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs
index 6c86468..2b8ed01 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs
index d109c96..0babde8 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for SQLite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs
index 25a06f0..a7e3394 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for SQLite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -112,7 +112,7 @@ namespace Mono.Data.Sqlite
     /// <param name="stmt">The statement to finalize</param>
     internal abstract void FinalizeStatement(SqliteStatement stmt);
     /// <summary>
-    /// Resets a prepared statement so it can be executed again.  If the error returned is SQLITE_SCHEMA, 
+    /// Resets a prepared statement so it can be executed again.  If the error returned is SQLITE_SCHEMA,
     /// transparently attempt to rebuild the SQL statement and throw an error if that was not possible.
     /// </summary>
     /// <param name="stmt">The statement to reset</param>
@@ -178,7 +178,7 @@ namespace Mono.Data.Sqlite
     internal abstract void SetRollbackHook(SqliteRollbackCallback func);
 
     internal abstract long GetLastInsertRowId ();
-    
+
     internal abstract object GetValue(SqliteStatement stmt, int index, SqliteType typ);
 
     protected virtual void Dispose(bool bDisposing)
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs
index 759266e..eb9d039 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for SQLite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -109,7 +109,7 @@ namespace Mono.Data.Sqlite
     /// Initializes the command with the given command text
     /// </summary>
     /// <param name="commandText">The SQL command text</param>
-    public SqliteCommand(string commandText) 
+    public SqliteCommand(string commandText)
       : this(commandText, null, null)
     {
     }
@@ -129,7 +129,7 @@ namespace Mono.Data.Sqlite
     /// Initializes the command and associates it with the specified connection.
     /// </summary>
     /// <param name="connection">The connection to associate with the command</param>
-    public SqliteCommand(SqliteConnection connection) 
+    public SqliteCommand(SqliteConnection connection)
       : this(null, connection, null)
     {
     }
@@ -234,7 +234,7 @@ namespace Mono.Data.Sqlite
 
           _parameterCollection.MapParameters(stmt);
           stmt.BindParameters();
-        }        
+        }
         return stmt;
       }
       catch (Exception)
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs
index 4a3a18c..0910a2d 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -347,7 +347,7 @@ namespace Mono.Data.Sqlite
     private bool HasSchemaPrimaryKey(DataTable schema)
     {
       DataColumn IsKeyColumn = schema.Columns[SchemaTableColumn.IsKey];
-      
+
       foreach (DataRow schemaRow in schema.Rows)
       {
         if ((bool)schemaRow[IsKeyColumn] == true)
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs
index f6f6263..968501d 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -141,7 +141,7 @@ namespace Mono.Data.Sqlite
     /// Busy command timeout value. Defaults to 30
     /// </summary>
     internal int                 _busyTimeout;
-    
+
 #if !PLATFORM_COMPACTFRAMEWORK
     /// <summary>
     /// Whether or not the connection is enlisted in a distrubuted transaction
@@ -166,7 +166,7 @@ namespace Mono.Data.Sqlite
     /// </summary>
     private byte[]               _password;
 #endif
-    
+
     internal bool                _binaryGuid;
 
     internal long                _version;
@@ -347,7 +347,7 @@ namespace Mono.Data.Sqlite
     }
 
     /// <summary>
-    /// Creates a clone of the connection.  All attached databases and user-defined functions are cloned.  If the existing connection is open, the cloned connection 
+    /// Creates a clone of the connection.  All attached databases and user-defined functions are cloned.  If the existing connection is open, the cloned connection
     /// will also be opened.
     /// </summary>
     /// <returns></returns>
@@ -421,7 +421,7 @@ namespace Mono.Data.Sqlite
     /// </summary>
     /// <param name="isolationLevel">Sqlite doesn't support varying isolation levels, so this parameter is ignored.</param>
     /// <param name="deferredLock">When TRUE, Sqlite defers obtaining a write lock until a write operation is requested.
-    /// When FALSE, a writelock is obtained immediately.  The default is TRUE, but in a multi-threaded multi-writer 
+    /// When FALSE, a writelock is obtained immediately.  The default is TRUE, but in a multi-threaded multi-writer
     /// environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
     /// <returns>Returns a SqliteTransaction object.</returns>
     public SqliteTransaction BeginTransaction(System.Data.IsolationLevel isolationLevel, bool deferredLock)
@@ -433,7 +433,7 @@ namespace Mono.Data.Sqlite
     /// Creates a new SqliteTransaction if one isn't already active on the connection.
     /// </summary>
     /// <param name="deferredLock">When TRUE, Sqlite defers obtaining a write lock until a write operation is requested.
-    /// When FALSE, a writelock is obtained immediately.  The default is TRUE, but in a multi-threaded multi-writer 
+    /// When FALSE, a writelock is obtained immediately.  The default is TRUE, but in a multi-threaded multi-writer
     /// environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
     /// <returns>Returns a SqliteTransaction object.</returns>
     public SqliteTransaction BeginTransaction(bool deferredLock)
@@ -503,7 +503,7 @@ namespace Mono.Data.Sqlite
         if (_enlistment != null)
         {
           // If the connection is enlisted in a transaction scope and the scope is still active,
-          // we cannot truly shut down this connection until the scope has completed.  Therefore make a 
+          // we cannot truly shut down this connection until the scope has completed.  Therefore make a
           // hidden connection temporarily to hold open the connection until the scope has completed.
           SqliteConnection cnn = new SqliteConnection();
           cnn._sql = _sql;
@@ -511,7 +511,7 @@ namespace Mono.Data.Sqlite
           cnn._enlistment = _enlistment;
           cnn._connectionState = _connectionState;
           cnn._version = _version;
-          
+
           cnn._enlistment._transaction._cnn = cnn;
           cnn._enlistment._disposeConnection = true;
         }
@@ -651,7 +651,7 @@ namespace Mono.Data.Sqlite
 #endif
     public override string DataSource
     {
-      get 
+      get
       {
         return _dataSource;
       }
@@ -678,13 +678,13 @@ namespace Mono.Data.Sqlite
     internal void MapMonoKeyword (string[] arPiece, List<KeyValuePair<string, string>> ls)
     {
 	    string keyword, value;
-	    
+	
 	    switch (arPiece[0].ToLower (CultureInfo.InvariantCulture)) {
 		    case "uri":
 			    keyword = "Data Source";
 			    value = MapMonoUriPath (arPiece[1]);
 			    break;
-			    
+			
 		    default:
 			    keyword = arPiece[0];
 			    value = arPiece[1];
@@ -706,7 +706,7 @@ namespace Mono.Data.Sqlite
 		    throw new InvalidOperationException ("Invalid connection string: invalid URI");
 	    }
     }
-    
+
     /// <summary>
     /// Parses the connection string into component parts
     /// </summary>
@@ -808,7 +808,7 @@ namespace Mono.Data.Sqlite
       } catch (Exception) {
 	      // ignore
       }
-      
+
       try
       {
         bool bUTF16 = (Convert.ToBoolean(FindKey(opts, "UseUTF16Encoding", "False"), CultureInfo.InvariantCulture) == true);
@@ -960,7 +960,7 @@ namespace Mono.Data.Sqlite
     {
       SetPassword(String.IsNullOrEmpty(databasePassword) ? null : System.Text.UTF8Encoding.UTF8.GetBytes(databasePassword));
     }
-    
+
     /// <summary>
     /// Sets the password for a password-protected database.  A password-protected database is
     /// unusable for any operation until the password has been set.
@@ -977,7 +977,7 @@ namespace Mono.Data.Sqlite
       _password = databasePassword;
     }
 #endif
-    
+
     /// <summary>
     /// Expand the filename of the data source, resolving the |DataDirectory| macro as appropriate.
     /// </summary>
@@ -1991,7 +1991,7 @@ namespace Mono.Data.Sqlite
   internal delegate void SqliteRollbackCallback();
 
   /// <summary>
-  /// Raised when a transaction is about to be committed.  To roll back a transaction, set the 
+  /// Raised when a transaction is about to be committed.  To roll back a transaction, set the
   /// rollbackTrans boolean value to true.
   /// </summary>
   /// <param name="sender">The connection committing the transaction</param>
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs
index 2fa72ce..bb813f0 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -189,7 +189,7 @@ namespace Mono.Data.Sqlite
       }
     }
 #endregion
-    
+
     /// <summary>
     /// Determines whether or not the connection will automatically participate
     /// in the current distributed transaction (if one exists)
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs
index 725b5f2..deb6404 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -48,7 +48,7 @@ namespace Mono.Data.Sqlite
   using System.Globalization;
   using System.Text;
 
-#if !PLATFORM_COMPACTFRAMEWORK 
+#if !PLATFORM_COMPACTFRAMEWORK
   using System.ComponentModel.Design;
 #endif
 
@@ -136,7 +136,7 @@ namespace Mono.Data.Sqlite
     private static string[] _datetimeFormats = new string[] {
       "yyyy-MM-dd HH:mm:ss.fffffff",
       "yyyy-MM-dd HH:mm:ss",
-      "yyyy-MM-dd HH:mm",                               
+      "yyyy-MM-dd HH:mm",
       "yyyyMMddHHmmss",
       "yyyyMMddHHmm",
       "yyyyMMddTHHmmssfffffff",
@@ -225,7 +225,7 @@ namespace Mono.Data.Sqlite
     {
       if (nativestring == IntPtr.Zero)
         return null;
-    
+
       // This assumes a single byte terminates the string.
 
       int len = 0;
@@ -237,7 +237,7 @@ namespace Mono.Data.Sqlite
         len = s.Length;
         while (len > 0 && s [len-1] == 0)
           --len;
-        if (len == s.Length) 
+        if (len == s.Length)
           return s;
         return s.Substring (0, len);
       }
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs
index 60bb1d8..592f901 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs
index f885667..3a38363 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -102,7 +102,7 @@ namespace Mono.Data.Sqlite
     /// </summary>
     private SqliteKeyReader _keyInfo;
 #endif
-    
+
     /// <summary>
     /// Internal constructor, initializes the datareader and sets up to begin executing statements
     /// </summary>
@@ -236,7 +236,7 @@ namespace Mono.Data.Sqlite
     /// <summary>
     /// Sqlite is inherently un-typed.  All datatypes in Sqlite are natively strings.  The definition of the columns of a table
     /// and the affinity of returned types are all we have to go on to type-restrict data in the reader.
-    /// 
+    ///
     /// This function attempts to verify that the type of data being requested of a column matches the datatype of the column.  In
     /// the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob)
     /// to a set of known types that closely match that affinity.  It's not an exact science, but its the best we can do.
@@ -300,7 +300,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetBoolean(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Boolean);
       return Convert.ToBoolean(GetValue(i), CultureInfo.CurrentCulture);
     }
@@ -316,7 +316,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetByte(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Byte);
       return Convert.ToByte(_activeStatement._sql.GetInt32(_activeStatement, i));
     }
@@ -339,7 +339,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetBytes(i - VisibleFieldCount, fieldOffset, buffer, bufferoffset, length);
 #endif
-      
+
       VerifyType(i, DbType.Binary);
       return _activeStatement._sql.GetBytes(_activeStatement, i, (int)fieldOffset, buffer, bufferoffset, length);
     }
@@ -355,7 +355,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetChar(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.SByte);
       return Convert.ToChar(_activeStatement._sql.GetInt32(_activeStatement, i));
     }
@@ -378,7 +378,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetChars(i - VisibleFieldCount, fieldoffset, buffer, bufferoffset, length);
 #endif
-      
+
       VerifyType(i, DbType.String);
       return _activeStatement._sql.GetChars(_activeStatement, i, (int)fieldoffset, buffer, bufferoffset, length);
     }
@@ -396,7 +396,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetDataTypeName(i - VisibleFieldCount);
 #endif
-      
+
       SqliteType typ = GetSqliteType(i);
       if (typ.Type == DbType.Object) return SqliteConvert.SqliteTypeToType(typ).Name;
       return _activeStatement._sql.ColumnType(_activeStatement, i, out typ.Affinity);
@@ -413,7 +413,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetDateTime(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.DateTime);
       return _activeStatement._sql.GetDateTime(_activeStatement, i);
     }
@@ -429,7 +429,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetDecimal(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Decimal);
       return Convert.ToDecimal(_activeStatement._sql.GetDouble(_activeStatement, i));
     }
@@ -445,7 +445,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetDouble(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Double);
       return _activeStatement._sql.GetDouble(_activeStatement, i);
     }
@@ -463,7 +463,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetFieldType(i - VisibleFieldCount);
 #endif
-      
+
       return SqliteConvert.SqliteTypeToType(GetSqliteType(i));
     }
 
@@ -478,7 +478,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetFloat(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Single);
       return Convert.ToSingle(_activeStatement._sql.GetDouble(_activeStatement, i));
     }
@@ -494,7 +494,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetGuid(i - VisibleFieldCount);
 #endif
-      
+
       TypeAffinity affinity = VerifyType(i, DbType.Guid);
       if (affinity == TypeAffinity.Blob)
       {
@@ -517,7 +517,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetInt16(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Int16);
       return Convert.ToInt16(_activeStatement._sql.GetInt32(_activeStatement, i));
     }
@@ -533,7 +533,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetInt32(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Int32);
       return _activeStatement._sql.GetInt32(_activeStatement, i);
     }
@@ -549,7 +549,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetInt64(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.Int64);
       return _activeStatement._sql.GetInt64(_activeStatement, i);
     }
@@ -566,7 +566,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetName(i - VisibleFieldCount);
 #endif
-      
+
       return _activeStatement._sql.ColumnName(_activeStatement, i);
     }
 
@@ -586,7 +586,7 @@ namespace Mono.Data.Sqlite
         if (r > -1) r += VisibleFieldCount;
       }
 #endif
-      
+
       return r;
     }
 
@@ -666,7 +666,7 @@ namespace Mono.Data.Sqlite
 
         strColumn = _command.Connection._sql.ColumnOriginalName(_activeStatement, n);
         if (String.IsNullOrEmpty(strColumn) == false) row[SchemaTableColumn.BaseColumnName] = strColumn;
-        
+
         row[SchemaTableColumn.IsExpression] = String.IsNullOrEmpty(strColumn);
         row[SchemaTableColumn.IsAliased] = (String.Compare(GetName(n), strColumn, true, CultureInfo.InvariantCulture) != 0);
 
@@ -781,7 +781,7 @@ namespace Mono.Data.Sqlite
             }
           }
         }
-        
+
         if (String.IsNullOrEmpty(dataType))
         {
           TypeAffinity affin;
@@ -798,7 +798,7 @@ namespace Mono.Data.Sqlite
       if (_keyInfo != null)
         _keyInfo.AppendSchemaTable(tbl);
 #endif
-      
+
       tbl.AcceptChanges();
       tbl.EndLoadData();
 
@@ -816,7 +816,7 @@ namespace Mono.Data.Sqlite
       if (i >= VisibleFieldCount && _keyInfo != null)
         return _keyInfo.GetString(i - VisibleFieldCount);
 #endif
-      
+
       VerifyType(i, DbType.String);
       return _activeStatement._sql.GetText(_activeStatement, i);
     }
@@ -909,7 +909,7 @@ namespace Mono.Data.Sqlite
         {
           // Reset the previously-executed statement
           _activeStatement._sql.Reset(_activeStatement);
-          
+
           // If we're only supposed to return a single rowset, step through all remaining statements once until
           // they are all done and return false to indicate no more resultsets exist.
           if ((_commandBehavior & CommandBehavior.SingleResult) != 0)
@@ -996,7 +996,7 @@ namespace Mono.Data.Sqlite
 
       typ = _fieldTypeArray[i];
 
-      // If not initialized, then fetch the declared column datatype and attempt to convert it 
+      // If not initialized, then fetch the declared column datatype and attempt to convert it
       // to a known DbType.
       if (typ.Affinity == TypeAffinity.Uninitialized)
         typ.Type = SqliteConvert.TypeNameToDbType(_activeStatement._sql.ColumnType(_activeStatement, i, out typ.Affinity));
@@ -1027,7 +1027,7 @@ namespace Mono.Data.Sqlite
           if (_keyInfo != null)
             _keyInfo.Reset();
 #endif
-	  
+	
           return true;
         }
 
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs
index 864eaa1..e2caed7 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /*******************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs
index 5f51ae3..820dcce 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs
index 7fe6f8e..a9a5bce 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs
index 5f3a5a6..7f0a38b 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -99,11 +99,11 @@ namespace Mono.Data.Sqlite
   /// Although there is one instance of a class derived from SqliteFunction per database connection, the derived class has no access
   /// to the underlying connection.  This is necessary to deter implementers from thinking it would be a good idea to make database
   /// calls during processing.
-  /// 
+  ///
   /// It is important to distinguish between a per-connection instance, and a per-SQL statement context.  One instance of this class
   /// services all SQL statements being stepped through on that connection, and there can be many.  One should never store per-statement
   /// information in member variables of user-defined function classes.
-  /// 
+  ///
   /// For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step.  This data will
   /// be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes.
   /// </remarks>
@@ -374,7 +374,7 @@ namespace Mono.Data.Sqlite
       if (n > 1) obj = _contextDataList[nAux];
 
       Step(ConvertParams(nArgs, argsptr), n, ref obj);
-      _contextDataList[nAux] = obj;      
+      _contextDataList[nAux] = obj;
     }
 
     /// <summary>
@@ -464,7 +464,7 @@ namespace Mono.Data.Sqlite
               break;
             }
           }
-          
+
           if (found == false)
             continue;
 
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs
index a455b93..bd774b6 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs
index fab3e1a..abebe04 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs
index d85d574..4dba90f 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -81,7 +81,7 @@ namespace Mono.Data.Sqlite
     /// <summary>
     /// Default constructor
     /// </summary>
-    public SqliteParameter() 
+    public SqliteParameter()
       : this(null, (DbType)(-1), 0, null, DataRowVersion.Current)
     {
     }
@@ -211,7 +211,7 @@ namespace Mono.Data.Sqlite
     /// <param name="parameterSize">The size of the parameter</param>
     /// <param name="sourceColumn">The source column</param>
     /// <param name="rowVersion">The row version information</param>
-    public SqliteParameter(string parameterName, DbType parameterType, int parameterSize, string sourceColumn, DataRowVersion rowVersion)      
+    public SqliteParameter(string parameterName, DbType parameterType, int parameterSize, string sourceColumn, DataRowVersion rowVersion)
     {
       _parameterName = parameterName;
       _dbType = (int)parameterType;
@@ -241,7 +241,7 @@ namespace Mono.Data.Sqlite
     /// <param name="scale">Ignored</param>
     /// <param name="sourceColumn">The source column</param>
     /// <param name="rowVersion">The row version information</param>
-    /// <param name="value">The initial value to assign the parameter</param>   
+    /// <param name="value">The initial value to assign the parameter</param>
 #if !PLATFORM_COMPACTFRAMEWORK
     [EditorBrowsable(EditorBrowsableState.Advanced)]
 #endif
@@ -319,7 +319,7 @@ namespace Mono.Data.Sqlite
       {
         return _nullable;
       }
-      set 
+      set
       {
         _nullable = value;
       }
@@ -461,7 +461,7 @@ namespace Mono.Data.Sqlite
       set
       {
         _objValue = value;
-        if (_dbType == -1 && _objValue != null && _objValue != DBNull.Value) // If the DbType has never been assigned, try to glean one from the value's datatype 
+        if (_dbType == -1 && _objValue != null && _objValue != DBNull.Value) // If the DbType has never been assigned, try to glean one from the value's datatype
           _dbType = (int)SqliteConvert.TypeToDbType(_objValue.GetType());
       }
     }
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs
index 2267c27..c0f8b0a 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs
index 2ff1a20..d12f72c 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -132,7 +132,7 @@ namespace Mono.Data.Sqlite
     internal bool MapParameter(string s, SqliteParameter p)
     {
       if (_paramNames == null) return false;
-      
+
       int startAt = 0;
       if (s.Length > 0)
       {
@@ -159,7 +159,7 @@ namespace Mono.Data.Sqlite
     public void Dispose()
     {
       _sql.FinalizeStatement(this);
-      
+
       _paramNames = null;
       _paramValues = null;
       _sql = null;
@@ -168,7 +168,7 @@ namespace Mono.Data.Sqlite
       GC.SuppressFinalize(this);
     }
     #endregion
-    
+
     /// <summary>
     ///  Bind all parameters, making sure the caller didn't miss any
     /// </summary>
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs
index dc79c86..9678f0a 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
index a78fcd2..944c047 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -43,8 +43,8 @@
 #if NET_2_0
 namespace Mono.Data.Sqlite {
     using System;
-    
-    
+
+
     /// <summary>
     ///   A strongly-typed resource class, for looking up localized strings, etc.
     /// </summary>
@@ -55,15 +55,15 @@ namespace Mono.Data.Sqlite {
     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     internal class SR {
-        
+
         private static global::System.Resources.ResourceManager resourceMan;
-        
+
         private static global::System.Globalization.CultureInfo resourceCulture;
-        
+
         [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
         internal SR() {
         }
-        
+
         /// <summary>
         ///   Returns the cached ResourceManager instance used by this class.
         /// </summary>
@@ -77,7 +77,7 @@ namespace Mono.Data.Sqlite {
                 return resourceMan;
             }
         }
-        
+
         /// <summary>
         ///   Overrides the current thread's CurrentUICulture property for all
         ///   resource lookups using this strongly typed resource class.
@@ -91,7 +91,7 @@ namespace Mono.Data.Sqlite {
                 resourceCulture = value;
             }
         }
-        
+
         /// <summary>
         ///   Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; standalone=&quot;yes&quot;?&gt;
         ///&lt;DocumentElement&gt;
@@ -113,7 +113,7 @@ namespace Mono.Data.Sqlite {
                 return ResourceManager.GetString("DataTypes", resourceCulture);
             }
         }
-        
+
         /// <summary>
         ///   Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE.
         /// </summary>
@@ -122,7 +122,7 @@ namespace Mono.Data.Sqlite {
                 return ResourceManager.GetString("Keywords", resourceCulture);
             }
         }
-        
+
         /// <summary>
         ///   Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
         ///&lt;DocumentElement&gt;
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs
index 050e2e4..2ac1c8a 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs
@@ -16,10 +16,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 using System;
 using System.Data;
 using System.Data.Common;
-        
+
 namespace Mono.Data.Sqlite
 {
         public class SqliteDataSourceEnumerator : DbDataSourceEnumerator
@@ -72,7 +72,7 @@ namespace Mono.Data.Sqlite
 			dt.Rows.Add (dr);
 			
 			return dt;
-                }                
+                }
         }
 }
 
diff --git a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs
index 6ad9d91..b68a7b9 100644
--- a/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs
+++ b/src/Libraries/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs
@@ -18,10 +18,10 @@
 // distribute, sublicense, and/or sell copies of the Software, and to
 // permit persons to whom the Software is furnished to do so, subject to
 // the following conditions:
-// 
+//
 // The above copyright notice and this permission notice shall be
 // included in all copies or substantial portions of the Software.
-// 
+//
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -34,7 +34,7 @@
 /********************************************************
  * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
  * Written by Robert Simpson (robert blackcastlesoft com)
- * 
+ *
  * Released to the public domain, use at your own risk!
  ********************************************************/
 #if NET_2_0
@@ -90,7 +90,7 @@ namespace Mono.Data.Sqlite
 
     [DllImport(SQLITE_DLL)]
     internal static extern int sqlite3_prepare(IntPtr db, IntPtr pSql, int nBytes, out IntPtr stmt, out IntPtr ptrRemain);
-	  
+	
     [DllImport(SQLITE_DLL)]
     internal static extern int sqlite3_bind_blob(IntPtr stmt, int index, Byte[] value, int nSize, IntPtr nTransient);
 
@@ -303,7 +303,7 @@ namespace Mono.Data.Sqlite
 
     [DllImport(SQLITE_DLL)]
     internal static extern int sqlite3_table_cursor(IntPtr stmt, int db, int tableRootPage);
-    
+
     [DllImport(SQLITE_DLL)]
     internal static extern long sqlite3_last_insert_rowid(IntPtr db);
   }
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/LinkEntry.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/LinkEntry.cs
index a397b1c..2183342 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/LinkEntry.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/LinkEntry.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 
 namespace Media.Playlists.Xspf
@@ -33,20 +33,20 @@ namespace Media.Playlists.Xspf
     public struct LinkEntry
     {
         public static readonly LinkEntry Zero;
-        
+
         private Uri rel;
         private Uri value;
-        
+
         public LinkEntry(Uri rel, Uri value)
         {
             this.rel = rel;
             this.value = value;
         }
-        
+
         public Uri Rel {
             get { return rel; }
         }
-        
+
         public Uri Value {
             get { return value; }
         }
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/MetaEntry.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/MetaEntry.cs
index 75defa7..48abcfa 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/MetaEntry.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/MetaEntry.cs
@@ -33,20 +33,20 @@ namespace Media.Playlists.Xspf
     public struct MetaEntry
     {
         public static readonly MetaEntry Zero;
-    
+
         private Uri rel;
         private string value;
-        
+
         public MetaEntry(Uri rel, string value)
         {
             this.rel = rel;
             this.value = value;
         }
-        
+
         public Uri Rel {
             get { return rel; }
         }
-        
+
         public string Value {
             get { return value; }
         }
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/Playlist.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/Playlist.cs
index ba3eaab..48ff30e 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/Playlist.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/Playlist.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.IO;
 using System.Xml;
@@ -37,32 +37,32 @@ namespace Media.Playlists.Xspf
     public class Playlist : XspfBaseObject
     {
         // TODO: Add attribution, extension support
-        
+
         private static string XspfNamespace = "http://xspf.org/ns/0/";;
-        
+
         private Uri default_base_uri;
         private Uri document_base_uri;
-        
+
         private bool loaded = false;
 
-        private Uri location;  
+        private Uri location;
         private Uri identifier;
         private Uri license;
         private DateTime date;
-        
+
         private List<Track> tracks = new List<Track>();
-        
+
         public Playlist()
         {
         }
-        
+
         private static XmlNamespaceManager BuildNamespaceManager (XmlDocument doc)
         {
             XmlNamespaceManager xmlns = new XmlNamespaceManager (doc.NameTable);
             xmlns.AddNamespace ("xspf", XspfNamespace);
             return xmlns;
         }
-        
+
         private static XmlNode FindPlaylistNode (XmlDocument doc, XmlNamespaceManager xmlns)
         {
             XmlNode playlist_node = doc.SelectSingleNode ("/xspf:playlist", xmlns);
@@ -73,12 +73,12 @@ namespace Media.Playlists.Xspf
             }
             return playlist_node;
         }
-        
+
         private static bool Sniff (XmlDocument doc)
         {
             XmlNamespaceManager xmlns = BuildNamespaceManager (doc);
             XmlNode playlist_node = FindPlaylistNode (doc, xmlns);
-            
+
             if (playlist_node != null) {
                 XmlAttribute version_attr = playlist_node.Attributes["version"];
                 if (!(version_attr == null || version_attr.Value == null)) {
@@ -90,35 +90,35 @@ namespace Media.Playlists.Xspf
             }
             return false;
         }
-        
+
         public static bool Sniff (string path)
         {
             XmlDocument doc = new XmlDocument ();
             doc.Load (path);
             return Sniff (doc);
         }
-        
+
         public static bool Sniff (XmlReader reader)
         {
             XmlDocument doc = new XmlDocument ();
             doc.Load (reader);
             return Sniff (doc);
         }
-        
+
         public static bool Sniff (TextReader reader)
         {
             XmlDocument doc = new XmlDocument ();
             doc.Load (reader);
             return Sniff (doc);
         }
-        
+
         public static bool Sniff (Stream stream)
         {
             XmlDocument doc = new XmlDocument ();
             doc.Load (stream);
             return Sniff (doc);
         }
-        
+
         private void Load(XmlDocument doc)
         {
             XmlNamespaceManager xmlns = BuildNamespaceManager (doc);
@@ -141,18 +141,18 @@ namespace Media.Playlists.Xspf
                     throw new ApplicationException("Invalid XSPF Version '" + version_attr.Value + "'");
                 }
             }
-            
+
             XmlAttribute base_attr = playlist_node.Attributes["xml:base"];
             if(base_attr != null) {
                 document_base_uri = new Uri(base_attr.Value);
             }
-            
+
             LoadBase(playlist_node, xmlns);
-            
+
             location = XmlUtil.ReadUri(playlist_node, xmlns, ResolvedBaseUri, "xspf:location");
             identifier = XmlUtil.ReadUri(playlist_node, xmlns, ResolvedBaseUri, "xspf:identifier");
             license = XmlUtil.ReadUri(playlist_node, xmlns, ResolvedBaseUri, "xspf:license");
-            
+
             date = XmlUtil.ReadDate(playlist_node, xmlns, "xspf:date");
 
             foreach(XmlNode node in playlist_node.SelectNodes("xspf:trackList/xspf:track", xmlns)) {
@@ -160,66 +160,66 @@ namespace Media.Playlists.Xspf
                 track.Load(this, node, xmlns);
                 AddTrack(track);
             }
-            
+
             loaded = true;
         }
-        
+
         public void Load(string path)
         {
             XmlDocument doc = new XmlDocument();
             doc.Load(path);
             Load(doc);
         }
-        
+
         public void Load(XmlReader reader)
         {
             XmlDocument doc = new XmlDocument();
             doc.Load(reader);
             Load(doc);
         }
-        
+
         public void Load(TextReader reader)
         {
             XmlDocument doc = new XmlDocument();
             doc.Load(reader);
             Load(doc);
         }
-        
+
         public void Load(Stream stream)
         {
             XmlDocument doc = new XmlDocument();
             doc.Load(stream);
             Load(doc);
         }
-        
+
         public void Save(string path)
         {
             Save(new XmlTextWriter(path, System.Text.Encoding.UTF8));
         }
-        
+
         public void Save(Stream stream)
         {
             Save(new XmlTextWriter(stream, System.Text.Encoding.UTF8));
         }
-        
+
         public void Save(XmlTextWriter writer)
         {
             // FIXME: This is very very limited write support
-            
+
             writer.Indentation = 2;
             writer.IndentChar = ' ';
             writer.Formatting = System.Xml.Formatting.Indented;
-            
+
             writer.WriteStartDocument();
             writer.WriteStartElement("playlist", XspfNamespace);
             writer.WriteAttributeString("version", "1");
-            
+
             SaveBase(writer);
-            
+
             if (Date.Ticks > 0) {
                 writer.WriteElementString ("date", Date.ToUniversalTime ().ToString ("o"));
             }
-            
+
             writer.WriteStartElement("trackList");
             foreach(Track track in tracks) {
                 writer.WriteStartElement("track");
@@ -227,28 +227,28 @@ namespace Media.Playlists.Xspf
                 writer.WriteEndElement();
             }
             writer.WriteEndElement();
-            
+
             writer.WriteEndElement();
             writer.WriteEndDocument();
-            
+
             writer.Flush();
             writer.Close();
         }
-        
+
         public void AddTrack(Track track)
         {
             track.Parent = this;
             tracks.Add(track);
         }
-        
+
         public void RemoveTrack(Track track)
         {
             track.Parent = null;
             tracks.Remove(track);
         }
-        
+
         public Uri DefaultBaseUri {
-            get { 
+            get {
                 if(default_base_uri == null) {
                     string path = Path.GetFullPath(Environment.CurrentDirectory);
                     if(path == null) {
@@ -259,32 +259,32 @@ namespace Media.Playlists.Xspf
                         default_base_uri = Location;
                     }
                 }
-                
+
                 return default_base_uri;
             }
-            
-            set { 
+
+            set {
                 if(loaded) {
                     throw new ApplicationException("Setting DefaultBaseUri must be done before Load()");
                 }
-                
-                default_base_uri = value; 
+
+                default_base_uri = value;
             }
         }
-        
+
         public Uri DocumentBaseUri {
             get { return document_base_uri; }
         }
-        
+
         public override Uri ResolvedBaseUri {
             get { return DocumentBaseUri == null ? DefaultBaseUri : DocumentBaseUri; }
         }
-        
+
         public Uri Location {
             get { return location; }
             set { location = value; }
         }
-        
+
         public Uri Identifier {
             get { return identifier; }
             set { identifier = value; }
@@ -294,16 +294,16 @@ namespace Media.Playlists.Xspf
             get { return license; }
             set { license = value; }
         }
-        
+
         public DateTime Date {
             get { return date; }
             set { date = value; }
         }
-        
+
         public ReadOnlyCollection<Track> Tracks {
             get { return new ReadOnlyCollection<Track>(tracks); }
         }
-        
+
         public int TrackCount {
             get { return tracks.Count; }
         }
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs
index 074dad3..2249a0f 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/Tests/XspfTests.cs
@@ -112,7 +112,7 @@ namespace Media.Playlists.Xspf.Tests
 
             Assert.AreEqual(uri, track.Info);
             Assert.AreEqual(uri, track.Image);
-            
+
             Assert.AreEqual(11, track.TrackNumber);
             Assert.AreEqual(TimeSpan.FromMilliseconds(5159), track.Duration);
 
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/Track.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/Track.cs
index 2c37b6d..55efe52 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/Track.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/Track.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Xml;
 using System.Collections.Generic;
@@ -36,25 +36,25 @@ namespace Media.Playlists.Xspf
     public class Track : XspfBaseObject
     {
         // TODO: Add attribution, extension support
-        
+
         private Uri base_uri;
-    
+
         private string album;
-        
+
         private uint track_num;
         private TimeSpan duration;
-    
+
         private List<Uri> locations = new List<Uri>();
         private List<Uri> identifiers = new List<Uri>();
-        
+
         private Playlist parent;
-        
+
         private XmlNode ctor_node;
-        
+
         public Track()
         {
         }
-        
+
         internal void Load(Playlist playlist, XmlNode node, XmlNamespaceManager xmlns)
         {
             XmlAttribute base_attr = node.Attributes["xml:base"];
@@ -67,142 +67,142 @@ namespace Media.Playlists.Xspf
             } else {
                 base_uri = playlist.ResolvedBaseUri;
             }
-            
+
             LoadBase(node, xmlns);
-            
+
             ctor_node = node;
-            
+
             album = XmlUtil.ReadString(node, xmlns, "xspf:album");
 
             track_num = XmlUtil.ReadUInt(node, xmlns, "xspf:trackNum");
             duration = TimeSpan.FromMilliseconds(XmlUtil.ReadUInt(node, xmlns, "xspf:duration"));
-            
+
             locations = XmlUtil.ReadUris(node, xmlns, ResolvedBaseUri, "xspf:location");
             identifiers = XmlUtil.ReadUris(node, xmlns, ResolvedBaseUri, "xspf:identifier");
         }
-        
+
         public void Save(XmlWriter writer)
         {
             SaveBase(writer);
-            
+
             if(album != null) {
                 writer.WriteElementString("album", album);
             }
-            
+
             // Only write valid (ie non-0) track numbers
             if (TrackNumber > 0) {
                 writer.WriteElementString ("trackNum", TrackNumber.ToString ());
             }
-            
+
             foreach(Uri uri in locations) {
                 string escaped = uri.IsAbsoluteUri? uri.AbsoluteUri : Uri.EscapeUriString (uri.ToString ());
                 writer.WriteElementString ("location", escaped);
             }
         }
-        
+
         // XXX: Better solution could probably be achieved?
         public string GetExtendedValue (string key)
         {
             foreach (XmlNode n in ctor_node) {
-                if (n.LocalName == key) {                    
+                if (n.LocalName == key) {
                     return n.InnerText;
                 }
             }
-            
+
             return null;
         }
-        
+
         public Uri GetLocationAt(int position)
         {
             return locations[position];
         }
-        
+
         public void InsertLocation(int position, Uri uri)
         {
             locations.Insert(position, uri);
         }
-        
+
         public void ReplaceLocation(int position, Uri uri)
         {
             locations.RemoveAt(position);
             locations.Insert(position, uri);
         }
-        
+
         public void AddLocation(Uri uri)
         {
             locations.Add(uri);
         }
-        
+
         public void RemoveLocation(Uri uri)
         {
             locations.Remove(uri);
         }
-        
+
         public void ClearLocations()
         {
             locations.Clear();
         }
-        
+
         public Uri GetIdentifierAt(int position)
         {
             return identifiers[position];
         }
-        
+
         public void InsertIdentifier(int position, Uri uri)
         {
             identifiers.Insert(position, uri);
         }
-        
+
         public void AddIdentifier(Uri uri)
         {
             identifiers.Add(uri);
         }
-        
+
         public void RemoveIdentifier(Uri uri)
         {
             identifiers.Remove(uri);
         }
-        
+
         public void ClearIdentifiers()
         {
             identifiers.Clear();
         }
-        
+
         public override Uri ResolvedBaseUri {
             get { return base_uri; }
         }
-        
+
         public string Album {
             get { return album; }
             set { album = value; }
         }
-        
+
         public uint TrackNumber {
             get { return track_num; }
             set { track_num = value; }
         }
-        
+
         public TimeSpan Duration {
             get { return duration; }
             set { duration = value; }
         }
-                
+
         public ReadOnlyCollection<Uri> Locations {
             get { return new ReadOnlyCollection<Uri>(locations); }
         }
-        
+
         public ReadOnlyCollection<Uri> Identifiers {
             get { return new ReadOnlyCollection<Uri>(identifiers); }
         }
-        
+
         public int LocationCount {
             get { return locations.Count; }
         }
-        
+
         public int IdentifierCount {
             get { return identifiers.Count; }
         }
-        
+
         public Playlist Parent {
             internal set { parent = value; }
             get { return parent; }
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/W3CDateTime.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/W3CDateTime.cs
index d7a96eb..be7b2d4 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/W3CDateTime.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/W3CDateTime.cs
@@ -35,9 +35,9 @@ namespace Media.Playlists.Xspf
     {
         public static readonly W3CDateTime MaxValue = new W3CDateTime(DateTime.MaxValue, TimeSpan.Zero);
         public static readonly W3CDateTime MinValue = new W3CDateTime(DateTime.MinValue, TimeSpan.Zero);
-        
+
         public static TimeSpan LocalUtcOffset {
-            get { 
+            get {
                 DateTime now = DateTime.Now;
                 return now - now.ToUniversalTime();
             }
@@ -46,7 +46,7 @@ namespace Media.Playlists.Xspf
         public static W3CDateTime Now {
             get { return new W3CDateTime(DateTime.Now); }
         }
-        
+
         public static W3CDateTime UtcNow {
             get { return new W3CDateTime(DateTime.UtcNow); }
         }
@@ -54,36 +54,36 @@ namespace Media.Playlists.Xspf
         public static W3CDateTime Today {
             get { return new W3CDateTime(DateTime.Today); }
         }
-        
+
         private DateTime datetime;
         private TimeSpan offset;
-        
+
         public W3CDateTime(DateTime datetime, TimeSpan offset)
         {
             this.datetime = datetime;
             this.offset = offset;
         }
-        
+
         public W3CDateTime(DateTime datetime) : this(datetime, LocalUtcOffset)
         {
         }
-        
+
         public DateTime DateTime {
             get { return datetime; }
         }
-        
+
         public DateTime LocalTime {
             get { return UtcTime + LocalUtcOffset; }
         }
-        
+
         public TimeSpan UtcOffset {
             get { return offset; }
         }
-        
+
         public DateTime UtcTime {
             get { return datetime - offset; }
         }
-        
+
         public W3CDateTime Add(TimeSpan value)
         {
             return new W3CDateTime(datetime + value, offset);
@@ -134,7 +134,7 @@ namespace Media.Playlists.Xspf
             if(o == null || !(o is W3CDateTime)) {
                 return false;
             }
-            
+
             return DateTime.Equals(UtcTime, ((W3CDateTime)o).UtcTime);
         }
 
@@ -172,7 +172,7 @@ namespace Media.Playlists.Xspf
         {
             return new W3CDateTime(UtcTime, TimeSpan.Zero);
         }
-    
+
         public string ToString(string format)
         {
             switch(format) {
@@ -197,33 +197,33 @@ namespace Media.Playlists.Xspf
 
         public static W3CDateTime Parse(string s)
         {
-            const string Rfc822DateFormat = 
+            const string Rfc822DateFormat =
                 @"^((Mon|Tue|Wed|Thu|Fri|Sat|Sun), *)?(?<day>\d\d?) +" +
                 @"(?<month>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) +" +
                 @"(?<year>\d\d(\d\d)?) +" +
                 @"(?<hour>\d\d):(?<min>\d\d)(:(?<sec>\d\d))? +" +
                 @"(?<ofs>([+\-]?\d\d\d\d)|UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT)$";
-        
+
             const string W3CDateFormat =
                 @"^(?<year>\d\d\d\d)" +
-                @"(-(?<month>\d\d)(-(?<day>\d\d)(T(?<hour>\d\d):" + 
+                @"(-(?<month>\d\d)(-(?<day>\d\d)(T(?<hour>\d\d):" +
                 @"(?<min>\d\d)(:(?<sec>\d\d)(?<ms>\.\d+)?)?" +
-                @"(?<ofs>(Z|[+\-]\d\d:\d\d))?)?)?)?$"; 
+                @"(?<ofs>(Z|[+\-]\d\d:\d\d))?)?)?)?$";
 
             string combined_format = String.Format(
                 @"(?<rfc822>{0})|(?<w3c>{1})", Rfc822DateFormat, W3CDateFormat);
 
             Regex reDate = new Regex(combined_format);
             Match m = reDate.Match(s);
-            
+
             if(!m.Success) {
                 throw new FormatException("Input is not a valid W3C or RFC822 date");
-            } 
-            
+            }
+
             try {
                 bool isRfc822 = m.Groups["rfc822"].Success;
                 int year = Int32.Parse(m.Groups["year"].Value);
-                
+
                 if(year < 1000) {
                     year += 2000 - (year < 50 ? 0 : 1);
                 }
@@ -243,12 +243,12 @@ namespace Media.Playlists.Xspf
 
                 TimeSpan offset = TimeSpan.Zero;
                 if(m.Groups["ofs"].Success) {
-                    offset = isRfc822 
+                    offset = isRfc822
                         ? ParseRfc822Offset(m.Groups["ofs"].Value)
                         : ParseW3COffset(m.Groups["ofs"].Value);
                 }
-        
-        
+
+
                 return new W3CDateTime(new DateTime(year, month, day, hour, min, sec, ms), offset);
             } catch(Exception e) {
                 throw new FormatException("Input is not a valid W3C or RFC822 date", e);
@@ -256,7 +256,7 @@ namespace Media.Playlists.Xspf
         }
 
         private static readonly string [] MonthNames = new string [] {
-            "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
+            "Jan", "Feb", "Mar", "Apr", "May", "Jun",
             "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
         };
 
@@ -267,7 +267,7 @@ namespace Media.Playlists.Xspf
                     return i + 1;
                 }
             }
-        
+
             throw new ApplicationException("Invalid month name: " + monthName);
         }
 
@@ -276,16 +276,16 @@ namespace Media.Playlists.Xspf
             if(s == string.Empty) {
                 return TimeSpan.Zero;
             }
-            
+
             int hours = 0;
-            
+
             switch(s) {
                 case "UT":
                 case "GMT": break;
                 case "EDT": hours = -4; break;
-                case "EST": 
+                case "EST":
                 case "CDT": hours = -5; break;
-                case "CST": 
+                case "CST":
                 case "MDT": hours = -6; break;
                 case "MST":
                 case "PDT": hours = -7; break;
@@ -296,9 +296,9 @@ namespace Media.Playlists.Xspf
                         return TimeSpan.Parse(sfmt);
                     } else {
                         return TimeSpan.Parse(s.Insert(s.Length - 2, ":"));
-                    } 
+                    }
             }
-            
+
             return TimeSpan.FromHours(hours);
         }
 
@@ -312,15 +312,15 @@ namespace Media.Playlists.Xspf
                 return TimeSpan.Parse(s);
             }
         }
-        
+
         private static string FormatOffset(TimeSpan offset, string separator)
         {
             string s = String.Empty;
-            
+
             if(offset >= TimeSpan.Zero) {
                 s = "+";
             }
-            
+
             return s + offset.Hours.ToString("00") + separator + offset.Minutes.ToString("00");
         }
 
@@ -363,12 +363,12 @@ namespace Media.Playlists.Xspf
         {
             return datetime.Add(timespan);
         }
-        
+
         public static W3CDateTime operator -(W3CDateTime datetime, TimeSpan timespan)
         {
             return datetime.Subtract(timespan);
         }
-        
+
         public int CompareTo(object o)
         {
             if(o == null) {
@@ -376,7 +376,7 @@ namespace Media.Playlists.Xspf
             } else if(o is W3CDateTime) {
                 return Compare(this, (W3CDateTime)o);
             }
-            
+
             throw new ArgumentException("Must be a W3CDateTime");
         }
     }
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/XmlUtil.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/XmlUtil.cs
index 7f378a1..eea20f3 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/XmlUtil.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/XmlUtil.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Xml;
 using System.Collections.Generic;
@@ -37,113 +37,113 @@ namespace Media.Playlists.Xspf
         internal static string ReadString(XmlNode parentNode, XmlNamespaceManager xmlns, string xpath)
         {
             XmlNode node = parentNode.SelectSingleNode(xpath, xmlns);
-            
+
             if(node == null) {
                 return null;
             }
-            
+
             return node.InnerText == null ? null : node.InnerText.Trim();
         }
-        
+
         internal static Uri ReadUri(XmlNode node, XmlNamespaceManager xmlns, Uri baseUri, string xpath)
         {
             string str = ReadString(node, xmlns, xpath);
             if(str == null) {
                 return null;
             }
-            
+
             return ResolveUri(baseUri, str);
         }
-        
+
         internal static DateTime ReadDate(XmlNode node, XmlNamespaceManager xmlns, string xpath)
         {
             string str = ReadString(node, xmlns, xpath);
             if(str == null) {
                 return DateTime.MinValue;
             }
-            
+
             W3CDateTime datetime = W3CDateTime.Parse(str);
             return datetime.LocalTime;
-        }       
-        
+        }
+
         internal static uint ReadUInt(XmlNode node, XmlNamespaceManager xmlns, string xpath)
         {
             string str = ReadString(node, xmlns, xpath);
             if(str == null) {
                 return 0;
             }
-            
+
             return UInt32.Parse(str);
         }
-        
+
         internal static string ReadRelPair(XmlNode node, Uri baseUri, out Uri rel)
         {
             XmlAttribute attr = node.Attributes["rel"];
             string rel_value = attr == null || attr.Value == null ? null : attr.Value.Trim();
             string value = node.InnerText == null ? null : node.InnerText.Trim();
-            
+
             if(rel_value == null || value == null) {
                 rel = null;
                 return null;
             }
-            
+
             rel = ResolveUri(baseUri, rel_value);
             return value;
         }
-        
-        internal static List<MetaEntry> ReadMeta(XmlNode parentNode, XmlNamespaceManager xmlns, 
+
+        internal static List<MetaEntry> ReadMeta(XmlNode parentNode, XmlNamespaceManager xmlns,
             Uri baseUri, string xpath)
         {
             List<MetaEntry> meta_collection = new List<MetaEntry>();
-            
+
             foreach(XmlNode node in parentNode.SelectNodes(xpath, xmlns)) {
                 Uri rel;
                 string value = ReadRelPair(node, baseUri, out rel);
-                
+
                 if(value == null || rel == null) {
                     continue;
                 }
-                
+
                 meta_collection.Add(new MetaEntry(rel, value));
             }
-            
+
             return meta_collection;
         }
-        
-        internal static List<LinkEntry> ReadLinks(XmlNode parentNode, XmlNamespaceManager xmlns, 
+
+        internal static List<LinkEntry> ReadLinks(XmlNode parentNode, XmlNamespaceManager xmlns,
             Uri baseUri, string xpath)
         {
             List<LinkEntry> link_collection = new List<LinkEntry>();
-            
+
             foreach(XmlNode node in parentNode.SelectNodes(xpath, xmlns)) {
                 Uri rel;
                 string value = ReadRelPair(node, baseUri, out rel);
-                
+
                 if(value == null || rel == null) {
                     continue;
                 }
 
                 link_collection.Add(new LinkEntry(rel, ResolveUri(baseUri, value)));
             }
-            
+
             return link_collection;
         }
-        
-        internal static List<Uri> ReadUris(XmlNode parentNode, XmlNamespaceManager xmlns, 
+
+        internal static List<Uri> ReadUris(XmlNode parentNode, XmlNamespaceManager xmlns,
             Uri baseUri, string xpath)
         {
             List<Uri> uri_collection = new List<Uri>();
-            
+
             foreach(XmlNode node in parentNode.SelectNodes(xpath, xmlns)) {
                 string value = node.InnerText == null ? null : node.InnerText.Trim();
                 if(value != null) {
                     uri_collection.Add(ResolveUri(baseUri, value));
                 }
             }
-            
+
             return uri_collection;
         }
-        
+
         internal static Uri ResolveUri(Uri baseUri, string str)
         {
             try {
diff --git a/src/Libraries/Mono.Media/Media.Playlists.Xspf/XspfBaseObject.cs b/src/Libraries/Mono.Media/Media.Playlists.Xspf/XspfBaseObject.cs
index f6accd5..9dd5519 100644
--- a/src/Libraries/Mono.Media/Media.Playlists.Xspf/XspfBaseObject.cs
+++ b/src/Libraries/Mono.Media/Media.Playlists.Xspf/XspfBaseObject.cs
@@ -25,7 +25,7 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
- 
+
 using System;
 using System.Xml;
 using System.Collections.Generic;
@@ -37,103 +37,103 @@ namespace Media.Playlists.Xspf
     {
         private string title;
         private string creator;
-        private string annotation;        
-        
+        private string annotation;
+
         private Uri info;
         private Uri image;
-        
+
         private List<LinkEntry> links;
         private List<MetaEntry> meta;
 
         public abstract Uri ResolvedBaseUri {
             get;
         }
-        
+
         protected void LoadBase(XmlNode parentNode, XmlNamespaceManager xmlns)
-        { 
+        {
             title = XmlUtil.ReadString(parentNode, xmlns, "xspf:title");
             creator = XmlUtil.ReadString(parentNode, xmlns, "xspf:creator");
             annotation = XmlUtil.ReadString(parentNode, xmlns, "xspf:annotation");
-            
+
             info = XmlUtil.ReadUri(parentNode, xmlns, ResolvedBaseUri, "xspf:info");
             image = XmlUtil.ReadUri(parentNode, xmlns, ResolvedBaseUri, "xspf:image");
-            
+
             meta = XmlUtil.ReadMeta(parentNode, xmlns, ResolvedBaseUri, "xspf:meta");
             links = XmlUtil.ReadLinks(parentNode, xmlns, ResolvedBaseUri, "xspf:link");
         }
-        
+
         protected void SaveBase(XmlWriter writer)
         {
             if(title != null) {
                 writer.WriteElementString("title", title);
             }
-            
+
             if(creator != null) {
                 writer.WriteElementString("creator", creator);
             }
-            
+
             if(annotation != null) {
                 writer.WriteElementString("annotation", annotation);
             }
-            
+
             if(info != null) {
                 writer.WriteElementString("info", info.AbsoluteUri);
             }
-            
+
             if(image != null) {
                 writer.WriteElementString("image", image.AbsoluteUri);
             }
         }
-        
+
         public MetaEntry FindMetaEntry(string rel)
         {
             return FindMetaEntry(new Uri(ResolvedBaseUri, rel));
         }
-        
+
         public MetaEntry FindMetaEntry(Uri uri)
         {
             if(meta == null) {
                 return MetaEntry.Zero;
             }
-            
+
             foreach(MetaEntry meta_entry in meta) {
                 if(meta_entry.Rel == uri) {
                     return meta_entry;
                 }
             }
-            
+
             return MetaEntry.Zero;
         }
-                
+
         public string Title {
             get { return title; }
             set { title = value; }
         }
-        
+
         public string Creator {
             get { return creator; }
             set { creator = value; }
         }
-        
+
         public string Annotation {
             get { return annotation; }
             set { annotation = value; }
         }
-                
+
         public Uri Info {
             get { return info; }
             set { info = value; }
         }
-        
+
         public Uri Image {
             get { return image; }
             set { image = value; }
         }
-        
+
         public ReadOnlyCollection<MetaEntry> Meta {
             get { return new ReadOnlyCollection<MetaEntry>(meta); }
         }
-        
+
         public ReadOnlyCollection<LinkEntry> Links {
             get { return new ReadOnlyCollection<LinkEntry>(links); }
         }
diff --git a/src/Libraries/Mtp/Mtp/AbstractTrackList.cs b/src/Libraries/Mtp/Mtp/AbstractTrackList.cs
index fba1831..984bf4c 100644
--- a/src/Libraries/Mtp/Mtp/AbstractTrackList.cs
+++ b/src/Libraries/Mtp/Mtp/AbstractTrackList.cs
@@ -59,7 +59,7 @@ namespace Mtp
         {
             RemoveTrack ((int)track.FileId);
         }
-        
+
         public void RemoveTrack (int track_id)
         {
             track_ids.Remove (track_id);
diff --git a/src/Libraries/Mtp/Mtp/Album.cs b/src/Libraries/Mtp/Mtp/Album.cs
index e0d00e6..db74437 100644
--- a/src/Libraries/Mtp/Mtp/Album.cs
+++ b/src/Libraries/Mtp/Mtp/Album.cs
@@ -6,24 +6,24 @@
  *  Gabriel Burt (gburt novell com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -108,7 +108,7 @@ namespace Mtp
                 if (cover_art == null) {
                     return;
                 }
-                
+
                 FileSampleData cover = new FileSampleData ();
                 cover.data = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (byte)) * cover_art.Length);
                 Marshal.Copy (cover_art, 0, cover.data, cover_art.Length);
@@ -137,7 +137,7 @@ namespace Mtp
         {
             return LIBMTP_Update_Album (Device.Handle, ref album);
         }
-        
+
         public void Remove ()
         {
 			MtpDevice.LIBMTP_Delete_Object(Device.Handle, AlbumId);
diff --git a/src/Libraries/Mtp/Mtp/Error.cs b/src/Libraries/Mtp/Mtp/Error.cs
index 0f7199b..ed79bd8 100644
--- a/src/Libraries/Mtp/Mtp/Error.cs
+++ b/src/Libraries/Mtp/Mtp/Error.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Mtp/Mtp/ErrorCode.cs b/src/Libraries/Mtp/Mtp/ErrorCode.cs
index 5bf108b..59a1732 100644
--- a/src/Libraries/Mtp/Mtp/ErrorCode.cs
+++ b/src/Libraries/Mtp/Mtp/ErrorCode.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Mtp/Mtp/File.cs b/src/Libraries/Mtp/Mtp/File.cs
index dd64f99..5af5806 100644
--- a/src/Libraries/Mtp/Mtp/File.cs
+++ b/src/Libraries/Mtp/Mtp/File.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Mtp/Mtp/FileSampleData.cs b/src/Libraries/Mtp/Mtp/FileSampleData.cs
index 3c7422d..fcab905 100644
--- a/src/Libraries/Mtp/Mtp/FileSampleData.cs
+++ b/src/Libraries/Mtp/Mtp/FileSampleData.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Mtp/Mtp/FileType.cs b/src/Libraries/Mtp/Mtp/FileType.cs
index 85308a5..02b5f00 100644
--- a/src/Libraries/Mtp/Mtp/FileType.cs
+++ b/src/Libraries/Mtp/Mtp/FileType.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Mtp/Mtp/Folder.cs b/src/Libraries/Mtp/Mtp/Folder.cs
index 792eb7c..b0d8a12 100644
--- a/src/Libraries/Mtp/Mtp/Folder.cs
+++ b/src/Libraries/Mtp/Mtp/Folder.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -73,7 +73,7 @@ namespace Mtp
 		{
 			if (string.IsNullOrEmpty(name))
 			    throw new ArgumentNullException("name");
-			    
+			
 			// First create the folder on the device and check for error
 			uint id = CreateFolder (device.Handle, name, FolderId);
 			
@@ -233,7 +233,7 @@ namespace Mtp
 		/*
 		public object NextSibling
 		{
-			get 
+			get
 			{
 				if(sibling == IntPtr.Zero)
 					return null;
@@ -243,7 +243,7 @@ namespace Mtp
 		
 		public object NextChild
 		{
-			get 
+			get
 			{
 				if(child == IntPtr.Zero)
 					return null;
diff --git a/src/Libraries/Mtp/Mtp/MtpDevice.cs b/src/Libraries/Mtp/Mtp/MtpDevice.cs
index bca0817..22b79ef 100644
--- a/src/Libraries/Mtp/Mtp/MtpDevice.cs
+++ b/src/Libraries/Mtp/Mtp/MtpDevice.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
@@ -449,7 +449,7 @@ namespace Mtp
 		// void LIBMTP_Release_Device_List (LIBMTP_mtpdevice_t *)
 				
 
-		// int LIBMTP_Detect_Descriptor (uint16_t *, uint16_t *); 
+		// int LIBMTP_Detect_Descriptor (uint16_t *, uint16_t *);
 		/*
 				void 	LIBMTP_Dump_Device_Info (LIBMTP_mtpdevice_t *)
 				
diff --git a/src/Libraries/Mtp/Mtp/Playlist.cs b/src/Libraries/Mtp/Mtp/Playlist.cs
index ff43c38..0a91f68 100644
--- a/src/Libraries/Mtp/Mtp/Playlist.cs
+++ b/src/Libraries/Mtp/Mtp/Playlist.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/Mtp/Mtp/Track.cs b/src/Libraries/Mtp/Mtp/Track.cs
index 2213df9..451ad3e 100644
--- a/src/Libraries/Mtp/Mtp/Track.cs
+++ b/src/Libraries/Mtp/Mtp/Track.cs
@@ -6,24 +6,24 @@
  *  Alan McGovern (alan mcgovern gmail com)
  ****************************************************************************/
 
-/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW: 
+/*  THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
  *
  *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of this software and associated documentation files (the "Software"),  
- *  to deal in the Software without restriction, including without limitation  
- *  the rights to use, copy, modify, merge, publish, distribute, sublicense,  
- *  and/or sell copies of the Software, and to permit persons to whom the  
+ *  copy of this software and associated documentation files (the "Software"),
+ *  to deal in the Software without restriction, including without limitation
+ *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ *  and/or sell copies of the Software, and to permit persons to whom the
  *  Software is furnished to do so, subject to the following conditions:
  *
- *  The above copyright notice and this permission notice shall be included in 
+ *  The above copyright notice and this permission notice shall be included in
  *  all copies or substantial portions of the Software.
  *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
- *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
- *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
- *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
- *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
- *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  *  DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Artist.cs b/src/Libraries/MusicBrainz/MusicBrainz/Artist.cs
index d823497..ecb4479 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Artist.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Artist.cs
@@ -30,17 +30,17 @@ namespace MusicBrainz
 {
     public sealed class Artist : MusicBrainzEntity
     {
-        
+
         #region Private
-        
+
         const string EXTENSION = "artist";
         ArtistReleaseType artist_release_type = DefaultArtistReleaseType;
         ArtistType? type;
         ReadOnlyCollection<Release> releases;
         bool have_all_releases;
-        
+
         #endregion
-        
+
         #region Constructors
 
         Artist (string id) : base (id, null)
@@ -57,11 +57,11 @@ namespace MusicBrainz
         internal Artist (XmlReader reader) : base (reader, false)
         {
         }
-        
+
         #endregion
-        
+
         #region Protected
-        
+
         internal override string UrlExtension {
             get { return EXTENSION; }
         }
@@ -107,11 +107,11 @@ namespace MusicBrainz
                 break;
             }
         }
-        
+
         #endregion
 
         #region Public
-        
+
         static ArtistReleaseType default_artist_release_type = new ArtistReleaseType (ReleaseStatus.Official, ReleaseArtistType.SingleArtist);
         public static ArtistReleaseType DefaultArtistReleaseType {
             get { return default_artist_release_type; }
@@ -120,7 +120,7 @@ namespace MusicBrainz
                 default_artist_release_type = value;
             }
         }
-        
+
         public ArtistReleaseType ArtistReleaseType {
             get { return artist_release_type; }
             set {
@@ -149,7 +149,7 @@ namespace MusicBrainz
         {
             return GetPropertyOrDefault (ref type, ArtistType.Unknown);
         }
-        
+
         public ReadOnlyCollection<Release> GetReleases ()
         {
             return releases ?? (have_all_releases
@@ -163,7 +163,7 @@ namespace MusicBrainz
         }
 
         #endregion
-        
+
         #region Static
 
         public static Artist Get (string id)
@@ -188,26 +188,26 @@ namespace MusicBrainz
         {
             return artist.ToString ();
         }
-        
+
         #endregion
-        
+
     }
-    
+
     #region Ancillary Types
-    
+
     public enum ArtistType
     {
         Unknown,
         Group,
         Person
     }
-    
+
     public enum ReleaseArtistType
     {
         VariousArtists,
         SingleArtist
     }
-    
+
     public sealed class ArtistReleaseType
     {
         string str;
@@ -219,7 +219,7 @@ namespace MusicBrainz
         public ArtistReleaseType (ReleaseStatus status, ReleaseArtistType artistType) : this ((Enum)status, artistType)
         {
         }
-        
+
         public ArtistReleaseType (ReleaseType type, ReleaseStatus status, ReleaseArtistType artistType)
         {
             StringBuilder builder = new StringBuilder ();
@@ -235,7 +235,7 @@ namespace MusicBrainz
             Format (builder, enumeration, artistType);
             str = builder.ToString ();
         }
-        
+
         static void Format (StringBuilder builder, Enum enumeration, ReleaseArtistType artistType)
         {
             builder.Append (artistType == ReleaseArtistType.VariousArtists ? "va-" : "sa-");
@@ -251,7 +251,7 @@ namespace MusicBrainz
         {
             return this == o as ArtistReleaseType;
         }
-        
+
         public static bool operator ==(ArtistReleaseType artistReleaseType1, ArtistReleaseType artistReleaseType2)
         {
             if (Object.ReferenceEquals (artistReleaseType1, null)) {
@@ -259,18 +259,18 @@ namespace MusicBrainz
             }
             return !Object.ReferenceEquals (artistReleaseType2, null) && artistReleaseType1.str == artistReleaseType2.str;
         }
-        
+
         public static bool operator !=(ArtistReleaseType artistReleaseType1, ArtistReleaseType artistReleaseType2)
         {
             return !(artistReleaseType1 == artistReleaseType2);
         }
-        
+
         public override int GetHashCode ()
         {
             return str.GetHashCode ();
         }
     }
-    
+
     #endregion
-    
+
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Disc.cs b/src/Libraries/MusicBrainz/MusicBrainz/Disc.cs
index 562b565..91f9f6f 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Disc.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Disc.cs
@@ -33,7 +33,7 @@ namespace MusicBrainz
         internal Disc ()
         {
         }
-        
+
         internal Disc (XmlReader reader)
         {
             reader.Read ();
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/DiscLinux.cs b/src/Libraries/MusicBrainz/MusicBrainz/DiscLinux.cs
index 22c127d..391f655 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/DiscLinux.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/DiscLinux.cs
@@ -36,40 +36,40 @@ namespace MusicBrainz
         const int CDROM_LEADOUT = 0xAA;
         const int CD_FRAMES = 75;
         const int XA_INTERVAL = ((60 + 90 + 2) * CD_FRAMES);
-        
+
         [DllImport ("libc.so.6", CharSet = CharSet.Auto)]
         static extern int open (string path, int flags);
-        
+
         [DllImport ("libc.so.6")]
         static extern int close (int fd);
-        
+
         [DllImport ("libc.so.6", EntryPoint = "ioctl")]
         static extern int read_toc_header (int fd, int request, ref cdrom_tochdr header);
         static int read_toc_header (int fd, ref cdrom_tochdr header)
         {
             return read_toc_header (fd, CDROMREADTOCHDR, ref header);
         }
-        
+
         [DllImport ("libc.so.6", EntryPoint = "ioctl")]
         static extern int read_multisession (int fd, int request, ref cdrom_multisession multisession);
         static int read_multisession (int fd, ref cdrom_multisession multisession)
         {
             return read_multisession (fd, CDROMMULTISESSION, ref multisession);
         }
-        
+
         [DllImport ("libc.so.6", EntryPoint = "ioctl")]
         static extern int read_toc_entry (int fd, int request, ref cdrom_tocentry entry);
         static int read_toc_entry (int fd, ref cdrom_tocentry entry)
         {
             return read_toc_entry (fd, CDROMREADTOCENTRY, ref entry);
         }
-        
+
         struct cdrom_tochdr
         {
             public byte cdth_trk0;
             public byte cdth_trk1;
         }
-        
+
         struct cdrom_tocentry
         {
             public byte cdte_track;
@@ -78,76 +78,76 @@ namespace MusicBrainz
             public int lba;
             public byte cdte_datamode;
         }
-        
+
         struct cdrom_multisession
         {
             public int lba;
             public byte xa_flag;
             public byte addr_format;
         }
-        
+
         int ReadTocHeader (int fd)
         {
             cdrom_tochdr th = new cdrom_tochdr ();
             cdrom_multisession ms = new cdrom_multisession ();
-            
+
             int ret = read_toc_header (fd, ref th);
-            
+
             if (ret < 0) return ret;
-            
+
             first_track = th.cdth_trk0;
             last_track = th.cdth_trk1;
-            
+
             ms.addr_format = CDROM_LBA;
             ret = read_multisession (fd, ref ms);
-            
+
             if(ms.xa_flag != 0) last_track--;
-            
+
             return ret;
         }
-        
+
         static int ReadTocEntry (int fd, byte track_number, ref ulong lba)
         {
             cdrom_tocentry te = new cdrom_tocentry ();
             te.cdte_track = track_number;
             te.cdte_format = CDROM_LBA;
-            
+
             int ret = read_toc_entry (fd, ref te);
-            
+
             if(ret == 0) lba = (ulong)te.lba;
-            
+
             return ret;
         }
-        
+
         int ReadLeadout (int fd, ref ulong lba)
         {
             cdrom_multisession ms = new cdrom_multisession ();
             ms.addr_format = CDROM_LBA;
-            
+
             int ret = read_multisession (fd, ref ms);
-            
+
             if (ms.xa_flag != 0) {
                 lba = (ulong)(ms.lba - XA_INTERVAL);
                 return ret;
             }
-            
+
             return ReadTocEntry (fd, CDROM_LEADOUT, ref lba);
         }
-        
+
         internal DiscLinux (string device)
         {
             int fd = open (device, O_RDONLY | O_NONBLOCK);
-            
+
             if (fd < 0) throw new LocalDiscException (String.Format ("Cannot open device '{0}'", device));
-            
+
             try {
                 if (ReadTocHeader (fd) < 0) throw new LocalDiscException ("Cannot read table of contents");
                 if (last_track == 0) throw new LocalDiscException ("This disc has no tracks");
-                
+
                 ulong lba = 0;
                 ReadLeadout (fd, ref lba);
                 track_offsets [0] = (int)lba + 150;
-                
+
                 for (byte i = first_track; i <= last_track; i++) {
                     ReadTocEntry (fd, i, ref lba);
                     track_offsets[i] = (int)lba + 150;
@@ -155,7 +155,7 @@ namespace MusicBrainz
             } finally {
                 close (fd);
             }
-            
+
             Init ();
         }
     }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32.cs b/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32.cs
index 8aa8067..c357d40 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32.cs
@@ -34,7 +34,7 @@ namespace MusicBrainz
 
         [DllImport ("winmm")]
         static extern Int32 mciGetErrorString (Int32 errorCode, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder errorText, Int32 errorTextSize);
-        
+
         delegate void MciCall (string result);
 
         internal DiscWin32 (string device)
@@ -96,7 +96,7 @@ namespace MusicBrainz
                 string.Format ("close {0} wait", alias),
                 string.Format ("Could not close device {0}", device),
                 null);
-            
+
             Init ();
         }
 
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32NT.cs b/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32NT.cs
index 0c99834..770956a 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32NT.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/DiscWin32NT.cs
@@ -78,7 +78,7 @@ namespace MusicBrainz
             public byte FirstTrack;
             public byte LastTrack;
             public TRACK_DATA_Array TrackData = new TRACK_DATA_Array();
-            
+
             public CDROM_TOC ()
             {
                 Length = (ushort)Marshal.SizeOf (this);
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Label.cs b/src/Libraries/MusicBrainz/MusicBrainz/Label.cs
index 547597d..412772a 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Label.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Label.cs
@@ -28,15 +28,15 @@ namespace MusicBrainz
 {
     public sealed class Label : MusicBrainzEntity
     {
-        
+
         #region Private
-        
+
         const string EXTENSION = "label";
         string country;
         LabelType? type;
-        
+
         #endregion
-        
+
         #region Constructors
 
         Label (string id) : base (id, null)
@@ -46,11 +46,11 @@ namespace MusicBrainz
         internal Label (XmlReader reader) : base (reader, false)
         {
         }
-        
+
         #endregion
-        
+
         #region Protected
-        
+
         internal override string UrlExtension {
             get { return EXTENSION; }
         }
@@ -74,11 +74,11 @@ namespace MusicBrainz
                 country = reader.ReadString ();
             } else base.ProcessXmlCore (reader);
         }
-        
+
         #endregion
 
         #region Public
-        
+
         public string GetCountry ()
         {
             return GetPropertyOrNull (ref country);
@@ -88,9 +88,9 @@ namespace MusicBrainz
         {
             return GetPropertyOrDefault (ref type, LabelType.None);
         }
-        
+
         #endregion
-        
+
         #region Static
 
         public static Label Get (string id)
@@ -115,13 +115,13 @@ namespace MusicBrainz
         {
             return label.ToString ();
         }
-        
+
         #endregion
 
     }
-    
+
     #region Ancillary Types
-    
+
     public enum LabelType
     {
         None,
@@ -131,7 +131,7 @@ namespace MusicBrainz
         BootlegProduction,
         ReissueProduction
     }
-    
+
     #endregion
-    
+
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/LocalDisc.cs b/src/Libraries/MusicBrainz/MusicBrainz/LocalDisc.cs
index 1db5798..dc4da1b 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/LocalDisc.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/LocalDisc.cs
@@ -36,16 +36,16 @@ namespace MusicBrainz
                 submission_service_url = value;
             }
         }
-        
+
         internal byte first_track;
         internal byte last_track;
         internal int [] track_offsets = new int [100];
         TimeSpan [] track_durations;
-        
+
         internal LocalDisc()
         {
         }
-        
+
         internal void Init ()
         {
             track_durations = new TimeSpan [last_track];
@@ -55,14 +55,14 @@ namespace MusicBrainz
             }
             GenerateId ();
         }
-        
+
         void GenerateId ()
         {
             StringBuilder input_builder = new StringBuilder (804);
 
             input_builder.AppendFormat ("{0:X2}", first_track);
             input_builder.AppendFormat ("{0:X2}", last_track);
-            
+
             for (int i = 0; i < track_offsets.Length; i++)
                 input_builder.AppendFormat ("{0:X8}", track_offsets[i]);
 
@@ -70,7 +70,7 @@ namespace MusicBrainz
             string base64 = Convert.ToBase64String (SHA1.Create ().
                 ComputeHash (Encoding.ASCII.GetBytes (input_builder.ToString ())));
             StringBuilder hash_builder = new StringBuilder (base64.Length);
-            
+
             foreach (char c in base64)
                 switch (c) {
                 case '+':
@@ -86,15 +86,15 @@ namespace MusicBrainz
                     hash_builder.Append (c);
                     break;
                 }
-            
+
             Id = hash_builder.ToString ();
         }
-        
+
         public TimeSpan [] GetTrackDurations ()
         {
             return (TimeSpan []) track_durations.Clone ();
         }
-        
+
         Uri submission_url;
         public Uri SubmissionUrl {
             get {
@@ -103,7 +103,7 @@ namespace MusicBrainz
                 }
                 return submission_url; }
         }
-        
+
         Uri BuildSubmissionUrl ()
         {
             StringBuilder builder = new StringBuilder ();
@@ -124,7 +124,7 @@ namespace MusicBrainz
             }
             return new Uri(builder.ToString ());
         }
-        
+
         public static LocalDisc GetFromDevice (string device)
         {
             if (device == null) throw new ArgumentNullException ("device");
@@ -142,7 +142,7 @@ namespace MusicBrainz
             }
         }
     }
-    
+
     public class LocalDiscException : Exception
     {
         public LocalDiscException (string message) : base (message)
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
index f5dd097..f34776e 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
@@ -31,20 +31,20 @@ namespace MusicBrainz
     // A person-like entity, such as an artist or a label.
     public abstract class MusicBrainzEntity : MusicBrainzObject
     {
-        
+
         #region Private
-        
+
         string name;
         string sort_name;
         string disambiguation;
         string begin_date;
         string end_date;
         ReadOnlyCollection<string> aliases;
-        
+
         #endregion
-        
+
         #region Constructors
-        
+
         internal MusicBrainzEntity (string id, string parameters) : base (id, parameters)
         {
         }
@@ -52,9 +52,9 @@ namespace MusicBrainz
         internal MusicBrainzEntity (XmlReader reader, bool all_rels_loaded) : base (reader, all_rels_loaded)
         {
         }
-        
+
         #endregion
-        
+
         #region Protected
 
         internal override void CreateIncCore (StringBuilder builder)
@@ -103,7 +103,7 @@ namespace MusicBrainz
                 break;
             }
         }
-        
+
         internal static string CreateNameParameter (string name)
         {
             StringBuilder builder = new StringBuilder (name.Length + 6);
@@ -111,7 +111,7 @@ namespace MusicBrainz
             Utils.PercentEncode (builder, name);
             return builder.ToString ();
         }
-        
+
         #endregion
 
         #region Public
@@ -150,13 +150,13 @@ namespace MusicBrainz
         {
             return GetPropertyOrNew (ref aliases);
         }
-        
+
         public override string ToString ()
         {
             return name;
         }
-        
+
         #endregion
-        
+
     }
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzItem.cs b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
index 73187e7..56c31e1 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
@@ -29,16 +29,16 @@ namespace MusicBrainz
     // The item-like product of an artist, such as a track or a release.
     public abstract class MusicBrainzItem : MusicBrainzObject
     {
-        
+
         #region Private
-        
+
         string title;
         Artist artist;
-        
+
         #endregion
-        
+
         #region Constructors
-        
+
         internal MusicBrainzItem (string id) : base (id, null)
         {
         }
@@ -47,9 +47,9 @@ namespace MusicBrainz
         {
             if (this.artist == null) this.artist = artist;
         }
-        
+
         #endregion
-        
+
         #region Protected Overrides
 
         internal override void CreateIncCore (StringBuilder builder)
@@ -79,11 +79,11 @@ namespace MusicBrainz
                 break;
             }
         }
-        
+
         #endregion
 
         #region Public
-        
+
         public virtual string GetTitle ()
         {
             return GetPropertyOrNull (ref title);
@@ -94,24 +94,24 @@ namespace MusicBrainz
         {
             return GetPropertyOrNull (ref artist);
         }
-        
+
         public override string ToString ()
         {
             return title;
         }
-        
+
         #endregion
-        
+
     }
-    
+
     #region Ancillary Types
-    
+
     public abstract class ItemQueryParameters
     {
         internal ItemQueryParameters ()
         {
         }
-        
+
         string title;
         public string Title {
             get { return title; }
@@ -149,7 +149,7 @@ namespace MusicBrainz
         }
 
         internal abstract void ToStringCore (StringBuilder builder);
-        
+
         public override string ToString ()
         {
             StringBuilder builder = new StringBuilder ();
@@ -181,7 +181,7 @@ namespace MusicBrainz
             return builder.ToString ();
         }
     }
-    
+
     #endregion
-    
+
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzObject.cs b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
index 765635e..4fea83f 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
@@ -34,9 +34,9 @@ namespace MusicBrainz
 {
     public abstract class MusicBrainzObject
     {
-        
+
         #region Private Fields
-        
+
         static DateTime last_accessed;
         static readonly TimeSpan min_interval = new TimeSpan (0, 0, 1); // 1 second
         static readonly object server_mutex = new object ();
@@ -47,10 +47,10 @@ namespace MusicBrainz
             "label-rels",
             "url-rels"
         };
-        
+
         bool all_data_loaded;
         bool all_rels_loaded;
-        
+
         string id;
         byte score;
         ReadOnlyCollection<Relation<Artist>> artist_rels;
@@ -58,9 +58,9 @@ namespace MusicBrainz
         ReadOnlyCollection<Relation<Track>> track_rels;
         ReadOnlyCollection<Relation<Label>> label_rels;
         ReadOnlyCollection<UrlRelation> url_rels;
-        
+
         #endregion
-        
+
         #region Constructors
 
         internal MusicBrainzObject (string id, string parameters)
@@ -74,9 +74,9 @@ namespace MusicBrainz
             this.all_rels_loaded = all_rels_loaded;
             CreateFromXml (reader);
         }
-        
+
         #endregion
-        
+
         #region Private Methods
 
         string CreateInc ()
@@ -85,7 +85,7 @@ namespace MusicBrainz
             CreateIncCore (builder);
             return builder.ToString ();
         }
-        
+
         void CreateFromId (string id, string parameters)
         {
             XmlProcessingClosure (
@@ -98,7 +98,7 @@ namespace MusicBrainz
                 }
             );
         }
-        
+
         void CreateFromXml (XmlReader reader)
         {
             reader.Read ();
@@ -137,32 +137,32 @@ namespace MusicBrainz
             ProcessXmlCore (reader);
             reader.Close ();
         }
-        
+
         #endregion
-        
+
         #region Protected
-        
+
         internal bool AllDataLoaded {
             get { return all_data_loaded; }
         }
-        
+
         internal bool AllRelsLoaded {
             get { return all_rels_loaded; }
             set { all_rels_loaded = value; }
         }
-        
+
         internal virtual void CreateIncCore (StringBuilder builder)
         {
             if (!all_rels_loaded)
                 AppendIncParameters (builder, rels_params);
         }
-        
+
         internal static void AppendIncParameters (StringBuilder builder, string parameter)
         {
             builder.Append (builder.Length == 0 ? "&inc=" : "+");
             builder.Append (parameter);
         }
-        
+
         internal static void AppendIncParameters (StringBuilder builder, string parameter1, string parameter2)
         {
             builder.Append (builder.Length == 0 ? "&inc=" : "+");
@@ -176,7 +176,7 @@ namespace MusicBrainz
             foreach (string parameter in parameters)
                 AppendIncParameters (builder, parameter);
         }
-        
+
         internal void LoadMissingData ()
         {
             if (!all_data_loaded) {
@@ -195,7 +195,7 @@ namespace MusicBrainz
                 url_rels = obj.GetUrlRelations ();
             }
         }
-        
+
         internal T GetPropertyOrNull<T> (ref T field_reference) where T : class
         {
             if (field_reference == null) LoadMissingData ();
@@ -206,18 +206,18 @@ namespace MusicBrainz
         {
             return GetPropertyOrDefault (ref field_reference, default (T));
         }
-        
+
         internal T GetPropertyOrDefault<T> (ref T? field_reference, T default_value) where T : struct
         {
             if (field_reference == null) LoadMissingData ();
             return field_reference ?? default_value;
         }
-        
+
         internal ReadOnlyCollection<T> GetPropertyOrNew<T> (ref ReadOnlyCollection<T> field_reference)
         {
             return GetPropertyOrNew (ref field_reference, true);
         }
-        
+
         internal ReadOnlyCollection<T> GetPropertyOrNew<T> (ref ReadOnlyCollection<T> field_reference, bool condition)
         {
             if (field_reference == null && condition) LoadMissingData ();
@@ -232,12 +232,12 @@ namespace MusicBrainz
         internal virtual void ProcessAttributes (XmlReader reader)
         {
         }
-        
+
         internal abstract void LoadMissingDataCore ();
         internal abstract string UrlExtension { get; }
-        
+
         #endregion
-        
+
         #region Public
 
         public virtual string Id {
@@ -272,12 +272,12 @@ namespace MusicBrainz
         {
             return GetPropertyOrNew (ref url_rels, !all_rels_loaded);
         }
-        
+
         public override bool Equals (object obj)
         {
             return this == obj as MusicBrainzObject;
         }
-        
+
         public static bool operator ==(MusicBrainzObject obj1, MusicBrainzObject obj2)
         {
             if (Object.ReferenceEquals (obj1, null)) {
@@ -285,7 +285,7 @@ namespace MusicBrainz
             }
             return !Object.ReferenceEquals (obj2, null) && obj1.GetType () == obj2.GetType () && obj1.Id == obj2.Id;
         }
-        
+
         public static bool operator !=(MusicBrainzObject obj1, MusicBrainzObject obj2)
         {
             return !(obj1 == obj2);
@@ -295,7 +295,7 @@ namespace MusicBrainz
         {
             return (GetType ().Name + Id).GetHashCode ();
         }
-        
+
         #endregion
 
         #region Static
@@ -389,20 +389,20 @@ namespace MusicBrainz
 
             WebRequest request = WebRequest.Create (url);
             bool cache_implemented = false;
-            
+
             try {
                 request.CachePolicy = MusicBrainzService.CachePolicy;
                 cache_implemented = true;
             } catch (NotImplementedException) {}
-            
+
             HttpWebResponse response = null;
-            
+
             try {
                 response = (HttpWebResponse)request.GetResponse ();
             } catch (WebException e) {
                 response = (HttpWebResponse)e.Response;
             }
-            
+
             if (response == null) throw new MusicBrainzNotFoundException ();
 
             switch (response.StatusCode) {
@@ -483,6 +483,6 @@ namespace MusicBrainz
         #endregion
 
     }
-    
+
     internal delegate void XmlProcessingDelegate (XmlReader reader);
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzService.cs b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzService.cs
index 1006c38..5e860db 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzService.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/MusicBrainzService.cs
@@ -35,15 +35,15 @@ namespace MusicBrainz
                 service_url = value;
             }
         }
-        
+
         static RequestCachePolicy cache_policy;
         public static RequestCachePolicy CachePolicy {
             get { return cache_policy; }
             set { cache_policy = value; }
         }
-        
+
         public static event EventHandler<XmlRequestEventArgs> XmlRequest;
-        
+
         internal static void OnXmlRequest (string url, bool fromCache)
         {
             EventHandler<XmlRequestEventArgs> handler = XmlRequest;
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Query.cs b/src/Libraries/MusicBrainz/MusicBrainz/Query.cs
index 1ec5ffb..89241fa 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Query.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Query.cs
@@ -29,18 +29,18 @@ namespace MusicBrainz
 {
     public sealed class Query<T> : IEnumerable<T> where T : MusicBrainzObject
     {
-        
+
         #region Private
 
         const int default_limit = 100;
-        
+
         string parameters;
         string url_extension;
         int limit = default_limit;
-        
+
         int offset;
         int? count;
-        
+
         List<T> results;
         List<T> ResultsWindow {
             get {
@@ -74,21 +74,21 @@ namespace MusicBrainz
                 }
             }
         }
-        
+
         #endregion
 
         #region Constructors
-        
+
         internal Query (string url_extension, string parameters)
         {
             this.url_extension = url_extension;
             this.parameters = parameters;
         }
-        
+
         #endregion
 
         #region Public
-        
+
         public int Count {
             get {
                 if (count == null)
@@ -105,7 +105,7 @@ namespace MusicBrainz
                 return ResultsWindow[index - offset];
             }
         }
-        
+
         public T First ()
         {
             int tmp_limit = limit;
@@ -114,7 +114,7 @@ namespace MusicBrainz
             limit = tmp_limit;
             return result;
         }
-        
+
         public T PerfectMatch ()
         {
             int tmp_limit = limit;
@@ -122,16 +122,16 @@ namespace MusicBrainz
             T result1 = Count > 0 ? this [0] : null;
             T result2 = Count > 1 ? this [1] : null;
             limit = tmp_limit;
-            
+
             return (result1 != null && result1.Score == 100 && (result2 == null || result2.Score < 100))
                 ? result1 : null;
         }
-        
+
         public IEnumerable<T> Best ()
         {
             return Best (100);
         }
-        
+
         public IEnumerable<T> Best (int scoreThreshold)
         {
             foreach (T result in this) {
@@ -139,36 +139,36 @@ namespace MusicBrainz
                 yield return result;
             }
         }
-        
+
         public IEnumerator<T> GetEnumerator ()
         {
             for (int i = 0; i < Count; i++) yield return this [i];
         }
-        
+
         IEnumerator IEnumerable.GetEnumerator ()
         {
             return GetEnumerator ();
         }
-        
+
         public static implicit operator T (Query<T> query)
         {
             return query.First ();
         }
-        
+
         #endregion
-        
+
     }
 
     [AttributeUsage (AttributeTargets.Method | AttributeTargets.Property)]
     internal sealed class QueryableAttribute : Attribute
     {
         readonly string name;
-        
+
         public QueryableAttribute (string name)
         {
             this.name = name;
         }
-        
+
         public string Name {
             get { return name; }
         }
@@ -179,17 +179,17 @@ namespace MusicBrainz
     {
         readonly string member;
         readonly string name;
-        
+
         public QueryableMemberAttribute (string member, string name)
         {
             this.member = member;
             this.name = name;
         }
-        
+
         public string Member {
             get { return member; }
         }
-        
+
         public string Name {
             get { return name; }
         }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Relation.cs b/src/Libraries/MusicBrainz/MusicBrainz/Relation.cs
index 96ebd23..4040c2d 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Relation.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Relation.cs
@@ -64,12 +64,12 @@ namespace MusicBrainz
         public string BeginDate {
             get { return begin; }
         }
-        
+
         public string EndDate {
             get { return end; }
         }
     }
-    
+
     public sealed class Relation<T> : RelationBase<T> where T : MusicBrainzObject
     {
         internal Relation (string type,
@@ -95,7 +95,7 @@ namespace MusicBrainz
         {
         }
     }
-    
+
     public enum RelationDirection
     {
         Forward,
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Release.cs b/src/Libraries/MusicBrainz/MusicBrainz/Release.cs
index 2aa6164..64e8c97 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Release.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Release.cs
@@ -30,9 +30,9 @@ namespace MusicBrainz
 {
     public sealed class Release : MusicBrainzItem
     {
-        
+
         #region Private
-        
+
         const string EXTENSION = "release";
         ReleaseType? type;
         ReleaseStatus? status;
@@ -43,9 +43,9 @@ namespace MusicBrainz
         ReadOnlyCollection<Event> events;
         ReadOnlyCollection<Track> tracks;
         int? track_number;
-        
+
         #endregion
-        
+
         #region Constructors
 
         Release (string id) : base (id)
@@ -55,17 +55,17 @@ namespace MusicBrainz
         internal Release (XmlReader reader) : base (reader, null, false)
         {
         }
-        
+
         #endregion
-        
+
         #region Protected
-        
+
         internal override string UrlExtension {
             get { return EXTENSION; }
         }
-        
+
         static readonly string [] track_params = new string [] { "tracks", "track-level-rels", "artist" };
-        
+
         internal override void CreateIncCore (StringBuilder builder)
         {
             AppendIncParameters (builder, "release-events", "labels");
@@ -153,7 +153,7 @@ namespace MusicBrainz
                 break;
             }
         }
-        
+
         #endregion
 
         #region Public
@@ -165,7 +165,7 @@ namespace MusicBrainz
 
         [Queryable ("release")]
         public override string GetTitle ()
-        { 
+        {
             return base.GetTitle ();
         }
 
@@ -200,7 +200,7 @@ namespace MusicBrainz
 
         [QueryableMember("Count", "discids")]
         public ReadOnlyCollection<Disc> GetDiscs ()
-        { 
+        {
             return GetPropertyOrNew (ref discs);
         }
 
@@ -220,7 +220,7 @@ namespace MusicBrainz
         }
 
         #endregion
-        
+
         #region Static
 
         public static Release Get (string id)
@@ -232,7 +232,7 @@ namespace MusicBrainz
         public static Query<Release> Query (string title)
         {
             if (title == null) throw new ArgumentNullException ("title");
-            
+
             ReleaseQueryParameters parameters = new ReleaseQueryParameters ();
             parameters.Title = title;
             return Query (parameters);
@@ -242,17 +242,17 @@ namespace MusicBrainz
         {
             if (title == null) throw new ArgumentNullException ("title");
             if (artist == null) throw new ArgumentNullException ("artist");
-            
+
             ReleaseQueryParameters parameters = new ReleaseQueryParameters ();
             parameters.Title = title;
             parameters.Artist = artist;
             return Query (parameters);
         }
-        
+
         public static Query<Release> Query (Disc disc)
         {
             if (disc == null) throw new ArgumentNullException ("disc");
-            
+
             ReleaseQueryParameters parameters = new ReleaseQueryParameters ();
             parameters.DiscId = disc.Id;
             return Query (parameters);
@@ -267,7 +267,7 @@ namespace MusicBrainz
         public static Query<Release> QueryFromDevice(string device)
         {
             if (device == null) throw new ArgumentNullException ("device");
-            
+
             ReleaseQueryParameters parameters = new ReleaseQueryParameters ();
             parameters.DiscId = LocalDisc.GetFromDevice (device).Id;
             return Query (parameters);
@@ -283,13 +283,13 @@ namespace MusicBrainz
         {
             return release.ToString ();
         }
-        
+
         #endregion
 
     }
-    
+
     #region Ancillary Types
-    
+
     public enum ReleaseType
     {
         None,
@@ -389,7 +389,7 @@ namespace MusicBrainz
             }
         }
     }
-    
+
     #endregion
-    
+
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Track.cs b/src/Libraries/MusicBrainz/MusicBrainz/Track.cs
index 0bf6d17..b23ffdd 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Track.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Track.cs
@@ -30,16 +30,16 @@ namespace MusicBrainz
 {
     public sealed class Track : MusicBrainzItem
     {
-        
+
         #region Private
-        
+
         const string EXTENSION = "track";
         TimeSpan? duration;
         ReadOnlyCollection<Release> releases;
         ReadOnlyCollection<string> puids;
-        
+
         #endregion
-        
+
         #region Constructors
 
         Track (string id) : base (id)
@@ -53,15 +53,15 @@ namespace MusicBrainz
         internal Track (XmlReader reader, Artist artist, bool all_rels_loaded) : base (reader, artist, all_rels_loaded)
         {
         }
-        
+
         #endregion
 
         #region Protected
-        
+
         internal override string UrlExtension {
             get { return EXTENSION; }
         }
-        
+
         internal override void CreateIncCore (StringBuilder builder)
         {
             if (releases == null) AppendIncParameters (builder, "releases");
@@ -105,7 +105,7 @@ namespace MusicBrainz
                 break;
             }
         }
-        
+
         #endregion
 
         #region Public
@@ -141,7 +141,7 @@ namespace MusicBrainz
         public int GetTrackNumber (Release release)
         {
             if (release == null) throw new ArgumentNullException ("release");
-            
+
             foreach (Release r in GetReleases ())
                 if (r.Equals (release))
                     return r.TrackNumber;
@@ -149,7 +149,7 @@ namespace MusicBrainz
         }
 
         #endregion
-        
+
         #region Static
 
         public static Track Get (string id)
@@ -161,7 +161,7 @@ namespace MusicBrainz
         public static Query<Track> Query (string title)
         {
             if (title == null) throw new ArgumentNullException ("title");
-            
+
             TrackQueryParameters parameters = new TrackQueryParameters ();
             parameters.Title = title;
             return Query (parameters);
@@ -171,19 +171,19 @@ namespace MusicBrainz
         {
             if (title == null) throw new ArgumentNullException ("title");
             if (artist == null) throw new ArgumentNullException ("artist");
-            
+
             TrackQueryParameters parameters = new TrackQueryParameters ();
             parameters.Title = title;
             parameters.Artist = artist;
             return Query (parameters);
         }
-        
+
         public static Query<Track> Query (string title, string artist, string release)
         {
             if (title == null) throw new ArgumentNullException ("title");
             if (artist == null) throw new ArgumentNullException ("artist");
             if (release == null) throw new ArgumentNullException ("release");
-            
+
             TrackQueryParameters parameters = new TrackQueryParameters ();
             parameters.Title = title;
             parameters.Artist = artist;
@@ -199,7 +199,7 @@ namespace MusicBrainz
 
         public static Query<Track> QueryLucene (string luceneQuery)
         {
-            if(luceneQuery == null) throw new ArgumentNullException ("luceneQuery"); 
+            if(luceneQuery == null) throw new ArgumentNullException ("luceneQuery");
             return new Query<Track> (EXTENSION, CreateLuceneParameter (luceneQuery));
         }
 
@@ -207,13 +207,13 @@ namespace MusicBrainz
         {
             return track.ToString ();
         }
-        
+
         #endregion
 
     }
-    
+
     #region Ancillary Types
-    
+
     public sealed class TrackQueryParameters : ItemQueryParameters
     {
         string release;
@@ -270,7 +270,7 @@ namespace MusicBrainz
             }
         }
     }
-    
+
     #endregion
-    
+
 }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/Utils.cs b/src/Libraries/MusicBrainz/MusicBrainz/Utils.cs
index ee80dfe..3c1fcb9 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/Utils.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/Utils.cs
@@ -34,22 +34,22 @@ namespace MusicBrainz
             EnumToString (builder, str);
             return builder.ToString ();
         }
-        
+
         public static void EnumToString (StringBuilder builder, string str)
         {
             builder.Append (str [0]);
             for (int i = 1; i < str.Length; i++) {
                 if (str [i] >= 'A' && str [i] <= 'Z')
-                    builder.Append ('-'); 
+                    builder.Append ('-');
                 builder.Append (str [i]);
             }
         }
-        
+
         public static T StringToEnum<T> (string name) where T : struct
         {
             return StringToEnumOrNull<T> (name) ?? default (T);
         }
-        
+
         public static T? StringToEnumOrNull<T> (string name) where T : struct
         {
             if (name != null)
@@ -58,18 +58,18 @@ namespace MusicBrainz
                         return value;
             return null;
         }
-        
+
         public static void PercentEncode (StringBuilder builder, string value)
         {
             foreach (char c in value) {
-                if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || 
+                if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') ||
                     c == '-' || c == '_' || c == '.' || c == '~')
                     builder.Append (c);
                 else {
                     builder.Append ('%');
                     foreach (byte b in Encoding.UTF8.GetBytes (new char [] { c }))
                         builder.AppendFormat ("{0:X}", b);
-                } 
+                }
             }
         }
     }
diff --git a/src/Libraries/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs b/src/Libraries/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs
index 9ea5a34..1d4c756 100644
--- a/src/Libraries/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs
+++ b/src/Libraries/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs
@@ -28,7 +28,7 @@ namespace MusicBrainz
     {
         public readonly Uri Uri;
         public readonly bool FromCache;
-        
+
         internal XmlRequestEventArgs (Uri uri, bool fromCache)
         {
             Uri = uri;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]